Ethereal-dev: Re: [Ethereal-dev] 802.11
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Javier Achirica <achirica@xxxxxxx>
Date: Thu, 31 May 2001 23:46:34 +0200 (MEST)
Hi, This is the updated patch that applies to the current version of the dissector. I haven't sent the libpcap patch in yet because I'm waiting for Alan/Linus to add the 802.11 ARP type to the Linux kernel headers and I want to make sure of the number assigned before sending it. The patch only translates that ARP type to the appropiate DLT_. Javier Achirica On Thu, 31 May 2001, Guy Harris wrote: > > I've been enhancing the Cisco Aironet wireless driver to support raw > > 802.11 packet capture. With a small patch to libpcap > > You've sent that patch to patches@xxxxxxxxxxx, right? (If not, do so.) > > > I'm able to use > > ethereal to see that traffic, but I've found a few bugs in the dissector. > > > > Enclosed is a patch that fixes most of them and adds missing info. Do I > > have to talk with someone to get it integrated in the code? > > Well, the patch doesn't apply to the current version of the dissector > without some errors. The author of that dissector recently sent some > changes to ethereal-dev, which fixed a number of bugs, so some of the > bugs you found might already have been fixed - you should probably get > the latest version of the dissector and try that, and then make changes > to that version and submit a patch against that version. > > If you have automake and autoconf and Python (and probably a number of > other tools not necessarily needed to build a standard Ethereal > distribution) installed, you can just get the current source via > anonymous CVS - see > > http://www.ethereal.com/development.html#anoncvs > > or, if you can't use anonymous CVS because, for example, you're behind a > firewall that blocks it, you can get one of the nightly CVS snapshots - > see > > http://www.ethereal.com/development.html#snapshots > > Or you can get the current CVS version and just drop the 802.11 > dissector from it into your existing source - that should work, and > would mean you wouldn't need to install those additional tools. >
--- ../../ethereal-2001-05-31/packet-ieee80211.c Wed May 30 21:17:31 2001
+++ packet-ieee80211.c Thu May 31 23:08:06 2001
@@ -81,12 +81,14 @@
#define COOK_PROT_VERSION(x) ((x & 0x3))
#define COOK_FRAME_TYPE(x) ((x & 0xC) >> 2)
#define COOK_FRAME_SUBTYPE(x) ((x & 0xF0) >> 4)
-#define COOK_ADDR_SELECTOR(x) (((x & 0x2)) && ((x & 0x1)))
+#define COOK_ADDR_SELECTOR(x) (((x & 0x200)) && ((x & 0x100)))
#define COOK_ASSOC_ID(x) ((x & 0x3FFF))
#define COOK_FRAGMENT_NUMBER(x) (x & 0x000F)
#define COOK_SEQUENCE_NUMBER(x) ((x & 0xFFF0) >> 4)
#define COOK_FLAGS(x) ((x & 0xFF00) >> 8)
#define COOK_DS_STATUS(x) (x & 0x3)
+#define COOK_WEP_IV(x) (x & 0xFFFFFF)
+#define COOK_WEP_KEY(x) ((x & 0xC0000000) >> 30)
#define COL_SHOW_INFO(fd,info) if (check_col(fd,COL_INFO)) \
col_add_str(fd,COL_INFO,info);
@@ -144,10 +146,10 @@
#define DATA_CF_POLL_NOD 0x26 /* Data - Data + CF poll (No data) */
#define DATA_CF_ACK_POLL_NOD 0x27 /* Data - CF ack + CF poll (no data) */
-#define DATA_ADDR_T1 0x00
-#define DATA_ADDR_T2 0x01
-#define DATA_ADDR_T3 0x02
-#define DATA_ADDR_T4 0x03
+#define DATA_ADDR_T1 0x0000
+#define DATA_ADDR_T2 0x0100
+#define DATA_ADDR_T3 0x0200
+#define DATA_ADDR_T4 0x0300
/* ************************************************************************* */
@@ -259,6 +261,9 @@
static int ff_cf_ess = -1;
static int ff_cf_ibss = -1;
static int ff_cf_privacy = -1;
+static int ff_cf_preamble = -1;
+static int ff_cf_pbcc = -1;
+static int ff_cf_agility = -1;
/* ************************************************************************* */
/* Tagged value format fields */
@@ -271,6 +276,10 @@
static int hf_fixed_parameters = -1; /* Protocol payload for management frames */
static int hf_tagged_parameters = -1; /* Fixed payload item */
+static int hf_wep_parameters = -1;
+static int hf_wep_iv = -1;
+static int hf_wep_key = -1;
+static int hf_wep_crc = -1;
/* ************************************************************************* */
/* Protocol trees */
@@ -281,6 +290,7 @@
static gint ett_fc_tree = -1;
static gint ett_fixed_parameters = -1;
static gint ett_tagged_parameters = -1;
+static gint ett_wep_parameters = -1;
static dissector_handle_t llc_handle;
@@ -311,6 +321,12 @@
hdr_length = MGT_FRAME_HDR_LEN; /* Set the header length of the frame */
+ if (IS_WEP(COOK_FLAGS(fcf)))
+ {
+ ld->other++;
+ return;
+ }
+
switch (COMPOSE_FRAME_TYPE (fcf))
{
@@ -378,6 +394,30 @@
}
+/* ************************************************************************* */
+/* Add the subtree used to store WEP parameters */
+/* ************************************************************************* */
+void
+get_wep_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size)
+{
+ proto_item *wep_fields;
+ proto_tree *wep_tree;
+ int crc_offset = size - 4;
+
+ wep_fields = proto_tree_add_string_format(tree, hf_wep_parameters, tvb,
+ 0, 4, 0, "WEP parameters");
+
+ wep_tree = proto_item_add_subtree (wep_fields, ett_wep_parameters);
+ proto_tree_add_uint (wep_tree, hf_wep_iv, tvb, start, 3,
+ COOK_WEP_IV (tvb_get_letohl (tvb, start)));
+
+ proto_tree_add_uint (wep_tree, hf_wep_key, tvb, start + 3, 1,
+ COOK_WEP_KEY (tvb_get_letohl (tvb, start)));
+
+ if (tvb_bytes_exist(tvb, start + crc_offset, 4))
+ proto_tree_add_uint (wep_tree, hf_wep_crc, tvb, start + crc_offset, 4,
+ tvb_get_ntohl (tvb, start + crc_offset));
+}
/* ************************************************************************* */
/* Dissect and add fixed mgmt fields to protocol tree */
@@ -427,23 +467,29 @@
cap_item = proto_tree_add_uint_format (tree, ff_capture,
tvb, offset, 2,
- pntohs (temp16),
+ pletohs (temp16),
"Capability Information: %04X",
- pntohs (temp16));
+ pletohs (temp16));
cap_tree = proto_item_add_subtree (cap_item, ett_cap_tree);
proto_tree_add_boolean (cap_tree, ff_cf_ess, tvb, offset, 1,
- pntohs (temp16));
+ pletohs (temp16));
proto_tree_add_boolean (cap_tree, ff_cf_ibss, tvb, offset, 1,
- pntohs (temp16));
+ pletohs (temp16));
proto_tree_add_boolean (cap_tree, ff_cf_privacy, tvb, offset, 1,
- pntohs (temp16));
- if (ESS_SET (pntohs (temp16)) != 0) /* This is an AP */
+ pletohs (temp16));
+ proto_tree_add_boolean (cap_tree, ff_cf_preamble, tvb, offset, 1,
+ pletohs (temp16));
+ proto_tree_add_boolean (cap_tree, ff_cf_pbcc, tvb, offset, 1,
+ pletohs (temp16));
+ proto_tree_add_boolean (cap_tree, ff_cf_agility, tvb, offset, 1,
+ pletohs (temp16));
+ if (ESS_SET (pletohs (temp16)) != 0) /* This is an AP */
proto_tree_add_uint (cap_tree, ff_cf_ap_poll, tvb, offset, 2,
- ((pntohs (temp16) & 0xC) >> 2));
+ ((pletohs (temp16) & 0xC) >> 2));
else /* This is a STA */
proto_tree_add_uint (cap_tree, ff_cf_sta_poll, tvb, offset, 2,
- ((pntohs (temp16) & 0xC) >> 2));
+ ((pletohs (temp16) & 0xC) >> 2));
break;
@@ -451,7 +497,7 @@
dataptr = tvb_get_ptr (tvb, offset, 2);
temp16 =(guint16 *) dataptr;
proto_tree_add_uint (tree, ff_auth_alg, tvb, offset, 2,
- pntohs (temp16));
+ pletohs (temp16));
break;
@@ -459,7 +505,7 @@
dataptr = tvb_get_ptr (tvb, offset, 2);
temp16 = (guint16 *)dataptr;
proto_tree_add_uint (tree, ff_auth_seq, tvb, offset, 2,
- pntohs (temp16));
+ pletohs (temp16));
break;
@@ -473,28 +519,28 @@
dataptr = tvb_get_ptr (tvb, offset, 2);
temp16 = (guint16 *) dataptr;
proto_tree_add_uint (tree, ff_listen_ival, tvb, offset, 2,
- pntohs (temp16));
+ pletohs (temp16));
break;
case FIELD_REASON_CODE:
dataptr = tvb_get_ptr (tvb, offset, 2);
temp16 = (guint16 *) dataptr;
- proto_tree_add_uint (tree, ff_reason, tvb, offset, 2, pntohs (temp16));
+ proto_tree_add_uint (tree, ff_reason, tvb, offset, 2, pletohs (temp16));
break;
case FIELD_ASSOC_ID:
dataptr = tvb_get_ptr (tvb, offset, 2);
temp16 = (guint16 *) dataptr;
- proto_tree_add_uint (tree, ff_assoc_id, tvb, offset, 2, pntohs (temp16));
+ proto_tree_add_uint (tree, ff_assoc_id, tvb, offset, 2, pletohs (temp16));
break;
case FIELD_STATUS_CODE:
dataptr = tvb_get_ptr (tvb, offset, 2);
temp16 = (guint16 *) dataptr;
proto_tree_add_uint (tree, ff_status_code, tvb, offset, 2,
- pntohs (temp16));
+ pletohs (temp16));
break;
}
}
@@ -529,7 +575,7 @@
proto_tree_add_uint (tree, tag_length, tvb, offset + 1, 1, tag_len);
proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
tag_len, "Not interpreted");
- return (int) tag_len;
+ return (int) tag_len + 2;
}
/* Next See if tag is reserved - if true, skip it! */
@@ -544,7 +590,7 @@
proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
tag_len, "Not interpreted");
- return (int) tag_len;
+ return (int) tag_len + 2;
}
@@ -604,7 +650,7 @@
snprintf (out_buff, SHORT_STR,
"Dwell time 0x%04X, Hop Set %2d, Hop Pattern %2d, "
- "Hop Index %2d", pntohs (tag_data_ptr), tag_data_ptr[2],
+ "Hop Index %2d", pletohs (tag_data_ptr), tag_data_ptr[2],
tag_data_ptr[3], tag_data_ptr[4]);
proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
@@ -638,7 +684,7 @@
snprintf (out_buff, SHORT_STR,
"CFP count %u, CFP period %u, CFP max duration %u, "
"CFP Remaining %u", tag_data_ptr[0], tag_data_ptr[1],
- pntohs (tag_data_ptr + 2), pntohs (tag_data_ptr + 4));
+ pletohs (tag_data_ptr + 2), pletohs (tag_data_ptr + 4));
proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
tag_len, out_buff);
@@ -670,7 +716,7 @@
proto_tree_add_uint (tree, tag_length, tvb, offset + 1, 1, tag_len);
memset (out_buff, 0, SHORT_STR);
snprintf (out_buff, SHORT_STR, "ATIM window 0x%X",
- pntohs (tag_data_ptr));
+ pletohs (tag_data_ptr));
proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
tag_len, out_buff);
@@ -783,11 +829,11 @@
if ((COMPOSE_FRAME_TYPE(fcf))==CTRL_PS_POLL)
proto_tree_add_uint(hdr_tree, hf_assoc_id,tvb,2,2,
- COOK_ASSOC_ID(tvb_get_ntohs(tvb,2)));
+ COOK_ASSOC_ID(tvb_get_letohs(tvb,2)));
else
proto_tree_add_uint (hdr_tree, hf_did_duration, tvb, 2, 2,
- tvb_get_ntohs (tvb, 2));
+ tvb_get_letohs (tvb, 2));
}
/* Perform tasks which are common to a certain frame type */
@@ -894,10 +940,10 @@
proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 16, 6,
tvb_get_ptr (tvb, 16, 6));
proto_tree_add_uint (hdr_tree, hf_frag_number, tvb, 22, 2,
- COOK_FRAGMENT_NUMBER (tvb_get_ntohs
+ COOK_FRAGMENT_NUMBER (tvb_get_letohs
(tvb, 22)));
proto_tree_add_uint (hdr_tree, hf_seq_number, tvb, 22, 2,
- COOK_SEQUENCE_NUMBER (tvb_get_ntohs
+ COOK_SEQUENCE_NUMBER (tvb_get_letohs
(tvb, 22)));
break;
@@ -910,10 +956,10 @@
proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 16, 6,
tvb_get_ptr (tvb, 16, 6));
proto_tree_add_uint (hdr_tree, hf_frag_number, tvb, 22, 2,
- COOK_FRAGMENT_NUMBER (tvb_get_ntohs
+ COOK_FRAGMENT_NUMBER (tvb_get_letohs
(tvb, 22)));
proto_tree_add_uint (hdr_tree, hf_seq_number, tvb, 22, 2,
- COOK_SEQUENCE_NUMBER (tvb_get_ntohs
+ COOK_SEQUENCE_NUMBER (tvb_get_letohs
(tvb, 22)));
break;
@@ -926,10 +972,10 @@
proto_tree_add_ether (hdr_tree, hf_addr_da, tvb, 16, 6,
tvb_get_ptr (tvb, 16, 6));
proto_tree_add_uint (hdr_tree, hf_frag_number, tvb, 22, 2,
- COOK_FRAGMENT_NUMBER (tvb_get_ntohs
+ COOK_FRAGMENT_NUMBER (tvb_get_letohs
(tvb, 22)));
proto_tree_add_uint (hdr_tree, hf_seq_number, tvb, 22, 2,
- COOK_SEQUENCE_NUMBER (tvb_get_ntohs
+ COOK_SEQUENCE_NUMBER (tvb_get_letohs
(tvb, 22)));
break;
@@ -942,10 +988,10 @@
proto_tree_add_ether (hdr_tree, hf_addr_da, tvb, 16, 6,
tvb_get_ptr (tvb, 16, 6));
proto_tree_add_uint (hdr_tree, hf_frag_number, tvb, 22, 2,
- COOK_FRAGMENT_NUMBER (tvb_get_ntohs
+ COOK_FRAGMENT_NUMBER (tvb_get_letohs
(tvb, 22)));
proto_tree_add_uint (hdr_tree, hf_seq_number, tvb, 22, 2,
- COOK_SEQUENCE_NUMBER (tvb_get_ntohs
+ COOK_SEQUENCE_NUMBER (tvb_get_letohs
(tvb, 22)));
proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 24, 6,
tvb_get_ptr (tvb, 24, 6));
@@ -1167,30 +1213,44 @@
COL_SHOW_INFO (pinfo->fd, "Authentication");
if (tree)
{
- fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 6);
- add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN, FIELD_AUTH_ALG);
- add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN + 2,
- FIELD_AUTH_TRANS_SEQ);
- add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN + 4,
- FIELD_STATUS_CODE);
-
- next_idx = MGT_FRAME_LEN + 6; /* Size of fixed fields */
+ if (IS_WEP(COOK_FLAGS(fcf)))
+ {
+ int pkt_len = tvb_reported_length (tvb);
+ int cap_len = tvb_length (tvb);
- tagged_parameter_tree_len =
- tvb_reported_length_remaining(tvb, next_idx + 4);
- if (tagged_parameter_tree_len != 0)
+ get_wep_parameter_tree (tree, tvb, MGT_FRAME_LEN, pkt_len);
+ pkt_len = MAX (pkt_len - 8 - MGT_FRAME_LEN, 0);
+ cap_len = MIN (pkt_len, MAX (cap_len - 8 - MGT_FRAME_LEN, 0));
+ next_tvb = tvb_new_subset (tvb, MGT_FRAME_LEN + 4, cap_len, pkt_len);
+ dissect_data (next_tvb, 0, pinfo, tree);
+ }
+ else
{
- tagged_tree = get_tagged_parameter_tree (tree,
- tvb,
- next_idx,
- tagged_parameter_tree_len);
-
- while (tagged_parameter_tree_len > 0) {
- if ((next_len=add_tagged_field (tagged_tree, tvb, next_idx))==0)
- break;
- next_idx +=next_len;
- tagged_parameter_tree_len -= next_len;
- }
+ fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 6);
+ add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN, FIELD_AUTH_ALG);
+ add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN + 2,
+ FIELD_AUTH_TRANS_SEQ);
+ add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN + 4,
+ FIELD_STATUS_CODE);
+
+ next_idx = MGT_FRAME_LEN + 6; /* Size of fixed fields */
+
+ tagged_parameter_tree_len =
+ tvb_reported_length_remaining(tvb, next_idx + 4);
+ if (tagged_parameter_tree_len != 0)
+ {
+ tagged_tree = get_tagged_parameter_tree (tree,
+ tvb,
+ next_idx,
+ tagged_parameter_tree_len);
+
+ while (tagged_parameter_tree_len > 0) {
+ if ((next_len=add_tagged_field (tagged_tree, tvb, next_idx))==0)
+ break;
+ next_idx +=next_len;
+ tagged_parameter_tree_len -= next_len;
+ }
+ }
}
}
break;
@@ -1361,7 +1421,20 @@
hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0);
next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1);
- call_dissector (llc_handle, next_tvb, pinfo, tree);
+
+ if (IS_WEP(COOK_FLAGS(fcf)))
+ {
+ int pkt_len = tvb_reported_length (next_tvb);
+ int cap_len = tvb_length (next_tvb);
+
+ get_wep_parameter_tree (tree, next_tvb, 0, pkt_len);
+ pkt_len = MAX (pkt_len - 8, 0);
+ cap_len = MIN (pkt_len, MAX (cap_len - 8, 0));
+ next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len);
+ dissect_data (next_tvb, 0, pinfo, tree);
+ }
+ else
+ call_dissector (llc_handle, next_tvb, pinfo, tree);
}
break;
@@ -1374,7 +1447,20 @@
hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0);
next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1);
- call_dissector (llc_handle, next_tvb, pinfo, tree);
+
+ if (IS_WEP(COOK_FLAGS(fcf)))
+ {
+ int pkt_len = tvb_reported_length (next_tvb);
+ int cap_len = tvb_length (next_tvb);
+
+ get_wep_parameter_tree (tree, next_tvb, 0, pkt_len);
+ pkt_len = MAX (pkt_len - 8, 0);
+ cap_len = MIN (pkt_len, MAX (cap_len - 8, 0));
+ next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len);
+ dissect_data (next_tvb, 0, pinfo, tree);
+ }
+ else
+ call_dissector (llc_handle, next_tvb, pinfo, tree);
}
break;
@@ -1386,7 +1472,20 @@
{
hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0);
next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1);
- call_dissector (llc_handle, next_tvb, pinfo, tree);
+
+ if (IS_WEP(COOK_FLAGS(fcf)))
+ {
+ int pkt_len = tvb_reported_length (next_tvb);
+ int cap_len = tvb_length (next_tvb);
+
+ get_wep_parameter_tree (tree, next_tvb, 0, pkt_len);
+ pkt_len = MAX (pkt_len - 8, 0);
+ cap_len = MIN (pkt_len, MAX (cap_len - 8, 0));
+ next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len);
+ dissect_data (next_tvb, 0, pinfo, tree);
+ }
+ else
+ call_dissector (llc_handle, next_tvb, pinfo, tree);
}
break;
@@ -1398,7 +1497,20 @@
{
hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0);
next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1);
- call_dissector (llc_handle, next_tvb, pinfo, tree);
+
+ if (IS_WEP(COOK_FLAGS(fcf)))
+ {
+ int pkt_len = tvb_reported_length (next_tvb);
+ int cap_len = tvb_length (next_tvb);
+
+ get_wep_parameter_tree (tree, next_tvb, 0, pkt_len);
+ pkt_len = MAX (pkt_len - 8, 0);
+ cap_len = MIN (pkt_len, MAX (cap_len - 8, 0));
+ next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len);
+ dissect_data (next_tvb, 0, pinfo, tree);
+ }
+ else
+ call_dissector (llc_handle, next_tvb, pinfo, tree);
}
break;
@@ -1494,6 +1606,21 @@
"AP/STA cannot support WEP"
};
+ static const true_false_string cf_preamble_flags = {
+ "Short preamble allowed",
+ "Short preamble not allowed"
+ };
+
+ static const true_false_string cf_pbcc_flags = {
+ "PBCC modulation allowed",
+ "PBCC modulation not allowed"
+ };
+
+ static const true_false_string cf_agility_flags = {
+ "Channel agility in use",
+ "Channel agility not in use"
+ };
+
static const true_false_string cf_ibss_flags = {
"Transmitter belongs to an IBSS",
@@ -1686,6 +1813,22 @@
{"Tagged parameters", "wlan.tagged.all", FT_UINT16, BASE_DEC, NULL, 0,
""}},
+ {&hf_wep_parameters,
+ {"WEP parameters", "wlan.wep.all", FT_STRING, BASE_NONE, NULL, 0,
+ ""}},
+
+ {&hf_wep_iv,
+ {"Initialization Vector", "wlan.wep.iv", FT_UINT32, BASE_HEX, NULL, 0,
+ "Initialization Vector"}},
+
+ {&hf_wep_key,
+ {"Key", "wlan.wep.key", FT_UINT32, BASE_DEC, NULL, 0,
+ "Key"}},
+
+ {&hf_wep_crc,
+ {"WEP CRC (not verified)", "wlan.wep.crc", FT_UINT32, BASE_HEX, NULL, 0,
+ "WEP CRC"}},
+
{&ff_capture,
{"Capabilities", "wlan.fixed.capabilities", FT_UINT16, BASE_HEX, NULL, 0,
"Capability information"}},
@@ -1702,16 +1845,28 @@
{&ff_cf_ess,
{"ESS capabilities", "wlan.fixed.capabilities.ess",
- FT_BOOLEAN, 1, TFS (&cf_ess_flags), 0x0001, "ESS capabilities"}},
+ FT_BOOLEAN, 8, TFS (&cf_ess_flags), 0x0001, "ESS capabilities"}},
{&ff_cf_ibss,
{"IBSS status", "wlan.fixed.capabilities.ibss",
- FT_BOOLEAN, 1, TFS (&cf_ibss_flags), 0x0002, "IBSS participation"}},
+ FT_BOOLEAN, 8, TFS (&cf_ibss_flags), 0x0002, "IBSS participation"}},
{&ff_cf_privacy,
{"Privacy", "wlan.fixed.capabilities.privacy",
- FT_BOOLEAN, 1, TFS (&cf_privacy_flags), 0x0010, "WEP support"}},
+ FT_BOOLEAN, 8, TFS (&cf_privacy_flags), 0x0010, "WEP support"}},
+
+ {&ff_cf_preamble,
+ {"Short Preamble", "wlan.fixed.capabilities.preamble",
+ FT_BOOLEAN, 8, TFS (&cf_preamble_flags), 0x0020, "Short Preamble"}},
+
+ {&ff_cf_pbcc,
+ {"PBCC", "wlan.fixed.capabilities.pbcc",
+ FT_BOOLEAN, 8, TFS (&cf_pbcc_flags), 0x0040, "PBCC Modulation"}},
+
+ {&ff_cf_agility,
+ {"Channel Agility", "wlan.fixed.capabilities.agility",
+ FT_BOOLEAN, 8, TFS (&cf_agility_flags), 0x0080, "Channel Agility"}},
{&ff_auth_seq,
@@ -1762,6 +1917,7 @@
&ett_proto_flags,
&ett_fixed_parameters,
&ett_tagged_parameters,
+ &ett_wep_parameters,
&ett_cap_tree,
};
- Follow-Ups:
- Re: [Ethereal-dev] 802.11
- From: Guy Harris
- Re: [Ethereal-dev] 802.11
- References:
- Re: [Ethereal-dev] 802.11
- From: Guy Harris
- Re: [Ethereal-dev] 802.11
- Prev by Date: Re: [Ethereal-dev] 802.11
- Next by Date: Re: [Ethereal-dev] 802.11
- Previous by thread: Re: [Ethereal-dev] 802.11
- Next by thread: Re: [Ethereal-dev] 802.11
- Index(es):





