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
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
15 \brief WirelessNLController public header */
17 #ifndef IH_SENF_Ext_NetEmu_WLAN_WirelessNLController_
18 #define IH_SENF_Ext_NetEmu_WLAN_WirelessNLController_ 1
21 //#include <netlink/netlink.h>
22 //#include <boost/unordered_map.hpp>
23 //#include <boost/assign.hpp>
25 //-/////////////////////////////////////////////////////////////////////////////////////////////////
32 // this functions are just useful during the development to dump netlink attributes of a message
34 # define MapEntry(x) (x, BOOST_PP_STRINGIZE(x))
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)
40 // MapEntry( NL80211_ATTR_WIPHY)
41 // MapEntry( NL80211_ATTR_WIPHY_NAME)
43 // MapEntry( NL80211_ATTR_IFINDEX)
44 // MapEntry( NL80211_ATTR_IFNAME)
45 // MapEntry( NL80211_ATTR_IFTYPE)
47 // MapEntry( NL80211_ATTR_MAC)
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)
55 // MapEntry( NL80211_ATTR_BEACON_INTERVAL)
56 // MapEntry( NL80211_ATTR_DTIM_PERIOD)
57 // MapEntry( NL80211_ATTR_BEACON_HEAD)
58 // MapEntry( NL80211_ATTR_BEACON_TAIL)
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)
67 // MapEntry( NL80211_ATTR_WIPHY_BANDS)
69 // MapEntry( NL80211_ATTR_MNTR_FLAGS)
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)
76 // MapEntry( NL80211_ATTR_BSS_CTS_PROT)
77 // MapEntry( NL80211_ATTR_BSS_SHORT_PREAMBLE)
78 // MapEntry( NL80211_ATTR_BSS_SHORT_SLOT_TIME)
80 // MapEntry( NL80211_ATTR_HT_CAPABILITY)
82 // MapEntry( NL80211_ATTR_SUPPORTED_IFTYPES)
84 // MapEntry( NL80211_ATTR_REG_ALPHA2)
85 // MapEntry( NL80211_ATTR_REG_RULES)
87 // MapEntry( NL80211_ATTR_MESH_CONFIG)
89 // MapEntry( NL80211_ATTR_BSS_BASIC_RATES)
91 // MapEntry( NL80211_ATTR_WIPHY_TXQ_PARAMS)
92 // MapEntry( NL80211_ATTR_WIPHY_FREQ)
93 // MapEntry( NL80211_ATTR_WIPHY_CHANNEL_TYPE)
95 // MapEntry( NL80211_ATTR_KEY_DEFAULT_MGMT)
97 // MapEntry( NL80211_ATTR_MGMT_SUBTYPE)
98 // MapEntry( NL80211_ATTR_IE)
100 // MapEntry( NL80211_ATTR_MAX_NUM_SCAN_SSIDS)
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)
107 // MapEntry( NL80211_ATTR_REG_INITIATOR)
108 // MapEntry( NL80211_ATTR_REG_TYPE)
110 // MapEntry( NL80211_ATTR_SUPPORTED_COMMANDS)
112 // MapEntry( NL80211_ATTR_FRAME)
113 // MapEntry( NL80211_ATTR_SSID)
114 // MapEntry( NL80211_ATTR_AUTH_TYPE)
115 // MapEntry( NL80211_ATTR_REASON_CODE)
117 // MapEntry( NL80211_ATTR_KEY_TYPE)
119 // MapEntry( NL80211_ATTR_MAX_SCAN_IE_LEN)
120 // MapEntry( NL80211_ATTR_CIPHER_SUITES)
122 // MapEntry( NL80211_ATTR_FREQ_BEFORE)
123 // MapEntry( NL80211_ATTR_FREQ_AFTER)
125 // MapEntry( NL80211_ATTR_FREQ_FIXED)
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)
133 // MapEntry( NL80211_ATTR_TIMED_OUT)
135 // MapEntry( NL80211_ATTR_USE_MFP)
137 // MapEntry( NL80211_ATTR_STA_FLAGS2)
139 // MapEntry( NL80211_ATTR_CONTROL_PORT)
141 // MapEntry( NL80211_ATTR_TESTDATA)
143 // MapEntry( NL80211_ATTR_PRIVACY)
145 // MapEntry( NL80211_ATTR_DISCONNECTED_BY_AP)
146 // MapEntry( NL80211_ATTR_STATUS_CODE)
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)
153 // MapEntry( NL80211_ATTR_REQ_IE)
154 // MapEntry( NL80211_ATTR_RESP_IE)
156 // MapEntry( NL80211_ATTR_PREV_BSSID)
158 // MapEntry( NL80211_ATTR_KEY)
159 // MapEntry( NL80211_ATTR_KEYS)
161 // MapEntry( NL80211_ATTR_PID)
163 // MapEntry( NL80211_ATTR_4ADDR)
165 // MapEntry( NL80211_ATTR_SURVEY_INFO)
167 // MapEntry( NL80211_ATTR_PMKID)
168 // MapEntry( NL80211_ATTR_MAX_NUM_PMKIDS)
170 // MapEntry( NL80211_ATTR_DURATION)
172 // MapEntry( NL80211_ATTR_COOKIE)
174 // MapEntry( NL80211_ATTR_WIPHY_COVERAGE_CLASS)
176 // MapEntry( NL80211_ATTR_TX_RATES)
178 // MapEntry( NL80211_ATTR_FRAME_MATCH)
180 // MapEntry( NL80211_ATTR_ACK)
182 // MapEntry( NL80211_ATTR_PS_STATE)
184 // MapEntry( NL80211_ATTR_CQM)
186 // MapEntry( NL80211_ATTR_LOCAL_STATE_CHANGE)
188 // MapEntry( NL80211_ATTR_AP_ISOLATE)
190 // MapEntry( NL80211_ATTR_WIPHY_TX_POWER_SETTING)
191 // MapEntry( NL80211_ATTR_WIPHY_TX_POWER_LEVEL)
193 // MapEntry( NL80211_ATTR_TX_FRAME_TYPES)
194 // MapEntry( NL80211_ATTR_RX_FRAME_TYPES)
195 // MapEntry( NL80211_ATTR_FRAME_TYPE)
197 // MapEntry( NL80211_ATTR_CONTROL_PORT_ETHERTYPE)
198 // MapEntry( NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)
200 // MapEntry( NL80211_ATTR_SUPPORT_IBSS_RSN)
202 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_TX)
203 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_RX)
205 // MapEntry( NL80211_ATTR_MCAST_RATE)
207 // MapEntry( NL80211_ATTR_OFFCHANNEL_TX_OK)
209 // MapEntry( NL80211_ATTR_BSS_HT_OPMODE)
211 // MapEntry( NL80211_ATTR_KEY_DEFAULT_TYPES)
213 // MapEntry( NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION)
215 // MapEntry( NL80211_ATTR_MESH_SETUP)
217 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX)
218 // MapEntry( NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX)
220 // MapEntry( NL80211_ATTR_SUPPORT_MESH_AUTH)
221 // MapEntry( NL80211_ATTR_STA_PLINK_STATE)
223 // MapEntry( NL80211_ATTR_WOWLAN_TRIGGERS)
224 // MapEntry( NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED)
226 // MapEntry( NL80211_ATTR_SCHED_SCAN_INTERVAL)
228 // MapEntry( NL80211_ATTR_INTERFACE_COMBINATIONS)
229 // MapEntry( NL80211_ATTR_SOFTWARE_IFTYPES)
231 // MapEntry( NL80211_ATTR_REKEY_DATA)
233 // MapEntry( NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS)
234 // MapEntry( NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN)
236 // MapEntry( NL80211_ATTR_SCAN_SUPP_RATES)
238 // MapEntry( NL80211_ATTR_HIDDEN_SSID)
240 // MapEntry( NL80211_ATTR_IE_PROBE_RESP)
241 // MapEntry( NL80211_ATTR_IE_ASSOC_RESP)
243 // MapEntry( NL80211_ATTR_STA_WME)
244 // MapEntry( NL80211_ATTR_SUPPORT_AP_UAPSD)
246 // MapEntry( NL80211_ATTR_ROAM_SUPPORT)
248 // MapEntry( NL80211_ATTR_SCHED_SCAN_MATCH)
249 // MapEntry( NL80211_ATTR_MAX_MATCH_SETS)
251 // MapEntry( NL80211_ATTR_PMKSA_CANDIDATE)
253 // MapEntry( NL80211_ATTR_TX_NO_CCK_RATE)
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)
261 // MapEntry( NL80211_ATTR_DEVICE_AP_SME)
263 // MapEntry( NL80211_ATTR_DONT_WAIT_FOR_ACK)
265 // MapEntry( NL80211_ATTR_FEATURE_FLAGS)
267 // MapEntry( NL80211_ATTR_PROBE_RESP_OFFLOAD)
269 // MapEntry( NL80211_ATTR_PROBE_RESP)
271 // MapEntry( NL80211_ATTR_DFS_REGION)
273 // MapEntry( NL80211_ATTR_DISABLE_HT)
274 // MapEntry( NL80211_ATTR_HT_CAPABILITY_MASK)
276 // MapEntry( NL80211_ATTR_NOACK_MAP)
278 // MapEntry( NL80211_ATTR_INACTIVITY_TIMEOUT)
280 // MapEntry( NL80211_ATTR_RX_SIGNAL_DBM)
282 // MapEntry( NL80211_ATTR_BG_SCAN_PERIOD)
284 // MapEntry( NL80211_ATTR_WDEV)
286 // MapEntry( NL80211_ATTR_USER_REG_HINT_TYPE)
288 // MapEntry( NL80211_ATTR_CONN_FAILED_REASON)
290 // MapEntry( NL80211_ATTR_SAE_DATA)
292 // MapEntry( NL80211_ATTR_VHT_CAPABILITY)
294 // MapEntry( NL80211_ATTR_SCAN_FLAGS)
296 // MapEntry( NL80211_ATTR_CHANNEL_WIDTH)
297 // MapEntry( NL80211_ATTR_CENTER_FREQ1)
298 // MapEntry( NL80211_ATTR_CENTER_FREQ2)
300 // MapEntry( NL80211_ATTR_P2P_CTWINDOW)
301 // MapEntry( NL80211_ATTR_P2P_OPPPS)
303 // MapEntry( NL80211_ATTR_LOCAL_MESH_POWER_MODE)
305 // MapEntry( NL80211_ATTR_ACL_POLICY)
307 // MapEntry( NL80211_ATTR_MAC_ADDRS)
309 // MapEntry( NL80211_ATTR_MAC_ACL_MAX)
311 // MapEntry( NL80211_ATTR_RADAR_EVENT)
313 // MapEntry( NL80211_ATTR_EXT_CAPA)
314 // MapEntry( NL80211_ATTR_EXT_CAPA_MASK)
316 // MapEntry( NL80211_ATTR_STA_CAPABILITY)
317 // MapEntry( NL80211_ATTR_STA_EXT_CAPABILITY)
319 // MapEntry( NL80211_ATTR_PROTOCOL_FEATURES)
320 // MapEntry( NL80211_ATTR_SPLIT_WIPHY_DUMP)
322 // MapEntry( NL80211_ATTR_DISABLE_VHT)
323 // MapEntry( NL80211_ATTR_VHT_CAPABILITY_MASK)
325 // MapEntry( NL80211_ATTR_MDID)
326 // MapEntry( NL80211_ATTR_IE_RIC)
328 // MapEntry( NL80211_ATTR_CRIT_PROT_ID)
329 // MapEntry( NL80211_ATTR_MAX_CRIT_PROT_DURATION)
331 // MapEntry( NL80211_ATTR_PEER_AID)
333 // MapEntry( NL80211_ATTR_COALESCE_RULE)
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)
341 // MapEntry( NL80211_ATTR_RXMGMT_FLAGS)
343 // MapEntry( NL80211_ATTR_STA_SUPPORTED_CHANNELS)
345 // MapEntry( NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES)
347 // MapEntry( NL80211_ATTR_HANDLE_DFS)
349 // MapEntry( NL80211_ATTR_SUPPORT_5_MHZ)
350 // MapEntry( NL80211_ATTR_SUPPORT_10_MHZ)
352 // MapEntry( NL80211_ATTR_OPMODE_NOTIF)
354 // MapEntry( NL80211_ATTR_VENDOR_ID)
355 // MapEntry( NL80211_ATTR_VENDOR_SUBCMD)
356 // MapEntry( NL80211_ATTR_VENDOR_DATA)
357 // MapEntry( NL80211_ATTR_VENDOR_EVENTS)
359 // MapEntry( NL80211_ATTR_QOS_MAP)
361 // MapEntry( NL80211_ATTR_MAC_HINT)
362 // MapEntry( NL80211_ATTR_WIPHY_FREQ_HINT)
364 // MapEntry( NL80211_ATTR_MAX_AP_ASSOC_STA)
366 // MapEntry( NL80211_ATTR_TDLS_PEER_CAPABILITY)
368 // MapEntry( NL80211_ATTR_IFACE_SOCKET_OWNER);
371 // return attrToString.count(attr) > 0 ? attrToString.at(attr) : boost::lexical_cast<std::string>(attr);
374 // static inline void dumpMsgAttributes(nlattr ** msgAttr, std::ostream & os, std::string sep = "\n") {
375 // for (unsigned i = 0; i<NL80211_ATTR_MAX; ++i) {
377 // os << nl80211_attrToString(i) << sep;
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);
402 // return attrToString.count(attr) > 0 ? attrToString.at(attr) : boost::lexical_cast<std::string>(attr);
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) {
408 // os << nl80211_freqAttrToString(i) << sep;
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)
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)
423 // MapEntry( NL80211_BAND_ATTR_VHT_MCS_SET)
424 // MapEntry( NL80211_BAND_ATTR_VHT_CAPA);
426 // return attrToString.count(attr) > 0 ? attrToString.at(attr) : boost::lexical_cast<std::string>(attr);
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) {
432 // os << nl80211_bandAttrToString(i) << sep;
441 //-/////////////////////////////////////////////////////////////////////////////////////////////////
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"