/* * Neighbor Awareness Networking * * Copyright (C) 1999-2017, 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. * * <> * * $Id: wl_cfgnan.h 650782 2016-07-22 11:51:53Z $ */ #ifndef _wl_cfgnan_h_ #define _wl_cfgnan_h_ #define NAN_IOCTL_BUF_SIZE 512 #define NAN_EVENT_NAME_MAX_LEN 40 #define NAN_CONFIG_ATTR_MAX_LEN 24 #define NAN_RTT_IOVAR_BUF_SIZE 1024 #define WL_NAN_EVENT_CLEAR_BIT 32 #define NAN_EVENT_MASK_ALL 0x7fffffff #define NAN_MAXIMUM_ID_NUMBER 255 #define NAN_MAXIMUM_MASTER_PREFERENCE 255 #ifdef NAN_DP #define MAX_IF_ADD_WAIT_TIME 1000 #endif /* NAN_DP */ #define NAN_INVALID_ID(id) (id > NAN_MAXIMUM_ID_NUMBER) #define NAN_INVALID_ROLE(role) (role > WL_NAN_ROLE_ANCHOR_MASTER) #define NAN_INVALID_CHANSPEC(chanspec) ((chanspec == INVCHANSPEC) || \ (chanspec == 0)) #define NAN_INVALID_EVENT(num) ((num < WL_NAN_EVENT_START) || \ (num >= WL_NAN_EVENT_INVALID)) #define NAN_INVALID_PROXD_EVENT(num) (num != WLC_E_PROXD_NAN_EVENT) #define NAN_EVENT_BIT(event) (1U << (event - WL_NAN_EVENT_START)) #define NAME_TO_STR(name) #name #define NAN_ID_CTRL_SIZE ((NAN_MAXIMUM_ID_NUMBER/8) + 1) #define SUPP_EVENT_PREFIX "CTRL-EVENT-" #define EVENT_RTT_STATUS_STR "NAN-RTT-STATUS" #define TIMESTAMP_PREFIX "TSF=" /* timestamp */ #define AMR_PREFIX "AMR=" /* anchor master rank */ #define DISTANCE_PREFIX "DIST=" /* distance */ #define ATTR_PREFIX "ATTR=" /* attribute */ #define ROLE_PREFIX "ROLE=" /* role */ #define CHAN_PREFIX "CHAN=" /* channel */ #define BITMAP_PREFIX "BMAP=" /* bitmap */ #define DEBUG_PREFIX "DEBUG=" /* debug enable/disable flag */ #define DW_LEN_PREFIX "DW_LEN=" /* discovery window length */ #define DW_INT_PREFIX "DW_INT=" /* discovery window interval */ #define STATUS_PREFIX "STATUS=" /* status */ #define PUB_ID_PREFIX "PUB_ID=" /* publisher id */ #define SUB_ID_PREFIX "SUB_ID=" /* subscriber id */ #define INSTANCE_ID_PREFIX "LOCAL_ID=" /* Instance id */ #define REMOTE_INSTANCE_ID_PREFIX "PEER_ID=" /* Peer id */ #ifdef NAN_P2P_CONFIG #define P2P_IE_PREFIX "P2P_IE=" /* p2p ie id */ #define IE_EN_PREFIX "ENBLE_IE=" /* enable p2p ie */ #endif #define PUB_PR_PREFIX "PUB_PR=" /* publish period */ #define PUB_INT_PREFIX "PUB_INT=" /* publish interval (ttl) */ #define CLUS_ID_PREFIX "CLUS_ID=" /* cluster id */ #define IF_ADDR_PREFIX "IF_ADDR=" /* IF address */ #define MAC_ADDR_PREFIX "MAC_ADDR=" /* mac address */ #define SVC_HASH_PREFIX "SVC_HASH=" /* service hash */ #define SVC_INFO_PREFIX "SVC_INFO=" /* service information */ #define HOP_COUNT_PREFIX "HOP_COUNT=" /* hop count */ #define MASTER_PREF_PREFIX "MASTER_PREF=" /* master preference */ #define ACTIVE_OPTION "ACTIVE" /* Active Subscribe. */ #define SOLICITED_OPTION "SOLICITED" /* Solicited Publish. */ #define UNSOLICITED_OPTION "UNSOLICITED" /* Unsolicited Publish. */ /* anchor master beacon transmission time */ #define AMBTT_PREFIX "AMBTT=" /* passive scan period for cluster merge */ #define SCAN_PERIOD_PREFIX "SCAN_PERIOD=" /* passive scan interval for cluster merge */ #define SCAN_INTERVAL_PREFIX "SCAN_INTERVAL=" #define BCN_INTERVAL_PREFIX "BCN_INTERVAL=" #define NAN_EVENT_STR_STARTED "NAN-STARTED" #define NAN_EVENT_STR_JOINED "NAN-JOINED" #define NAN_EVENT_STR_ROLE_CHANGE "NAN-ROLE-CHANGE" #define NAN_EVENT_STR_SCAN_COMPLETE "NAN-SCAN-COMPLETE" #define NAN_EVENT_STR_SDF_RX "NAN-SDF-RX" #define NAN_EVENT_STR_REPLIED "NAN-REPLIED" #define NAN_EVENT_STR_TERMINATED "NAN-TERMINATED" #define NAN_EVENT_STR_FOLLOWUP_RX "NAN-FOLLOWUP-RX" #define NAN_EVENT_STR_STATUS_CHANGE "NAN-STATUS-CHANGE" #define NAN_EVENT_STR_MERGED "NAN-MERGED" #define NAN_EVENT_STR_STOPPED "NAN-STOPPED" #define NAN_EVENT_STR_P2P_RX "NAN-P2P-RX" #define NAN_EVENT_STR_WINDOW_BEGUN_P2P "NAN-WINDOW-BEGUN-P2P" #define NAN_EVENT_STR_WINDOW_BEGUN_MESH "NAN-WINDOW-BEGUN-MESH" #define NAN_EVENT_STR_WINDOW_BEGUN_IBSS "NAN-WINDOW-BEGUN-IBSS" #define NAN_EVENT_STR_WINDOW_BEGUN_RANGING "NAN-WINDOW-BEGUN-RANGING" #define NAN_EVENT_STR_INVALID "NAN-INVALID" #ifdef NAN_DP enum nan_dp_states { NAN_DP_STATE_DISABLED = 0, NAN_DP_STATE_ENABLED = 1 }; #endif /* NAN_DP */ enum nan_de_event_type { NAN_EVENT_START = 0, NAN_EVENT_JOIN = 1 }; typedef struct nan_str_data { u8 *data; u32 dlen; } nan_str_data_t; typedef struct nan_mac_list { u8 *list; u32 num_mac_addr; } nan_mac_list_t; typedef struct nan_config_attr { char name[NAN_CONFIG_ATTR_MAX_LEN]; /* attribute name */ u16 type; /* attribute xtlv type */ } nan_config_attr_t; typedef struct wl_nan_sid_beacon_tune { u8 sid_enable; /* flag for sending service id in beacon */ u8 sid_count; /* Limit for number of SIDs to be included in Beacons */ } wl_nan_sid_beacon_ctrl_t; typedef struct nan_cmd_data { nan_config_attr_t attr; /* set config attributes */ nan_str_data_t svc_hash; /* service hash */ nan_str_data_t svc_info; /* service information */ nan_str_data_t p2p_info; /* p2p information */ struct ether_addr mac_addr; /* mac address */ struct ether_addr clus_id; /* cluster id */ struct ether_addr if_addr; /* if addr */ u32 beacon_int; /* beacon interval */ u32 ttl; /* time to live */ u32 period; /* publish period */ u32 bmap; /* bitmap */ u32 role; /* role */ wl_nan_instance_id_t pub_id; /* publisher id */ wl_nan_instance_id_t sub_id; /* subscriber id */ wl_nan_instance_id_t local_id; /* Local id */ wl_nan_instance_id_t remote_id; /* Remote id */ uint32 flags; /* Flag bits */ u16 dw_len; /* discovery window length */ u16 master_pref; /* master preference */ chanspec_t chanspec; /* channel */ u8 debug_flag; /* debug enable/disable flag */ u8 life_count; /* life count of the instance */ u8 srf_type; /* SRF type */ u8 srf_include; /* SRF include */ u8 use_srf; /* use SRF */ nan_str_data_t rx_match; /* matching filter rx */ nan_str_data_t tx_match; /* matching filter tx */ nan_mac_list_t mac_list; /* mac list */ uint8 hop_count_limit; /* hop count limit */ uint8 nan_band; /* nan band */ uint8 support_5g; /* To decide dual band support */ uint32 nan_oui; /* configured nan oui */ #ifdef NAN_DP struct ether_addr data_cluster_id; /* data cluster id */ #endif /* NAN_DP */ wl_nan_sid_beacon_ctrl_t sid_beacon; /* sending service id in beacon */ } nan_cmd_data_t; typedef int (nan_func_t)(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); typedef struct nan_cmd { const char *name; /* command name */ nan_func_t *func; /* command hadler */ } nan_cmd_t; typedef struct nan_event_hdr { u16 event_subtype; u32 flags; /* future use */ } nan_event_hdr_t; typedef struct wl_nan_tlv_data { wl_nan_status_t nstatus; /* status data */ wl_nan_disc_params_t params; /* discovery parameters */ struct ether_addr mac_addr; /* peer mac address */ struct ether_addr clus_id; /* cluster id */ nan_str_data_t svc_info; /* service info */ nan_str_data_t vend_info; /* vendor info */ /* anchor master beacon transmission time */ u32 ambtt; u32 dev_role; /* device role */ u16 inst_id; /* instance id */ u16 peer_inst_id; /* Peer instance id */ u16 pub_id; /* publisher id */ u16 sub_id; /* subscriber id */ u16 master_pref; /* master preference */ chanspec_t chanspec; /* channel */ u8 amr[NAN_MASTER_RANK_LEN]; /* anchor master role */ u8 svc_name[WL_NAN_SVC_HASH_LEN]; /* service name */ u8 hop_count; /* hop count */ u8 enabled; /* nan status flag */ nan_scan_params_t scan_params; /* scan_param */ int reason_code; /* reason code */ } wl_nan_tlv_data_t; typedef struct _nan_de_event_data { wl_nan_cfg_status_t *nstatus; u8 nan_de_evt_type; } nan_de_event_data_t; typedef struct _nan_hal_resp { unsigned short instance_id; unsigned short subcmd; int status; int value; } nan_hal_resp_t; #ifdef NAN_DP typedef struct nan_data_path_peer { struct ether_addr addr; /* peer mac address */ chanspec_t chanspec; /* Channel Specification */ } nan_data_path_peer_t; #endif /* NAN_DP */ extern int wl_cfgnan_set_vars_cbfn(void *ctx, uint8 *tlv_buf, uint16 type, uint16 len); extern int wl_cfgnan_enable_events(struct net_device *ndev, struct bcm_cfg80211 *cfg); extern int wl_cfgnan_start_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_stop_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_support_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_status_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_pub_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_p2p_ie_add_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_p2p_ie_enable_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_p2p_ie_del_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_sub_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_cancel_pub_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_cancel_sub_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_transmit_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_set_config_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_rtt_config_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); extern int wl_cfgnan_rtt_find_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); #ifdef WL_NAN_DEBUG extern int wl_cfgnan_debug_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); #endif /* WL_NAN_DEBUG */ extern int wl_cfgnan_cmd_handler(struct net_device *dev, struct bcm_cfg80211 *cfg, char *cmd, int cmd_len); extern s32 wl_cfgnan_notify_nan_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, const wl_event_msg_t *e, void *data); extern s32 wl_cfgnan_notify_proxd_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, const wl_event_msg_t *e, void *data); extern int wl_cfgnan_generate_inst_id(struct bcm_cfg80211 *cfg, uint8 inst_type, uint8 *p_inst_id); extern int wl_cfgnan_validate_inst_id(struct bcm_cfg80211 *cfg, uint8 inst_id); extern int wl_cfgnan_remove_inst_id(struct bcm_cfg80211 *cfg, uint8 inst_id); extern int wl_cfgnan_get_inst_type(struct bcm_cfg80211 *cfg, uint8 inst_id, uint8 *inst_type); typedef enum { NAN_ATTRIBUTE_HEADER = 100, NAN_ATTRIBUTE_HANDLE, NAN_ATTRIBUTE_TRANSAC_ID, /* NAN Enable request attributes */ NAN_ATTRIBUTE_5G_SUPPORT, NAN_ATTRIBUTE_CLUSTER_LOW, NAN_ATTRIBUTE_CLUSTER_HIGH, NAN_ATTRIBUTE_SID_BEACON, NAN_ATTRIBUTE_SYNC_DISC_5G, NAN_ATTRIBUTE_RSSI_CLOSE, NAN_ATTRIBUTE_RSSI_MIDDLE, NAN_ATTRIBUTE_RSSI_PROXIMITY, NAN_ATTRIBUTE_HOP_COUNT_LIMIT, NAN_ATTRIBUTE_RANDOM_TIME, NAN_ATTRIBUTE_MASTER_PREF, NAN_ATTRIBUTE_PERIODIC_SCAN_INTERVAL, /* Nan Publish/Subscribe request Attributes */ NAN_ATTRIBUTE_PUBLISH_ID, NAN_ATTRIBUTE_TTL, NAN_ATTRIBUTE_PERIOD, NAN_ATTRIBUTE_REPLIED_EVENT_FLAG, NAN_ATTRIBUTE_PUBLISH_TYPE, NAN_ATTRIBUTE_TX_TYPE, NAN_ATTRIBUTE_PUBLISH_COUNT, NAN_ATTRIBUTE_SERVICE_NAME_LEN, NAN_ATTRIBUTE_SERVICE_NAME, NAN_ATTRIBUTE_SERVICE_SPECIFIC_INFO_LEN, NAN_ATTRIBUTE_SERVICE_SPECIFIC_INFO, NAN_ATTRIBUTE_RX_MATCH_FILTER_LEN, NAN_ATTRIBUTE_RX_MATCH_FILTER, NAN_ATTRIBUTE_TX_MATCH_FILTER_LEN, NAN_ATTRIBUTE_TX_MATCH_FILTER, NAN_ATTRIBUTE_SUBSCRIBE_ID, NAN_ATTRIBUTE_SUBSCRIBE_TYPE, NAN_ATTRIBUTE_SERVICERESPONSEFILTER, NAN_ATTRIBUTE_SERVICERESPONSEINCLUDE, NAN_ATTRIBUTE_USESERVICERESPONSEFILTER, NAN_ATTRIBUTE_SSIREQUIREDFORMATCHINDICATION, NAN_ATTRIBUTE_SUBSCRIBE_MATCH, NAN_ATTRIBUTE_SUBSCRIBE_COUNT, NAN_ATTRIBUTE_MAC_ADDR, NAN_ATTRIBUTE_MAC_ADDR_LIST, NAN_ATTRIBUTE_MAC_ADDR_LIST_NUM_ENTRIES, NAN_ATTRIBUTE_PUBLISH_MATCH, /* Nan Event attributes */ NAN_ATTRIBUTE_ENABLE_STATUS, NAN_ATTRIBUTE_JOIN_STATUS, NAN_ATTRIBUTE_ROLE, NAN_ATTRIBUTE_CHANNEL, /* channel */ NAN_ATTRIBUTE_PEER_ID, NAN_ATTRIBUTE_INST_ID, NAN_ATTRIBUTE_OUI, NAN_ATTRIBUTE_DATA_IF_ADD, /* NAN DP Interface Address */ NAN_ATTRIBUTE_STATUS, NAN_ATTRIBUTE_DE_EVENT_TYPE } NAN_ATTRIBUTE; #define NAN_BLOOM_LENGTH_DEFAULT 240 #define NAN_SRF_MAX_MAC (NAN_BLOOM_LENGTH_DEFAULT / ETHER_ADDR_LEN) #ifdef NAN_DP int wl_cfgnan_data_path_open_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); int wl_cfgnan_data_path_close_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg, char *cmd, int size, nan_cmd_data_t *cmd_data); #endif /* NAN_DP */ #endif /* _wl_cfgnan_h_ */