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_ADDR_TIMESTAMP_ID_HH_
00023 # define WIFI_FRAME_ADDR_TIMESTAMP_ID_HH_
00024
00025 # include <boost/optional.hpp>
00026
00027 # include <trace-tools/wifi/frame/unique_id/unique_id.hh>
00028 # include <trace-tools/wifi/timestamp.hh>
00029 # include <trace-tools/pcap/frame_descriptor.hh>
00030 # include <trace-tools/wifi/addr_mapping.hh>
00031 # include <trace-tools/wifi/frame/dissector/dissector.hh>
00032 # include <trace-tools/wifi/frame/unique_id/helper_hooks.hh>
00033 # include <trace-tools/wifi/frame/mgt.hh>
00034
00035 namespace wifi
00036 {
00037
00038 namespace frame
00039 {
00040
00041 namespace internals
00042 {
00043
00044 struct dst_tmp_tag {};
00045 struct src_tmp_tag {};
00046 struct bss_tmp_tag {};
00047
00048 }
00049
00050 # define tt_define_addr_timestamp_id(AddrName, AddrIdx, TagName) \
00051 \
00052 typedef \
00053 unique_id<internals::adapter<unsigned, TagName>, timestamp> \
00054 AddrName ## _timestamp_id; \
00055 \
00056 template <> \
00057 boost::optional<AddrName ## _timestamp_id> \
00058 make_unique_id<AddrName ## _timestamp_id, prism::header> \
00059 (const pcapxx::frame_descriptor& desc, \
00060 addr_mapping& mapping, \
00061 bool prism_noise_means_error) \
00062 { \
00063 tt_make_unique_id_prism_common(desc, prism_noise_means_error, \
00064 d, internals::id_helper_hooks, h); \
00065 \
00066 if (const timestamp* t = h.timestamp_ptr()) \
00067 { \
00068 const addr* a = h.addr_ptr(AddrIdx); \
00069 \
00070 assert(a); \
00071 return AddrName ## _timestamp_id (desc.pcap_header()->id, \
00072 mapping[*a], *t); \
00073 } \
00074 return boost::none_t (); \
00075 }
00076
00077 tt_define_addr_timestamp_id(dest,
00078 mgt::header::da,
00079 internals::dst_tmp_tag)
00080
00081 tt_define_addr_timestamp_id(source,
00082 mgt::header::sa,
00083 internals::src_tmp_tag)
00084
00085 tt_define_addr_timestamp_id(bssid,
00086 mgt::header::bssid,
00087 internals::bss_tmp_tag)
00088
00089 # undef tt_define_addr_timestamp_id
00090
00091 }
00092
00093 }
00094
00095 #endif // ! WIFI_FRAME_SOURCE_TIMESTAMP_ID_HH_