wireshark/epan/dissectors/packet-ieee80211.h

271 lines
10 KiB
C

/* packet-ieee80211.h
* Routines for Wireless LAN (IEEE 802.11) dissection
*
* Copyright 2000, Axis Communications AB
* Inquiries/bugreports should be sent to Johan.Jorgensen@axis.com
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* Copied from README.developer
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "ws_symbol_export.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
void dissect_wifi_p2p_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
int offset, gint size);
int dissect_wifi_p2p_public_action(packet_info *pinfo, proto_tree *tree,
tvbuff_t *tvb, int offset);
int dissect_wifi_p2p_action(proto_tree *tree, tvbuff_t *tvb, int offset);
void dissect_wifi_p2p_anqp(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
int offset, gboolean request);
void dissect_wifi_display_ie(packet_info *pinfo, proto_tree *tree,
tvbuff_t *tvb, int offset, gint size);
int add_tagged_field(packet_info *pinfo, proto_tree *tree,
tvbuff_t *tvb, int offset, int ftype,
const guint8 *valid_element_ids,
guint valid_element_ids_count);
#define MAX_SSID_LEN 32
#define MAX_PROTECT_LEN 10
/*
* Table of data rates, indexed by MCS index, bandwidth (0 for 20, 1 for 40),
* amd guard interval (0 for long, 1 for short).
*/
#define MAX_MCS_INDEX 76
WS_DLL_PUBLIC const guint16 ieee80211_ht_Dbps[MAX_MCS_INDEX+1];
float ieee80211_htrate(int mcs_index, gboolean bandwidth, gboolean short_gi);
WS_DLL_PUBLIC value_string_ext ieee80211_supported_rates_vals_ext;
WS_DLL_PUBLIC
gboolean is_broadcast_bssid(const address *bssid);
#ifdef __cplusplus
}
#endif /* __cplusplus */
/*
* Extract the protocol version from the frame control field
*/
#define FCF_PROT_VERSION(x) ((x) & 0x3)
/*
* Extract the frame type from the frame control field.
*/
#define FCF_FRAME_TYPE(x) (((x) & 0xC) >> 2)
/*
* Extract the frame subtype from the frame control field.
*/
#define FCF_FRAME_SUBTYPE(x) (((x) & 0xF0) >> 4)
/*
* Extract the control frame extension from the frame control field.
*/
#define FCF_FRAME_EXTENSION(x) (((x) & 0xF00) >> 8)
/*
* Checks if the frame is control frame extension.
*/
#define IS_FRAME_EXTENSION(x) ((FCF_FRAME_TYPE(x) == 0x1 && FCF_FRAME_SUBTYPE(x) == 0x6) ? 1 : 0)
/*
* Convert the frame type and subtype from the frame control field into
* one of the MGT_, CTRL_, or DATA_ values.
* Now includes extension subtype in case present.
*/
#define COMPOSE_FRAME_TYPE(x) ((FCF_FRAME_TYPE(x) == 0x1 && FCF_FRAME_SUBTYPE(x) == 0x6) ? (((x & 0x0C)<< 6) + ((x) & 0xF0) + FCF_FRAME_EXTENSION(x)) : (((x & 0x0C)<< 2)+FCF_FRAME_SUBTYPE(x))) /* Create key to (sub)type */
/*
* The subtype field of a data frame is, in effect, composed of 4 flag
* bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
* any data), and QoS.
*/
#define DATA_FRAME_IS_CF_ACK(x) ((x) & 0x01)
#define DATA_FRAME_IS_CF_POLL(x) ((x) & 0x02)
#define DATA_FRAME_IS_NULL(x) ((x) & 0x04)
#define DATA_FRAME_IS_QOS(x) ((x) & 0x08)
/*
* Extract the flags from the frame control field.
* Now includes subset of flags when the subtype is control frame extension.
*/
#define FCF_FLAGS(x) ((FCF_FRAME_TYPE(x) == 0x1 && FCF_FRAME_SUBTYPE(x) == 0x6) ? (((x) & 0xF000) >> 12) : (((x) & 0xFF00) >> 8))
/*
* Bits from the flags field.
*/
#define FLAG_TO_DS 0x01
#define FLAG_FROM_DS 0x02
#define FLAG_MORE_FRAGMENTS 0x04
#define FLAG_RETRY 0x08
#define FLAG_POWER_MGT 0x10
#define FLAG_MORE_DATA 0x20
#define FLAG_PROTECTED 0x40
#define FLAG_ORDER 0x80 /* overloaded for "has HT control" */
/*
* Test bits in the flags field.
*/
/*
* XXX - Only HAVE_FRAGMENTS, IS_PROTECTED, and HAS_HT_CONTROL
* are in use. Should the rest be removed?
*/
#define IS_TO_DS(x) ((x) & FLAG_TO_DS)
#define IS_FROM_DS(x) ((x) & FLAG_FROM_DS)
#define HAVE_FRAGMENTS(x) ((x) & FLAG_MORE_FRAGMENTS)
#define IS_RETRY(x) ((x) & FLAG_RETRY)
#define POWER_MGT_STATUS(x) ((x) & FLAG_POWER_MGT)
#define HAS_MORE_DATA(x) ((x) & FLAG_MORE_DATA)
#define IS_PROTECTED(x) ((x) & FLAG_PROTECTED)
#define IS_STRICTLY_ORDERED(x) ((x) & FLAG_ORDER) /* for non-QoS data frames */
#define HAS_HT_CONTROL(x) ((x) & FLAG_ORDER) /* for management and QoS data frames */
/*
* Extract subfields from the flags field.
*/
#define FLAGS_DS_STATUS(x) ((x) & (FLAG_FROM_DS|FLAG_TO_DS))
/*
* Extract an indication of the types of addresses in a data frame from
* the frame control field.
*/
#define FCF_ADDR_SELECTOR(x) ((x) & ((FLAG_TO_DS|FLAG_FROM_DS) << 8))
#define DATA_ADDR_T1 0
#define DATA_ADDR_T2 (FLAG_FROM_DS << 8)
#define DATA_ADDR_T3 (FLAG_TO_DS << 8)
#define DATA_ADDR_T4 ((FLAG_TO_DS|FLAG_FROM_DS) << 8)
/*
* COMPOSE_FRAME_TYPE() values for management frames.
*/
#define MGT_ASSOC_REQ 0x00 /* association request */
#define MGT_ASSOC_RESP 0x01 /* association response */
#define MGT_REASSOC_REQ 0x02 /* reassociation request */
#define MGT_REASSOC_RESP 0x03 /* reassociation response */
#define MGT_PROBE_REQ 0x04 /* Probe request */
#define MGT_PROBE_RESP 0x05 /* Probe response */
#define MGT_MEASUREMENT_PILOT 0x06 /* Measurement Pilot */
#define MGT_BEACON 0x08 /* Beacon frame */
#define MGT_ATIM 0x09 /* ATIM */
#define MGT_DISASS 0x0A /* Disassociation */
#define MGT_AUTHENTICATION 0x0B /* Authentication */
#define MGT_DEAUTHENTICATION 0x0C /* Deauthentication */
#define MGT_ACTION 0x0D /* Action */
#define MGT_ACTION_NO_ACK 0x0E /* Action No Ack */
#define MGT_ARUBA_WLAN 0x0F /* Aruba WLAN Specific */
/*
* COMPOSE_FRAME_TYPE() values for control frames.
* 0x160 - 0x16A are for control frame extension where type = 1 and subtype =6.
*/
#define CTRL_BEAMFORM_RPT_POLL 0x14 /* Beamforming Report */
#define CTRL_VHT_NDP_ANNC 0x15 /* VHT NDP Announcement */
#define CTRL_POLL 0x162 /* Poll */
#define CTRL_SPR 0x163 /* Service Period Request */
#define CTRL_GRANT 0x164 /* Grant */
#define CTRL_DMG_CTS 0x165 /* DMG Clear to Send */
#define CTRL_DMG_DTS 0x166 /* DMG Denial to Send */
#define CTRL_GRANT_ACK 0x167 /* Grant Acknowledgment */
#define CTRL_SSW 0x168 /* Sector Sweep */
#define CTRL_SSW_FEEDBACK 0x169 /* Sector Sweep Feedback */
#define CTRL_SSW_ACK 0x16A /* Sector Sweep Acknowledgment */
#define CTRL_CONTROL_WRAPPER 0x17 /* Control Wrapper */
#define CTRL_BLOCK_ACK_REQ 0x18 /* Block ack Request */
#define CTRL_BLOCK_ACK 0x19 /* Block ack */
#define CTRL_PS_POLL 0x1A /* power-save poll */
#define CTRL_RTS 0x1B /* request to send */
#define CTRL_CTS 0x1C /* clear to send */
#define CTRL_ACKNOWLEDGEMENT 0x1D /* acknowledgement */
#define CTRL_CFP_END 0x1E /* contention-free period end */
#define CTRL_CFP_ENDACK 0x1F /* contention-free period end/ack */
/*
* COMPOSE_FRAME_TYPE() values for data frames.
*/
#define DATA 0x20 /* Data */
#define DATA_CF_ACK 0x21 /* Data + CF-Ack */
#define DATA_CF_POLL 0x22 /* Data + CF-Poll */
#define DATA_CF_ACK_POLL 0x23 /* Data + CF-Ack + CF-Poll */
#define DATA_NULL_FUNCTION 0x24 /* Null function (no data) */
#define DATA_CF_ACK_NOD 0x25 /* CF-Ack (no data) */
#define DATA_CF_POLL_NOD 0x26 /* CF-Poll (No data) */
#define DATA_CF_ACK_POLL_NOD 0x27 /* CF-Ack + CF-Poll (no data) */
#define DATA_QOS_DATA 0x28 /* QoS Data */
#define DATA_QOS_DATA_CF_ACK 0x29 /* QoS Data + CF-Ack */
#define DATA_QOS_DATA_CF_POLL 0x2A /* QoS Data + CF-Poll */
#define DATA_QOS_DATA_CF_ACK_POLL 0x2B /* QoS Data + CF-Ack + CF-Poll */
#define DATA_QOS_NULL 0x2C /* QoS Null */
#define DATA_QOS_CF_POLL_NOD 0x2E /* QoS CF-Poll (No Data) */
#define DATA_QOS_CF_ACK_POLL_NOD 0x2F /* QoS CF-Ack + CF-Poll (No Data) */
/*
* COMPOSE_FRAME_TYPE() values for extension frames.
*/
#define EXTENSION_DMG_BEACON 0x30 /* Extension DMG beacon */
typedef struct _wlan_stats {
guint8 channel;
guint8 ssid_len;
guchar ssid[MAX_SSID_LEN];
gchar protection[MAX_PROTECT_LEN];
gboolean fc_retry;
} wlan_stats_t;
typedef struct _wlan_hdr {
address bssid;
address src;
address dst;
guint16 type;
struct _wlan_stats stats;
} wlan_hdr_t;
#define WLANCAP_MAGIC_COOKIE_BASE 0x80211000
#define WLANCAP_MAGIC_COOKIE_V1 0x80211001
#define WLANCAP_MAGIC_COOKIE_V2 0x80211002
/* UAT entry structure. */
typedef struct {
guint8 key;
gchar *string;
} uat_wep_key_record_t;
/*
* Editor modelines
*
* Local Variables:
* c-basic-offset: 2
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* ex: set shiftwidth=2 tabstop=8 expandtab:
* :indentSize=2:tabSize=8:noTabs=true:
*/