diff options
-rw-r--r-- | epan/dissectors/packet-ieee80211.c | 2551 |
1 files changed, 1339 insertions, 1212 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c index 71af3e3550..e5ecb990cd 100644 --- a/epan/dissectors/packet-ieee80211.c +++ b/epan/dissectors/packet-ieee80211.c @@ -396,6 +396,131 @@ static gboolean is_80211ad(proto_node * pnode, gpointer data) { #define DATA_LONG_HDR_LEN 30 #define MGT_FRAME_HDR_LEN 24 /* Length of Management frame-headers */ + +/* ************************************************************************* */ +/* Logical field codes (dissector's encoding of fixed fields) */ +/* ************************************************************************* */ +enum fixed_field { + FIELD_TIMESTAMP, /* 64-bit timestamp */ + FIELD_BEACON_INTERVAL, /* 16-bit beacon interval */ + FIELD_CAP_INFO, /* Add capability information tree */ + FIELD_AUTH_ALG, /* Authentication algorithm used */ + FIELD_AUTH_TRANS_SEQ, /* Authentication sequence number */ + FIELD_CURRENT_AP_ADDR, + FIELD_LISTEN_IVAL, + FIELD_REASON_CODE, + FIELD_ASSOC_ID, + FIELD_STATUS_CODE, + FIELD_CATEGORY_CODE, /* Management action category */ + FIELD_ACTION_CODE, /* Management action code */ + FIELD_DIALOG_TOKEN, /* Management action dialog token */ + FIELD_FOLLOWUP_DIALOG_TOKEN, + FIELD_WME_ACTION_CODE, /* Management notification action code */ + FIELD_WME_DIALOG_TOKEN, /* Management notification dialog token */ + FIELD_WME_STATUS_CODE, /* Management notification setup response status code */ + FIELD_QOS_ACTION_CODE, + FIELD_QOS_TS_INFO, + FIELD_DLS_ACTION_CODE, + FIELD_DST_MAC_ADDR, /* DLS destination MAC address */ + FIELD_SRC_MAC_ADDR, /* DLS source MAC address */ + FIELD_DLS_TIMEOUT, /* DLS timeout value */ + FIELD_SCHEDULE_INFO, /* Schedule Info field */ + FIELD_ACTION, /* Action field */ + FIELD_BLOCK_ACK_ACTION_CODE, + FIELD_QOS_INFO_AP, + FIELD_QOS_INFO_STA, + FIELD_BLOCK_ACK_PARAM, + FIELD_BLOCK_ACK_TIMEOUT, + FIELD_BLOCK_ACK_SSC, + FIELD_DELBA_PARAM_SET, + FIELD_MAX_REG_PWR, + FIELD_MEASUREMENT_PILOT_INT, + FIELD_COUNTRY_STR, + FIELD_MAX_TX_PWR, + FIELD_TX_PWR_USED, + FIELD_TRANSCEIVER_NOISE_FLOOR, + FIELD_DS_PARAM_SET, + FIELD_CHANNEL_WIDTH, + FIELD_SM_PWR_CNTRL, + FIELD_PCO_PHASE_CNTRL, + FIELD_PSMP_PARAM_SET, + FIELD_PSMP_STA_INFO, + FIELD_MIMO_CNTRL, + FIELD_ANT_SELECTION, + FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, + FIELD_HT_INFORMATION, + FIELD_HT_ACTION_CODE, + FIELD_PA_ACTION_CODE, + FIELD_PPA_ACTION_CODE, + FIELD_FT_ACTION_CODE, + FIELD_STA_ADDRESS, + FIELD_TARGET_AP_ADDRESS, + FIELD_GAS_COMEBACK_DELAY, + FIELD_GAS_FRAGMENT_ID, + FIELD_SA_QUERY_ACTION_CODE, + FIELD_TRANSACTION_ID, + FIELD_TDLS_ACTION_CODE, + FIELD_TARGET_CHANNEL, + FIELD_OPERATING_CLASS, + FIELD_MESH_ACTION, + FIELD_MULTIHOP_ACTION, + FIELD_MESH_CONTROL, + FIELD_SELFPROT_ACTION, + FIELD_WNM_ACTION_CODE, + FIELD_UNPROTECTED_WNM_ACTION_CODE, + FIELD_RELAY_CAPABLE_STA_INFO, + FIELD_BAND_ID, + FIELD_DMG_PARAMETERS, + FIELD_SECTOR_SWEEP, + FIELD_DYNAMIC_ALLOCATION, + FIELD_SECTOR_SWEEP_FB, + FIELD_BRP_REQ, + FIELD_BEAMFORMING_CTRL, + FIELD_BEAMFORMED_LINK_MAINTAINCE, + FIELD_BEACON_INTERVAL_CTRL, + FIELD_KEY_DATA_LENGTH, + FIELD_WNM_NOTIFICATION_TYPE, + FIELD_RM_ACTION_CODE, + FIELD_RM_DIALOG_TOKEN, + FIELD_RM_REPETITIONS, + FIELD_RM_TX_POWER, + FIELD_RM_MAX_TX_POWER, + FIELD_RM_TPC_REPORT, + FIELD_RM_RX_ANTENNA_ID, + FIELD_RM_TX_ANTENNA_ID, + FIELD_RM_RCPI, + FIELD_RM_RSNI, + FIELD_DMG_ACTION_CODE, + FIELD_DMG_PWR_MGMT, + FIELD_REQ_AP_ADDR, + FIELD_RES_AP_ADDR, + FIELD_CHECK_BEACON, + FIELD_TOD, + FIELD_TOA, + FIELD_MAX_TOD_ERR, + FIELD_MAX_TOA_ERR, + FIELD_SUBJECT_ADDRESS, + FIELD_HANDOVER_REASON, + FIELD_HANDOVER_REMAINING_BI, + FIELD_HANDOVER_RESULT, + FIELD_HANDOVER_REJECT_REASON, + FIELD_DESTINATION_REDS_AID, + FIELD_DESTINATION_AID, + FIELD_REALY_AID, + FIELD_SOURCE_AID, + FIELD_TIMING_OFFSET, + FIELD_SAMPLING_FREQUENCY_OFFSET, + FIELD_RELAY_OPERATION_TYPE, + FIELD_UNPROTECTED_DMG_ACTION_CODE, + FIELD_FST_ACTION_CODE, + FIELD_LLT, + FIELD_FSTS_ID, + FIELD_OCT_MMPDU, + FIELD_VHT_ACTION, + /* add any new fixed field value above this line */ + MAX_FIELD_NUM +}; + /* ************************************************************************* */ /* Logical field codes (IEEE 802.11 encoding of tags) */ /* ************************************************************************* */ @@ -549,7 +674,7 @@ static gboolean is_80211ad(proto_node * pnode, gpointer data) { #define TAG_CLUSTER_REP 166 /* IEEE Std 802.11ad */ #define TAG_RELAY_CAPABILITIES 167 /* IEEE Std 802.11ad */ #define TAG_RELAY_TRANSFER_PARAM 168 /* IEEE Std 802.11ad */ -#define TAG_BEAMLINK_MAINTENANCE 169 /* IEEE Std 802.11ad */ +#define TAG_BEAMLINK_MAINTAINCE 169 /* IEEE Std 802.11ad */ #define TAG_MULTIPLE_MAC_SUBLAYERS 170 /* IEEE Std 802.11ad */ #define TAG_U_PID 171 /* IEEE Std 802.11ad */ #define TAG_DMG_LINK_ADAPTION_ACK 172 /* IEEE Std 802.11ad */ @@ -716,7 +841,7 @@ static const value_string tag_num_vals[] = { { TAG_CLUSTER_REP, "Cluster Report" }, { TAG_RELAY_CAPABILITIES, "Relay Capabilities" }, { TAG_RELAY_TRANSFER_PARAM, "Relay Transfer Parameter" }, - { TAG_BEAMLINK_MAINTENANCE, "Beamlink Maintenance" }, + { TAG_BEAMLINK_MAINTAINCE, "Beamlink Maintenance" }, { TAG_MULTIPLE_MAC_SUBLAYERS, "Multiple MAC Sublayers" }, { TAG_U_PID, "U-PID" }, { TAG_DMG_LINK_ADAPTION_ACK, "DMG Link Adaption Acknowledgment" }, @@ -1092,77 +1217,77 @@ static const value_string aruba_mgt_typevals[] = { static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals); /*** Begin: Action Fixed Parameter ***/ -#define CAT_SPECTRUM_MGMT 0 -#define CAT_QOS 1 -#define CAT_DLS 2 -#define CAT_BLOCK_ACK 3 -#define CAT_PUBLIC 4 -#define CAT_RADIO_MEASUREMENT 5 -#define CAT_FAST_BSS_TRANSITION 6 -#define CAT_HT 7 -#define CAT_SA_QUERY 8 -#define CAT_PUBLIC_PROTECTED 9 -#define CAT_WNM 10 -#define CAT_UNPROTECTED_WNM 11 -#define CAT_TDLS 12 -#define CAT_MESH 13 -#define CAT_MULTIHOP 14 -#define CAT_SELF_PROTECTED 15 -#define CAT_DMG 16 -#define CAT_MGMT_NOTIFICATION 17 -#define CAT_FAST_SESSION_TRANSFER 18 -#define CAT_ROBUST_AV_STREAMING 19 -#define CAT_UNPROTECTED_DMG 20 -#define CAT_VHT 21 -#define CAT_VENDOR_SPECIFIC_PROTECTED 126 -#define CAT_VENDOR_SPECIFIC 127 - -#define CAT_MESH_LINK_METRIC 31 -#define CAT_MESH_PATH_SELECTION 32 -#define CAT_MESH_INTERWORKING 33 -#define CAT_MESH_RESOURCE_COORDINATION 34 -#define CAT_MESH_SECURITY_ARCHITECTURE 35 - -#define SM_ACTION_MEASUREMENT_REQUEST 0 -#define SM_ACTION_MEASUREMENT_REPORT 1 -#define SM_ACTION_TPC_REQUEST 2 -#define SM_ACTION_TPC_REPORT 3 -#define SM_ACTION_CHAN_SWITCH_ANNC 4 -#define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5 - -#define QOS_ACTION_ADDTS_REQUEST 0 -#define QOS_ACTION_ADDTS_RESPONSE 1 -#define QOS_ACTION_DELTS 2 -#define QOS_ACTION_SCHEDULE 3 -#define QOS_ACTION_MAP_CONFIGURE 4 - -#define DLS_ACTION_REQUEST 0 -#define DLS_ACTION_RESPONSE 1 -#define DLS_ACTION_TEARDOWN 2 - -#define BA_ADD_BLOCK_ACK_REQUEST 0 -#define BA_ADD_BLOCK_ACK_RESPONSE 1 -#define BA_DELETE_BLOCK_ACK 2 +#define CAT_SPECTRUM_MGMT 0 +#define CAT_QOS 1 +#define CAT_DLS 2 +#define CAT_BLOCK_ACK 3 +#define CAT_PUBLIC 4 +#define CAT_RADIO_MEASUREMENT 5 +#define CAT_FAST_BSS_TRANSITION 6 +#define CAT_HT 7 +#define CAT_SA_QUERY 8 +#define CAT_PUBLIC_PROTECTED 9 +#define CAT_WNM 10 +#define CAT_UNPROTECTED_WNM 11 +#define CAT_TDLS 12 +#define CAT_MESH 13 +#define CAT_MULTIHOP 14 +#define CAT_SELF_PROTECTED 15 +#define CAT_DMG 16 +#define CAT_MGMT_NOTIFICATION 17 +#define CAT_FAST_SESSION_TRANSFER 18 +#define CAT_ROBUST_AV_STREAMING 19 +#define CAT_UNPROTECTED_DMG 20 +#define CAT_VHT 21 +#define CAT_VENDOR_SPECIFIC_PROTECTED 126 +#define CAT_VENDOR_SPECIFIC 127 + +#define CAT_MESH_LINK_METRIC 31 +#define CAT_MESH_PATH_SELECTION 32 +#define CAT_MESH_INTERWORKING 33 +#define CAT_MESH_RESOURCE_COORDINATION 34 +#define CAT_MESH_SECURITY_ARCHITECTURE 35 + +#define SM_ACTION_MEASUREMENT_REQUEST 0 +#define SM_ACTION_MEASUREMENT_REPORT 1 +#define SM_ACTION_TPC_REQUEST 2 +#define SM_ACTION_TPC_REPORT 3 +#define SM_ACTION_CHAN_SWITCH_ANNC 4 +#define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5 + +#define QOS_ACTION_ADDTS_REQUEST 0 +#define QOS_ACTION_ADDTS_RESPONSE 1 +#define QOS_ACTION_DELTS 2 +#define QOS_ACTION_SCHEDULE 3 +#define QOS_ACTION_MAP_CONFIGURE 4 + +#define DLS_ACTION_REQUEST 0 +#define DLS_ACTION_RESPONSE 1 +#define DLS_ACTION_TEARDOWN 2 + +#define BA_ADD_BLOCK_ACK_REQUEST 0 +#define BA_ADD_BLOCK_ACK_RESPONSE 1 +#define BA_DELETE_BLOCK_ACK 2 /* Keep in sync with PPA_* defines */ -#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT 0 -#define PA_DSE_ENABLEMENT 1 -#define PA_DSE_DEENABLEMENT 2 -#define PA_DSE_REG_LOC_ANNOUNCEMENT 3 -#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4 -#define PA_DSE_MEASUREMENT_REQUEST 5 -#define PA_DSE_MEASUREMENT_REPORT 6 -#define PA_MEASUREMENT_PILOT 7 -#define PA_DSE_POWER_CONSTRAINT 8 -#define PA_VENDOR_SPECIFIC 9 -#define PA_GAS_INITIAL_REQUEST 10 -#define PA_GAS_INITIAL_RESPONSE 11 -#define PA_GAS_COMEBACK_REQUEST 12 -#define PA_GAS_COMEBACK_RESPONSE 13 -#define PA_TDLS_DISCOVERY_RESPONSE 14 -#define PA_LOCATION_TRACK_NOTIFICATION 15 -#define PA_QAB_REQUEST 16 -#define PA_QAB_RESPONSE 17 +#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT 0 +#define PA_DSE_ENABLEMENT 1 +#define PA_DSE_DEENABLEMENT 2 +#define PA_DSE_REG_LOC_ANNOUNCEMENT 3 +#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4 +#define PA_DSE_MEASUREMENT_REQUEST 5 +#define PA_DSE_MEASUREMENT_REPORT 6 +#define PA_MEASUREMENT_PILOT 7 +#define PA_DSE_POWER_CONSTRAINT 8 +#define PA_VENDOR_SPECIFIC 9 +#define PA_GAS_INITIAL_REQUEST 10 +#define PA_GAS_INITIAL_RESPONSE 11 +#define PA_GAS_COMEBACK_REQUEST 12 +#define PA_GAS_COMEBACK_RESPONSE 13 +#define PA_TDLS_DISCOVERY_RESPONSE 14 +#define PA_LOCATION_TRACK_NOTIFICATION 15 +#define PA_QAB_REQUEST 16 +#define PA_QAB_RESPONSE 17 /* Keep in sync with PA_* defines */ #define PPA_DSE_ENABLEMENT 1 @@ -1189,16 +1314,16 @@ static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt #define HT_ACTION_ANT_SEL_FEEDBACK 7 #define HT_ACTION_HT_INFO_EXCHANGE 8 -#define DMG_ACTION_PWR_SAVE_CONFIG_REQ 0 -#define DMG_ACTION_PWR_SAVE_CONFIG_RES 1 -#define DMG_ACTION_INFO_REQ 2 -#define DMG_ACTION_INFO_RES 3 -#define DMG_ACTION_HANDOVER_REQ 4 -#define DMG_ACTION_HANDOVER_RES 5 -#define DMG_ACTION_DTP_REQ 6 -#define DMG_ACTION_DTP_RES 7 -#define DMG_ACTION_RELAY_SEARCH_REQ 8 -#define DMG_ACTION_RELAY_SEARCH_RES 9 +#define DMG_ACTION_PWR_SAVE_CONFIG_REQ 0 +#define DMG_ACTION_PWR_SAVE_CONFIG_RES 1 +#define DMG_ACTION_INFO_REQ 2 +#define DMG_ACTION_INFO_RES 3 +#define DMG_ACTION_HANDOVER_REQ 4 +#define DMG_ACTION_HANDOVER_RES 5 +#define DMG_ACTION_DTP_REQ 6 +#define DMG_ACTION_DTP_RES 7 +#define DMG_ACTION_RELAY_SEARCH_REQ 8 +#define DMG_ACTION_RELAY_SEARCH_RES 9 #define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ 10 #define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES 11 #define DMG_ACTION_RLS_REQ 12 @@ -1213,37 +1338,37 @@ static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt #define DMG_ACTION_ROC_REQ 21 #define DMG_ACTION_ROC_RES 22 -#define UNPROTECTED_DMG_ANNOUNCE 0 -#define UNPROTECTED_DMG_BRP 1 +#define UNPROTECTED_DMG_ANNOUNCE 0 +#define UNPROTECTED_DMG_BRP 1 -#define FST_SETUP_REQUEST 0 -#define FST_SETUP_RESPONSE 1 -#define FST_TEAR_DOWN 2 -#define FST_ACK_REQUEST 3 -#define FST_ACK_RESPONSE 4 -#define FST_ON_CHANNEL_TUNNEL_REQUEST 5 +#define FST_SETUP_REQUEST 0 +#define FST_SETUP_RESPONSE 1 +#define FST_TEAR_DOWN 2 +#define FST_ACK_REQUEST 3 +#define FST_ACK_RESPONSE 4 +#define FST_ON_CHANNEL_TUNNEL_REQUEST 5 /* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */ -#define FT_ACTION_REQUEST 1 -#define FT_ACTION_RESPONSE 2 -#define FT_ACTION_CONFIRM 3 -#define FT_ACTION_ACK 4 +#define FT_ACTION_REQUEST 1 +#define FT_ACTION_RESPONSE 2 +#define FT_ACTION_CONFIRM 3 +#define FT_ACTION_ACK 4 /* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */ -#define SA_QUERY_REQUEST 0 -#define SA_QUERY_RESPONSE 1 +#define SA_QUERY_REQUEST 0 +#define SA_QUERY_RESPONSE 1 /* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */ -#define TDLS_SETUP_REQUEST 0 -#define TDLS_SETUP_RESPONSE 1 -#define TDLS_SETUP_CONFIRM 2 -#define TDLS_TEARDOWN 3 -#define TDLS_PEER_TRAFFIC_INDICATION 4 -#define TDLS_CHANNEL_SWITCH_REQUEST 5 -#define TDLS_CHANNEL_SWITCH_RESPONSE 6 -#define TDLS_PEER_PSM_REQUEST 7 -#define TDLS_PEER_PSM_RESPONSE 8 -#define TDLS_PEER_TRAFFIC_RESPONSE 9 +#define TDLS_SETUP_REQUEST 0 +#define TDLS_SETUP_RESPONSE 1 +#define TDLS_SETUP_CONFIRM 2 +#define TDLS_TEARDOWN 3 +#define TDLS_PEER_TRAFFIC_INDICATION 4 +#define TDLS_CHANNEL_SWITCH_REQUEST 5 +#define TDLS_CHANNEL_SWITCH_RESPONSE 6 +#define TDLS_PEER_PSM_REQUEST 7 +#define TDLS_PEER_PSM_RESPONSE 8 +#define TDLS_PEER_TRAFFIC_RESPONSE 9 #define TDLS_DISCOVERY_REQUEST 10 /* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */ @@ -1292,43 +1417,45 @@ static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt #define MRVL_MESH_MGMT_ACTION_RERR 2 #define MRVL_MESH_MGMT_ACTION_PLDM 3 -#define ANQP_INFO_ANQP_QUERY_LIST 256 -#define ANQP_INFO_ANQP_CAPAB_LIST 257 -#define ANQP_INFO_VENUE_NAME_INFO 258 -#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO 259 -#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO 260 -#define ANQP_INFO_ROAMING_CONSORTIUM_LIST 261 -#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO 262 -#define ANQP_INFO_NAI_REALM_LIST 263 -#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO 264 -#define ANQP_INFO_AP_GEOSPATIAL_LOCATION 265 -#define ANQP_INFO_AP_CIVIC_LOCATION 266 -#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI 267 -#define ANQP_INFO_DOMAIN_NAME_LIST 268 -#define ANQP_INFO_EMERGENCY_ALERT_ID_URI 269 -#define ANQP_INFO_TDLS_CAPAB_INFO 270 -#define ANQP_INFO_EMERGENCY_NAI 271 -#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797 +#define ANQP_INFO_ANQP_QUERY_LIST 256 +#define ANQP_INFO_ANQP_CAPAB_LIST 257 +#define ANQP_INFO_VENUE_NAME_INFO 258 +#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO 259 +#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO 260 +#define ANQP_INFO_ROAMING_CONSORTIUM_LIST 261 +#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO 262 +#define ANQP_INFO_NAI_REALM_LIST 263 +#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO 264 +#define ANQP_INFO_AP_GEOSPATIAL_LOCATION 265 +#define ANQP_INFO_AP_CIVIC_LOCATION 266 +#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI 267 +#define ANQP_INFO_DOMAIN_NAME_LIST 268 +#define ANQP_INFO_EMERGENCY_ALERT_ID_URI 269 +#define ANQP_INFO_TDLS_CAPAB_INFO 270 +#define ANQP_INFO_EMERGENCY_NAI 271 +#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797 /* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */ static const value_string anqp_info_id_vals[] = { - {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"}, - {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"}, - {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"}, - {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO, "Emergency Call Number information"}, - {ANQP_INFO_NETWORK_AUTH_TYPE_INFO, "Network Authentication Type information"}, - {ANQP_INFO_ROAMING_CONSORTIUM_LIST, "Roaming Consortium list"}, - {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO, "IP Address Type Availability information"}, - {ANQP_INFO_NAI_REALM_LIST, "NAI Realm list"}, - {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO, "3GPP Cellular Network information"}, - {ANQP_INFO_AP_GEOSPATIAL_LOCATION, "AP Geospatial Location"}, - {ANQP_INFO_AP_CIVIC_LOCATION, "AP Civic Location"}, - {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI, "AP Location Public Identifier URI"}, - {ANQP_INFO_DOMAIN_NAME_LIST, "Domain Name list"}, - {ANQP_INFO_EMERGENCY_ALERT_ID_URI, "Emergency Alert Identifier URI"}, - {ANQP_INFO_TDLS_CAPAB_INFO, "TDLS Capability information"}, - {ANQP_INFO_EMERGENCY_NAI, "Emergency NAI"}, - {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"}, + {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"}, + {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"}, + {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"}, + {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO, "Emergency Call Number information"}, + {ANQP_INFO_NETWORK_AUTH_TYPE_INFO, + "Network Authentication Type information"}, + {ANQP_INFO_ROAMING_CONSORTIUM_LIST, "Roaming Consortium list"}, + {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO, + "IP Address Type Availability information"}, + {ANQP_INFO_NAI_REALM_LIST, "NAI Realm list"}, + {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO, "3GPP Cellular Network information"}, + {ANQP_INFO_AP_GEOSPATIAL_LOCATION, "AP Geospatial Location"}, + {ANQP_INFO_AP_CIVIC_LOCATION, "AP Civic Location"}, + {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI, "AP Location Public Identifier URI"}, + {ANQP_INFO_DOMAIN_NAME_LIST, "Domain Name list"}, + {ANQP_INFO_EMERGENCY_ALERT_ID_URI, "Emergency Alert Identifier URI"}, + {ANQP_INFO_TDLS_CAPAB_INFO, "TDLS Capability information"}, + {ANQP_INFO_EMERGENCY_NAI, "Emergency NAI"}, + {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"}, {0, NULL} }; static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals); @@ -1366,34 +1493,34 @@ enum wnm_action { }; static const value_string wnm_action_codes[] = { - { WNM_EVENT_REQ, "Event Request" }, - { WNM_EVENT_REPORT, "Event Report" }, - { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" }, - { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" }, - { WNM_LOCATION_CFG_REQ, "Location Configuration Request" }, - { WNM_LOCATION_CFG_RESP, "Location Configuration Response" }, - { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" }, - { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" }, - { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" }, - { WNM_FMS_REQ, "FMS Request" }, - { WNM_FMS_RESP, "FMS Response" }, - { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" }, + { WNM_EVENT_REQ, "Event Request" }, + { WNM_EVENT_REPORT, "Event Report" }, + { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" }, + { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" }, + { WNM_LOCATION_CFG_REQ, "Location Configuration Request" }, + { WNM_LOCATION_CFG_RESP, "Location Configuration Response" }, + { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" }, + { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" }, + { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" }, + { WNM_FMS_REQ, "FMS Request" }, + { WNM_FMS_RESP, "FMS Response" }, + { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" }, { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" }, - { WNM_TFS_REQ, "TFS Request" }, - { WNM_TFS_RESP, "TFS Response" }, - { WNM_TFS_NOTIFY, "TFS Notify" }, - { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" }, - { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" }, - { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" }, - { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" }, - { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" }, - { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" }, - { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" }, - { WNM_DMS_REQ, "DMS Request" }, - { WNM_DMS_RESP, "DMS Response" }, - { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" }, - { WNM_NOTIFICATION_REQ, "WNM-Notification Request" }, - { WNM_NOTIFICATION_RESP, "WNM-Notification Response" }, + { WNM_TFS_REQ, "TFS Request" }, + { WNM_TFS_RESP, "TFS Response" }, + { WNM_TFS_NOTIFY, "TFS Notify" }, + { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" }, + { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" }, + { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" }, + { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" }, + { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" }, + { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" }, + { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" }, + { WNM_DMS_REQ, "DMS Request" }, + { WNM_DMS_RESP, "DMS Response" }, + { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" }, + { WNM_NOTIFICATION_REQ, "WNM-Notification Request" }, + { WNM_NOTIFICATION_RESP, "WNM-Notification Response" }, { 0, NULL } }; static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes); @@ -1404,15 +1531,15 @@ enum unprotected_wnm_action { }; static const value_string unprotected_wnm_action_codes[] = { - { UNPROTECTED_WNM_TIM, "TIM" }, + { UNPROTECTED_WNM_TIM, "TIM" }, { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" }, { 0, NULL } }; static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes); static const value_string wnm_notification_types[] = { - { 0, "Firmware Update Notification" }, - { 1, "Reserved for use by WFA" }, + { 0, "Firmware Update Notification" }, + { 1, "Reserved for use by WFA" }, { 221, "Vendor Specific" }, { 0, NULL } }; @@ -1480,12 +1607,12 @@ static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] #define MEASURE_REQ_BEACON_SUB_VS 221 static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = { - { MEASURE_REQ_BEACON_SUB_SSID, "SSID" }, - { MEASURE_REQ_BEACON_SUB_BRI, "Beacon Reporting Information" }, - { MEASURE_REQ_BEACON_SUB_RD, "Reporting Detail" }, + { MEASURE_REQ_BEACON_SUB_SSID, "SSID" }, + { MEASURE_REQ_BEACON_SUB_BRI, "Beacon Reporting Information" }, + { MEASURE_REQ_BEACON_SUB_RD, "Reporting Detail" }, { MEASURE_REQ_BEACON_SUB_REQUEST, "Request" }, - { MEASURE_REQ_BEACON_SUB_APCP, "AP Channel Report" }, - { MEASURE_REQ_BEACON_SUB_VS, "Vendor Specific" }, + { MEASURE_REQ_BEACON_SUB_APCP, "AP Channel Report" }, + { MEASURE_REQ_BEACON_SUB_VS, "Vendor Specific" }, { 0x00, NULL} }; @@ -1589,14 +1716,14 @@ static const value_string frame_type[] = { }; static const value_string tofrom_ds[] = { - {0, "Not leaving DS or network is operating " - "in AD-HOC mode (To DS: 0 From DS: 0)"}, - {FLAG_TO_DS, "Frame from STA to DS via an AP (To DS: 1 " - "From DS: 0)"}, - {FLAG_FROM_DS, "Frame from DS to a STA via AP(To DS: 0 " - "From DS: 1)"}, + {0, "Not leaving DS or network is operating " + "in AD-HOC mode (To DS: 0 From DS: 0)"}, + {FLAG_TO_DS, "Frame from STA to DS via an AP (To DS: 1 " + "From DS: 0)"}, + {FLAG_FROM_DS, "Frame from DS to a STA via AP(To DS: 0 " + "From DS: 1)"}, {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame " - "(To DS: 1 From DS: 1)"}, + "(To DS: 1 From DS: 1)"}, {0, NULL} }; @@ -1999,11 +2126,11 @@ static const value_string category_codes[] = { }; static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes); -#define NR_SUB_ID_TSF_INFO 1 -#define NR_SUB_ID_CON_COU_STR 2 -#define NR_SUB_ID_BSS_TRN_CAN_PREF 3 -#define NR_SUB_ID_BSS_TER_DUR 4 -#define NR_SUB_ID_BEARING 5 +#define NR_SUB_ID_TSF_INFO 1 +#define NR_SUB_ID_CON_COU_STR 2 +#define NR_SUB_ID_BSS_TRN_CAN_PREF 3 +#define NR_SUB_ID_BSS_TER_DUR 4 +#define NR_SUB_ID_BEARING 5 #define NR_SUB_ID_HT_CAPABILITIES 45 #define NR_SUB_ID_HT_OPERATION 61 @@ -2012,21 +2139,21 @@ static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_code #define NR_SUB_ID_RM_ENABLE_CAP 70 #define NR_SUB_ID_HT_MULTIPLE_BSSID 71 -#define NR_SUB_ID_VENDOR_SPECIFIC 221 +#define NR_SUB_ID_VENDOR_SPECIFIC 221 static const value_string ieee80211_neighbor_report_subelement_id_vals[] = { - {NR_SUB_ID_TSF_INFO, "TSF Information"}, - {NR_SUB_ID_CON_COU_STR, "Condensed Country String"}, - {NR_SUB_ID_BSS_TRN_CAN_PREF, "BSS Transition Candidate Preference"}, - {NR_SUB_ID_BSS_TER_DUR, "BSS Termination Duration"}, - {NR_SUB_ID_BEARING, "Bearing"}, - {NR_SUB_ID_HT_CAPABILITIES, "HT Capabilities"}, - {NR_SUB_ID_HT_OPERATION, "HT Operation"}, - {NR_SUB_ID_SEC_CHANNEL_OFFSET, "Secondary Channel Offset"}, + {NR_SUB_ID_TSF_INFO, "TSF Information"}, + {NR_SUB_ID_CON_COU_STR, "Condensed Country String"}, + {NR_SUB_ID_BSS_TRN_CAN_PREF, "BSS Transition Candidate Preference"}, + {NR_SUB_ID_BSS_TER_DUR, "BSS Termination Duration"}, + {NR_SUB_ID_BEARING, "Bearing"}, + {NR_SUB_ID_HT_CAPABILITIES, "HT Capabilities"}, + {NR_SUB_ID_HT_OPERATION, "HT Operation"}, + {NR_SUB_ID_SEC_CHANNEL_OFFSET, "Secondary Channel Offset"}, {NR_SUB_ID_MEASUREMENT_PILOT_INFO, "Measurement Pilot Transmission"}, - {NR_SUB_ID_RM_ENABLE_CAP, "RM Enabled Capabilities"}, - {NR_SUB_ID_HT_MULTIPLE_BSSID, "Multiple BSSID"}, - {NR_SUB_ID_VENDOR_SPECIFIC, "Vendor Specific"}, + {NR_SUB_ID_RM_ENABLE_CAP, "RM Enabled Capabilities"}, + {NR_SUB_ID_HT_MULTIPLE_BSSID, "Multiple BSSID"}, + {NR_SUB_ID_VENDOR_SPECIFIC, "Vendor Specific"}, {0, NULL} }; @@ -2144,8 +2271,8 @@ static const value_string qos_action_codes[] = { {QOS_ACTION_ADDTS_REQUEST, "ADDTS Request"}, {QOS_ACTION_ADDTS_RESPONSE, "ADDTS Response"}, {QOS_ACTION_DELTS, "DELTS"}, - {QOS_ACTION_SCHEDULE, "Schedule"}, - {QOS_ACTION_MAP_CONFIGURE, "QoS Map Configure"}, + {QOS_ACTION_SCHEDULE, "Schedule"}, + {QOS_ACTION_MAP_CONFIGURE, "QoS Map Configure"}, {0, NULL} }; @@ -2226,15 +2353,15 @@ static const value_string ieee80211_block_ack_type_flags[] = { }; static const value_string ft_action_codes[] = { - {FT_ACTION_REQUEST, "FT Request"}, + {FT_ACTION_REQUEST, "FT Request"}, {FT_ACTION_RESPONSE, "FT Response"}, - {FT_ACTION_CONFIRM, "FT Confirm"}, - {FT_ACTION_ACK, "FT Ack"}, + {FT_ACTION_CONFIRM, "FT Confirm"}, + {FT_ACTION_ACK, "FT Ack"}, {0, NULL} }; static const value_string sa_query_action_codes[] = { - {SA_QUERY_REQUEST, "SA Query Request"}, + {SA_QUERY_REQUEST, "SA Query Request"}, {SA_QUERY_RESPONSE, "SA Query Response"}, {0, NULL} }; @@ -2798,7 +2925,7 @@ static const value_string service_interval_granularity_vals[] = { }; static const value_string wep_type_vals[] = { - { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP }, + { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP }, { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD }, { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK }, { 0x00, NULL } @@ -2871,8 +2998,8 @@ static const value_string operat_mode_field_rxnss[] = { #define VHT_ACT_OPERATION_MODE_NOTIFICATION 2 static const value_string vht_action_vals[] = { - {VHT_ACT_VHT_COMPRESSED_BEAMFORMING, "VHT Compressed Beamforming"}, - {VHT_ACT_GROUP_ID_MANAGEMENT, "Group ID Management"}, + {VHT_ACT_VHT_COMPRESSED_BEAMFORMING, "VHT Compressed Beamforming"}, + {VHT_ACT_GROUP_ID_MANAGEMENT, "Group ID Management"}, {VHT_ACT_OPERATION_MODE_NOTIFICATION, "Operating Mode Notification"}, {0, NULL} }; @@ -2972,19 +3099,19 @@ static int hf_ieee80211_assoc_id = -1; /* ************************************************************************* */ /* Header values for different address-fields (all 4 of them) */ /* ************************************************************************* */ -static int hf_ieee80211_addr_da = -1; /* Destination address subfield */ -static int hf_ieee80211_addr_da_resolved = -1; /* Dst addr subfield resolved*/ -static int hf_ieee80211_addr_sa = -1; /* Source address subfield */ -static int hf_ieee80211_addr_sa_resolved = -1; /* Src addr subfield resolved*/ -static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */ -static int hf_ieee80211_addr_ra_resolved = -1; /* Rcv addr subfield resolved*/ -static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */ -static int hf_ieee80211_addr_ta_resolved = -1; /* Txm addr subfield resolved*/ -static int hf_ieee80211_addr_bssid = -1; /* address is bssid */ -static int hf_ieee80211_addr_bssid_resolved = -1; /* bssid resolved*/ - -static int hf_ieee80211_addr = -1; /* Source or destination address subfield */ -static int hf_ieee80211_addr_resolved = -1; /*Src/dst address subfield resolved*/ +static int hf_ieee80211_addr_da = -1; /* Destination address subfield */ +static int hf_ieee80211_addr_da_resolved = -1; /* Dst addr subfield resolved*/ +static int hf_ieee80211_addr_sa = -1; /* Source address subfield */ +static int hf_ieee80211_addr_sa_resolved = -1; /* Src addr subfield resolved*/ +static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */ +static int hf_ieee80211_addr_ra_resolved = -1; /* Rcv addr subfield resolved*/ +static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */ +static int hf_ieee80211_addr_ta_resolved = -1; /* Txm addr subfield resolved*/ +static int hf_ieee80211_addr_bssid = -1; /* address is bssid */ +static int hf_ieee80211_addr_bssid_resolved = -1; /* bssid resolved*/ + +static int hf_ieee80211_addr = -1; /* Source or destination address subfield */ +static int hf_ieee80211_addr_resolved = -1;/*Src/dst address subfield resolved*/ /* ************************************************************************* */ /* Header values for QoS control field */ @@ -6901,128 +7028,9 @@ dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf /* Dissect and add fixed mgmt fields to protocol tree */ /* ************************************************************************* */ -/* Fixed Field list */ - -#if 0 - TIMESTAMP /* 64-bit timestamp */ - BEACON_INTERVAL /* 16-bit beacon interval */ - CAP_INFO /* Add capability information tree */ - AUTH_ALG /* Authentication algorithm used */ - AUTH_TRANS_SEQ /* Authentication sequence number */ - CURRENT_AP_ADDR - LISTEN_IVAL - REASON_CODE - ASSOC_ID - STATUS_CODE - CATEGORY_CODE /* Management action category */ - ACTION_CODE /* Management action code */ - DIALOG_TOKEN /* Management action dialog token */ - FOLLOWUP_DIALOG_TOKEN - WME_ACTION_CODE /* Management notification action code */ - WME_DIALOG_TOKEN/* not implemented *//* Management notification dialog token */ - WME_STATUS_CODE /* Management notification setup response status code */ - QOS_ACTION_CODE - QOS_TS_INFO - DLS_ACTION_CODE - DST_MAC_ADDR /* DLS destination MAC address */ - SRC_MAC_ADDR /* DLS source MAC address */ - DLS_TIMEOUT /* DLS timeout value */ - SCHEDULE_INFO /* Schedule Info field */ - ACTION /* Action field */ - BLOCK_ACK_ACTION_CODE - QOS_INFO_AP - QOS_INFO_STA - BLOCK_ACK_PARAM - BLOCK_ACK_TIMEOUT - BLOCK_ACK_SSC - DELBA_PARAM_SET - MAX_REG_PWR - MEASUREMENT_PILOT_INT - COUNTRY_STR - MAX_TX_PWR - TX_PWR_USED - TRANSCEIVER_NOISE_FLOOR - DS_PARAM_SET/* not implemented */ - CHANNEL_WIDTH - SM_PWR_CNTRL - PCO_PHASE_CNTRL - PSMP_PARAM_SET - PSMP_STA_INFO - MIMO_CNTRL - ANT_SELECTION - EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT - HT_INFORMATION - HT_ACTION_CODE - PA_ACTION_CODE - PPA_ACTION_CODE - FT_ACTION_CODE - STA_ADDRESS - TARGET_AP_ADDRESS - GAS_COMEBACK_DELAY - GAS_FRAGMENT_ID - SA_QUERY_ACTION_CODE - TRANSACTION_ID - TDLS_ACTION_CODE - TARGET_CHANNEL - OPERATING_CLASS - MESH_ACTION - MULTIHOP_ACTION - MESH_CONTROL - SELFPROT_ACTION - WNM_ACTION_CODE - UNPROTECTED_WNM_ACTION_CODE - RELAY_CAPABLE_STA_INFO - BAND_ID - DMG_PARAMETERS - SECTOR_SWEEP - DYNAMIC_ALLOCATION - SECTOR_SWEEP_FEEDBACK - BRP_REQ - BEAMFORMING_CTRL - BEAMFORMED_LINK_MAINTENANCE - BEACON_INTERVAL_CTRL - KEY_DATA_LENGTH - WNM_NOTIFICATION_TYPE - RM_ACTION_CODE - RM_DIALOG_TOKEN - RM_REPETITIONS - RM_TX_POWER - RM_MAX_TX_POWER - RM_TPC_REPORT - RM_RX_ANTENNA_ID - RM_TX_ANTENNA_ID - RM_RCPI - RM_RSNI - DMG_ACTION_CODE - DMG_PWR_MGMT - REQ_AP_ADDR - RES_AP_ADDR - CHECK_BEACON - TOD - TOA - MAX_TOD_ERR - MAX_TOA_ERR - SUBJECT_ADDRESS - HANDOVER_REASON - HANDOVER_REMAINING_BI - HANDOVER_RESULT - HANDOVER_REJECT_REASON - DESTINATION_REDS_AID - DESTINATION_AID - REALY_AID - SOURCE_AID - TIMING_OFFSET - SAMPLING_FREQUENCY_OFFSET - RELAY_OPERATION_TYPE - UNPROTECTED_DMG_ACTION_CODE - FST_ACTION_CODE - LLT - FSTS_ID - OCT_MMPDU - VHT_ACTION -#endif - -#define add_fixed_field(tree, tvb, pinfo, offset, ff_fcn) ff_fcn(tree, tvb, pinfo, offset) +static guint +add_fixed_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, + enum fixed_field lfcode); static guint64 last_timestamp; @@ -7150,7 +7158,6 @@ add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int return 2; } -/* Management action category */ static guint add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7159,7 +7166,6 @@ add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, in return 1; } -/* Management action code */ static guint add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7168,7 +7174,6 @@ add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int return 1; } -/* Management action dialog taken */ static guint add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7185,7 +7190,6 @@ add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo return 1; } -/* Management notification action code */ static guint add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7194,7 +7198,6 @@ add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, return 1; } -/* Management notification setup response status code */ static guint add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7329,7 +7332,6 @@ add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, return 1; } -/* DLS destination MAC address */ static guint add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7338,7 +7340,6 @@ add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int return 6; } -/* DLS source MAC address */ static guint add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) { @@ -7714,562 +7715,6 @@ add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, } static guint -add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1, - ENC_LITTLE_ENDIAN); - return 1; -} - -static guint -add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1, - ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6, - ENC_NA); - return 6; -} - -static guint -add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6, - ENC_NA); - return 6; -} - -static guint -add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2, - ENC_LITTLE_ENDIAN); - return 2; -} - -static guint -add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1, - ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1, - ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset, - 1, ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2, - ENC_LITTLE_ENDIAN); - return 2; -} - -static guint -add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) -{ - guint8 code; - code = tvb_get_guint8(tvb, offset); - col_set_str(pinfo->cinfo, COL_INFO, - val_to_str_ext_const(code, &tdls_action_codes_ext, - "Unknown TDLS Action")); - proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1, - ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1, - ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1, - ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) -{ - guint8 code; - - code = tvb_get_guint8(tvb, offset); - col_set_str(pinfo->cinfo, COL_INFO, - val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action")); - proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) -{ - guint8 code; - - code = tvb_get_guint8(tvb, offset); - col_set_str(pinfo->cinfo, COL_INFO, - val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action")); - proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN); - return 1; -} - -static guint -add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2, - ENC_LITTLE_ENDIAN); - return 2; -} - -static guint -add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type, - tvb, offset, 1, ENC_NA); - return 1; -} - -/* Action frame: Radio Measurement actions */ -static guint -add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA); - return 1; -} - -/* Radio Measurement Request frame, Action fields */ -static guint -add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* Note: 65535 means repeated until cancelled or superseded */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2, - ENC_BIG_ENDIAN); - return 2; -} - -/* Link Measurement Request frame, Action fields*/ -static guint -add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* In dBm, see 8.4.1.20 */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* In dBm, see 8.4.1.19 */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA); - return 1; -} - -/* Link Measurement Report frame, Action fields */ -static guint -add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree *tpc_tree; - proto_item *tpc_item; - - /* 8.4.2.19 TPC Report element */ - tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA); - tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc); - proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA); - proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA); - proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA); - proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA); - return 4; -} - -static guint -add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* 8.4.2.40: RCPI as specified for certain PHYs */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as: - * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */ - proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *bic_item = proto_tree_add_item(tree, hf_ieee80211_ff_bic, tvb, offset, 6, ENC_LITTLE_ENDIAN); - proto_tree *bic_tree = proto_item_add_subtree(bic_item, ett_bic_tree); - - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_cc_present, tvb, offset, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_discovery_mode, tvb, offset, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_beacon, tvb, offset, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_ati_present, tvb, offset, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_len, tvb, offset, 2, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_fss, tvb, offset+1, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_is_resp, tvb, offset+1, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_abft, tvb, offset+1, 2, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_frag_txss, tvb, offset+2, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_txss_span, tvb, offset+2, 2, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_NBI_abft, tvb, offset+3, 1, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_count, tvb, offset+3, 2, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_nabft, tvb, offset+4, 2, ENC_NA); - proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_pcp, tvb, offset+5, 1, ENC_NA); - return 6; -} - -static guint -add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - gboolean isGrant = *((gboolean*)(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY))); - proto_item *bf_item = proto_tree_add_item(tree, hf_ieee80211_ff_bf, tvb, offset, 2, ENC_LITTLE_ENDIAN); - proto_tree *bf_tree = proto_item_add_subtree(bf_item, ett_bf_tree); - guint16 bf_field = tvb_get_letohs(tvb, offset); - gboolean isInit = (bf_field & 0x2) >> 1; - gboolean isResp = (bf_field & 0x4) >> 2; - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_train, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_init, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_resp, tvb, offset, 1, ENC_LITTLE_ENDIAN); - if((isInit==TRUE) && (isResp==TRUE) && isGrant) { - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_sectors, tvb, offset, 2, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_rx_dmg_ants, tvb, offset, 2, ENC_LITTLE_ENDIAN); - } else { - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_len, tvb, offset, 2, ENC_LITTLE_ENDIAN); - proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN); - } - return 2; -} - -static guint -add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *dynamic_alloc_item = proto_tree_add_item(tree, hf_ieee80211_ff_dynamic_allocation, tvb, offset, 5, ENC_LITTLE_ENDIAN); - proto_tree *dynamic_alloc_tree = proto_item_add_subtree(dynamic_alloc_item, ett_dynamic_alloc_tree); - proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_TID, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_type, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_src_aid, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_dest_aid, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_duration, tvb, offset, 1, ENC_NA); - return 5; -} - -static guint -add_ff_beamformed_link_maintenance(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *blm_item = proto_tree_add_item(tree, hf_ieee80211_ff_blm, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree *blm_tree = proto_item_add_subtree(blm_item, ett_blm_tree); - proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_unit_index, tvb, offset, 1, ENC_NA); - proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_maint_value, tvb, offset, 1, ENC_NA); - proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_is_master, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_brp_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *brp_req_item = proto_tree_add_item(tree, hf_ieee80211_ff_brp, tvb, offset, 4, ENC_LITTLE_ENDIAN); - proto_tree *brp_req_tree = proto_item_add_subtree(brp_req_item, ett_brp_tree); - - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_L_RX, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_TX_TRN_REQ, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_REQ, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_REQ, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_GRANT, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_GRANT, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_chan_FBCK_CAP, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_sector, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_other_aid, tvb, offset, 4, ENC_NA); - proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_antenna, tvb, offset, 4, ENC_NA); - return 4; -} - -static guint -add_ff_sector_sweep_feedback(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *sswf_item = proto_tree_add_item(tree, hf_ieee80211_ff_sswf, tvb, offset, 3, ENC_LITTLE_ENDIAN); - proto_tree *sswf_tree = proto_item_add_subtree(sswf_item, ett_sswf_tree); - - proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_total_sectors, tvb, offset, 3, ENC_NA); - proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_num_rx_dmg_ants, tvb, offset, 3, ENC_NA); - proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_poll_required, tvb, offset, 3, ENC_NA); - return 3; -} - -static guint -add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *ssw_item = proto_tree_add_item(tree, hf_ieee80211_ff_ssw, tvb, offset, 3, ENC_LITTLE_ENDIAN); - proto_tree *ssw_tree = proto_item_add_subtree(ssw_item, ett_ssw_tree); - - proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_direction, tvb, offset, 3, ENC_NA); - proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_cdown, tvb, offset, 3, ENC_NA); - proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_sector_id, tvb, offset, 3, ENC_NA); - proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_dmg_ant_id, tvb, offset, 3, ENC_NA); - proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_rxss_len, tvb, offset, 3, ENC_NA); - return 3; -} - -static guint -add_ff_dmg_parameters(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *dmg_params_item = proto_tree_add_item(tree, hf_ieee80211_ff_dmg_params, tvb, offset, 1, ENC_LITTLE_ENDIAN); - proto_tree *dmg_params_tree = proto_item_add_subtree(dmg_params_item, ett_dmg_params_tree); - - proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_bss, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_only, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_src, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_privacy, tvb, offset, 1, ENC_NA); - proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_policy, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean dis) -{ - proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN); - proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree); - guint64 cc_field; - if(dis) { - proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA); - } else { - cc_field = tvb_get_letoh64(tvb, offset); - /*TODO : Add support of bitmask for FT_(U)INT64 */ - proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (guint32)(cc_field & 0xff)); - proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (guint64)((cc_field & G_GUINT64_CONSTANT(0x00ffffffffffff00)) >> 8)); - proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x0300000000000000)) >> 56)); - proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x7c00000000000000)) >> 58)); - } - return 8; -} - - -static guint -add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA); - return 6; -} - -static guint -add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_NA); - return 2; -} - -static guint -add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_NA); - return 2; -} - -static guint -add_ff_realy_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_realy_aid, tvb, offset, 2, ENC_NA); - return 2; -} - -static guint -add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_NA); - return 2; -} - -static guint -add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_NA); - return 2; -} - -static guint -add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_NA); - return 2; -} - -static guint -add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA); - return 1; -} - -static guint -add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_NA); - return 4; -} - -static guint -add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_NA); - return 4; -} - -static guint -add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - guint start = offset; - guint8 len = tvb_get_guint8(tvb, offset); - proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_NA); - offset += 2; - proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_NA); - offset += 2; - proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_ASCII|ENC_NA); - offset += len; - return offset - start; -} - - -static void -add_tag_relay_capabilities(packet_info *pinfo, proto_item *item, gint32 tag_len, proto_tree *tree, tvbuff_t *tvb, gint32 *offset) { - - if (tag_len < 2) { - expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Tag length must be 2"); - return; - } - - *offset += 2; - - proto_tree_add_item(tree, hf_ieee80211_tag_relay_support, tvb, *offset, 1, ENC_NA); - proto_tree_add_item(tree, hf_ieee80211_tag_relay_use, tvb, *offset, 1, ENC_NA); - proto_tree_add_item(tree, hf_ieee80211_tag_relay_permission, tvb, *offset, 1, ENC_NA); - proto_tree_add_item(tree, hf_ieee80211_tag_AC_power, tvb, *offset, 1, ENC_NA); - proto_tree_add_item(tree, hf_ieee80211_tag_relay_prefer, tvb, *offset, 1, ENC_NA); - proto_tree_add_item(tree, hf_ieee80211_tag_duplex, tvb, *offset, 1, ENC_NA); - proto_tree_add_item(tree, hf_ieee80211_tag_cooperation, tvb, *offset, 1, ENC_NA); - *offset += 2; - return; -} - -static guint -add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) -{ - proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN); - proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree); - proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA); - offset += 1; - add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset); - return 3; -} - -#if 0 /* (Not implemented ??) */ -/* Management notification dialog token */ -static guint -add_ff_wme_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { - return 0; -} -#endif - -#if 0 /* (Not implemented ??) */ -static guint -add_ff_ds_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { - return 0; -} -#endif - -static guint add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { switch (tvb_get_guint8(tvb, offset + 1)) { @@ -8277,18 +7722,18 @@ add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, case SM_ACTION_MEASUREMENT_REPORT: case SM_ACTION_TPC_REQUEST: case SM_ACTION_TPC_REPORT: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_dialog_token); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DIALOG_TOKEN); return 3; case SM_ACTION_CHAN_SWITCH_ANNC: case SM_ACTION_EXT_CHAN_SWITCH_ANNC: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_action_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_ACTION_CODE); return 2; default: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_action_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_ACTION_CODE); return 2; } } @@ -8298,32 +7743,32 @@ add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse { switch (tvb_get_guint8(tvb, offset + 1)) { case QOS_ACTION_ADDTS_REQUEST: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_qos_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_dialog_token); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DIALOG_TOKEN); return 3; case QOS_ACTION_ADDTS_RESPONSE: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_qos_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_dialog_token); - add_fixed_field(tree, tvb, pinfo, offset + 3, add_ff_status_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DIALOG_TOKEN); + add_fixed_field(tree, tvb, pinfo, offset + 3, FIELD_STATUS_CODE); return 5; case QOS_ACTION_DELTS: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_qos_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_qos_ts_info); - add_fixed_field(tree, tvb, pinfo, offset + 5, add_ff_reason_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_QOS_TS_INFO); + add_fixed_field(tree, tvb, pinfo, offset + 5, FIELD_REASON_CODE); return 7; case QOS_ACTION_SCHEDULE: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_qos_action_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE); return 2; case QOS_ACTION_MAP_CONFIGURE: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_qos_action_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE); return 2; default: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); return 2; } } @@ -8333,32 +7778,32 @@ add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse { switch (tvb_get_guint8(tvb, offset + 1)) { case DLS_ACTION_REQUEST: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_dls_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_dst_mac_addr); - add_fixed_field(tree, tvb, pinfo, offset + 8, add_ff_src_mac_addr); - add_fixed_field(tree, tvb, pinfo, offset + 14, add_ff_cap_info); - add_fixed_field(tree, tvb, pinfo, offset + 16, add_ff_dls_timeout); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_DLS_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DST_MAC_ADDR); + add_fixed_field(tree, tvb, pinfo, offset + 8, FIELD_SRC_MAC_ADDR); + add_fixed_field(tree, tvb, pinfo, offset + 14, FIELD_CAP_INFO); + add_fixed_field(tree, tvb, pinfo, offset + 16, FIELD_DLS_TIMEOUT); return 18; case DLS_ACTION_RESPONSE: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_dls_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_status_code); - add_fixed_field(tree, tvb, pinfo, offset + 4, add_ff_dst_mac_addr); - add_fixed_field(tree, tvb, pinfo, offset + 10, add_ff_src_mac_addr); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_DLS_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_STATUS_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 4, FIELD_DST_MAC_ADDR); + add_fixed_field(tree, tvb, pinfo, offset + 10, FIELD_SRC_MAC_ADDR); if (!hf_ieee80211_ff_status_code) { - add_fixed_field(tree, tvb, pinfo, offset + 16, add_ff_cap_info); + add_fixed_field(tree, tvb, pinfo, offset + 16, FIELD_CAP_INFO); } return 16; case DLS_ACTION_TEARDOWN: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - add_fixed_field(tree, tvb, pinfo, offset + 1, add_ff_dls_action_code); - add_fixed_field(tree, tvb, pinfo, offset + 2, add_ff_dst_mac_addr); - add_fixed_field(tree, tvb, pinfo, offset + 8, add_ff_src_mac_addr); - add_fixed_field(tree, tvb, pinfo, offset + 14, add_ff_reason_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_DLS_ACTION_CODE); + add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DST_MAC_ADDR); + add_fixed_field(tree, tvb, pinfo, offset + 8, FIELD_SRC_MAC_ADDR); + add_fixed_field(tree, tvb, pinfo, offset + 14, FIELD_REASON_CODE); return 16; default: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); return 2; } } @@ -8370,26 +7815,26 @@ add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int switch (tvb_get_guint8(tvb, offset + 1)) { case BA_ADD_BLOCK_ACK_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_action_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_param); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_timeout); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_ssc); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_ACTION_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_PARAM); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_TIMEOUT); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC); break; case BA_ADD_BLOCK_ACK_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_action_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_param); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_timeout); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_ACTION_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_PARAM); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_TIMEOUT); break; case BA_DELETE_BLOCK_ACK: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_block_ack_action_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_delba_param_set); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_reason_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_ACTION_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DELBA_PARAM_SET); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE); break; } @@ -8431,30 +7876,30 @@ add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, } break; case PA_GAS_INITIAL_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset, &anqp); offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, anqp); break; case PA_GAS_INITIAL_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_gas_comeback_delay); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_GAS_COMEBACK_DELAY); offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset, &anqp); offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, anqp); break; case PA_GAS_COMEBACK_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case PA_GAS_COMEBACK_RESPONSE: dialog_token = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); frag = tvb_get_guint8(tvb, offset) & 0x7f; more = (tvb_get_guint8(tvb, offset) & 0x80) != 0; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_gas_fragment_id); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_gas_comeback_delay); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_GAS_FRAGMENT_ID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_GAS_COMEBACK_DELAY); offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset, &anqp); offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, anqp, frag, @@ -8463,14 +7908,14 @@ add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, case PA_TDLS_DISCOVERY_RESPONSE: col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS"); col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response"); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_cap_info); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO); break; case PA_QAB_REQUEST: case PA_QAB_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_req_ap_addr); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_res_ap_addr); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REQ_AP_ADDR); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RES_AP_ADDR); break; } @@ -8482,9 +7927,9 @@ add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int of { guint8 code; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_pa_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PA_ACTION_CODE); offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code); return offset - start; } @@ -8494,9 +7939,9 @@ add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pin { guint8 code; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_ppa_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PPA_ACTION_CODE); offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code); return offset - start; } @@ -8507,41 +7952,41 @@ add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pi guint start = offset; guint8 code; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_ACTION_CODE); switch (code) { case RM_ACTION_RADIO_MEASUREMENT_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_repetitions); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_REPETITIONS); /* Followed by Measurement Request Elements */ break; case RM_ACTION_RADIO_MEASUREMENT_REPORT: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_DIALOG_TOKEN); /* Followed by Measurement Report Elements */ break; case RM_ACTION_LINK_MEASUREMENT_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_tx_power); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_max_tx_power); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_TX_POWER); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_MAX_TX_POWER); /* Followed by Optional Subelements */ break; case RM_ACTION_LINK_MEASUREMENT_REPORT: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_tpc_report); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_rx_antenna_id); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_tx_antenna_id); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_rcpi); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_rsni); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_TPC_REPORT); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_RX_ANTENNA_ID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_TX_ANTENNA_ID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_RCPI); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_RSNI); /* Followed by Optional Subelements */ break; case RM_ACTION_NEIGHBOR_REPORT_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_DIALOG_TOKEN); /* Followed by Optional Subelements */ break; case RM_ACTION_NEIGHBOR_REPORT_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_rm_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RM_DIALOG_TOKEN); /* Followed by Neighbor Report Elements */ break; } @@ -8555,31 +8000,31 @@ add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info * guint start = offset; guint8 code; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_ft_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FT_ACTION_CODE); switch (code) { case FT_ACTION_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sta_address); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_target_ap_address); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS); /* Followed by FT Request frame body (IEs) */ break; case FT_ACTION_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sta_address); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_target_ap_address); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); /* Followed by FT Response frame body (IEs) */ break; case FT_ACTION_CONFIRM: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sta_address); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_target_ap_address); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS); /* Followed by FT Confirm frame body (IEs) */ break; case FT_ACTION_ACK: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sta_address); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_target_ap_address); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); /* Followed by FT Ack frame body (IEs) */ break; } @@ -8593,16 +8038,16 @@ add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int guint start = offset; guint8 code; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sa_query_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SA_QUERY_ACTION_CODE); switch (code) { case SA_QUERY_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_transaction_id); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TRANSACTION_ID); break; case SA_QUERY_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_transaction_id); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TRANSACTION_ID); break; } @@ -8614,15 +8059,15 @@ add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offs { guint length; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_mesh_action); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MESH_ACTION); /* The only fixed fields are the category and mesh action. The rest are IEs. */ length = 2; if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE) { /* ..except for the TBTT Adjustment Response, which has a status code field */ - length += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + length += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); } return length; } @@ -8632,9 +8077,9 @@ add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int { guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_multihop_action); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_mesh_control); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MULTIHOP_ACTION); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MESH_CONTROL); return offset - start; } @@ -8643,16 +8088,16 @@ add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo { guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_selfprot_action); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SELFPROT_ACTION); switch (tvb_get_guint8(tvb, start + 1)) { case SELFPROT_ACTION_MESH_PEERING_OPEN: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_cap_info); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO); break; case SELFPROT_ACTION_MESH_PEERING_CONFIRM: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_cap_info); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_assoc_id); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_ASSOC_ID); break; } @@ -8660,13 +8105,22 @@ add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo } static guint +add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1, + ENC_LITTLE_ENDIAN); + return 1; +} + + +static guint wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { int start = offset; guint8 mode; gint left; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); mode = tvb_get_guint8(tvb, offset); proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_pref_cand, @@ -8720,7 +8174,7 @@ static guint wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { int start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); return offset - start; } @@ -8731,9 +8185,9 @@ wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int off guint16 key_data_len; gint left; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); key_data_len = tvb_get_letohs(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_key_data_length); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_KEY_DATA_LENGTH); left = tvb_reported_length_remaining(tvb, offset); if (left < key_data_len) { expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data); @@ -8749,7 +8203,7 @@ static guint wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { int start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); return offset - start; } @@ -8757,7 +8211,7 @@ static guint wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { int start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); return offset - start; } @@ -8765,8 +8219,8 @@ static guint wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) { int start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_wnm_notification_type); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WNM_NOTIFICATION_TYPE); return offset - start; } @@ -8776,9 +8230,9 @@ add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse guint8 code; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_wnm_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WNM_ACTION_CODE); switch (code) { case WNM_BSS_TRANS_MGMT_REQ: offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset); @@ -8809,22 +8263,22 @@ add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf guint8 code; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_unprotected_wnm_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_UNPROTECTED_WNM_ACTION_CODE); switch (code) { case UNPROTECTED_WNM_TIM: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_check_beacon); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_timestamp); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_tod); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_toa); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_max_tod_err); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_max_toa_err); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CHECK_BEACON); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TIMESTAMP); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TOD); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TOA); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MAX_TOD_ERR); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MAX_TOA_ERR); break; case UNPROTECTED_WNM_TIMING_MEASUREMENT: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_followup_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FOLLOWUP_DIALOG_TOKEN); break; } @@ -8838,62 +8292,62 @@ add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offs guint16 status; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_tdls_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TDLS_ACTION_CODE); switch (code) { case TDLS_SETUP_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_cap_info); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO); break; case TDLS_SETUP_RESPONSE: status = tvb_get_letohs(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); if (tvb_reported_length_remaining(tvb, offset) < 2) { if (status == 0) { expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed); } break; } - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_cap_info); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO); break; case TDLS_SETUP_CONFIRM: status = tvb_get_letohs(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); if (tvb_reported_length_remaining(tvb, offset) < 1) { if (status == 0) { expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed); } break; } - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case TDLS_TEARDOWN: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_reason_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE); break; case TDLS_PEER_TRAFFIC_INDICATION: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case TDLS_CHANNEL_SWITCH_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_target_channel); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_operating_class); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_CHANNEL); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_OPERATING_CLASS); break; case TDLS_CHANNEL_SWITCH_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; case TDLS_PEER_PSM_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case TDLS_PEER_PSM_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; case TDLS_PEER_TRAFFIC_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case TDLS_DISCOVERY_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; } @@ -8905,10 +8359,10 @@ add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pi { guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_wme_action_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_wme_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WME_ACTION_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WME_STATUS_CODE); return offset - start; /* Size of fixed fields */ } @@ -8920,7 +8374,7 @@ add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf guint32 oui; guint8 subtype; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); oui = tvb_get_ntoh24(tvb, offset); proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA); offset += 3; @@ -8951,55 +8405,593 @@ add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset guint8 n_sta, i; mimo_control_t mimo_cntrl; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_ht_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HT_ACTION_CODE); switch (tvb_get_guint8(tvb, offset - 1)) { case HT_ACTION_NOTIFY_CHAN_WIDTH: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_channel_width); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CHANNEL_WIDTH); break; case HT_ACTION_SM_PWR_SAVE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sm_pwr_cntrl); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SM_PWR_CNTRL); break; case HT_ACTION_PSMP_ACTION: n_sta = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_psmp_param_set); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PSMP_PARAM_SET); for (i = 0; i < (n_sta & 0x0F); i++) { - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_psmp_sta_info); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PSMP_STA_INFO); } break; case HT_ACTION_SET_PCO_PHASE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_pco_phase_cntrl); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PCO_PHASE_CNTRL); break; case HT_ACTION_MIMO_CSI: mimo_cntrl = get_mimo_control(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_mimo_cntrl); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MIMO_CNTRL); offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl); break; case HT_ACTION_MIMO_BEAMFORMING: mimo_cntrl = get_mimo_control(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_mimo_cntrl); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MIMO_CNTRL); offset += add_mimo_beamforming_feedback_report(tree, tvb, offset, mimo_cntrl); break; case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING: mimo_cntrl = get_mimo_control(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_mimo_cntrl); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MIMO_CNTRL); offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb, offset, mimo_cntrl); break; case HT_ACTION_ANT_SEL_FEEDBACK: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_ant_selection); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_ANT_SELECTION); break; case HT_ACTION_HT_INFO_EXCHANGE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_ht_information); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HT_INFORMATION); break; } return offset - start; } +static guint +add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1, + ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6, + ENC_NA); + return 6; +} + +static guint +add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6, + ENC_NA); + return 6; +} + +static guint +add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2, + ENC_LITTLE_ENDIAN); + return 2; +} + +static guint +add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1, + ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1, + ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset, + 1, ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2, + ENC_LITTLE_ENDIAN); + return 2; +} + +static guint +add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) +{ + guint8 code; + code = tvb_get_guint8(tvb, offset); + col_set_str(pinfo->cinfo, COL_INFO, + val_to_str_ext_const(code, &tdls_action_codes_ext, + "Unknown TDLS Action")); + proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1, + ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1, + ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1, + ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) +{ + guint8 code; + + code = tvb_get_guint8(tvb, offset); + col_set_str(pinfo->cinfo, COL_INFO, + val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action")); + proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) +{ + guint8 code; + + code = tvb_get_guint8(tvb, offset); + col_set_str(pinfo->cinfo, COL_INFO, + val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action")); + proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN); + return 1; +} + +static guint +add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2, + ENC_LITTLE_ENDIAN); + return 2; +} + +struct ieee80211_fixed_field_dissector { + enum fixed_field lfcode; + guint (*dissector)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset); +}; + +static guint +add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type, + tvb, offset, 1, ENC_NA); + return 1; +} + +/* Action frame: Radio Measurement actions */ +static guint +add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA); + return 1; +} + +/* Radio Measurement Request frame, Action fields */ +static guint +add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* Note: 65535 means repeated until cancelled or superseded */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2, + ENC_BIG_ENDIAN); + return 2; +} + +/* Link Measurement Request frame, Action fields*/ +static guint +add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* In dBm, see 8.4.1.20 */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* In dBm, see 8.4.1.19 */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA); + return 1; +} + +/* Link Measurement Report frame, Action fields */ +static guint +add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree *tpc_tree; + proto_item *tpc_item; + + /* 8.4.2.19 TPC Report element */ + tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA); + tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc); + proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA); + proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA); + proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA); + proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA); + return 4; +} + +static guint +add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* 8.4.2.40: RCPI as specified for certain PHYs */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as: + * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */ + proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *bic_item = proto_tree_add_item(tree, hf_ieee80211_ff_bic, tvb, offset, 6, ENC_LITTLE_ENDIAN); + proto_tree *bic_tree = proto_item_add_subtree(bic_item, ett_bic_tree); + + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_cc_present, tvb, offset, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_discovery_mode, tvb, offset, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_beacon, tvb, offset, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_ati_present, tvb, offset, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_len, tvb, offset, 2, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_fss, tvb, offset+1, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_is_resp, tvb, offset+1, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_abft, tvb, offset+1, 2, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_frag_txss, tvb, offset+2, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_txss_span, tvb, offset+2, 2, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_NBI_abft, tvb, offset+3, 1, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_count, tvb, offset+3, 2, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_nabft, tvb, offset+4, 2, ENC_NA); + proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_pcp, tvb, offset+5, 1, ENC_NA); + return 6; +} + +static guint +add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + gboolean isGrant = *((gboolean*)(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY))); + proto_item *bf_item = proto_tree_add_item(tree, hf_ieee80211_ff_bf, tvb, offset, 2, ENC_LITTLE_ENDIAN); + proto_tree *bf_tree = proto_item_add_subtree(bf_item, ett_bf_tree); + guint16 bf_field = tvb_get_letohs(tvb, offset); + gboolean isInit = (bf_field & 0x2) >> 1; + gboolean isResp = (bf_field & 0x4) >> 2; + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_train, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_init, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_resp, tvb, offset, 1, ENC_LITTLE_ENDIAN); + if((isInit==TRUE) && (isResp==TRUE) && isGrant) { + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_sectors, tvb, offset, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_rx_dmg_ants, tvb, offset, 2, ENC_LITTLE_ENDIAN); + } else { + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_len, tvb, offset, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN); + } + return 2; +} + +static guint +add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *dynamic_alloc_item = proto_tree_add_item(tree, hf_ieee80211_ff_dynamic_allocation, tvb, offset, 5, ENC_LITTLE_ENDIAN); + proto_tree *dynamic_alloc_tree = proto_item_add_subtree(dynamic_alloc_item, ett_dynamic_alloc_tree); + proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_TID, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_type, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_src_aid, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_dest_aid, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_duration, tvb, offset, 1, ENC_NA); + return 5; +} + +static guint +add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *blm_item = proto_tree_add_item(tree, hf_ieee80211_ff_blm, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree *blm_tree = proto_item_add_subtree(blm_item, ett_blm_tree); + proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_unit_index, tvb, offset, 1, ENC_NA); + proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_maint_value, tvb, offset, 1, ENC_NA); + proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_is_master, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *brp_req_item = proto_tree_add_item(tree, hf_ieee80211_ff_brp, tvb, offset, 4, ENC_LITTLE_ENDIAN); + proto_tree *brp_req_tree = proto_item_add_subtree(brp_req_item, ett_brp_tree); + + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_L_RX, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_TX_TRN_REQ, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_REQ, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_REQ, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_GRANT, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_GRANT, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_chan_FBCK_CAP, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_sector, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_other_aid, tvb, offset, 4, ENC_NA); + proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_antenna, tvb, offset, 4, ENC_NA); + return 4; +} + +static guint +add_ff_sector_sweep_feedback(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *sswf_item = proto_tree_add_item(tree, hf_ieee80211_ff_sswf, tvb, offset, 3, ENC_LITTLE_ENDIAN); + proto_tree *sswf_tree = proto_item_add_subtree(sswf_item, ett_sswf_tree); + + proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_total_sectors, tvb, offset, 3, ENC_NA); + proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_num_rx_dmg_ants, tvb, offset, 3, ENC_NA); + proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_poll_required, tvb, offset, 3, ENC_NA); + return 3; +} + +static guint +add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *ssw_item = proto_tree_add_item(tree, hf_ieee80211_ff_ssw, tvb, offset, 3, ENC_LITTLE_ENDIAN); + proto_tree *ssw_tree = proto_item_add_subtree(ssw_item, ett_ssw_tree); + + proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_direction, tvb, offset, 3, ENC_NA); + proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_cdown, tvb, offset, 3, ENC_NA); + proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_sector_id, tvb, offset, 3, ENC_NA); + proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_dmg_ant_id, tvb, offset, 3, ENC_NA); + proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_rxss_len, tvb, offset, 3, ENC_NA); + return 3; +} + +static guint +add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *dmg_params_item = proto_tree_add_item(tree, hf_ieee80211_ff_dmg_params, tvb, offset, 1, ENC_LITTLE_ENDIAN); + proto_tree *dmg_params_tree = proto_item_add_subtree(dmg_params_item, ett_dmg_params_tree); + + proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_bss, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_only, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_src, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_privacy, tvb, offset, 1, ENC_NA); + proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_policy, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean dis) +{ + proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN); + proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree); + guint64 cc_field; + if(dis) { + proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA); + } else { + cc_field = tvb_get_letoh64(tvb, offset); + /*TODO : Add support of bitmask for FT_(U)INT64 */ + proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (guint32)(cc_field & 0xff)); + proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (guint64)((cc_field & G_GUINT64_CONSTANT(0x00ffffffffffff00)) >> 8)); + proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x0300000000000000)) >> 56)); + proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x7c00000000000000)) >> 58)); + } + return 8; +} + + +static guint +add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA); + return 6; +} + +static guint +add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_NA); + return 2; +} + +static guint +add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_NA); + return 2; +} + +static guint +add_ff_realy_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_realy_aid, tvb, offset, 2, ENC_NA); + return 2; +} + +static guint +add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_NA); + return 2; +} + +static guint +add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_NA); + return 2; +} + +static guint +add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_NA); + return 2; +} + +static guint +add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA); + return 1; +} + +static guint +add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_NA); + return 4; +} + +static guint +add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_NA); + return 4; +} + +static guint +add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + guint start = offset; + guint8 len = tvb_get_guint8(tvb, offset); + proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_ASCII|ENC_NA); + offset += len; + return offset - start; +} + +static void +add_tag_relay_capabilities(packet_info *pinfo, proto_item *item, gint32 tag_len, proto_tree *tree, tvbuff_t *tvb, gint32 *offset) { + + if (tag_len < 2) { + expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Tag length must be 2"); + return; + } + + *offset += 2; + + proto_tree_add_item(tree, hf_ieee80211_tag_relay_support, tvb, *offset, 1, ENC_NA); + proto_tree_add_item(tree, hf_ieee80211_tag_relay_use, tvb, *offset, 1, ENC_NA); + proto_tree_add_item(tree, hf_ieee80211_tag_relay_permission, tvb, *offset, 1, ENC_NA); + proto_tree_add_item(tree, hf_ieee80211_tag_AC_power, tvb, *offset, 1, ENC_NA); + proto_tree_add_item(tree, hf_ieee80211_tag_relay_prefer, tvb, *offset, 1, ENC_NA); + proto_tree_add_item(tree, hf_ieee80211_tag_duplex, tvb, *offset, 1, ENC_NA); + proto_tree_add_item(tree, hf_ieee80211_tag_cooperation, tvb, *offset, 1, ENC_NA); + *offset += 2; + return; +} + +static guint +add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset) +{ + proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN); + proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree); + proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA); + offset += 1; + add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset); + return 3; +} + + static void dissect_ieee80211_extension(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { @@ -9021,14 +9013,14 @@ dissect_ieee80211_extension(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, prot gboolean cc, dis; guint16 bic_field; fixed_tree = get_fixed_parameter_tree (ext_tree, tvb, offset, 20); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_timestamp); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_sector_sweep); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_beacon_interval); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TIMESTAMP); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL); bic_field = tvb_get_letohs(tvb, offset); cc = (bic_field & 0x1); dis = (bic_field & 0x2) >> 1; - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_beacon_interval_ctrl); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_dmg_parameters); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL_CTRL); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_DMG_PARAMETERS); if(cc) { offset += add_ff_cc_field(fixed_tree,tvb, offset, dis); } @@ -9046,17 +9038,17 @@ add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinf guint8 code; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_unprotected_dmg_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_UNPROTECTED_DMG_ACTION_CODE); switch (code) { case UNPROTECTED_DMG_ANNOUNCE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_timestamp); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_beacon_interval); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TIMESTAMP); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL); break; case UNPROTECTED_DMG_BRP: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_brp_req); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BRP_REQ); break; } return offset - start; @@ -9298,10 +9290,10 @@ add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse guint8 vht_action; proto_item *ti; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); vht_action = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_vht_action); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_VHT_ACTION); switch(vht_action){ case VHT_ACT_VHT_COMPRESSED_BEAMFORMING:{ @@ -9337,31 +9329,31 @@ add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse guint8 code; guint start = offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_fst_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FST_ACTION_CODE); switch (code) { case FST_SETUP_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_llt); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_LLT); break; case FST_SETUP_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; case FST_TEAR_DOWN: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_fsts_id); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FSTS_ID); break; case FST_ACK_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_fsts_id); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FSTS_ID); break; case FST_ACK_RESPONSE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_fsts_id); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FSTS_ID); break; case FST_ON_CHANNEL_TUNNEL_REQUEST: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_oct_mmpdu); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_OCT_MMPDU); break; } return offset - start; @@ -9374,51 +9366,51 @@ add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse guint start = offset; int left_offset; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); code = tvb_get_guint8(tvb, offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dmg_action_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DMG_ACTION_CODE); switch (code) { case DMG_ACTION_PWR_SAVE_CONFIG_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dmg_pwr_mgmt); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DMG_PWR_MGMT); break; case DMG_ACTION_PWR_SAVE_CONFIG_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; case DMG_ACTION_INFO_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_subject_address); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SUBJECT_ADDRESS); break; case DMG_ACTION_INFO_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_subject_address); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SUBJECT_ADDRESS); break; case DMG_ACTION_HANDOVER_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_handover_reason); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_handover_remaining_bi); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_REASON); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_REMAINING_BI); break; case DMG_ACTION_HANDOVER_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_handover_result); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_handover_reject_reason); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_RESULT); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_REJECT_REASON); break; case DMG_ACTION_DTP_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case DMG_ACTION_DTP_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case DMG_ACTION_RELAY_SEARCH_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_destination_reds_aid); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_REDS_AID); break; case DMG_ACTION_RELAY_SEARCH_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); left_offset = tvb_reported_length_remaining(tvb, offset); while(left_offset > 0) { @@ -9432,47 +9424,47 @@ add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse } break; case DMG_ACTION_RLS_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_destination_aid); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_realy_aid); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_source_aid); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_AID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REALY_AID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SOURCE_AID); break; case DMG_ACTION_RLS_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case DMG_ACTION_RLS_ANNOUNCE: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_destination_aid); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_realy_aid); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_source_aid); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_AID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REALY_AID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SOURCE_AID); break; case DMG_ACTION_RLS_TEARDOWN: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_destination_aid); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_realy_aid); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_source_aid); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_AID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REALY_AID); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SOURCE_AID); break; case DMG_ACTION_RELAY_ACK_REQ: case DMG_ACTION_RELAY_ACK_RES: break; case DMG_ACTION_TPA_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_timing_offset); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_sampling_frequency_offset); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TIMING_OFFSET); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SAMPLING_FREQUENCY_OFFSET); break; case DMG_ACTION_TPA_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); break; case DMG_ACTION_TPA_REP: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; case DMG_ACTION_ROC_REQ: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_relay_operation_type); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RELAY_OPERATION_TYPE); break; case DMG_ACTION_ROC_RES: - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_dialog_token); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_status_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE); break; } return offset - start; @@ -9531,11 +9523,146 @@ add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset) case CAT_VENDOR_SPECIFIC: /* Vendor Specific Protected Category - 127 */ return add_ff_action_vendor_specific(tree, tvb, pinfo, offset); default: - add_fixed_field(tree, tvb, pinfo, offset, add_ff_category_code); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE); return 1; } } +#define FF_FIELD(f, func) { FIELD_ ## f, add_ff_ ## func } + +static const struct ieee80211_fixed_field_dissector ff_dissectors[] = { + FF_FIELD(TIMESTAMP , timestamp), + FF_FIELD(BEACON_INTERVAL , beacon_interval), + FF_FIELD(CAP_INFO , cap_info), + FF_FIELD(AUTH_ALG , auth_alg), + FF_FIELD(AUTH_TRANS_SEQ , auth_trans_seq), + FF_FIELD(CURRENT_AP_ADDR , current_ap_addr), + FF_FIELD(LISTEN_IVAL , listen_ival), + FF_FIELD(REASON_CODE , reason_code), + FF_FIELD(ASSOC_ID , assoc_id), + FF_FIELD(STATUS_CODE , status_code), + FF_FIELD(CATEGORY_CODE , category_code), + FF_FIELD(ACTION_CODE , action_code), + FF_FIELD(DIALOG_TOKEN , dialog_token), + FF_FIELD(FOLLOWUP_DIALOG_TOKEN , followup_dialog_token), + FF_FIELD(WME_ACTION_CODE , wme_action_code), + FF_FIELD(WME_STATUS_CODE , wme_status_code), + FF_FIELD(QOS_ACTION_CODE , qos_action_code), + FF_FIELD(BLOCK_ACK_ACTION_CODE , block_ack_action_code), + FF_FIELD(BLOCK_ACK_PARAM , block_ack_param), + FF_FIELD(BLOCK_ACK_TIMEOUT , block_ack_timeout), + FF_FIELD(BLOCK_ACK_SSC , block_ack_ssc), + FF_FIELD(QOS_TS_INFO , qos_ts_info), + FF_FIELD(MESH_ACTION , mesh_action), + FF_FIELD(MULTIHOP_ACTION , multihop_action), + FF_FIELD(MESH_CONTROL , mesh_control), + FF_FIELD(SELFPROT_ACTION , selfprot_action), + FF_FIELD(DLS_ACTION_CODE , dls_action_code), + FF_FIELD(DST_MAC_ADDR , dst_mac_addr), + FF_FIELD(SRC_MAC_ADDR , src_mac_addr), + FF_FIELD(DLS_TIMEOUT , dls_timeout), + FF_FIELD(DELBA_PARAM_SET , delba_param_set), + FF_FIELD(MAX_REG_PWR , max_reg_pwr), + FF_FIELD(MEASUREMENT_PILOT_INT , measurement_pilot_int), + FF_FIELD(COUNTRY_STR , country_str), + FF_FIELD(MAX_TX_PWR , max_tx_pwr), + FF_FIELD(TX_PWR_USED , tx_pwr_used), + FF_FIELD(TRANSCEIVER_NOISE_FLOOR , transceiver_noise_floor), + FF_FIELD(CHANNEL_WIDTH , channel_width), + FF_FIELD(QOS_INFO_AP , qos_info_ap), + FF_FIELD(QOS_INFO_STA , qos_info_sta), + FF_FIELD(SM_PWR_CNTRL , sm_pwr_cntrl), + FF_FIELD(PCO_PHASE_CNTRL , pco_phase_cntrl), + FF_FIELD(PSMP_PARAM_SET , psmp_param_set), + FF_FIELD(MIMO_CNTRL , mimo_cntrl), + FF_FIELD(ANT_SELECTION , ant_selection), + FF_FIELD(EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT , extended_channel_switch_announcement) , + FF_FIELD(HT_INFORMATION , ht_information), + FF_FIELD(HT_ACTION_CODE , ht_action_code), + FF_FIELD(PSMP_STA_INFO , psmp_sta_info), + FF_FIELD(SCHEDULE_INFO , schedule_info), + FF_FIELD(PA_ACTION_CODE , pa_action_code), + FF_FIELD(PPA_ACTION_CODE , ppa_action_code), + FF_FIELD(ACTION , action), + FF_FIELD(FT_ACTION_CODE , ft_action_code), + FF_FIELD(STA_ADDRESS , sta_address), + FF_FIELD(TARGET_AP_ADDRESS , target_ap_address), + FF_FIELD(GAS_COMEBACK_DELAY , gas_comeback_delay), + FF_FIELD(GAS_FRAGMENT_ID , gas_fragment_id), + FF_FIELD(SA_QUERY_ACTION_CODE , sa_query_action_code), + FF_FIELD(TRANSACTION_ID , transaction_id), + FF_FIELD(TDLS_ACTION_CODE , tdls_action_code), + FF_FIELD(TARGET_CHANNEL , target_channel), + FF_FIELD(OPERATING_CLASS , operating_class), + FF_FIELD(WNM_ACTION_CODE , wnm_action_code), + FF_FIELD(UNPROTECTED_WNM_ACTION_CODE , unprotected_wnm_action_code), + FF_FIELD(KEY_DATA_LENGTH , key_data_length), + FF_FIELD(WNM_NOTIFICATION_TYPE , wnm_notification_type), + FF_FIELD(RM_ACTION_CODE , rm_action_code), + FF_FIELD(RM_DIALOG_TOKEN , rm_dialog_token), + FF_FIELD(RM_REPETITIONS , rm_repetitions), + FF_FIELD(RM_TX_POWER , rm_tx_power), + FF_FIELD(RM_MAX_TX_POWER , rm_max_tx_power), + FF_FIELD(RM_TPC_REPORT , rm_tpc_report), + FF_FIELD(RM_RX_ANTENNA_ID , rm_rx_antenna_id), + FF_FIELD(RM_TX_ANTENNA_ID , rm_tx_antenna_id), + FF_FIELD(RM_RCPI , rm_rcpi), + FF_FIELD(RM_RSNI , rm_rsni), + FF_FIELD(RELAY_CAPABLE_STA_INFO , relay_capable_sta_info), + FF_FIELD(BAND_ID , band_id), + FF_FIELD(DMG_PARAMETERS , dmg_params), + FF_FIELD(SECTOR_SWEEP , sector_sweep), + FF_FIELD(DYNAMIC_ALLOCATION , dynamic_allocation), + FF_FIELD(SECTOR_SWEEP_FB , sector_sweep_feedback), + FF_FIELD(BRP_REQ , BRP_request), + FF_FIELD(BEAMFORMED_LINK_MAINTAINCE , beamformed_link), + FF_FIELD(BEAMFORMING_CTRL , beamforming_ctrl), + FF_FIELD(BEACON_INTERVAL_CTRL , beacon_interval_ctrl), + FF_FIELD(DMG_ACTION_CODE , dmg_action_code), + FF_FIELD(DMG_PWR_MGMT , dmg_pwr_mgmt), + FF_FIELD(REQ_AP_ADDR , req_ap_addr), + FF_FIELD(RES_AP_ADDR , res_ap_addr), + FF_FIELD(CHECK_BEACON , check_beacon), + FF_FIELD(TOD , tod), + FF_FIELD(TOA , toa), + FF_FIELD(MAX_TOD_ERR , max_tod_err), + FF_FIELD(MAX_TOA_ERR , max_toa_err), + FF_FIELD(SUBJECT_ADDRESS , subject_address), + FF_FIELD(HANDOVER_REASON , handover_reason), + FF_FIELD(HANDOVER_REMAINING_BI , handover_remaining_bi), + FF_FIELD(HANDOVER_RESULT , handover_result), + FF_FIELD(HANDOVER_REJECT_REASON , handover_reject_reason), + FF_FIELD(DESTINATION_REDS_AID , destination_reds_aid), + FF_FIELD(DESTINATION_AID , destination_aid), + FF_FIELD(REALY_AID , realy_aid), + FF_FIELD(SOURCE_AID , source_aid), + FF_FIELD(TIMING_OFFSET , timing_offset), + FF_FIELD(SAMPLING_FREQUENCY_OFFSET , sampling_frequency_offset), + FF_FIELD(RELAY_OPERATION_TYPE , relay_operation_type), + FF_FIELD(UNPROTECTED_DMG_ACTION_CODE , unprotected_dmg_action_code), + FF_FIELD(FST_ACTION_CODE , fst_action_code), + FF_FIELD(LLT , llt), + FF_FIELD(FSTS_ID , fsts_id), + FF_FIELD(OCT_MMPDU , oct_mmpdu), + FF_FIELD(VHT_ACTION , vht_action), + { (enum fixed_field)-1 , NULL } +}; + +#undef FF_FIELD + +static guint +add_fixed_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, + enum fixed_field lfcode) +{ + int i; + for (i = 0; ff_dissectors[i].dissector; i++) { + if (ff_dissectors[i].lfcode == lfcode) { + return ff_dissectors[i].dissector(tree, tvb, pinfo, offset); + } + } + return 0; +} + static const value_string ieee80211_rsn_cipher_vals[] = { {0, "NONE"}, {1, "WEP (40-bit)"}, @@ -13911,7 +14038,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset } offset += 2; - add_fixed_field(tree, tvb, pinfo, offset, add_ff_qos_ts_info); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_QOS_TS_INFO); offset += 3; proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -14111,7 +14238,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset } offset += 2; - add_fixed_field(tree, tvb, pinfo, offset, add_ff_schedule_info); + add_fixed_field(tree, tvb, pinfo, offset, FIELD_SCHEDULE_INFO); offset += 2; proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN); @@ -14748,9 +14875,9 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset rep_tree = proto_tree_add_subtree(sub_tree, tvb, offset, sub_length, ett_tag_measure_reported_frame_tree, NULL, "Reported Frame Body"); - add_fixed_field(rep_tree, tvb, pinfo, 0, add_ff_timestamp); - add_fixed_field(rep_tree, tvb, pinfo, 8, add_ff_beacon_interval); - add_fixed_field(rep_tree, tvb, pinfo, 10, add_ff_cap_info); + add_fixed_field(rep_tree, tvb, pinfo, 0, FIELD_TIMESTAMP); + add_fixed_field(rep_tree, tvb, pinfo, 8, FIELD_BEACON_INTERVAL); + add_fixed_field(rep_tree, tvb, pinfo, 10, FIELD_CAP_INFO); offset += 12; ieee_80211_add_tagged_parameters (tvb, offset, pinfo, rep_tree, sub_length - 12, MGT_PROBE_RESP); @@ -15220,7 +15347,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; } - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_reason_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE); break; /* unexpected values */ @@ -15376,7 +15503,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA); offset += 6; } - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_reason_code); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE); } break; } @@ -15461,7 +15588,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset offset += 2; - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_extended_channel_switch_announcement); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT); break; } @@ -15641,7 +15768,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_NA); proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_NA); offset += 2; - offset += add_fixed_field(alloc_tree, tvb, pinfo, offset, add_ff_beamforming_ctrl); + offset += add_fixed_field(alloc_tree, tvb, pinfo, offset, FIELD_BEAMFORMING_CTRL); proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA); offset += 1; proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA); @@ -15723,7 +15850,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset offset += 1; break; } - case TAG_BEAMLINK_MAINTENANCE: + case TAG_BEAMLINK_MAINTAINCE: { if (tag_len != 1) { @@ -15731,7 +15858,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset break; } offset += 2; - offset += add_ff_beamformed_link_maintenance(tree, tvb, pinfo, offset); + offset += add_ff_beamformed_link(tree, tvb, pinfo, offset); break; } case TAG_QUIET_PERIOD_RES: @@ -15837,7 +15964,7 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset offset += 3; isGrant = ((ftype==CTRL_GRANT)||(ftype==CTRL_GRANT_ACK)); p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY, &isGrant); - offset += add_fixed_field(tree, tvb, pinfo, 2, add_ff_beamforming_ctrl); + offset += add_fixed_field(tree, tvb, pinfo, 2, FIELD_BEAMFORMING_CTRL); proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_NA); offset += 2; proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_NA); @@ -15927,14 +16054,14 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_addr_present, tvb, offset, 1, ENC_NA); proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_cipher_present, tvb, offset, 1, ENC_NA); offset += 1; - offset += add_fixed_field(tree, tvb, pinfo, 1, add_ff_band_id); + offset += add_fixed_field(tree, tvb, pinfo, 1, FIELD_BAND_ID); proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA); offset += 1; proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA); offset += 1; proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA); offset += 6; - offset += add_fixed_field(tree, tvb, pinfo, 2, add_ff_beacon_interval); + offset += add_fixed_field(tree, tvb, pinfo, 2, FIELD_BEACON_INTERVAL); proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_NA); offset += 8; proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ap, tvb, offset, 1, ENC_NA); @@ -16031,8 +16158,8 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset break; } offset += 2; - offset += add_fixed_field(tree, tvb, pinfo, 1, add_ff_band_id); - offset += add_fixed_field(tree, tvb, pinfo, 1, add_ff_band_id); + offset += add_fixed_field(tree, tvb, pinfo, 1, FIELD_BAND_ID); + offset += add_fixed_field(tree, tvb, pinfo, 1, FIELD_BAND_ID); proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA); offset += 1; param_num = tvb_get_letohs(tvb, offset); @@ -16115,8 +16242,8 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_ASSOC_REQ: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 4); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_cap_info); - add_fixed_field(fixed_tree, tvb, pinfo, 2, add_ff_listen_ival); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO); + add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_LISTEN_IVAL); offset = 4; /* Size of fixed fields */ tagged_parameter_tree_len = @@ -16130,9 +16257,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_ASSOC_RESP: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_cap_info); - add_fixed_field(fixed_tree, tvb, pinfo, 2, add_ff_status_code); - add_fixed_field(fixed_tree, tvb, pinfo, 4, add_ff_assoc_id); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO); + add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_STATUS_CODE); + add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_ASSOC_ID); offset = 6; /* Size of fixed fields */ tagged_parameter_tree_len = @@ -16146,9 +16273,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_REASSOC_REQ: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 10); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_cap_info); - add_fixed_field(fixed_tree, tvb, pinfo, 2, add_ff_listen_ival); - add_fixed_field(fixed_tree, tvb, pinfo, 4, add_ff_current_ap_addr); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO); + add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_LISTEN_IVAL); + add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_CURRENT_AP_ADDR); offset = 10; /* Size of fixed fields */ tagged_parameter_tree_len = @@ -16161,9 +16288,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_REASSOC_RESP: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_cap_info); - add_fixed_field(fixed_tree, tvb, pinfo, 2, add_ff_status_code); - add_fixed_field(fixed_tree, tvb, pinfo, 4, add_ff_assoc_id); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO); + add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_STATUS_CODE); + add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_ASSOC_ID); offset = 6; /* Size of fixed fields */ tagged_parameter_tree_len = @@ -16188,9 +16315,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_PROBE_RESP: { fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_timestamp); - add_fixed_field(fixed_tree, tvb, pinfo, 8, add_ff_beacon_interval); - add_fixed_field(fixed_tree, tvb, pinfo, 10, add_ff_cap_info); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_TIMESTAMP); + add_fixed_field(fixed_tree, tvb, pinfo, 8, FIELD_BEACON_INTERVAL); + add_fixed_field(fixed_tree, tvb, pinfo, 10, FIELD_CAP_INFO); offset = 12; /* Size of fixed fields */ tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset); @@ -16201,15 +16328,15 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_MEASUREMENT_PILOT: { fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_timestamp); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_measurement_pilot_int); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_beacon_interval); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_cap_info); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_country_str); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_max_reg_pwr); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_max_tx_pwr); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_tx_pwr_used); - offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, add_ff_transceiver_noise_floor); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TIMESTAMP); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_MEASUREMENT_PILOT_INT); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_CAP_INFO); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_COUNTRY_STR); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_MAX_REG_PWR); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_MAX_TX_PWR); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TX_PWR_USED); + offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TRANSCEIVER_NOISE_FLOOR); /* TODO DS Parameter Set ??? */ tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset); @@ -16219,9 +16346,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre } case MGT_BEACON: /* Dissect protocol payload fields */ fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_timestamp); - add_fixed_field(fixed_tree, tvb, pinfo, 8, add_ff_beacon_interval); - add_fixed_field(fixed_tree, tvb, pinfo, 10, add_ff_cap_info); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_TIMESTAMP); + add_fixed_field(fixed_tree, tvb, pinfo, 8, FIELD_BEACON_INTERVAL); + add_fixed_field(fixed_tree, tvb, pinfo, 10, FIELD_CAP_INFO); offset = 12; /* Size of fixed fields */ tagged_parameter_tree_len = @@ -16237,7 +16364,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_DISASS: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_reason_code); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_REASON_CODE); offset = 2; /* Size of fixed fields */ tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset); if (tagged_parameter_tree_len > 0) { @@ -16250,9 +16377,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_AUTHENTICATION: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_auth_alg); - add_fixed_field(fixed_tree, tvb, pinfo, 2, add_ff_auth_trans_seq); - add_fixed_field(fixed_tree, tvb, pinfo, 4, add_ff_status_code); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_AUTH_ALG); + add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_AUTH_TRANS_SEQ); + add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_STATUS_CODE); offset = 6; /* Size of fixed fields */ tagged_parameter_tree_len = @@ -16270,7 +16397,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre case MGT_DEAUTHENTICATION: fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2); - add_fixed_field(fixed_tree, tvb, pinfo, 0, add_ff_reason_code); + add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_REASON_CODE); offset = 2; /* Size of fixed fields */ tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset); if (tagged_parameter_tree_len > 0) { @@ -16286,7 +16413,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre proto_item *lcl_fixed_hdr; proto_tree *lcl_fixed_tree; lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters"); - offset += add_fixed_field(lcl_fixed_tree, tvb, pinfo, 0, add_ff_action); + offset += add_fixed_field(lcl_fixed_tree, tvb, pinfo, 0, FIELD_ACTION); proto_item_set_len(lcl_fixed_hdr, offset); if (ieee80211_tvb_invalid) @@ -16307,7 +16434,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tre proto_tree *lcl_fixed_tree; lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters"); - offset += add_fixed_field(lcl_fixed_tree, tvb, pinfo, 0, add_ff_action); + offset += add_fixed_field(lcl_fixed_tree, tvb, pinfo, 0, FIELD_ACTION); proto_item_set_len(lcl_fixed_hdr, offset); if (ieee80211_tvb_invalid) @@ -16932,7 +17059,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, offset += 2; /*offset +=*/ add_fixed_field(hdr_tree, tvb, pinfo, offset, - add_ff_block_ack_ssc); + FIELD_BLOCK_ACK_SSC); break; } case 1: /* Extended Compressesd BlockAckReq */ @@ -16948,7 +17075,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, offset += 2; /*offset +=*/ add_fixed_field(hdr_tree, tvb, pinfo, offset, - add_ff_block_ack_ssc); + FIELD_BLOCK_ACK_SSC); break; } case 3: /* Multi-TID BlockAckReq */ @@ -16976,7 +17103,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; - offset += add_fixed_field(bar_mtid_sub_tree, tvb, pinfo, offset, add_ff_block_ack_ssc); + offset += add_fixed_field(bar_mtid_sub_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC); } break; } @@ -17030,7 +17157,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_block_ack_ssc); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC); proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA); /*offset += 128;*/ break; @@ -17053,7 +17180,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, ssn = tvb_get_letohs(tvb, offset); ssn >>= 4; - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_block_ack_ssc); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC); bmap = tvb_get_letoh64(tvb, offset); ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA); ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap); @@ -17081,7 +17208,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, ssn = tvb_get_letohs(tvb, offset); ssn >>= 4; - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_block_ack_ssc); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC); bmap = tvb_get_letoh64(tvb, offset); ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA); ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap); @@ -17114,7 +17241,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; - offset += add_fixed_field(ba_mtid_sub_tree, tvb, pinfo, offset, add_ff_block_ack_ssc); + offset += add_fixed_field(ba_mtid_sub_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC); proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA); offset += 8; } @@ -17140,28 +17267,28 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, case CTRL_SPR: { gboolean isGrant; if(ctrl_type_subtype != CTRL_GRANT_ACK) { - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_dynamic_allocation); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_DYNAMIC_ALLOCATION); } else { /* CTRL_GRANT_ACK have 5 octets that are reserved thus not shown.*/ offset += 5; } /* offset += commented to avoid Clang warnings*/ isGrant = ((ctrl_type_subtype==CTRL_GRANT)||(ctrl_type_subtype==CTRL_GRANT_ACK)); p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY, &isGrant); - add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_beamforming_ctrl); + add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BEAMFORMING_CTRL); break; } case CTRL_SSW: { - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_sector_sweep); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP); /* offset += commented to avoid Clang warnings*/ - add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_sector_sweep_feedback); + add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP_FB); break; } case CTRL_SSW_ACK: case CTRL_SSW_FEEDBACK: { - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_sector_sweep_feedback); - offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_brp_req); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP_FB); + offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BRP_REQ); /* offset += commented to avoid Clang warnings*/ - add_fixed_field(hdr_tree, tvb, pinfo, offset, add_ff_beamformed_link_maintenance); + add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BEAMFORMED_LINK_MAINTAINCE); break; } case CTRL_DMG_DTS: { @@ -17554,7 +17681,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo, msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA); msh_tree = proto_item_add_subtree (msh_fields, ett_msh_control); - add_fixed_field(msh_tree, tvb, pinfo, meshoff, add_ff_mesh_control); + add_fixed_field(msh_tree, tvb, pinfo, meshoff, FIELD_MESH_CONTROL); } } /* end of qos control field */ @@ -18747,7 +18874,7 @@ dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) case 2: col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS"); col_clear(pinfo->cinfo, COL_INFO); - offset += add_fixed_field(tree, tvb, pinfo, offset, add_ff_action); + offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_ACTION); tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset); if (tagged_parameter_tree_len > 0) { tagged_tree = get_tagged_parameter_tree(tree, tvb, offset, |