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_FRAME_HH_
00023 # define WIFI_FRAME_FRAME_HH_
00024
00025 # include <string>
00026
00027 extern "C"
00028 {
00029 # include <stdint.h>
00030 }
00031
00032 # include <boost/optional.hpp>
00033
00034 # include <wipal/wifi/addr.hh>
00035
00036 namespace wpl
00037 {
00038
00039 namespace wifi
00040 {
00041
00043 namespace type
00044 {
00045
00047 enum frame_type
00048 {
00049 management = 0,
00050 control = 1,
00051 data = 2,
00052 reserved = 3
00053 };
00054
00056 extern const std::string names[4];
00057
00058 }
00059
00060
00062 namespace subtype
00063 {
00064
00066 extern const std::string* const names[4];
00067
00068 }
00069
00070
00071
00072
00073
00075 unsigned
00076 protocol_version_of(const void*);
00077
00079 type::frame_type
00080 type_of(const void*);
00081
00083 unsigned
00084 subtype_of(const void*);
00085
00087 uint8_t
00088 control_flags_of(const void*);
00089
00090
00091
00092
00093
00095 bool
00096 control_flag(const unsigned flag, const void* frame);
00097
00099 bool
00100 to_ds(const void*);
00101
00103 bool
00104 from_ds(const void*);
00105
00106
00107
00108
00109
00111 unsigned
00112 duration_of(const void*);
00113
00114
00115
00116
00117
00118 boost::optional<unsigned>
00119 fragment_number_of(const void*, size_t caplen);
00120
00121 boost::optional<unsigned>
00122 sequence_number_of(const void*, size_t caplen);
00123
00124
00125
00126
00127
00136 const addr*
00137 transmitter_address(const void* frame);
00138
00149 const addr*
00150 bssid_address(const void*, size_t caplen = 30);
00151
00152 }
00153
00154 }
00155
00156 # include "frame.hxx"
00157
00158 #endif // ! WIFI_FRAME_FRAME_HH_