hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
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
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Neighbor Awareness Networking
 *
 * Copyright (C) 1999-2019, 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 559906 2015-05-29 02:42:35Z $
 */
 
#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_INVALID_ID(id)    (id > 255)
#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 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"
 
typedef struct nan_str_data {
   u8 *data;
   u32 dlen;
} nan_str_data_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 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 pub_int;                    /* publish interval (ttl) */
   u32 pub_pr;                        /* publish period */
   u32 bmap;                        /* bitmap */
   u32 role;                        /* role */
   u16 pub_id;                        /* publisher id */
   u16 sub_id;                        /* subscriber id */
   u16 local_id;                    /* Local id */
   u16 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 */
} 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 */
} wl_nan_tlv_data_t;
 
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);
 
#endif    /* _wl_cfgnan_h_ */