xref: /freebsd/usr.sbin/bsnmpd/modules/snmp_wlan/wlan_snmp.h (revision ab00ac327a66a53edaac95b536b209db3ae2cd9f)
1 /*-
2  * Copyright (c) 2010 The FreeBSD Foundation
3  * All rights reserved.
4  *
5  * This software was developed by Shteryana Sotirova Shopova under
6  * sponsorship from the FreeBSD Foundation.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * $FreeBSD$
30  */
31 
32 #define	WLAN_IFMODE_MAX				WlanIfaceOperatingModeType_tdma
33 #define	WLAN_COUNTRY_CODE_SIZE			3
34 #define	WLAN_BGSCAN_IDLE_MIN			100 /* XXX */
35 #define	WLAN_SCAN_VALID_MIN			10 /* XXX */
36 #define	WLAN_TDMA_MAXSLOTS			2 /* XXX */
37 
38 struct wlan_iface;
39 
40 struct wlan_peer {
41 	uint8_t				pmac[IEEE80211_ADDR_LEN]; /* key */
42 	uint16_t			associd;
43 	uint16_t			vlan;
44 	uint16_t			frequency;
45 	uint32_t			fflags;
46 	uint8_t				txrate;
47 	int8_t				rssi;
48 	uint16_t			idle;
49 	uint16_t			txseqs;
50 	uint16_t			rxseqs;
51 	uint16_t			txpower;
52 	uint8_t				capinfo;
53 	uint32_t			state;
54 	uint16_t			local_id;
55 	uint16_t			peer_id;
56 	SLIST_ENTRY(wlan_peer)		wp;
57 };
58 
59 SLIST_HEAD(wlan_peerlist, wlan_peer);
60 
61 struct wlan_scan_result {
62 	uint8_t				ssid[IEEE80211_NWID_LEN + 1];
63 	uint8_t				bssid[IEEE80211_ADDR_LEN];
64 	uint8_t				opchannel;
65 	int8_t				rssi;
66 	uint16_t			frequency;
67 	int8_t				noise;
68 	uint16_t			bintval;
69 	uint8_t				capinfo;
70 	struct wlan_iface		*pwif;
71 	SLIST_ENTRY(wlan_scan_result)	wsr;
72 };
73 
74 SLIST_HEAD(wlan_scanlist, wlan_scan_result);
75 
76 struct wlan_mac_mac {
77 	uint8_t				mac[IEEE80211_ADDR_LEN];
78 	enum RowStatus			mac_status;
79 	SLIST_ENTRY(wlan_mac_mac)	wm;
80 };
81 
82 SLIST_HEAD(wlan_maclist, wlan_mac_mac);
83 
84 struct wlan_mesh_route {
85 	struct ieee80211req_mesh_route	imroute;
86 	enum RowStatus			mroute_status;
87 	SLIST_ENTRY(wlan_mesh_route)	wr;
88 };
89 
90 SLIST_HEAD(wlan_mesh_routes, wlan_mesh_route);
91 
92 struct wlan_iface {
93 	char				wname[IFNAMSIZ];
94 	uint32_t			index;
95 	char				pname[IFNAMSIZ];
96 	enum WlanIfaceOperatingModeType	mode;
97 	uint32_t			flags;
98 	uint8_t				dbssid[IEEE80211_ADDR_LEN];
99 	uint8_t				dlmac[IEEE80211_ADDR_LEN];
100 	enum RowStatus			status;
101 	enum wlanIfaceState		state;
102 	uint8_t				internal;
103 
104 	uint32_t			drivercaps;
105 	uint32_t			cryptocaps;
106 	uint32_t			htcaps;
107 
108 	uint32_t			packet_burst;
109 	uint8_t				country_code[WLAN_COUNTRY_CODE_SIZE];
110 	enum WlanRegDomainCode		reg_domain;
111 	uint8_t				desired_ssid[IEEE80211_NWID_LEN + 1];
112 	uint32_t			desired_channel;
113 	enum TruthValue			dyn_frequency;
114 	enum TruthValue			fast_frames;
115 	enum TruthValue			dturbo;
116 	int32_t				tx_power;
117 	int32_t				frag_threshold;
118 	int32_t				rts_threshold;
119 	enum TruthValue			priv_subscribe;
120 	enum TruthValue			bg_scan;
121 	int32_t				bg_scan_idle;
122 	int32_t				bg_scan_interval;
123 	int32_t				beacons_missed;
124 	uint8_t				desired_bssid[IEEE80211_ADDR_LEN];
125 	enum wlanIfaceRoamingMode	roam_mode;
126 	enum TruthValue			dot11d;
127 	enum TruthValue			dot11h;
128 	enum TruthValue			dynamic_wds;
129 	enum TruthValue			power_save;
130 	enum TruthValue			ap_bridge;
131 	int32_t				beacon_interval;
132 	int32_t				dtim_period;
133 	enum TruthValue			hide_ssid;
134 	enum TruthValue			inact_process;
135 	enum wlanIfaceDot11gProtMode	do11g_protect;
136 	enum TruthValue			dot11g_pure;
137 	enum TruthValue			dot11n_pure;
138 	enum WlanIfaceDot11nPduType	ampdu;
139 	int32_t				ampdu_density;
140 	int32_t				ampdu_limit;
141 	enum WlanIfaceDot11nPduType	amsdu;
142 	int32_t				amsdu_limit;
143 	enum TruthValue			ht_enabled;
144 	enum TruthValue			ht_compatible;
145 	enum wlanIfaceDot11nHTProtMode	ht_prot_mode;
146 	enum TruthValue			rifs;
147 	enum TruthValue			short_gi;
148 	enum wlanIfaceDot11nSMPSMode	smps_mode;
149 	int32_t				tdma_slot;
150 	int32_t				tdma_slot_count;
151 	int32_t				tdma_slot_length;
152 	int32_t				tdma_binterval;
153 
154 	struct wlan_peerlist		peerlist;
155 	struct ieee80211_stats		stats;
156 	uint32_t			nchannels;
157 	struct ieee80211_channel	*chanlist;
158 	struct ieee80211_roamparams_req	roamparams;
159 	struct ieee80211_txparams_req	txparams;
160 
161 	uint32_t			scan_flags;
162 	uint32_t			scan_duration;
163 	uint32_t			scan_mindwell;
164 	uint32_t			scan_maxdwell;
165 	enum wlanScanConfigStatus	scan_status;
166 	struct wlan_scanlist		scanlist;
167 
168 	uint8_t				wepsupported;
169 	enum wlanWepMode		wepmode;
170 	int32_t				weptxkey;
171 
172 	uint8_t				macsupported;
173 	enum wlanMACAccessControlPolicy	mac_policy;
174 	uint32_t			mac_nacls;
175 	struct wlan_maclist		mac_maclist;
176 
177 	uint32_t			mesh_ttl;
178 	enum wlanMeshPeeringEnabled	mesh_peering;
179 	enum wlanMeshForwardingEnabled	mesh_forwarding;
180 	enum wlanMeshMetric		mesh_metric;
181 	enum wlanMeshPath		mesh_path;
182 	enum wlanHWMPRootMode		hwmp_root_mode;
183 	uint32_t			hwmp_max_hops;
184 	struct wlan_mesh_routes		mesh_routelist;
185 
186 	SLIST_ENTRY(wlan_iface)		w_if;
187 };
188 
189 enum wlan_syscl {
190 	WLAN_MESH_RETRY_TO = 0,
191 	WLAN_MESH_HOLDING_TO,
192 	WLAN_MESH_CONFIRM_TO,
193 	WLAN_MESH_MAX_RETRIES,
194 	WLAN_HWMP_TARGET_ONLY,
195 	WLAN_HWMP_REPLY_FORWARD,
196 	WLAN_HWMP_PATH_LIFETIME,
197 	WLAN_HWMP_ROOT_TO,
198 	WLAN_HWMP_ROOT_INT,
199 	WLAN_HWMP_RANN_INT,
200 	WLAN_HWMP_INACTIVITY_TO,
201 	WLAN_SYSCTL_MAX
202 };
203 
204 struct wlan_config {
205 	int32_t				mesh_retryto;
206 	int32_t				mesh_holdingto;
207 	int32_t				mesh_confirmto;
208 	int32_t				mesh_maxretries;
209 	int32_t				hwmp_targetonly;
210 	int32_t				hwmp_replyforward;
211 	int32_t				hwmp_pathlifetime;
212 	int32_t				hwmp_roottimeout;
213 	int32_t				hwmp_rootint;
214 	int32_t				hwmp_rannint;
215 	int32_t				hwmp_inact;
216 };
217 
218 int wlan_ioctl_init(void);
219 int wlan_kmodules_load(void);
220 int wlan_check_media(char *);
221 int wlan_config_state(struct wlan_iface *, uint8_t);
222 int wlan_get_opmode(struct wlan_iface *wif);
223 int wlan_get_local_addr(struct wlan_iface *wif);
224 int wlan_get_parent(struct wlan_iface *wif);
225 int wlan_get_driver_caps(struct wlan_iface *wif);
226 uint8_t wlan_channel_state_to_snmp(uint8_t cstate);
227 uint32_t wlan_channel_flags_to_snmp(uint32_t cflags);
228 int wlan_get_channel_list(struct wlan_iface *wif);
229 int wlan_get_roam_params(struct wlan_iface *wif);
230 int wlan_get_tx_params(struct wlan_iface *wif);
231 int wlan_set_tx_params(struct wlan_iface *wif, int32_t pmode);
232 int wlan_clone_create(struct wlan_iface *);
233 int wlan_clone_destroy(struct wlan_iface *wif);
234 int wlan_config_get_dssid(struct wlan_iface *wif);
235 int wlan_config_set_dssid(struct wlan_iface *wif, char *ssid, int slen);
236 int wlan_config_get_ioctl(struct wlan_iface *wif, int which);
237 int wlan_config_set_ioctl(struct wlan_iface *wif, int which, int val,
238     char *strval, int len);
239 int wlan_set_scan_config(struct wlan_iface *wif);
240 int wlan_get_scan_results(struct wlan_iface *wif);
241 int wlan_get_stats(struct wlan_iface *wif);
242 int wlan_get_wepmode(struct wlan_iface *wif);
243 int wlan_set_wepmode(struct wlan_iface *wif);
244 int wlan_get_weptxkey(struct wlan_iface *wif);
245 int wlan_set_weptxkey(struct wlan_iface *wif);
246 int wlan_get_wepkeys(struct wlan_iface *wif);
247 int wlan_set_wepkeys(struct wlan_iface *wif);
248 int wlan_get_mac_policy(struct wlan_iface *wif);
249 int wlan_set_mac_policy(struct wlan_iface *wif);
250 int wlan_flush_mac_mac(struct wlan_iface *wif);
251 int wlan_get_mac_acl_macs(struct wlan_iface *wif);
252 int wlan_add_mac_acl_mac(struct wlan_iface *wif, struct wlan_mac_mac *mmac);
253 int wlan_del_mac_acl_mac(struct wlan_iface *wif, struct wlan_mac_mac *mmac);
254 
255 int32_t wlan_do_sysctl(struct wlan_config *cfg, enum wlan_syscl which, int set);
256 int wlan_mesh_config_get(struct wlan_iface *wif, int which);
257 int wlan_mesh_config_set(struct wlan_iface *wif, int which);
258 int wlan_mesh_flush_routes(struct wlan_iface *wif);
259 int wlan_mesh_add_route(struct wlan_iface *wif, struct wlan_mesh_route *wmr);
260 int wlan_mesh_del_route(struct wlan_iface *wif, struct wlan_mesh_route *wmr);
261 int wlan_mesh_get_routelist(struct wlan_iface *wif);
262 int wlan_hwmp_config_get(struct wlan_iface *wif, int which);
263 int wlan_hwmp_config_set(struct wlan_iface *wif, int which);
264 
265 /* XXX: static */
266 
267 int wlan_peer_set_vlan(struct wlan_iface *wif, struct wlan_peer *wip, int vlan);
268 int wlan_get_peerinfo(struct wlan_iface *wif);
269 
270 /* XXX*/
271 struct wlan_peer *wlan_new_peer(const uint8_t *pmac);
272 void wlan_free_peer(struct wlan_peer *wip);
273 int wlan_add_peer(struct wlan_iface *wif, struct wlan_peer *wip);
274 
275 struct wlan_scan_result * wlan_scan_new_result(const uint8_t *ssid,
276     const uint8_t *bssid);
277 void wlan_scan_free_result(struct wlan_scan_result *sr);
278 int wlan_scan_add_result(struct wlan_iface *wif, struct wlan_scan_result *sr);
279 
280 struct wlan_mac_mac *wlan_mac_new_mac(const uint8_t *mac);
281 void wlan_mac_free_mac(struct wlan_mac_mac *wmm);
282 int wlan_mac_add_mac(struct wlan_iface *wif, struct wlan_mac_mac *wmm);
283 
284 struct wlan_mesh_route *wlan_mesh_new_route(const uint8_t *dstmac);
285 int wlan_mesh_add_rtentry(struct wlan_iface *wif, struct wlan_mesh_route *wmr);
286 void wlan_mesh_free_route(struct wlan_mesh_route *wmr);
287