diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c index 8d3fe1a21..c9f47022c 100644 --- a/src/common/ieee802_11_common.c +++ b/src/common/ieee802_11_common.c @@ -89,6 +89,21 @@ static int ieee802_11_parse_vendor_specific(u8 *pos, size_t elen, } break; + case OUI_BROADCOM: + switch (pos[3]) { + case VENDOR_HT_CAPAB_OUI_TYPE: + elems->vendor_ht_cap = pos; + elems->vendor_ht_cap_len = elen; + break; + default: + wpa_printf(MSG_MSGDUMP, "Unknown Broadcom " + "information element ignored " + "(type=%d len=%lu)\n", + pos[3], (unsigned long) elen); + return -1; + } + break; + default: wpa_printf(MSG_MSGDUMP, "unknown vendor specific information " "element ignored (vendor OUI %02x:%02x:%02x " diff --git a/src/common/ieee802_11_common.h b/src/common/ieee802_11_common.h index 4f3f4bed0..566da96f5 100644 --- a/src/common/ieee802_11_common.h +++ b/src/common/ieee802_11_common.h @@ -61,6 +61,8 @@ struct ieee802_11_elems { u8 ht_operation_len; u8 *assoc_comeback; u8 assoc_comeback_len; + u8 *vendor_ht_cap; + u8 vendor_ht_cap_len; }; typedef enum { ParseOK = 0, ParseUnknown = 1, ParseFailed = -1 } ParseRes; diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h index 611d1e084..49fe69d1e 100644 --- a/src/common/ieee802_11_defs.h +++ b/src/common/ieee802_11_defs.h @@ -578,4 +578,9 @@ struct mimo_pwr_save_action { #define WME_TSPEC_DIRECTION_DOWNLINK 1 #define WME_TSPEC_DIRECTION_BI_DIRECTIONAL 3 + +#define OUI_BROADCOM 0x00904c /* Broadcom (Epigram) */ + +#define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */ + #endif /* IEEE802_11_DEFS_H */