17 #include <sys/ioctl.h>
23 #define IWINFO_BUFSIZE 24 * 1024
24 #define IWINFO_ESSID_MAX_SIZE 32
39 #define IWINFO_80211_A (1 << IWINFO_80211_A)
40 #define IWINFO_80211_B (1 << IWINFO_80211_B)
41 #define IWINFO_80211_G (1 << IWINFO_80211_G)
42 #define IWINFO_80211_N (1 << IWINFO_80211_N)
43 #define IWINFO_80211_AC (1 << IWINFO_80211_AC)
44 #define IWINFO_80211_AD (1 << IWINFO_80211_AD)
45 #define IWINFO_80211_AX (1 << IWINFO_80211_AX)
47 extern const char * const IWINFO_80211_NAMES
[IWINFO_80211_COUNT
];
60 #define IWINFO_BAND_24 (1 << IWINFO_BAND_24)
61 #define IWINFO_BAND_5 (1 << IWINFO_BAND_5)
62 #define IWINFO_BAND_6 (1 << IWINFO_BAND_6)
63 #define IWINFO_BAND_60 (1 << IWINFO_BAND_60)
65 extern const char * const IWINFO_BAND_NAMES
[IWINFO_BAND_COUNT
];
69 IWINFO_CIPHER_NONE
= 0,
78 IWINFO_CIPHER_CCMP256
,
79 IWINFO_CIPHER_GCMP256
,
85 #define IWINFO_CIPHER_NONE (1 << IWINFO_CIPHER_NONE)
86 #define IWINFO_CIPHER_WEP40 (1 << IWINFO_CIPHER_WEP40)
87 #define IWINFO_CIPHER_TKIP (1 << IWINFO_CIPHER_TKIP)
88 #define IWINFO_CIPHER_WRAP (1 << IWINFO_CIPHER_WRAP)
89 #define IWINFO_CIPHER_CCMP (1 << IWINFO_CIPHER_CCMP)
90 #define IWINFO_CIPHER_WEP104 (1 << IWINFO_CIPHER_WEP104)
91 #define IWINFO_CIPHER_AESOCB (1 << IWINFO_CIPHER_AESOCB)
92 #define IWINFO_CIPHER_CKIP (1 << IWINFO_CIPHER_CKIP)
93 #define IWINFO_CIPHER_GCMP (1 << IWINFO_CIPHER_GCMP)
94 #define IWINFO_CIPHER_CCMP256 (1 << IWINFO_CIPHER_CCMP256)
95 #define IWINFO_CIPHER_GCMP256 (1 << IWINFO_CIPHER_GCMP256)
97 extern const char * const IWINFO_CIPHER_NAMES
[IWINFO_CIPHER_COUNT
];
101 IWINFO_KMGMT_NONE
= 0,
111 #define IWINFO_KMGMT_NONE (1 << IWINFO_KMGMT_NONE)
112 #define IWINFO_KMGMT_8021x (1 << IWINFO_KMGMT_8021x)
113 #define IWINFO_KMGMT_PSK (1 << IWINFO_KMGMT_PSK)
114 #define IWINFO_KMGMT_SAE (1 << IWINFO_KMGMT_SAE)
115 #define IWINFO_KMGMT_OWE (1 << IWINFO_KMGMT_OWE)
117 extern const char * const IWINFO_KMGMT_NAMES
[IWINFO_KMGMT_COUNT
];
121 IWINFO_AUTH_OPEN
= 0,
128 extern const char * const IWINFO_AUTH_NAMES
[IWINFO_AUTH_COUNT
];
131 enum iwinfo_freq_flag
{
132 IWINFO_FREQ_NO_10MHZ
= 0,
133 IWINFO_FREQ_NO_20MHZ
,
134 IWINFO_FREQ_NO_HT40PLUS
,
135 IWINFO_FREQ_NO_HT40MINUS
,
136 IWINFO_FREQ_NO_80MHZ
,
137 IWINFO_FREQ_NO_160MHZ
,
140 IWINFO_FREQ_INDOOR_ONLY
,
143 IWINFO_FREQ_FLAG_COUNT
,
146 #define IWINFO_FREQ_NO_10MHZ (1 << IWINFO_FREQ_NO_10MHZ)
147 #define IWINFO_FREQ_NO_20MHZ (1 << IWINFO_FREQ_NO_20MHZ)
148 #define IWINFO_FREQ_NO_HT40PLUS (1 << IWINFO_FREQ_NO_HT40PLUS)
149 #define IWINFO_FREQ_NO_HT40MINUS (1 << IWINFO_FREQ_NO_HT40MINUS)
150 #define IWINFO_FREQ_NO_80MHZ (1 << IWINFO_FREQ_NO_80MHZ)
151 #define IWINFO_FREQ_NO_160MHZ (1 << IWINFO_FREQ_NO_160MHZ)
152 #define IWINFO_FREQ_NO_HE (1 << IWINFO_FREQ_NO_HE)
153 #define IWINFO_FREQ_NO_IR (1 << IWINFO_FREQ_NO_IR)
154 #define IWINFO_FREQ_INDOOR_ONLY (1 << IWINFO_FREQ_INDOOR_ONLY)
156 extern const char * const IWINFO_FREQ_FLAG_NAMES
[IWINFO_FREQ_FLAG_COUNT
];
160 IWINFO_OPMODE_UNKNOWN
= 0,
161 IWINFO_OPMODE_MASTER
,
163 IWINFO_OPMODE_CLIENT
,
164 IWINFO_OPMODE_MONITOR
,
165 IWINFO_OPMODE_AP_VLAN
,
167 IWINFO_OPMODE_MESHPOINT
,
168 IWINFO_OPMODE_P2P_CLIENT
,
169 IWINFO_OPMODE_P2P_GO
,
175 extern const char * const IWINFO_OPMODE_NAMES
[IWINFO_OPMODE_COUNT
];
179 IWINFO_HTMODE_HT20
= 0,
184 IWINFO_HTMODE_VHT80_80
,
185 IWINFO_HTMODE_VHT160
,
190 IWINFO_HTMODE_HE80_80
,
197 #define IWINFO_HTMODE_HT20 (1 << IWINFO_HTMODE_HT20)
198 #define IWINFO_HTMODE_HT40 (1 << IWINFO_HTMODE_HT40)
199 #define IWINFO_HTMODE_VHT20 (1 << IWINFO_HTMODE_VHT20)
200 #define IWINFO_HTMODE_VHT40 (1 << IWINFO_HTMODE_VHT40)
201 #define IWINFO_HTMODE_VHT80 (1 << IWINFO_HTMODE_VHT80)
202 #define IWINFO_HTMODE_VHT80_80 (1 << IWINFO_HTMODE_VHT80_80)
203 #define IWINFO_HTMODE_VHT160 (1 << IWINFO_HTMODE_VHT160)
204 #define IWINFO_HTMODE_NOHT (1 << IWINFO_HTMODE_NOHT)
205 #define IWINFO_HTMODE_HE20 (1 << IWINFO_HTMODE_HE20)
206 #define IWINFO_HTMODE_HE40 (1 << IWINFO_HTMODE_HE40)
207 #define IWINFO_HTMODE_HE80 (1 << IWINFO_HTMODE_HE80)
208 #define IWINFO_HTMODE_HE80_80 (1 << IWINFO_HTMODE_HE80_80)
209 #define IWINFO_HTMODE_HE160 (1 << IWINFO_HTMODE_HE160)
211 extern const char * const IWINFO_HTMODE_NAMES
[IWINFO_HTMODE_COUNT
];
214 struct iwinfo_rate_entry
{
218 uint8_t is_short_gi
:1;
228 struct iwinfo_assoclist_entry
{
234 uint32_t connected_time
;
237 uint64_t rx_drop_misc
;
238 struct iwinfo_rate_entry rx_rate
;
239 struct iwinfo_rate_entry tx_rate
;
245 uint8_t is_authorized
:1;
246 uint8_t is_authenticated
:1;
247 uint8_t is_preamble_short
:1;
254 char plink_state
[16];
260 struct iwinfo_survey_entry
{
261 uint64_t active_time
;
263 uint64_t busy_time_ext
;
270 struct iwinfo_txpwrlist_entry
{
275 struct iwinfo_freqlist_entry
{
283 struct iwinfo_crypto_entry
{
286 uint16_t group_ciphers
;
287 uint16_t pair_ciphers
;
292 struct iwinfo_scanlist_ht_chan_entry
{
293 uint8_t primary_chan
;
294 uint8_t secondary_chan_off
;
298 struct iwinfo_scanlist_vht_chan_entry
{
300 uint8_t center_chan_1
;
301 uint8_t center_chan_2
;
304 extern const char * const ht_secondary_offset
[4];
306 1 = 40 MHz or higher (refer to vht if supported) */
307 extern const uint16_t ht_chan_width
[2];
308 /* 0 = 40 MHz or lower (refer to ht to a more precise width)
312 extern const uint16_t vht_chan_width
[4];
314 struct iwinfo_scanlist_entry
{
316 char ssid
[IWINFO_ESSID_MAX_SIZE
+1];
317 enum iwinfo_opmode mode
;
324 struct iwinfo_crypto_entry crypto
;
325 struct iwinfo_scanlist_ht_chan_entry ht_chan_info
;
326 struct iwinfo_scanlist_vht_chan_entry vht_chan_info
;
329 struct iwinfo_country_entry
{
334 struct iwinfo_iso3166_label
{
339 struct iwinfo_hardware_id
{
342 uint16_t subsystem_vendor_id
;
343 uint16_t subsystem_device_id
;
344 char compatible
[128];
347 struct iwinfo_hardware_entry
{
348 char vendor_name
[64];
349 char device_name
[64];
352 uint16_t subsystem_vendor_id
;
353 uint16_t subsystem_device_id
;
354 int16_t txpower_offset
;
355 int16_t frequency_offset
;
356 char compatible
[128];
359 extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES
[];
361 #define IWINFO_HARDWARE_FILE "/usr/share/libiwinfo/devices.txt"
367 int (*probe
)(const char *ifname
);
368 int (*mode
)(const char *, int *);
369 int (*channel
)(const char *, int *);
370 int (*center_chan1
)(const char *, int *);
371 int (*center_chan2
)(const char *, int *);
372 int (*frequency
)(const char *, int *);
373 int (*frequency_offset
)(const char *, int *);
374 int (*txpower
)(const char *, int *);
375 int (*txpower_offset
)(const char *, int *);
376 int (*bitrate
)(const char *, int *);
377 int (*signal
)(const char *, int *);
378 int (*noise
)(const char *, int *);
379 int (*quality
)(const char *, int *);
380 int (*quality_max
)(const char *, int *);
381 int (*mbssid_support
)(const char *, int *);
382 int (*hwmodelist
)(const char *, int *);
383 int (*htmodelist
)(const char *, int *);
384 int (*htmode
)(const char *, int *);
385 int (*ssid
)(const char *, char *);
386 int (*bssid
)(const char *, char *);
387 int (*country
)(const char *, char *);
388 int (*hardware_id
)(const char *, char *);
389 int (*hardware_name
)(const char *, char *);
390 int (*encryption
)(const char *, char *);
391 int (*phyname
)(const char *, char *);
392 int (*assoclist
)(const char *, char *, int *);
393 int (*txpwrlist
)(const char *, char *, int *);
394 int (*scanlist
)(const char *, char *, int *);
395 int (*freqlist
)(const char *, char *, int *);
396 int (*countrylist
)(const char *, char *, int *);
397 int (*survey
)(const char *, char *, int *);
398 int (*lookup_phy
)(const char *, char *);
399 int (*phy_path
)(const char *phyname
, const char **path
);
403 const char * iwinfo_type(const char *ifname
);
404 const struct iwinfo_ops
* iwinfo_backend(const char *ifname
);
405 const struct iwinfo_ops
* iwinfo_backend_by_name(const char *name
);
406 void iwinfo_finish(void);
408 extern const struct iwinfo_ops wext_ops
;
409 extern const struct iwinfo_ops madwifi_ops
;
410 extern const struct iwinfo_ops nl80211_ops
;
411 extern const struct iwinfo_ops wl_ops
;
413 #include "iwinfo/utils.h"