static int hf_ieee1905_packets_received = -1;
static int hf_ieee1905_rssi = -1;
static int hf_ieee1905_data = -1;
+static int hf_ieee1905_extra_tlv_data = -1;
static int hf_ieee1905_local_interface_count = -1;
static int hf_ieee1905_media_type = -1;
static int hf_ieee1905_media_spec_info_len = -1;
static expert_field ei_ieee1905_malformed_tlv = EI_INIT;
static expert_field ei_ieee1905_extraneous_data_after_eom = EI_INIT;
+static expert_field ei_ieee1905_extraneous_tlv_data = EI_INIT;
#define TOPOLOGY_DISCOVERY_MESSAGE 0x0000
#define TOPOLOGY_NOTIFICATION_MESSAGE 0x0001
*/
static int
dissect_steering_request(tvbuff_t *tvb, packet_info *pinfo _U_,
- proto_tree *tree, guint offset)
+ proto_tree *tree, guint offset, guint16 len)
{
guint8 mode = 0;
guint8 steering_count = 0;
proto_item *pi = NULL;
proto_tree *sta_list = NULL, *bssid_list = NULL;
guint8 target_bssid_count = 0;
+ guint start_offset = offset;
proto_tree_add_item(tree, hf_ieee1905_source_bss_bssid, tvb, offset,
6, ENC_NA);
steering_flags, ENC_NA);
offset++;
- proto_tree_add_item(tree, hf_ieee1905_steering_req_op_window,
- tvb, offset, 2, ENC_LITTLE_ENDIAN);
- offset += 2;
+ /* If Request Mode is 1, this field is not present. */
+ if (!(mode & 0x80)) {
+ proto_tree_add_item(tree, hf_ieee1905_steering_req_op_window,
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ }
proto_tree_add_item(tree, hf_ieee1905_steering_btm_disass_timer,
tvb, offset, 2, ENC_LITTLE_ENDIAN);
}
}
+ if ((offset - start_offset) < len) {
+ proto_item *ei = NULL;
+
+ ei = proto_tree_add_item(tree, hf_ieee1905_extra_tlv_data, tvb, offset,
+ len - (offset - start_offset), ENC_NA);
+ expert_add_info(pinfo, ei, &ei_ieee1905_extraneous_tlv_data);
+ offset = start_offset + len; /* Skip the extras. */
+ }
return offset;
}
break;
case STEERING_REQUEST_TLV:
- offset = dissect_steering_request(tvb, pinfo, tree, offset);
+ offset = dissect_steering_request(tvb, pinfo, tree, offset, tlv_len);
break;
case STEERING_BTM_REPORT_TLV:
{ "Response status", "ieee1905.beacon_metrics.status",
FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+ { &hf_ieee1905_extra_tlv_data,
+ { "Extraneous TLV data", "ieee1905.extra_tlv_data",
+ FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+
{ &hf_ieee1905_data,
{ "Extraneous message data", "ieee1905.data",
FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &ei_ieee1905_extraneous_data_after_eom,
{ "ieee1905.tlv.extraneous_data", PI_PROTOCOL, PI_WARN,
"Extraneous data after EOM TLV", EXPFILL }},
+
+ { &ei_ieee1905_extraneous_tlv_data,
+ { "ieee1905.tlv.extra_data", PI_PROTOCOL, PI_WARN,
+ "TLV has extra data", EXPFILL }},
};
expert_module_t *expert_ieee1905 = NULL;