WirelessNLController.ih
Go to the documentation of this file.
1 //
2 // Copyright (c) 2020 Fraunhofer Institute for Applied Information Technology (FIT)
3 // Network Research Group (NET)
4 // Schloss Birlinghoven, 53754 Sankt Augustin, GERMANY
5 // Contact: support@wiback.org
6 //
7 // This file is part of the SENF code tree.
8 // It is licensed under the 3-clause BSD License (aka New BSD License).
9 // See LICENSE.txt in the top level directory for details or visit
10 // https://opensource.org/licenses/BSD-3-Clause
11 //
12 
13 
14 /** \file
15  \brief WirelessNLController public header */
16 
17 #ifndef IH_SENF_Ext_NetEmu_WLAN_WirelessNLController_
18 #define IH_SENF_Ext_NetEmu_WLAN_WirelessNLController_ 1
19 
20 // Custom includes
21 //#include <netlink/netlink.h>
22 //#include <boost/unordered_map.hpp>
23 //#include <boost/assign.hpp>
24 
25 //-/////////////////////////////////////////////////////////////////////////////////////////////////
26 
27 namespace senf {
28 namespace emu {
29 namespace detail {
30 
31  //
32  // this functions are just useful during the development to dump netlink attributes of a message
33  //
34 # define MapEntry(x) (x, BOOST_PP_STRINGIZE(x))
35 
36 // static inline std::string nl80211_attrToString(int attr) {
37 // static const boost::unordered_map<int, const char*> attrToString = boost::assign::map_list_of
38 // MapEntry( NL80211_ATTR_UNSPEC)
39 //
40 // MapEntry( NL80211_ATTR_WIPHY)
41 // MapEntry( NL80211_ATTR_WIPHY_NAME)
42 //
43 // MapEntry( NL80211_ATTR_IFINDEX)
44 // MapEntry( NL80211_ATTR_IFNAME)
45 // MapEntry( NL80211_ATTR_IFTYPE)
46 //
47 // MapEntry( NL80211_ATTR_MAC)
48 //
49 // MapEntry( NL80211_ATTR_KEY_DATA)
50 // MapEntry( NL80211_ATTR_KEY_IDX)
51 // MapEntry( NL80211_ATTR_KEY_CIPHER)
52 // MapEntry( NL80211_ATTR_KEY_SEQ)
53 // MapEntry( NL80211_ATTR_KEY_DEFAULT)
54 //
55 // MapEntry( NL80211_ATTR_BEACON_INTERVAL)
56 // MapEntry( NL80211_ATTR_DTIM_PERIOD)
57 // MapEntry( NL80211_ATTR_BEACON_HEAD)
58 // MapEntry( NL80211_ATTR_BEACON_TAIL)
59 //
60 // MapEntry( NL80211_ATTR_STA_AID)
61 // MapEntry( NL80211_ATTR_STA_FLAGS)
62 // MapEntry( NL80211_ATTR_STA_LISTEN_INTERVAL)
63 // MapEntry( NL80211_ATTR_STA_SUPPORTED_RATES)
64 // MapEntry( NL80211_ATTR_STA_VLAN)
65 // MapEntry( NL80211_ATTR_STA_INFO)
66 //
67 // MapEntry( NL80211_ATTR_WIPHY_BANDS)
68 //
69 // MapEntry( NL80211_ATTR_MNTR_FLAGS)
70 //
71 // MapEntry( NL80211_ATTR_MESH_ID)
72 // MapEntry( NL80211_ATTR_STA_PLINK_ACTION)
73 // MapEntry( NL80211_ATTR_MPATH_NEXT_HOP)
74 // MapEntry( NL80211_ATTR_MPATH_INFO)
75 //
76 // MapEntry( NL80211_ATTR_BSS_CTS_PROT)
77 // MapEntry( NL80211_ATTR_BSS_SHORT_PREAMBLE)
78 // MapEntry( NL80211_ATTR_BSS_SHORT_SLOT_TIME)
79 //
80 // MapEntry( NL80211_ATTR_HT_CAPABILITY)
81 //
82 // MapEntry( NL80211_ATTR_SUPPORTED_IFTYPES)
83 //
84 // MapEntry( NL80211_ATTR_REG_ALPHA2)
85 // MapEntry( NL80211_ATTR_REG_RULES)
86 //
87 // MapEntry( NL80211_ATTR_MESH_CONFIG)
88 //
89 // MapEntry( NL80211_ATTR_BSS_BASIC_RATES)
90 //
91 // MapEntry( NL80211_ATTR_WIPHY_TXQ_PARAMS)
92 // MapEntry( NL80211_ATTR_WIPHY_FREQ)
93 // MapEntry( NL80211_ATTR_WIPHY_CHANNEL_TYPE)
94 //
95 // MapEntry( NL80211_ATTR_KEY_DEFAULT_MGMT)
96 //
97 // MapEntry( NL80211_ATTR_MGMT_SUBTYPE)
98 // MapEntry( NL80211_ATTR_IE)
99 //
100 // MapEntry( NL80211_ATTR_MAX_NUM_SCAN_SSIDS)
101 //
102 // MapEntry( NL80211_ATTR_SCAN_FREQUENCIES)
103 // MapEntry( NL80211_ATTR_SCAN_SSIDS)
104 // MapEntry( NL80211_ATTR_GENERATION) /* replaces old SCAN_GENERATION */
105 // MapEntry( NL80211_ATTR_BSS)
106 //
107 // MapEntry( NL80211_ATTR_REG_INITIATOR)
108 // MapEntry( NL80211_ATTR_REG_TYPE)
109 //
110 // MapEntry( NL80211_ATTR_SUPPORTED_COMMANDS)
111 //
112 // MapEntry( NL80211_ATTR_FRAME)
113 // MapEntry( NL80211_ATTR_SSID)
114 // MapEntry( NL80211_ATTR_AUTH_TYPE)
115 // MapEntry( NL80211_ATTR_REASON_CODE)
116 //
117 // MapEntry( NL80211_ATTR_KEY_TYPE)
118 //
119 // MapEntry( NL80211_ATTR_MAX_SCAN_IE_LEN)
120 // MapEntry( NL80211_ATTR_CIPHER_SUITES)
121 //
122 // MapEntry( NL80211_ATTR_FREQ_BEFORE)
123 // MapEntry( NL80211_ATTR_FREQ_AFTER)
124 //
125 // MapEntry( NL80211_ATTR_FREQ_FIXED)
126 //
127 //
128 // MapEntry( NL80211_ATTR_WIPHY_RETRY_SHORT)
129 // MapEntry( NL80211_ATTR_WIPHY_RETRY_LONG)
130 // MapEntry( NL80211_ATTR_WIPHY_FRAG_THRESHOLD)
131 // MapEntry( NL80211_ATTR_WIPHY_RTS_THRESHOLD)
132 //
133 // MapEntry( NL80211_ATTR_TIMED_OUT)
134 //
135 // MapEntry( NL80211_ATTR_USE_MFP)
136 //
137 // MapEntry( NL80211_ATTR_STA_FLAGS2)
138 //
139 // MapEntry( NL80211_ATTR_CONTROL_PORT)
140 //
141 // MapEntry( NL80211_ATTR_TESTDATA)
142 //
143 // MapEntry( NL80211_ATTR_PRIVACY)
144 //
145 // MapEntry( NL80211_ATTR_DISCONNECTED_BY_AP)
146 // MapEntry( NL80211_ATTR_STATUS_CODE)
147 //
148 // MapEntry( NL80211_ATTR_CIPHER_SUITES_PAIRWISE)
149 // MapEntry( NL80211_ATTR_CIPHER_SUITE_GROUP)
150 // MapEntry( NL80211_ATTR_WPA_VERSIONS)
151 // MapEntry( NL80211_ATTR_AKM_SUITES)
152 //
153 // MapEntry( NL80211_ATTR_REQ_IE)
154 // MapEntry( NL80211_ATTR_RESP_IE)
155 //
156 // MapEntry( NL80211_ATTR_PREV_BSSID)
157 //
158 // MapEntry( NL80211_ATTR_KEY)
159 // MapEntry( NL80211_ATTR_KEYS)
160 //
161 // MapEntry( NL80211_ATTR_PID)
162 //
163 // MapEntry( NL80211_ATTR_4ADDR)
164 //
165 // MapEntry( NL80211_ATTR_SURVEY_INFO)
166 //
167 // MapEntry( NL80211_ATTR_PMKID)
168 // MapEntry( NL80211_ATTR_MAX_NUM_PMKIDS)
169 //
170 // MapEntry( NL80211_ATTR_DURATION)
171 //
172 // MapEntry( NL80211_ATTR_COOKIE)
173 //
174 // MapEntry( NL80211_ATTR_WIPHY_COVERAGE_CLASS)
175 //
176 // MapEntry( NL80211_ATTR_TX_RATES)
177 //
178 // MapEntry( NL80211_ATTR_FRAME_MATCH)
179 //
180 // MapEntry( NL80211_ATTR_ACK)
181 //
182 // MapEntry( NL80211_ATTR_PS_STATE)
183 //
184 // MapEntry( NL80211_ATTR_CQM)
185 //
186 // MapEntry( NL80211_ATTR_LOCAL_STATE_CHANGE)
187 //
188 // MapEntry( NL80211_ATTR_AP_ISOLATE)
189 //
190 // MapEntry( NL80211_ATTR_WIPHY_TX_POWER_SETTING)
191 // MapEntry( NL80211_ATTR_WIPHY_TX_POWER_LEVEL)
192 //
193 // MapEntry( NL80211_ATTR_TX_FRAME_TYPES)
194 // MapEntry( NL80211_ATTR_RX_FRAME_TYPES)
195 // MapEntry( NL80211_ATTR_FRAME_TYPE)
196 //
197 // MapEntry( NL80211_ATTR_CONTROL_PORT_ETHERTYPE)
198 // MapEntry( NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)
199 //
200 // MapEntry( NL80211_ATTR_SUPPORT_IBSS_RSN)
201 //
202 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_TX)
203 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_RX)
204 //
205 // MapEntry( NL80211_ATTR_MCAST_RATE)
206 //
207 // MapEntry( NL80211_ATTR_OFFCHANNEL_TX_OK)
208 //
209 // MapEntry( NL80211_ATTR_BSS_HT_OPMODE)
210 //
211 // MapEntry( NL80211_ATTR_KEY_DEFAULT_TYPES)
212 //
213 // MapEntry( NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION)
214 //
215 // MapEntry( NL80211_ATTR_MESH_SETUP)
216 //
217 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX)
218 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX)
219 //
220 // MapEntry( NL80211_ATTR_SUPPORT_MESH_AUTH)
221 // MapEntry( NL80211_ATTR_STA_PLINK_STATE)
222 //
223 // MapEntry( NL80211_ATTR_WOWLAN_TRIGGERS)
224 // MapEntry( NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED)
225 //
226 // MapEntry( NL80211_ATTR_SCHED_SCAN_INTERVAL)
227 //
228 // MapEntry( NL80211_ATTR_INTERFACE_COMBINATIONS)
229 // MapEntry( NL80211_ATTR_SOFTWARE_IFTYPES)
230 //
231 // MapEntry( NL80211_ATTR_REKEY_DATA)
232 //
233 // MapEntry( NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS)
234 // MapEntry( NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN)
235 //
236 // MapEntry( NL80211_ATTR_SCAN_SUPP_RATES)
237 //
238 // MapEntry( NL80211_ATTR_HIDDEN_SSID)
239 //
240 // MapEntry( NL80211_ATTR_IE_PROBE_RESP)
241 // MapEntry( NL80211_ATTR_IE_ASSOC_RESP)
242 //
243 // MapEntry( NL80211_ATTR_STA_WME)
244 // MapEntry( NL80211_ATTR_SUPPORT_AP_UAPSD)
245 //
246 // MapEntry( NL80211_ATTR_ROAM_SUPPORT)
247 //
248 // MapEntry( NL80211_ATTR_SCHED_SCAN_MATCH)
249 // MapEntry( NL80211_ATTR_MAX_MATCH_SETS)
250 //
251 // MapEntry( NL80211_ATTR_PMKSA_CANDIDATE)
252 //
253 // MapEntry( NL80211_ATTR_TX_NO_CCK_RATE)
254 //
255 // MapEntry( NL80211_ATTR_TDLS_ACTION)
256 // MapEntry( NL80211_ATTR_TDLS_DIALOG_TOKEN)
257 // MapEntry( NL80211_ATTR_TDLS_OPERATION)
258 // MapEntry( NL80211_ATTR_TDLS_SUPPORT)
259 // MapEntry( NL80211_ATTR_TDLS_EXTERNAL_SETUP)
260 //
261 // MapEntry( NL80211_ATTR_DEVICE_AP_SME)
262 //
263 // MapEntry( NL80211_ATTR_DONT_WAIT_FOR_ACK)
264 //
265 // MapEntry( NL80211_ATTR_FEATURE_FLAGS)
266 //
267 // MapEntry( NL80211_ATTR_PROBE_RESP_OFFLOAD)
268 //
269 // MapEntry( NL80211_ATTR_PROBE_RESP)
270 //
271 // MapEntry( NL80211_ATTR_DFS_REGION)
272 //
273 // MapEntry( NL80211_ATTR_DISABLE_HT)
274 // MapEntry( NL80211_ATTR_HT_CAPABILITY_MASK)
275 //
276 // MapEntry( NL80211_ATTR_NOACK_MAP)
277 //
278 // MapEntry( NL80211_ATTR_INACTIVITY_TIMEOUT)
279 //
280 // MapEntry( NL80211_ATTR_RX_SIGNAL_DBM)
281 //
282 // MapEntry( NL80211_ATTR_BG_SCAN_PERIOD)
283 //
284 // MapEntry( NL80211_ATTR_WDEV)
285 //
286 // MapEntry( NL80211_ATTR_USER_REG_HINT_TYPE)
287 //
288 // MapEntry( NL80211_ATTR_CONN_FAILED_REASON)
289 //
290 // MapEntry( NL80211_ATTR_SAE_DATA)
291 //
292 // MapEntry( NL80211_ATTR_VHT_CAPABILITY)
293 //
294 // MapEntry( NL80211_ATTR_SCAN_FLAGS)
295 //
296 // MapEntry( NL80211_ATTR_CHANNEL_WIDTH)
297 // MapEntry( NL80211_ATTR_CENTER_FREQ1)
298 // MapEntry( NL80211_ATTR_CENTER_FREQ2)
299 //
300 // MapEntry( NL80211_ATTR_P2P_CTWINDOW)
301 // MapEntry( NL80211_ATTR_P2P_OPPPS)
302 //
303 // MapEntry( NL80211_ATTR_LOCAL_MESH_POWER_MODE)
304 //
305 // MapEntry( NL80211_ATTR_ACL_POLICY)
306 //
307 // MapEntry( NL80211_ATTR_MAC_ADDRS)
308 //
309 // MapEntry( NL80211_ATTR_MAC_ACL_MAX)
310 //
311 // MapEntry( NL80211_ATTR_RADAR_EVENT)
312 //
313 // MapEntry( NL80211_ATTR_EXT_CAPA)
314 // MapEntry( NL80211_ATTR_EXT_CAPA_MASK)
315 //
316 // MapEntry( NL80211_ATTR_STA_CAPABILITY)
317 // MapEntry( NL80211_ATTR_STA_EXT_CAPABILITY)
318 //
319 // MapEntry( NL80211_ATTR_PROTOCOL_FEATURES)
320 // MapEntry( NL80211_ATTR_SPLIT_WIPHY_DUMP)
321 //
322 // MapEntry( NL80211_ATTR_DISABLE_VHT)
323 // MapEntry( NL80211_ATTR_VHT_CAPABILITY_MASK)
324 //
325 // MapEntry( NL80211_ATTR_MDID)
326 // MapEntry( NL80211_ATTR_IE_RIC)
327 //
328 // MapEntry( NL80211_ATTR_CRIT_PROT_ID)
329 // MapEntry( NL80211_ATTR_MAX_CRIT_PROT_DURATION)
330 //
331 // MapEntry( NL80211_ATTR_PEER_AID)
332 //
333 // MapEntry( NL80211_ATTR_COALESCE_RULE)
334 //
335 // MapEntry( NL80211_ATTR_CH_SWITCH_COUNT)
336 // MapEntry( NL80211_ATTR_CH_SWITCH_BLOCK_TX)
337 // MapEntry( NL80211_ATTR_CSA_IES)
338 // MapEntry( NL80211_ATTR_CSA_C_OFF_BEACON)
339 // MapEntry( NL80211_ATTR_CSA_C_OFF_PRESP)
340 //
341 // MapEntry( NL80211_ATTR_RXMGMT_FLAGS)
342 //
343 // MapEntry( NL80211_ATTR_STA_SUPPORTED_CHANNELS)
344 //
345 // MapEntry( NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES)
346 //
347 // MapEntry( NL80211_ATTR_HANDLE_DFS)
348 //
349 // MapEntry( NL80211_ATTR_SUPPORT_5_MHZ)
350 // MapEntry( NL80211_ATTR_SUPPORT_10_MHZ)
351 //
352 // MapEntry( NL80211_ATTR_OPMODE_NOTIF)
353 //
354 // MapEntry( NL80211_ATTR_VENDOR_ID)
355 // MapEntry( NL80211_ATTR_VENDOR_SUBCMD)
356 // MapEntry( NL80211_ATTR_VENDOR_DATA)
357 // MapEntry( NL80211_ATTR_VENDOR_EVENTS)
358 //
359 // MapEntry( NL80211_ATTR_QOS_MAP)
360 //
361 // MapEntry( NL80211_ATTR_MAC_HINT)
362 // MapEntry( NL80211_ATTR_WIPHY_FREQ_HINT)
363 //
364 // MapEntry( NL80211_ATTR_MAX_AP_ASSOC_STA)
365 //
366 // MapEntry( NL80211_ATTR_TDLS_PEER_CAPABILITY)
367 //
368 // MapEntry( NL80211_ATTR_IFACE_SOCKET_OWNER);
369 //
370 //
371 // return attrToString.count(attr) > 0 ? attrToString.at(attr) : boost::lexical_cast<std::string>(attr);
372 // }
373 //
374 // static inline void dumpMsgAttributes(nlattr ** msgAttr, std::ostream & os, std::string sep = "\n") {
375 // for (unsigned i = 0; i<NL80211_ATTR_MAX; ++i) {
376 // if (msgAttr[i])
377 // os << nl80211_attrToString(i) << sep;
378 // }
379 // }
380 //
381 // static inline std::string nl80211_freqAttrToString(int attr) {
382 // static const boost::unordered_map<int, const char*> attrToString = boost::assign::map_list_of
383 // MapEntry( __NL80211_FREQUENCY_ATTR_INVALID)
384 // MapEntry( NL80211_FREQUENCY_ATTR_FREQ)
385 // MapEntry( NL80211_FREQUENCY_ATTR_DISABLED)
386 // MapEntry( NL80211_FREQUENCY_ATTR_NO_IR)
387 // MapEntry( __NL80211_FREQUENCY_ATTR_NO_IBSS)
388 // MapEntry( NL80211_FREQUENCY_ATTR_RADAR)
389 // MapEntry( NL80211_FREQUENCY_ATTR_MAX_TX_POWER)
390 // MapEntry( NL80211_FREQUENCY_ATTR_DFS_STATE)
391 // MapEntry( NL80211_FREQUENCY_ATTR_DFS_TIME)
392 // MapEntry( NL80211_FREQUENCY_ATTR_NO_HT40_MINUS)
393 // MapEntry( NL80211_FREQUENCY_ATTR_NO_HT40_PLUS)
394 // MapEntry( NL80211_FREQUENCY_ATTR_NO_80MHZ)
395 // MapEntry( NL80211_FREQUENCY_ATTR_NO_160MHZ)
396 // MapEntry( NL80211_FREQUENCY_ATTR_DFS_CAC_TIME)
397 // MapEntry( NL80211_FREQUENCY_ATTR_INDOOR_ONLY)
398 // MapEntry( NL80211_FREQUENCY_ATTR_GO_CONCURRENT)
399 // MapEntry( NL80211_FREQUENCY_ATTR_NO_20MHZ)
400 // MapEntry( NL80211_FREQUENCY_ATTR_NO_10MHZ);
401 //
402 // return attrToString.count(attr) > 0 ? attrToString.at(attr) : boost::lexical_cast<std::string>(attr);
403 // }
404 //
405 // static inline void dumpFreqAttributes(nlattr ** msgAttr, std::ostream & os, std::string sep = "\n") {
406 // for (unsigned i = 0; i<NL80211_FREQUENCY_ATTR_MAX; ++i) {
407 // if (msgAttr[i])
408 // os << nl80211_freqAttrToString(i) << sep;
409 // }
410 // }
411 //
412 // static inline std::string nl80211_bandAttrToString(int attr) {
413 // static const boost::unordered_map<int, const char*> attrToString = boost::assign::map_list_of
414 // MapEntry( __NL80211_BAND_ATTR_INVALID)
415 // MapEntry( NL80211_BAND_ATTR_FREQS)
416 // MapEntry( NL80211_BAND_ATTR_RATES)
417 //
418 // MapEntry( NL80211_BAND_ATTR_HT_MCS_SET)
419 // MapEntry( NL80211_BAND_ATTR_HT_CAPA)
420 // MapEntry( NL80211_BAND_ATTR_HT_AMPDU_FACTOR)
421 // MapEntry( NL80211_BAND_ATTR_HT_AMPDU_DENSITY)
422 //
423 // MapEntry( NL80211_BAND_ATTR_VHT_MCS_SET)
424 // MapEntry( NL80211_BAND_ATTR_VHT_CAPA);
425 //
426 // return attrToString.count(attr) > 0 ? attrToString.at(attr) : boost::lexical_cast<std::string>(attr);
427 // }
428 //
429 // static inline void dumpBandAttributes(nlattr ** msgAttr, std::ostream & os, std::string sep = "\n") {
430 // for (unsigned i = 0; i<NL80211_BAND_ATTR_MAX; ++i) {
431 // if (msgAttr[i])
432 // os << nl80211_bandAttrToString(i) << sep;
433 // }
434 // }
435 
436 }}}
437 
438 #undef MapEntry
439 
440 
441 //-/////////////////////////////////////////////////////////////////////////////////////////////////
442 #endif
443 
444 
445 // Local Variables:
446 // mode: c++
447 // fill-column: 100
448 // comment-column: 40
449 // c-file-style: "senf"
450 // indent-tabs-mode: nil
451 // ispell-local-dictionary: "american"
452 // compile-command: "scons -u test"
453 // End: