aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorAlexis La Goutte <alexis.lagoutte@gmail.com>2011-07-30 15:19:10 +0000
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2011-07-30 15:19:10 +0000
commitb5bc73f8690c2592bcf04d9b10ba04b9f46cda53 (patch)
tree7f25d44d10ca684296d3822578c8416fd241becb /epan/dissectors
parentafd9d6f6336fb5f162080055c68a5d1d750bde19 (diff)
From Brian Cavagnolo via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6173
Update 802.11s packet dissecting to the ratified standard (v12.0) [PATCH 3/9] add support for 802.11s v12.0 mesh peering management IE The v12.0 mesh peering management IE replaces the exiting mesh peer link management IE and has a slightly different format. From me Fix checkAPI Errors (the blurb field matches the field name) Remove unused hf_ieee80211_mesh_mgt_pl_reason_code svn path=/trunk/; revision=38275
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-ieee80211.c95
1 files changed, 58 insertions, 37 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index b1c6478b4e..c06dfa9d87 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -639,7 +639,7 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
/* Not yet assigned by ANA */
#define TAG_MESH_CONFIGURATION 113
#define TAG_MESH_ID 114
-#define TAG_MESH_PEER_LINK_MGMT 55
+#define TAG_MESH_PEERING_MGMT 117
#define TAG_MESH_PREQ 68
#define TAG_MESH_PREP 69
#define TAG_MESH_PERR 70
@@ -722,7 +722,7 @@ static const range_string tag_num_vals[] = {
#ifdef MESH_OVERRIDES
{ TAG_MESH_ID, TAG_MESH_ID, "Mesh ID" },
{ TAG_MESH_CONFIGURATION, TAG_MESH_CONFIGURATION, "Mesh Configuration" },
- { TAG_MESH_PEER_LINK_MGMT, TAG_MESH_PEER_LINK_MGMT, "Mesh Peer Link Management" },
+ { TAG_MESH_PEERING_MGMT, TAG_MESH_PEERING_MGMT, "Mesh Peering Management" },
{ TAG_MESH_PREQ, TAG_MESH_PREQ, "Mesh Path Request" },
{ TAG_MESH_PREP, TAG_MESH_PREP, "Mesh Path Response" },
{ TAG_MESH_PERR, TAG_MESH_PERR, "Mesh Path Error" },
@@ -909,6 +909,9 @@ static const value_string ieee80211_status_code[] = {
{ 64, "Request refused due to permissions received via SSPN interface" },
{ 65, "Request refused because AP does not support unauthenticated access" },
{ 72, "Invalid contents of RSNIE" },
+ { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
+ { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
+ { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
{ 0, NULL}
};
@@ -1146,6 +1149,11 @@ static const value_string aruba_mgt_typevals[] = {
#define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM 4
#define SELFPROT_ACTION_MESH_GROUP_KEY_ACK 5
+/* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
+#define MESH_PEERING_PROTO_MGMT 0
+#define MESH_PEERING_PROTO_AMPE 1
+#define MESH_PEERING_PROTO_VENDOR 255
+
#define MESH_PL_PEER_LINK_OPEN 0
#define MESH_PL_PEER_LINK_CONFIRM 1
#define MESH_PL_PEER_LINK_CLOSE 2
@@ -1696,10 +1704,10 @@ static int hf_ieee80211_ff_mesh_mgt_dest_rf_flags = -1; /* Mesh Management Repl
/* variable header fields */
-static int hf_ieee80211_mesh_mgt_pl_subtype = -1;/* Mesh Management peer link frame subtype */
-static int hf_ieee80211_mesh_mgt_pl_local_link_id = -1;/* Mesh Management local link id */
-static int hf_ieee80211_mesh_mgt_pl_peer_link_id = -1;/* Mesh Management peer link id */
-static int hf_ieee80211_mesh_mgt_pl_reason_code = -1;/* Mesh Management peer link reason code */
+static int hf_ieee80211_mesh_peering_proto = -1;
+static int hf_ieee80211_mesh_peering_local_link_id = -1;
+static int hf_ieee80211_mesh_peering_peer_link_id = -1;/* Mesh Management peer link id */
+
static int hf_ieee80211_mesh_config_path_sel_protocol = -1;
static int hf_ieee80211_mesh_config_path_sel_metric = -1;
static int hf_ieee80211_mesh_config_congestion_control = -1;
@@ -8187,33 +8195,44 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
#ifdef MESH_OVERRIDES
- case TAG_MESH_PEER_LINK_MGMT:
+ case TAG_MESH_PEERING_MGMT:
{
+ guint start = offset + 2;
+ offset += 2;
+ proto_tree_add_item (tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, TRUE);
+ offset += 2;
+ proto_tree_add_item (tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, TRUE);
offset += 2;
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_subtype, tvb, offset, 1, TRUE);
- offset += 1;
switch (tvb_get_guint8(tvb, 1))
- { /* IE subtype */
- case MESH_PL_PEER_LINK_OPEN:
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_local_link_id, tvb, offset, 2, TRUE);
+ { /* Self-protected action field */
+ case SELFPROT_ACTION_MESH_PEERING_OPEN:
break;
- case MESH_PL_PEER_LINK_CONFIRM:
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_local_link_id, tvb, offset, 2, TRUE);
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_peer_link_id, tvb, offset + 2, 2, TRUE);
+ case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
+ proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, TRUE);
+ offset += 2;
break;
- case MESH_PL_PEER_LINK_CLOSE:
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_local_link_id, tvb, offset, 2, TRUE);
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_peer_link_id, tvb, offset + 2, 2, TRUE);
- proto_tree_add_item (tree, hf_ieee80211_mesh_mgt_pl_reason_code, tvb, offset + 4, 2, TRUE);
+ case SELFPROT_ACTION_MESH_PEERING_CLOSE:
+ if (tag_len == 8 || tag_len == 24)
+ {
+ proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, TRUE);
+ offset += 2;
+ }
+ offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
break;
- /* undefined values */
+ /* unexpected values */
default:
- proto_tree_add_text (tree, tvb, offset, tag_len, "Unknown Peer Link Message Subtype");
+ proto_tree_add_text (tree, tvb, offset, tag_len, "Unexpected Self-protected action");
+ offset += tag_len;
break;
}
+ if (tag_len - (offset - start) == 16)
+ {
+ proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, FALSE);
+ offset +=16;
+ }
break;
}
@@ -11511,6 +11530,13 @@ proto_register_ieee80211 (void)
{0, NULL}
};
+ static const value_string mesh_peering_proto_ids[] = {
+ {MESH_PEERING_PROTO_MGMT, "Mesh peering management protocol"},
+ {MESH_PEERING_PROTO_AMPE, "Authenticated mesh peering exchange protocol"},
+ {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
+ {0, NULL}
+ };
+
static const value_string mesh_mgt_action_ps_codes[] ={
{MESH_PS_PATH_REQUEST, "Path Request"},
{MESH_PS_PATH_REPLY, "Path Reply"},
@@ -13312,25 +13338,20 @@ proto_register_ieee80211 (void)
FT_UINT16, BASE_HEX, VALS (&mesh_mgt_action_pl_codes), 0,
"Mesh Management Peer Link action code", HFILL }},
- {&hf_ieee80211_mesh_mgt_pl_local_link_id,
- {"Local Link ID", "wlan.pl.local_id",
- FT_UINT16, BASE_HEX, NULL, 0,
- "Mesh Management Local Link ID", HFILL }},
-
- {&hf_ieee80211_mesh_mgt_pl_subtype,
- {"Peer Link Subtype", "wlan.pl.subtype",
- FT_UINT16, BASE_HEX, VALS (&mesh_mgt_action_pl_codes), 0,
- "Mesh Management Peer Link Subtype", HFILL }},
+ {&hf_ieee80211_mesh_peering_proto,
+ {"Mesh Peering Protocol ID", "wlan.peering.proto",
+ FT_UINT16, BASE_HEX, VALS (&mesh_peering_proto_ids), 0,
+ NULL, HFILL }},
- {&hf_ieee80211_mesh_mgt_pl_reason_code,
- {"Reason Code", "wlan.pl.reason_code",
- FT_UINT16, BASE_HEX, VALS (&mesh_mgt_pl_reason_codes), 0,
- "Mesh Management Reason Code", HFILL }},
+ {&hf_ieee80211_mesh_peering_local_link_id,
+ {"Local Link ID", "wlan.peering.local_id",
+ FT_UINT16, BASE_HEX, NULL, 0,
+ "Mesh Peering Management Local Link ID", HFILL }},
- {&hf_ieee80211_mesh_mgt_pl_peer_link_id,
- {"Peer Link ID", "wlan.pl.peer_id",
+ {&hf_ieee80211_mesh_peering_peer_link_id,
+ {"Peer Link ID", "wlan.peering.peer_id",
FT_UINT16, BASE_HEX, NULL, 0,
- "Mesh Management Peer Link ID", HFILL }},
+ "Mesh Peering Management Peer Link ID", HFILL }},
{&hf_ieee80211_mesh_config_path_sel_protocol,
{"Path Selection Protocol", "wlan.mesh.config.ps_protocol",