-/* @(#) $Header: /tcpdump/master/tcpdump/ieee802_11.h,v 1.2 2001-06-13 07:25:57 guy Exp $ (LBL) */
+/* @(#) $Header: /tcpdump/master/tcpdump/ieee802_11.h,v 1.3 2001-06-14 09:50:01 guy Exp $ (LBL) */
/*
* Copyright (c) 2001
* Fortress Technologies
u_int8_t da[6];
u_int8_t sa[6];
u_int8_t bssid[6];
- u_int8_t seq_ctrl;
+ u_int16_t seq_ctrl;
};
+#define MGMT_HEADER_LEN (2+2+6+6+6+2)
+
#define CAPABILITY_ESS(cap) ((cap) & 0x0001)
#define CAPABILITY_IBSS(cap) ((cap) & 0x0002)
#define CAPABILITY_CFP(cap) ((cap) & 0x0004)
u_int8_t fcs[4];
};
+#define CTRL_RTS_LEN (2+2+6+6+4)
+
struct ctrl_cts_t {
u_int16_t fc;
u_int16_t duration;
u_int8_t fcs[4];
};
+#define CTRL_CTS_LEN (2+2+6+4)
+
struct ctrl_ack_t {
u_int16_t fc;
u_int16_t duration;
u_int8_t fcs[4];
};
+#define CTRL_ACK_LEN (2+2+6+4)
+
struct ctrl_ps_poll_t {
u_int16_t fc;
u_int16_t aid;
u_int8_t fcs[4];
};
+#define CTRL_PS_POLL_LEN (2+2+6+6+4)
+
struct ctrl_end_t {
u_int16_t fc;
u_int16_t duration;
u_int8_t fcs[4];
};
+#define CTRL_END_LEN (2+2+6+6+4)
+
struct ctrl_end_ack_t {
u_int16_t fc;
u_int16_t duration;
u_int8_t fcs[4];
};
+#define CTRL_END_ACK_LEN (2+2+6+6+4)
+
#define IV_IV(iv) ((iv) & 0xFFFFFF)
#define IV_PAD(iv) (((iv) >> 24) & 0x3F)
#define IV_KEYID(iv) (((iv) >> 30) & 0x03)
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-802_11.c,v 1.2 2001-06-13 07:25:58 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-802_11.c,v 1.3 2001-06-14 09:50:02 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
switch (FC_SUBTYPE(fc))
{
case CTRL_PS_POLL:
- if (!TTEST(*((struct ctrl_ps_poll_t *)p)))
+ if (!TTEST2(*p, CTRL_PS_POLL_LEN))
return 0;
- printf("Power Save-Poll AID(%x)",((u_int16_t)( ((struct ctrl_ps_poll_t *)p)->aid << 2 )) >> 2 );
+ printf("Power Save-Poll AID(%x)",
+ EXTRACT_LE_16BITS(&(((struct ctrl_ps_poll_t *)p)->aid)));
break;
case CTRL_RTS:
- if (!TTEST(*((struct ctrl_rts_t *)p)))
+ if (!TTEST2(*p, CTRL_RTS_LEN))
return 0;
if (eflag)
printf("Request-To-Send");
printf("Request-To-Send TA:%s ", etheraddr_string( ((struct ctrl_rts_t *)p)->ta));
break;
case CTRL_CTS:
- if (!TTEST(*((struct ctrl_cts_t *)p)))
+ if (!TTEST2(*p, CTRL_CTS_LEN))
return 0;
if (eflag)
printf("Clear-To-Send");
printf("Clear-To-Send RA:%s ", etheraddr_string( ((struct ctrl_cts_t *)p)->ra));
break;
case CTRL_ACK:
- if (!TTEST(*((struct ctrl_ack_t *)p)))
+ if (!TTEST2(*p, CTRL_ACK_LEN))
return 0;
if (eflag)
printf("Acknowledgment");
printf("Acknowledgment RA:%s ", etheraddr_string( ((struct ctrl_ack_t *)p)->ra));
break;
case CTRL_CF_END:
- if (!TTEST(*((struct ctrl_end_t *)p)))
+ if (!TTEST2(*p, CTRL_END_LEN))
return 0;
if (eflag)
printf("CF-End");
printf("CF-End RA:%s ", etheraddr_string( ((struct ctrl_end_t *)p)->ra));
break;
case CTRL_END_ACK:
- if (!TTEST(*((struct ctrl_end_ack_t *)p)))
+ if (!TTEST2(*p, CTRL_END_ACK_LEN))
return 0;
if (eflag)
printf("CF-End+CF-Ack");
switch (FC_TYPE(fc))
{
case T_MGMT:
- iLength=sizeof(struct mgmt_header_t);
+ iLength=MGMT_HEADER_LEN;
break;
case T_CTRL:
switch (FC_SUBTYPE(fc))
{
case CTRL_PS_POLL:
- iLength=sizeof(struct ctrl_ps_poll_t);
+ iLength=CTRL_PS_POLL_LEN;
break;
case CTRL_RTS:
- iLength=sizeof(struct ctrl_rts_t);
+ iLength=CTRL_RTS_LEN;
break;
case CTRL_CTS:
- iLength=sizeof(struct ctrl_cts_t);
+ iLength=CTRL_CTS_LEN;
break;
case CTRL_ACK:
- iLength=sizeof(struct ctrl_ack_t);
+ iLength=CTRL_ACK_LEN;
break;
case CTRL_CF_END:
- iLength=sizeof(struct ctrl_end_t);
+ iLength=CTRL_END_LEN;
break;
case CTRL_END_ACK:
- iLength=sizeof(struct ctrl_end_ack_t);
+ iLength=CTRL_END_ACK_LEN;
break;
default:
iLength=0;