#define IEEE802_11_RA_LEN 6
#define IEEE802_11_TA_LEN 6
#define IEEE802_11_SEQ_LEN 2
+#define IEEE802_11_CTL_LEN 2
#define IEEE802_11_IV_LEN 3
#define IEEE802_11_KID_LEN 1
#define ST_DISASSOC 0xA
#define ST_AUTH 0xB
#define ST_DEAUTH 0xC
-/* RESERVED 0xD */
+#define ST_ACTION 0xD
/* RESERVED 0xE */
/* RESERVED 0xF */
#define CTRL_CONTROL_WRAPPER 0x7
-#define CTRL_BLOCK_ACK_REQ 0x8
-#define CTRL_BLOCK_ACK 0x9
-#define CTRL_PS_POLL 0xA
-#define CTRL_RTS 0xB
-#define CTRL_CTS 0xC
-#define CTRL_ACK 0xD
-#define CTRL_CF_END 0xE
-#define CTRL_END_ACK 0xF
+#define CTRL_BAR 0x8
+#define CTRL_BA 0x9
+#define CTRL_PS_POLL 0xA
+#define CTRL_RTS 0xB
+#define CTRL_CTS 0xC
+#define CTRL_ACK 0xD
+#define CTRL_CF_END 0xE
+#define CTRL_END_ACK 0xF
#define DATA_DATA 0x0
#define DATA_DATA_CF_ACK 0x1
#define CAPABILITY_CFP_REQ(cap) ((cap) & 0x0008)
#define CAPABILITY_PRIVACY(cap) ((cap) & 0x0010)
-typedef enum {
- NOT_PRESENT,
- PRESENT,
- TRUNCATED
-} elem_status_t;
-
struct ssid_t {
u_int8_t element_id;
u_int8_t length;
u_int16_t reason_code;
u_int16_t auth_alg;
u_int16_t auth_trans_seq_num;
- elem_status_t challenge_status;
+ int challenge_present;
struct challenge_t challenge;
u_int16_t capability_info;
- elem_status_t ssid_status;
+ int ssid_present;
struct ssid_t ssid;
- elem_status_t rates_status;
+ int rates_present;
struct rates_t rates;
- elem_status_t ds_status;
+ int ds_present;
struct ds_t ds;
- elem_status_t cf_status;
+ int cf_present;
struct cf_t cf;
- elem_status_t fh_status;
+ int fh_present;
struct fh_t fh;
- elem_status_t tim_status;
+ int tim_present;
struct tim_t tim;
};
#define CTRL_END_ACK_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
-struct ctrl_block_ack_req_t {
+struct ctrl_ba_t {
u_int16_t fc;
u_int16_t duration;
u_int8_t ra[6];
- u_int8_t ta[6];
- u_int16_t bar_control;
+ u_int8_t fcs[4];
};
-#define CTRL_BLOCK_ACK_REQ_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
- IEEE802_11_RA_LEN+IEEE802_11_TA_LEN)
+#define CTRL_BA_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
-struct ctrl_block_ack_t {
+struct ctrl_bar_t {
u_int16_t fc;
- u_int16_t duration;
+ u_int16_t dur;
u_int8_t ra[6];
u_int8_t ta[6];
- u_int16_t ba_control;
+ u_int16_t ctl;
+ u_int16_t seq;
+ u_int8_t fcs[4];
};
-#define CTRL_BLOCK_ACK_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
- IEEE802_11_RA_LEN+IEEE802_11_TA_LEN)
+#define CTRL_BAR_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_RA_LEN+IEEE802_11_TA_LEN+\
+ IEEE802_11_CTL_LEN+IEEE802_11_SEQ_LEN)
+
+struct meshcntl_t {
+ u_int8_t flags;
+ u_int8_t ttl;
+ u_int8_t seq[4];
+ u_int8_t addr4[6];
+ u_int8_t addr5[6];
+ u_int8_t addr6[6];
+};
#define IV_IV(iv) ((iv) & 0xFFFFFF)
#define IV_PAD(iv) (((iv) >> 24) & 0x3F)