00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WIFI_FRAME_SEQCTL_DEST_BSSID_TIMESTAMP_ID_HXX_
00023 # define WIFI_FRAME_SEQCTL_DEST_BSSID_TIMESTAMP_ID_HXX_
00024
00025 # include "seqctl_dest_bssid_timestamp.hh"
00026
00027 # include <trace-tools/wifi/frame/dissector/dissector.hh>
00028 # include <trace-tools/wifi/frame/unique_id/helper_hooks.hh>
00029
00030 namespace wifi
00031 {
00032
00033 namespace frame
00034 {
00035
00036 template <>
00037 inline
00038 boost::optional<seqctl_dest_bssid_timestamp_id>
00039 make_unique_id<seqctl_dest_bssid_timestamp_id,
00040 prism::header>(const pcapxx::frame_descriptor& desc,
00041 addr_mapping& mapping,
00042 bool prism_noise_means_error)
00043 {
00044 tt_make_unique_id_prism_common(desc, prism_noise_means_error,
00045 d, internals::id_helper_hooks, h);
00046
00047 if (const timestamp* tstamp = h.timestamp_ptr())
00048 {
00049 const addr* da = h.addr_ptr(mgt::header::da);
00050 const addr* bssid = h.addr_ptr(mgt::header::bssid);
00051 const uint16_t* seqctl = h.seq_ctl_ptr();
00052
00053 assert(da and bssid and seqctl);
00054
00055 return seqctl_dest_bssid_timestamp_id (desc.pcap_header()->id,
00056 *seqctl,
00057 mapping[*da],
00058 mapping[*bssid],
00059 *tstamp);
00060 }
00061 return boost::none_t ();
00062 }
00063
00064 }
00065
00066 }
00067
00068 #endif // ! WIFI_FRAME_SEQCTL_DEST_BSSID_TIMESTAMP_ID_HXX_
00069