| /* |
| * Copyright (C) 1999-2015, Broadcom Corporation |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * Notwithstanding the above, under no circumstances may you combine this |
| * software in any way with any other Broadcom software provided under a license |
| * other than the GPL, without Broadcom's express prior written consent. |
| * |
| * Fundamental types and constants relating to WFA NAN |
| * (Neighbor Awareness Networking) |
| * |
| * $Id$ |
| */ |
| #ifndef _NAN_H_ |
| #define _NAN_H_ |
| |
| #include <typedefs.h> |
| #include <proto/802.11.h> |
| |
| |
| /* This marks the start of a packed structure section. */ |
| #include <packed_section_start.h> |
| |
| /* WiFi NAN OUI values */ |
| #define NAN_OUI WFA_OUI /* WiFi OUI */ |
| /* For oui_type field identifying the type and version of the NAN IE. */ |
| #define NAN_OUI_TYPE 0x13 /* Type/Version */ |
| /* IEEE 802.11 vendor specific information element. (Same as P2P_IE_ID.) */ |
| #define NAN_IE_ID 0xdd |
| |
| /* Same as P2P_PUB_AF_CATEGORY and DOT11_ACTION_CAT_PUBLIC */ |
| #define NAN_PUB_AF_CATEGORY 0x04 |
| /* IEEE 802.11 Public Action Frame Vendor Specific. (Same as P2P_PUB_AF_ACTION.) */ |
| #define NAN_PUB_AF_ACTION 0x09 |
| /* Number of octents in hash of service name. (Same as P2P_WFDS_HASH_LEN.) */ |
| #define NAN_SVC_HASH_LEN 6 |
| /* Size of fixed length part of nan_pub_act_frame_t before attributes. */ |
| #define NAN_PUB_ACT_FRAME_FIXED_LEN 6 |
| /* Number of octents in master rank value. */ |
| #define NAN_MASTER_RANK_LEN 8 |
| /* NAN public action frame header size */ |
| #define NAN_PUB_ACT_FRAME_HDR_SIZE (OFFSETOF(nan_pub_act_frame_t, data)) |
| /* NAN network ID */ |
| #define NAN_NETWORK_ID "\x51\x6F\x9A\x01\x00\x00" |
| /* Service Control Type length */ |
| #define NAN_SVC_CONTROL_TYPE_LEN 2 |
| |
| /* Attribute TLV header size */ |
| #define NAN_ATTR_ID_OFF 0 |
| #define NAN_ATTR_LEN_OFF 1 |
| #define NAN_ATTR_DATA_OFF 3 |
| |
| #define NAN_ATTR_ID_LEN 1 /* ID field length */ |
| #define NAN_ATTR_LEN_LEN 2 /* Length field length */ |
| #define NAN_ATTR_HDR_LEN 3 /* ID + 2-byte length field */ |
| |
| /* Vendor-specific public action frame for NAN */ |
| typedef BWL_PRE_PACKED_STRUCT struct nan_pub_act_frame_s { |
| /* NAN_PUB_AF_CATEGORY 0x04 */ |
| uint8 category_id; |
| /* NAN_PUB_AF_ACTION 0x09 */ |
| uint8 action_field; |
| /* NAN_OUI 0x50-6F-9A */ |
| uint8 oui[DOT11_OUI_LEN]; |
| /* NAN_OUI_TYPE 0x13 */ |
| uint8 oui_type; |
| /* One or more NAN Attributes follow */ |
| uint8 data[1]; |
| } BWL_POST_PACKED_STRUCT nan_pub_act_frame_t; |
| |
| /* NAN attributes as defined in the nan spec */ |
| enum { |
| NAN_ATTR_MASTER_IND = 0, |
| NAN_ATTR_CLUSTER = 1, |
| NAN_ATTR_SVC_ID_LIST = 2, |
| NAN_ATTR_SVC_DESCRIPTOR = 3, |
| NAN_ATTR_CONN_CAP = 4, |
| NAN_ATTR_INFRA = 5, |
| NAN_ATTR_P2P = 6, |
| NAN_ATTR_IBSS = 7, |
| NAN_ATTR_MESH = 8, |
| NAN_ATTR_FURTHER_NAN_SD = 9, |
| NAN_ATTR_FURTHER_AVAIL = 10, |
| NAN_ATTR_COUNTRY_CODE = 11, |
| NAN_ATTR_RANGING = 12, |
| NAN_ATTR_VENDOR_SPECIFIC = 221 |
| }; |
| |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ie_s { |
| uint8 id; /* IE ID: NAN_IE_ID 0xDD */ |
| uint8 len; /* IE length */ |
| uint8 oui[DOT11_OUI_LEN]; /* NAN_OUI 50:6F:9A */ |
| uint8 oui_type; /* NAN_OUI_TYPE 0x13 */ |
| uint8 attr[1]; /* var len attributes */ |
| } BWL_POST_PACKED_STRUCT wifi_nan_ie_t; |
| |
| #define NAN_IE_HDR_SIZE (OFFSETOF(wifi_nan_ie_t, attr)) |
| |
| /* master indication record */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_master_ind_attr_s { |
| uint8 id; |
| uint16 len; |
| uint8 master_preference; |
| uint8 random_factor; |
| } BWL_POST_PACKED_STRUCT wifi_nan_master_ind_attr_t; |
| |
| /* cluster attr record */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_cluster_attr_s { |
| uint8 id; |
| uint16 len; |
| uint8 amr[NAN_MASTER_RANK_LEN]; |
| uint8 hop_count; |
| /* Anchor Master Beacon Transmission Time */ |
| uint32 ambtt; |
| } BWL_POST_PACKED_STRUCT wifi_nan_cluster_attr_t; |
| |
| /* container for service ID records */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_svc_id_attr_s { |
| uint8 id; |
| uint16 len; |
| uint8 svcid[NAN_SVC_HASH_LEN]; /* 6*len of srvc IDs */ |
| } BWL_POST_PACKED_STRUCT wifi_nan_svc_id_attr_t; |
| |
| /* service_control bitmap for wifi_nan_svc_descriptor_attr_t below */ |
| #define NAN_SC_PUBLISH 0x0 |
| #define NAN_SC_SUBSCRIBE 0x1 |
| #define NAN_SC_FOLLOWUP 0x2 |
| /* Set to 1 if a Matching Filter field is included in descriptors. */ |
| #define NAN_SC_MATCHING_FILTER_PRESENT 0x8 |
| /* Set to 1 if a Service Response Filter field is included in descriptors. */ |
| #define NAN_SC_SR_FILTER_PRESENT 0x10 |
| /* Set to 1 if a Service Info field is included in descriptors. */ |
| #define NAN_SC_SVC_INFO_PRESENT 0x20 |
| /* range is close proximity only */ |
| #define NAN_SC_RANGE_LIMITED 0x40 |
| |
| /* Service descriptor */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_svc_descriptor_attr_s { |
| /* Attribute ID - 0x03. */ |
| uint8 id; |
| /* Length of the following fields in the attribute */ |
| uint16 len; |
| /* Hash of the Service Name */ |
| uint8 svc_hash[NAN_SVC_HASH_LEN]; |
| /* Publish or subscribe instance id */ |
| uint8 instance_id; |
| /* Requestor Instance ID */ |
| uint8 requestor_id; |
| /* Service Control Bitmask. Also determines what data follows. */ |
| uint8 svc_control; |
| /* Optional fields follow */ |
| } BWL_POST_PACKED_STRUCT wifi_nan_svc_descriptor_attr_t; |
| |
| /* IBSS attribute */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ibss_attr_s { |
| /* Attribute ID - 0x07. */ |
| uint8 id; |
| /* Length of the following fields in the attribute */ |
| uint16 len; |
| /* BSSID of the ibss */ |
| struct ether_addr bssid; |
| /* |
| map control:, bits: |
| [0-3]: Id for associated further avail map attribute |
| [4-5]: avail interval duration: 0:16ms; 1:32ms; 2:64ms; 3:reserved |
| [6] : repeat : 0 - applies to next DW, 1: 16 intervals max? wtf? |
| [7] : reserved |
| */ |
| uint8 map_ctrl; |
| /* avail. intervals bitmap, var len */ |
| uint8 avail_bmp[1]; |
| } BWL_POST_PACKED_STRUCT wifi_nan_ibss_attr_t; |
| |
| /* Further Availability MAP attr */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_favail_attr_s { |
| /* Attribute ID - 0x0A. */ |
| uint8 id; |
| /* Length of the following fields in the attribute */ |
| uint16 len; |
| /* MAP id: val [0..15], values[16-255] reserved */ |
| uint8 map_id; |
| /* availibility entry, var len */ |
| uint8 avil_entry[1]; |
| } BWL_POST_PACKED_STRUCT wifi_nan_favail_attr_t; |
| |
| /* Further Availability MAP attr */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_avail_entry_s { |
| /* |
| entry control |
| [0-1]: avail interval duration: 0:16ms; 1:32ms; 2:64ms; |
| [2:7] reserved |
| */ |
| uint8 entry_ctrl; |
| /* operating class: freq band etc IEEE 802.11 */ |
| uint8 opclass; |
| /* channel number */ |
| uint8 chan; |
| uint8 map_id; |
| /* avail bmp, var len */ |
| uint8 avail_bmp[1]; |
| } BWL_POST_PACKED_STRUCT wifi_nan_avail_entry_t; |
| |
| /* Map control Field */ |
| #define NAN_MAPCTRL_IDMASK 0x7 |
| #define NAN_MAPCTRL_DURSHIFT 3 |
| #define NAN_MAPCTRL_REPEAT 0x40 |
| |
| #define NAN_VENDOR_TYPE_RTT 0 |
| #define NAN_VENDOR_TYPE_P2P 1 |
| |
| /* Vendor Specific Attribute */ |
| typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_vendor_attr_s { |
| uint8 id; /* 0xDD */ |
| uint16 len; /* IE length */ |
| uint8 oui[DOT11_OUI_LEN]; /* 00-90-4C */ |
| uint8 type; /* attribute type */ |
| uint8 attr[1]; /* var len attributes */ |
| } BWL_POST_PACKED_STRUCT wifi_nan_vendor_attr_t; |
| |
| #define NAN_VENDOR_HDR_SIZE (OFFSETOF(wifi_nan_vendor_attr_t, attr)) |
| |
| /* This marks the end of a packed structure section. */ |
| #include <packed_section_end.h> |
| |
| #endif /* _NAN_H_ */ |