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_DATA_HH_
00023 # define WIFI_FRAME_DATA_HH_
00024
00025 # include <wipal/wifi/addr.hh>
00026
00027 namespace wpl
00028 {
00029
00030 namespace wifi
00031 {
00032
00034 namespace data
00035 {
00036
00038 namespace subtype
00039 {
00040
00042 enum frame_subtype
00043 {
00044 data = 0,
00045 data_cf_ack = 1,
00046 data_cf_poll = 2,
00047 data_cf_ack_cf_poll = 3,
00048 null = 4,
00049 cf_ack = 5,
00050 cf_poll = 6,
00051 cf_ack_cf_poll = 7
00052 };
00053
00055 extern const std::string names[16];
00056
00057 }
00058
00060 struct header_3addr
00061 {
00062 uint16_t frame_ctl;
00063 uint16_t duration;
00064 addr addrs[3];
00065 uint16_t seq_ctl;
00066 uint8_t body[];
00067 } __attribute__((__packed__));
00068
00070 struct header_4addr
00071 {
00072 uint16_t frame_ctl;
00073 uint16_t duration;
00074 addr addrs[3];
00075 uint16_t seq_ctl;
00076 addr addrs_4;
00077 uint8_t body[];
00078 } __attribute__((__packed__));
00079
00081 namespace within_ibss
00082 {
00083
00085 struct header : public header_3addr
00086 {
00088 enum addr_index
00089 {
00090 da = 0,
00091 sa = 1,
00092 bssid = 2
00093 };
00094 } __attribute__((__packed__));
00095 }
00096
00098 namespace to_ds
00099 {
00100
00102 struct header : public header_3addr
00103 {
00105 enum addr_index
00106 {
00107 bssid = 0,
00108 sa = 1,
00109 da = 2
00110 };
00111 } __attribute__((__packed__));
00112 }
00113
00115 namespace from_ds
00116 {
00117
00119 struct header : public header_3addr
00120 {
00122 enum addr_index
00123 {
00124 da = 0,
00125 bssid = 1,
00126 sa = 2
00127 };
00128 } __attribute__((__packed__));
00129 }
00130
00132 namespace ap_to_ap
00133 {
00134
00136 struct header
00137 {
00139 enum addr_index
00140 {
00141 ra = 0,
00142 ta = 1,
00143 da = 2
00144 };
00145
00146 uint16_t frame_ctl;
00147 uint16_t duration;
00148 addr addrs[3];
00149 uint16_t seq_ctl;
00150 addr addrs_sa;
00151 uint8_t body[];
00152 } __attribute__((__packed__));
00153
00154 }
00155
00156 }
00157
00158 }
00159
00160 }
00161
00162 #endif // ! WIFI_FRAME_DATA_HH_