Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

802_11_user.h

Go to the documentation of this file.
00001 #ifndef IEEE_802_11
00002 #define IEEE_802_11
00003 
00004 enum ieee_802_11_link_status_failure_reason {
00005         reserved0, Unspecified=1, Previous_not_valid,
00006         Sender_Quits_ESS_or_IBSS,
00007         Due_Inactivity, AP_Overload,
00008         Class_2_from_NonAuth,
00009         Class_3_from_NonAuth,
00010         Sender_Quits_BSS,
00011         Association_requester_not_authenticated,
00012         Reserved10
00013 };
00014 
00015 
00016 #define IEEE_802_11_LINK_STATUS_FAILURE_REASON_STRINGS \
00017 {       \
00018         {reserved0,             0xff," Reserved reason "},\
00019         {Unspecified,           0xff," Unspecified Reason "},\
00020         {Previous_not_valid,    0xff," Previous Authentication no longer valid "},\
00021         {Sender_Quits_ESS_or_IBSS,0xff," Deauthenticated because sending station is leaving (has left) IBSS or ESS "},\
00022         {Due_Inactivity,        0xff," Disassociated due to inactivity "},\
00023         {AP_Overload,           0xff," Disassociated because AP is unable to handle all currently associated stations "},\
00024         {Class_2_from_NonAuth,  0xff," Class 2 frame received from non-Authenticated station"},\
00025         {Class_3_from_NonAuth,  0xff," Class 3 frame received from non­Associated station"},\
00026         {Sender_Quits_BSS,      0xff," Disassociated because sending station is leaving (has left) BSS"},\
00027         {Association_requester_not_authenticated,0xff," Station requesting (Re)Association is not Authenticated with responding station"},\
00028         {Reserved10,            0xff," Reserved"},\
00029         {0,0,NULL}\
00030 };
00031 
00032 
00033 
00034 struct ieee_802_11_header {
00035         u_int16_t       frame_control;// needs to be subtyped
00036         u_int16_t       duration;
00037         u_int8_t        mac1[6];
00038         u_int8_t        mac2[6];
00039         u_int8_t        mac3[6];
00040         u_int16_t       SeqCtl;
00041         u_int8_t        mac4[6];
00042 //      u_int16_t       gapLen;
00043 //      u_int8_t        gap[8];
00044 };
00045 
00046 
00047 struct ieee_802_3_header {
00048 
00049         u_int16_t       status;
00050         u_int16_t       payload_length;
00051         u_int8_t        dst_mac[6];
00052         u_int8_t        src_mac[6];
00053 
00054 };
00055 
00056 #define P80211_OUI_LEN 3
00057 
00058 struct ieee_802_11_802_2_header {
00059 
00060         u_int8_t    dsap;
00061         u_int8_t    ssap;   /* always 0xAA */
00062         u_int8_t    ctrl;   /* always 0x03 */
00063         u_int8_t    oui[P80211_OUI_LEN];    /* organizational universal id */
00064         u_int16_t   type;      /* packet type ID field */
00065 };
00066 
00067 /* See RFC 826 for protocol description.  ARP packets are variable
00068    in size; the arphdr structure defines the fixed-length portion.
00069    Protocol type values are the same as those for 10 Mb/s Ethernet.
00070    It is followed by the variable-sized fields ar_sha, arp_spa,
00071    arp_tha and arp_tpa in that order, according to the lengths
00072    specified.  Field names used correspond to RFC 826.  */
00073 
00074 #define ETH_ALEN 6
00075 
00076 struct myarphdr
00077 {
00078     unsigned short int ar_hrd;          /* Format of hardware address.  */
00079     unsigned short int ar_pro;          /* Format of protocol address.  */
00080     unsigned char ar_hln;               /* Length of hardware address.  */
00081     unsigned char ar_pln;               /* Length of protocol address.  */
00082     unsigned short int ar_op;           /* ARP opcode (command).  */
00083     /* Ethernet looks like this : This bit is variable sized
00084        however...  */
00085     unsigned char ar_sha[ETH_ALEN];   /* Sender hardware address.  */
00086     unsigned char ar_sip[4];          /* Sender IP address.  */
00087     unsigned char ar_tha[ETH_ALEN];   /* Target hardware address.  */
00088     unsigned char ar_tip[4];          /* Target IP address.  */
00089 };
00090 
00091 
00092 // following is incoplete and may be incorrect and need reorganization
00093 
00094 #define ieee_802_11_frame_type_Management       0x00
00095 #define ieee_802_11_frame_type_Control          0x01
00096 #define ieee_802_11_frame_type_Data             0x10
00097 #define ieee_802_11_frame_type_Reserved         0x11
00098 
00099 #define ieee_802_11_frame_subtype_Association_Req       0x0 // Association Request
00100 #define ieee_802_11_frame_subtype_Association_Resp      0x1 // Association Response
00101 #define ieee_802_11_frame_subtype_Reassociation_Req     0x2 // Reassociation Request
00102 #define ieee_802_11_frame_subtype_Reassociation_Resp    0x3 // Reassociation Response
00103 #define ieee_802_11_frame_subtype_Probe_Req             0x4 // Probe Request
00104 #define ieee_802_11_frame_subtype_Probe_Resp            0x5 // Probe Response
00105 #define ieee_802_11_frame_subtype_Beacon                0x8 // Beacon
00106 #define ieee_802_11_frame_subtype_ATIM                  0x9 // ATIM
00107 #define ieee_802_11_frame_subtype_Disassociation        0xA // Disassociation
00108 #define ieee_802_11_frame_subtype_Authentication        0xB // Authentication
00109 #define ieee_802_11_frame_subtype_Deauthentication      0xC // Deauthentication
00110 #define ieee_802_11_frame_subtype_PS_Poll               0xA // PS-Poll
00111 #define ieee_802_11_frame_subtype_RTS                   0xB // RTS
00112 #define ieee_802_11_frame_subtype_CTS                   0xC // CTS
00113 #define ieee_802_11_frame_subtype_ACK                   0xD // ACK
00114 #define ieee_802_11_frame_subtype_CFEnd                 0xE // CF-End
00115 #define ieee_802_11_frame_subtype_CFEnd_CFAck           0xF // CF-End + CF-Ack
00116 #define ieee_802_11_frame_subtype_Data                  0x0 // Data
00117 #define ieee_802_11_frame_subtype_Data_CFAck            0x1 // Data + CF-Ack
00118 #define ieee_802_11_frame_subtype_Data_CF_Poll          0x2 // Data + CF-Poll
00119 #define ieee_802_11_frame_subtype_Data_CF_AckCF_Poll    0x3 // Data + CF-Ack + CF-Poll
00120 #define ieee_802_11_frame_subtype_NullFunction          0x4 // Null Function (no data)
00121 #define ieee_802_11_frame_subtype_CF_Ack                0x5 // CF-Ack (no data)
00122 #define ieee_802_11_frame_subtype_CF_Poll               0x6 // CF-Poll (no data)
00123 #define ieee_802_11_frame_subtype_CF_AckCF_Poll         0x7 // CF-Ack + CF-Poll (no data)
00124 
00125 
00126 #define ieee_802_11_frame_subtype_strings {\
00127         { ieee_802_11_frame_subtype_Association_Req,    0xF,"f  Association Request"},\
00128         { ieee_802_11_frame_subtype_Association_Resp,   0xF,"1  Association Response"},\
00129         { ieee_802_11_frame_subtype_Reassociation_Req,  0xF,"2  Reassociation Request"},\
00130         { ieee_802_11_frame_subtype_Reassociation_Resp, 0xF,"3  Reassociation Response"},\
00131         { ieee_802_11_frame_subtype_Probe_Req   ,       0xF,"4  Probe Request"},\
00132         { ieee_802_11_frame_subtype_Probe_Resp  ,       0xF,"5  Probe Response"},\
00133         { ieee_802_11_frame_subtype_Beacon      ,       0xF,"8  Beacon"},\
00134         { ieee_802_11_frame_subtype_ATIM        ,       0xF,"9  ATIM"},\
00135         { ieee_802_11_frame_subtype_Disassociation,     0xF,"A  Disassociation"},\
00136         { ieee_802_11_frame_subtype_Authentication,     0xF,"B  Authentication"},\
00137         { ieee_802_11_frame_subtype_Deauthentication,   0xF,"C  Deauthentication"},\
00138         { ieee_802_11_frame_subtype_PS_Poll     ,       0xF,"A  PS-Poll"},\
00139         { ieee_802_11_frame_subtype_RTS         ,       0xF,"B  RTS"},\
00140         { ieee_802_11_frame_subtype_CTS         ,       0xF,"C  CTS"},\
00141         { ieee_802_11_frame_subtype_ACK         ,       0xF,"D  ACK"},\
00142         { ieee_802_11_frame_subtype_CFEnd       ,       0xF,"E  CF-End"},\
00143         { ieee_802_11_frame_subtype_CFEnd_CFAck ,       0xF,"F  CF-End + CF-Ack"},\
00144         { ieee_802_11_frame_subtype_Data        ,       0xF,"0  Data"},\
00145         { ieee_802_11_frame_subtype_Data_CFAck  ,       0xF,"1  Data + CF-Ack"},\
00146         { ieee_802_11_frame_subtype_Data_CFPoll ,       0xF,"2  Data + CF-Poll"},\
00147         { ieee_802_11_frame_subtype_Data_CFAck_CFPoll,  0xF,"3  Data + CF-Ack + CF-Poll"},\
00148         { ieee_802_11_frame_subtype_Null_Function ,     0xF,"4  Null Function (no data)"},\
00149         { ieee_802_11_frame_subtype_CFAck ,             0xF,"5  CF-Ack (no data)"},\
00150         { ieee_802_11_frame_subtype_CFPoll ,            0xF,"6  CF-Poll (no data)"},\
00151         { ieee_802_11_frame_subtype_CFAck_CFPoll,       0xF,"y7  CF-Ack + CF-Poll (no data)"},\
00152         { 0,0,NULL}\
00153 }
00154 struct ieee_802_11_frame_subtype_class {
00155         u_int8_t        subtype;
00156         u_int8_t        mask;
00157         u_int8_t        klass;
00158         u_int8_t        type;
00159 };
00160 #define ieee_802_11_frame_subtype_classes {\
00161         { ieee_802_11_frame_subtype_Association_Req,    0xF,2,ieee_802_11_frame_type_Management},\
00162         { ieee_802_11_frame_subtype_Association_Resp,   0xF,2,ieee_802_11_frame_type_Management},\
00163         { ieee_802_11_frame_subtype_Reassociation_Req,  0xF,2,ieee_802_11_frame_type_Management},\
00164         { ieee_802_11_frame_subtype_Reassociation_Resp, 0xF,2,ieee_802_11_frame_type_Management},\
00165         { ieee_802_11_frame_subtype_Probe_Req   ,       0xF,1,ieee_802_11_frame_type_Management},\
00166         { ieee_802_11_frame_subtype_Probe_Resp  ,       0xF,1,ieee_802_11_frame_type_Management},\
00167         { ieee_802_11_frame_subtype_Beacon      ,       0xF,1,ieee_802_11_frame_type_Management},\
00168         { ieee_802_11_frame_subtype_ATIM        ,       0xF,1,ieee_802_11_frame_type_Management},\
00169         { ieee_802_11_frame_subtype_Disassociation,     0xF,2,ieee_802_11_frame_type_Management},\
00170         { ieee_802_11_frame_subtype_Authentication,     0xF,1,ieee_802_11_frame_type_Management},\
00171         { ieee_802_11_frame_subtype_Deauthentication,   0xF,3,ieee_802_11_frame_type_Management},\
00172         { ieee_802_11_frame_subtype_PS-Poll     ,       0xF,3,ieee_802_11_frame_type_Control},\
00173         { ieee_802_11_frame_subtype_RTS         ,       0xF,1,ieee_802_11_frame_type_Control},\
00174         { ieee_802_11_frame_subtype_CTS         ,       0xF,1,ieee_802_11_frame_type_Control},\
00175         { ieee_802_11_frame_subtype_ACK         ,       0xF,1,ieee_802_11_frame_type_Control},\
00176         { ieee_802_11_frame_subtype_CFEnd       ,       0xF,1,ieee_802_11_frame_type_Control},\
00177         { ieee_802_11_frame_subtype_CFEnd_CFAck ,       0xF,1,ieee_802_11_frame_type_Control},\
00178         { ieee_802_11_frame_subtype_Data        ,       0xF,3,ieee_802_11_frame_type_Data},\
00179         { ieee_802_11_frame_subtype_Data_CFAck  ,       0xF,3,ieee_802_11_frame_type_Data},\
00180         { ieee_802_11_frame_subtype_Data_CF_Poll        0xF,3,ieee_802_11_frame_type_Data},\
00181         { ieee_802_11_frame_subtype_Data_CF_AckCF_Poll, 0xF,3,ieee_802_11_frame_type_Data},\
00182         { ieee_802_11_frame_subtype_NullFunction        0xF,1,ieee_802_11_frame_type_Data},\
00183         { ieee_802_11_frame_subtype_CF_Ack ,            0xF,1,ieee_802_11_frame_type_Data},\
00184         { ieee_802_11_frame_subtype_CF_Poll ,           0xF,1,ieee_802_11_frame_type_Data},\
00185         { ieee_802_11_frame_subtype_CF_AckCF_Poll,      0xF,1,ieee_802_11_frame_type_Data},\
00186         { 0,0,NULL}\
00187 }
00188 
00189 #define IEEE802_11_FC_LEN       2
00190 
00191 #define T_MGMT 0x0  /* management */
00192 #define T_CTRL 0x1  /* control */
00193 #define T_DATA 0x2 /* data */
00194 #define T_RESV 0x3  /* reserved */
00195 
00196 #define ST_ASSOC_REQUEST        0x0
00197 #define ST_ASSOC_RESPONSE       0x1
00198 #define ST_REASSOC_REQUEST      0x2
00199 #define ST_REASSOC_RESPONSE     0x3
00200 #define ST_PROBE_REQUEST        0x4
00201 #define ST_PROBE_RESPONSE       0x5
00202 /* RESERVED                     0x6  */
00203 /* RESERVED                     0x7  */
00204 #define ST_BEACON               0x8
00205 #define ST_ATIM                 0x9
00206 #define ST_DISASSOC             0xA
00207 #define ST_AUTH                 0xB
00208 #define ST_DEAUTH               0xC
00209 /* RESERVED                     0xD  */
00210 /* RESERVED                     0xE  */
00211 /* RESERVED                     0xF  */
00212 
00213 
00214 #define CTRL_PS_POLL    0xA
00215 #define CTRL_RTS        0xB
00216 #define CTRL_CTS        0xC
00217 #define CTRL_ACK        0xD
00218 #define CTRL_CF_END     0xE
00219 #define CTRL_END_ACK    0xF
00220 
00221 /*
00222  * Bits in the frame control field.
00223  */
00224 #define FC_VERSION(fc)          ((fc) & 0x3)
00225 #define FC_TYPE(fc)             (((fc) >> 2) & 0x3)
00226 #define FC_SUBTYPE(fc)          (((fc) >> 4) & 0xF)
00227 #define FC_TO_DS(fc)            ((fc) & 0x0100)
00228 #define FC_FROM_DS(fc)          ((fc) & 0x0200)
00229 #define FC_MORE_FLAG(fc)        ((fc) & 0x0400)
00230 #define FC_RETRY(fc)            ((fc) & 0x0800)
00231 #define FC_POWER_MGMT(fc)       ((fc) & 0x1000)
00232 #define FC_MORE_DATA(fc)        ((fc) & 0x2000)
00233 #define FC_WEP(fc)              ((fc) & 0x4000)
00234 #define FC_ORDER(fc)            ((fc) & 0x8000)
00235 
00236 
00237 struct ieee_802_11_mgmt_header {
00238   u_int16_t fc;
00239   u_int16_t duration;
00240   u_int8_t  da[6];
00241   u_int8_t  sa[6];
00242   u_int8_t  bssid[6];
00243   u_int16_t seq_ctrl;
00244 };
00245 
00246 
00247 struct ieee_802_11_data_header {
00248         u_int16_t       fc;
00249         u_int16_t       duration;
00250         u_int8_t        mac1[6];
00251         u_int8_t        mac2[6];
00252         u_int8_t        mac3[6];
00253         u_int16_t       SeqCtl;
00254         u_int8_t        mac4[6];
00255 //      u_int16_t       gapLen;
00256 //      u_int8_t        gap[8];
00257 };
00258 
00259 struct ieee_802_11_control_header {
00260         u_int16_t       fc;
00261         u_int16_t       duration;
00262         u_int8_t        mac1[6];
00263         u_int8_t        mac2[6];
00264         u_int8_t        mac3[6];
00265         u_int16_t       SeqCtl;
00266         u_int8_t        mac4[6];
00267 //      u_int16_t       gapLen;
00268 //      u_int8_t        gap[8];
00269 };
00270 
00271 #define CAPABILITY_ESS(cap)     ((cap) & 0x0001)
00272 #define CAPABILITY_IBSS(cap)    ((cap) & 0x0002)
00273 #define CAPABILITY_CFP(cap)     ((cap) & 0x0004)
00274 #define CAPABILITY_CFP_REQ(cap) ((cap) & 0x0008)
00275 #define CAPABILITY_PRIVACY(cap) ((cap) & 0x0010)
00276 
00277 struct ssid_t {
00278   u_int8_t      element_id;
00279   u_int8_t      length;
00280   u_char                ssid[33];  /* 32 + 1 for null */
00281 };
00282 
00283 
00284 struct rates_t {
00285   u_int8_t      element_id;
00286   u_int8_t      length;
00287   u_int8_t      rate[8];
00288 };
00289 
00290 
00291 struct challenge_t {
00292   u_int8_t      element_id;
00293   u_int8_t      length;
00294   u_int8_t      text[254]; /* 1-253 + 1 for null */
00295 };
00296 
00297 
00298 struct fh_t {
00299   u_int8_t      element_id;
00300   u_int8_t      length;
00301   u_int16_t     dwell_time;
00302   u_int8_t      hop_set;
00303   u_int8_t      hop_pattern;
00304   u_int8_t      hop_index;
00305 };
00306 
00307 
00308 struct ds_t {
00309   u_int8_t      element_id;
00310   u_int8_t      length;
00311   u_int8_t      channel;
00312 };
00313 
00314 
00315 struct cf_t {
00316   u_int8_t      element_id;
00317   u_int8_t      length;
00318   u_int8_t      count;
00319   u_int8_t      period;
00320   u_int16_t     max_duration;
00321   u_int16_t     dur_remaing;
00322 };
00323 
00324 
00325 struct tim_t {
00326   u_int8_t      element_id;
00327   u_int8_t      length;
00328   u_int8_t      count;
00329   u_int8_t      period;
00330   u_int8_t      bitmap_control;
00331   u_int8_t      bitmap[251];
00332 };
00333 
00334 
00335 struct ibss_t {
00336   u_int8_t      element_id;
00337   u_int8_t      length;
00338   u_int16_t     atim_window;
00339 };
00340 
00341 
00342 #define E_SSID      0
00343 #define E_RATES     1
00344 #define E_FH        2
00345 #define E_DS        3
00346 #define E_CF        4
00347 #define E_TIM       5
00348 #define E_IBSS      6
00349 #define E_CHALLENGE 16
00350 #define E_CISCO     133
00351 
00352 
00353 struct ieee_802_11_mgmt_body {
00354   u_int8_t  timestamp[8];
00355   u_int16_t beacon_interval;
00356 //  u_int16_t   listen_interval;
00357 //  u_int16_t   status_code;
00358 //  u_int16_t   aid;
00359 //  u_char              ap[6];
00360 //  u_int16_t   reason_code;
00361 //  u_int16_t   auth_alg;
00362 //  u_int16_t   auth_trans_seq_num;
00363 //  struct challenge_t  challenge;
00364   u_int16_t capability_info;
00365 //  struct ssid_t       ssid;
00366 //  struct rates_t      rates;
00367 //  struct ds_t ds;
00368 //  struct cf_t cf;
00369 //  struct fh_t fh;
00370 //  struct tim_t        tim;
00371 };
00372 
00373 /* a 802.11 value */
00374 struct val_80211 {
00375     unsigned int did;
00376     unsigned short status, len;
00377     unsigned int data;
00378 };
00379 
00380 /* header attached during prism monitor mode */
00381 struct prism_hdr {
00382     unsigned int msgcode, msglen;
00383     char devname[16];
00384     struct val_80211 hosttime, mactime, channel, rssi, sq, signal,
00385         noise, rate, istx, frmlen;
00386 };
00387 
00388 struct ieee_802_11_data_body {
00389 //FIXME
00390 };
00391 
00392 struct ieee_802_11_control_body {
00393 //FIXME
00394 };
00395 
00396 struct ctrl_rts_t {
00397   u_int16_t     fc;
00398   u_int16_t     duration;
00399   u_int8_t      ra[6];
00400   u_int8_t      ta[6];
00401   u_int8_t      fcs[4];
00402 };
00403 
00404 #define CTRL_RTS_LEN    (2+2+6+6+4)
00405 
00406 struct ctrl_cts_t {
00407   u_int16_t     fc;
00408   u_int16_t     duration;
00409   u_int8_t      ra[6];
00410   u_int8_t      fcs[4];
00411 };
00412 
00413 #define CTRL_CTS_LEN    (2+2+6+4)
00414 
00415 struct ctrl_ack_t {
00416   u_int16_t     fc;
00417   u_int16_t     duration;
00418   u_int8_t      ra[6];
00419   u_int8_t      fcs[4];
00420 };
00421 
00422 #define CTRL_ACK_LEN    (2+2+6+4)
00423 
00424 struct ctrl_ps_poll_t {
00425   u_int16_t     fc;
00426   u_int16_t     aid;
00427   u_int8_t      bssid[6];
00428   u_int8_t      ta[6];
00429   u_int8_t      fcs[4];
00430 };
00431 
00432 #define CTRL_PS_POLL_LEN        (2+2+6+6+4)
00433 
00434 struct ctrl_end_t {
00435   u_int16_t     fc;
00436   u_int16_t     duration;
00437   u_int8_t      ra[6];
00438   u_int8_t      bssid[6];
00439   u_int8_t      fcs[4];
00440 };
00441 
00442 #define CTRL_END_LEN    (2+2+6+6+4)
00443 
00444 struct ctrl_end_ack_t {
00445   u_int16_t     fc;
00446   u_int16_t     duration;
00447   u_int8_t      ra[6];
00448   u_int8_t      bssid[6];
00449   u_int8_t      fcs[4];
00450 };
00451 
00452 #define CTRL_END_ACK_LEN        (2+2+6+6+4)
00453 
00454 #define IV_IV(iv)       ((iv) & 0xFFFFFF)
00455 #define IV_PAD(iv)      (((iv) >> 24) & 0x3F)
00456 #define IV_KEYID(iv)    (((iv) >> 30) & 0x03)
00457 
00458 
00459 #endif

Generated on Sat Nov 5 16:16:12 2005 for OPIE by  doxygen 1.4.2