hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * 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.
 *
 * <<Broadcom-WL-IPTag/Open:>>
 *
 * $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 <A/B/AUTO> */
   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_ */