1 #ifndef __IWINFO_H_ 2 #define __IWINFO_H_ 3 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 #include <sys/wait.h> 7 #include <unistd.h> 8 #include <stdio.h> 9 #include <stdlib.h> 10 #include <string.h> 11 #include <fcntl.h> 12 #include <glob.h> 13 #include <ctype.h> 14 #include <dirent.h> 15 #include <stdint.h> 16 17 #include <sys/ioctl.h> 18 #include <sys/mman.h> 19 #include <net/if.h> 20 #include <errno.h> 21 22 23 #define IWINFO_BUFSIZE 24 * 1024 24 #define IWINFO_ESSID_MAX_SIZE 32 25 26 enum iwinfo_80211 { 27 IWINFO_80211_A = 0, 28 IWINFO_80211_B, 29 IWINFO_80211_G, 30 IWINFO_80211_N, 31 IWINFO_80211_AC, 32 IWINFO_80211_AD, 33 IWINFO_80211_AX, 34 IWINFO_80211_BE, 35 36 /* keep last */ 37 IWINFO_80211_COUNT 38 }; 39 40 #define IWINFO_80211_A (1 << IWINFO_80211_A) 41 #define IWINFO_80211_B (1 << IWINFO_80211_B) 42 #define IWINFO_80211_G (1 << IWINFO_80211_G) 43 #define IWINFO_80211_N (1 << IWINFO_80211_N) 44 #define IWINFO_80211_AC (1 << IWINFO_80211_AC) 45 #define IWINFO_80211_AD (1 << IWINFO_80211_AD) 46 #define IWINFO_80211_AX (1 << IWINFO_80211_AX) 47 #define IWINFO_80211_BE (1 << IWINFO_80211_BE) 48 49 extern const char * const IWINFO_80211_NAMES[IWINFO_80211_COUNT]; 50 51 52 enum iwinfo_band { 53 IWINFO_BAND_24 = 0, 54 IWINFO_BAND_5, 55 IWINFO_BAND_6, 56 IWINFO_BAND_60, 57 58 /* keep last */ 59 IWINFO_BAND_COUNT 60 }; 61 62 #define IWINFO_BAND_24 (1 << IWINFO_BAND_24) 63 #define IWINFO_BAND_5 (1 << IWINFO_BAND_5) 64 #define IWINFO_BAND_6 (1 << IWINFO_BAND_6) 65 #define IWINFO_BAND_60 (1 << IWINFO_BAND_60) 66 67 extern const char * const IWINFO_BAND_NAMES[IWINFO_BAND_COUNT]; 68 69 70 enum iwinfo_cipher { 71 IWINFO_CIPHER_NONE = 0, 72 IWINFO_CIPHER_WEP40, 73 IWINFO_CIPHER_TKIP, 74 IWINFO_CIPHER_WRAP, 75 IWINFO_CIPHER_CCMP, 76 IWINFO_CIPHER_WEP104, 77 IWINFO_CIPHER_AESOCB, 78 IWINFO_CIPHER_CKIP, 79 IWINFO_CIPHER_GCMP, 80 IWINFO_CIPHER_CCMP256, 81 IWINFO_CIPHER_GCMP256, 82 83 /* keep last */ 84 IWINFO_CIPHER_COUNT 85 }; 86 87 #define IWINFO_CIPHER_NONE (1 << IWINFO_CIPHER_NONE) 88 #define IWINFO_CIPHER_WEP40 (1 << IWINFO_CIPHER_WEP40) 89 #define IWINFO_CIPHER_TKIP (1 << IWINFO_CIPHER_TKIP) 90 #define IWINFO_CIPHER_WRAP (1 << IWINFO_CIPHER_WRAP) 91 #define IWINFO_CIPHER_CCMP (1 << IWINFO_CIPHER_CCMP) 92 #define IWINFO_CIPHER_WEP104 (1 << IWINFO_CIPHER_WEP104) 93 #define IWINFO_CIPHER_AESOCB (1 << IWINFO_CIPHER_AESOCB) 94 #define IWINFO_CIPHER_CKIP (1 << IWINFO_CIPHER_CKIP) 95 #define IWINFO_CIPHER_GCMP (1 << IWINFO_CIPHER_GCMP) 96 #define IWINFO_CIPHER_CCMP256 (1 << IWINFO_CIPHER_CCMP256) 97 #define IWINFO_CIPHER_GCMP256 (1 << IWINFO_CIPHER_GCMP256) 98 99 extern const char * const IWINFO_CIPHER_NAMES[IWINFO_CIPHER_COUNT]; 100 101 102 enum iwinfo_kmgmt { 103 IWINFO_KMGMT_NONE = 0, 104 IWINFO_KMGMT_8021x, 105 IWINFO_KMGMT_PSK, 106 IWINFO_KMGMT_SAE, 107 IWINFO_KMGMT_OWE, 108 109 /* keep last */ 110 IWINFO_KMGMT_COUNT 111 }; 112 113 #define IWINFO_KMGMT_NONE (1 << IWINFO_KMGMT_NONE) 114 #define IWINFO_KMGMT_8021x (1 << IWINFO_KMGMT_8021x) 115 #define IWINFO_KMGMT_PSK (1 << IWINFO_KMGMT_PSK) 116 #define IWINFO_KMGMT_SAE (1 << IWINFO_KMGMT_SAE) 117 #define IWINFO_KMGMT_OWE (1 << IWINFO_KMGMT_OWE) 118 119 extern const char * const IWINFO_KMGMT_NAMES[IWINFO_KMGMT_COUNT]; 120 121 122 enum iwinfo_auth { 123 IWINFO_AUTH_OPEN = 0, 124 IWINFO_AUTH_SHARED, 125 126 /* keep last */ 127 IWINFO_AUTH_COUNT 128 }; 129 130 #define IWINFO_AUTH_OPEN (1 << IWINFO_AUTH_OPEN) 131 #define IWINFO_AUTH_SHARED (1 << IWINFO_AUTH_SHARED) 132 133 extern const char * const IWINFO_AUTH_NAMES[IWINFO_AUTH_COUNT]; 134 135 136 enum iwinfo_freq_flag { 137 IWINFO_FREQ_NO_10MHZ = 0, 138 IWINFO_FREQ_NO_20MHZ, 139 IWINFO_FREQ_NO_HT40PLUS, 140 IWINFO_FREQ_NO_HT40MINUS, 141 IWINFO_FREQ_NO_80MHZ, 142 IWINFO_FREQ_NO_160MHZ, 143 IWINFO_FREQ_NO_HE, 144 IWINFO_FREQ_NO_IR, 145 IWINFO_FREQ_INDOOR_ONLY, 146 147 /* keep last */ 148 IWINFO_FREQ_FLAG_COUNT, 149 }; 150 151 #define IWINFO_FREQ_NO_10MHZ (1 << IWINFO_FREQ_NO_10MHZ) 152 #define IWINFO_FREQ_NO_20MHZ (1 << IWINFO_FREQ_NO_20MHZ) 153 #define IWINFO_FREQ_NO_HT40PLUS (1 << IWINFO_FREQ_NO_HT40PLUS) 154 #define IWINFO_FREQ_NO_HT40MINUS (1 << IWINFO_FREQ_NO_HT40MINUS) 155 #define IWINFO_FREQ_NO_80MHZ (1 << IWINFO_FREQ_NO_80MHZ) 156 #define IWINFO_FREQ_NO_160MHZ (1 << IWINFO_FREQ_NO_160MHZ) 157 #define IWINFO_FREQ_NO_HE (1 << IWINFO_FREQ_NO_HE) 158 #define IWINFO_FREQ_NO_IR (1 << IWINFO_FREQ_NO_IR) 159 #define IWINFO_FREQ_INDOOR_ONLY (1 << IWINFO_FREQ_INDOOR_ONLY) 160 161 extern const char * const IWINFO_FREQ_FLAG_NAMES[IWINFO_FREQ_FLAG_COUNT]; 162 163 164 enum iwinfo_opmode { 165 IWINFO_OPMODE_UNKNOWN = 0, 166 IWINFO_OPMODE_MASTER, 167 IWINFO_OPMODE_ADHOC, 168 IWINFO_OPMODE_CLIENT, 169 IWINFO_OPMODE_MONITOR, 170 IWINFO_OPMODE_AP_VLAN, 171 IWINFO_OPMODE_WDS, 172 IWINFO_OPMODE_MESHPOINT, 173 IWINFO_OPMODE_P2P_CLIENT, 174 IWINFO_OPMODE_P2P_GO, 175 176 /* keep last */ 177 IWINFO_OPMODE_COUNT 178 }; 179 180 extern const char * const IWINFO_OPMODE_NAMES[IWINFO_OPMODE_COUNT]; 181 182 183 enum iwinfo_htmode { 184 IWINFO_HTMODE_HT20 = 0, 185 IWINFO_HTMODE_HT40, 186 IWINFO_HTMODE_VHT20, 187 IWINFO_HTMODE_VHT40, 188 IWINFO_HTMODE_VHT80, 189 IWINFO_HTMODE_VHT80_80, 190 IWINFO_HTMODE_VHT160, 191 IWINFO_HTMODE_NOHT, 192 IWINFO_HTMODE_HE20, 193 IWINFO_HTMODE_HE40, 194 IWINFO_HTMODE_HE80, 195 IWINFO_HTMODE_HE80_80, 196 IWINFO_HTMODE_HE160, 197 IWINFO_HTMODE_EHT20, 198 IWINFO_HTMODE_EHT40, 199 IWINFO_HTMODE_EHT80, 200 IWINFO_HTMODE_EHT80_80, 201 IWINFO_HTMODE_EHT160, 202 IWINFO_HTMODE_EHT320, 203 204 /* keep last */ 205 IWINFO_HTMODE_COUNT 206 }; 207 208 #define IWINFO_HTMODE_HT20 (1 << IWINFO_HTMODE_HT20) 209 #define IWINFO_HTMODE_HT40 (1 << IWINFO_HTMODE_HT40) 210 #define IWINFO_HTMODE_VHT20 (1 << IWINFO_HTMODE_VHT20) 211 #define IWINFO_HTMODE_VHT40 (1 << IWINFO_HTMODE_VHT40) 212 #define IWINFO_HTMODE_VHT80 (1 << IWINFO_HTMODE_VHT80) 213 #define IWINFO_HTMODE_VHT80_80 (1 << IWINFO_HTMODE_VHT80_80) 214 #define IWINFO_HTMODE_VHT160 (1 << IWINFO_HTMODE_VHT160) 215 #define IWINFO_HTMODE_NOHT (1 << IWINFO_HTMODE_NOHT) 216 #define IWINFO_HTMODE_HE20 (1 << IWINFO_HTMODE_HE20) 217 #define IWINFO_HTMODE_HE40 (1 << IWINFO_HTMODE_HE40) 218 #define IWINFO_HTMODE_HE80 (1 << IWINFO_HTMODE_HE80) 219 #define IWINFO_HTMODE_HE80_80 (1 << IWINFO_HTMODE_HE80_80) 220 #define IWINFO_HTMODE_HE160 (1 << IWINFO_HTMODE_HE160) 221 #define IWINFO_HTMODE_EHT20 (1 << IWINFO_HTMODE_EHT20) 222 #define IWINFO_HTMODE_EHT40 (1 << IWINFO_HTMODE_EHT40) 223 #define IWINFO_HTMODE_EHT80 (1 << IWINFO_HTMODE_EHT80) 224 #define IWINFO_HTMODE_EHT80_80 (1 << IWINFO_HTMODE_EHT80_80) 225 #define IWINFO_HTMODE_EHT160 (1 << IWINFO_HTMODE_EHT160) 226 #define IWINFO_HTMODE_EHT320 (1 << IWINFO_HTMODE_EHT320) 227 228 extern const char * const IWINFO_HTMODE_NAMES[IWINFO_HTMODE_COUNT]; 229 230 231 struct iwinfo_rate_entry { 232 uint32_t rate; 233 int8_t mcs; 234 uint8_t is_40mhz:1; 235 uint8_t is_short_gi:1; 236 uint8_t is_ht:1; 237 uint8_t is_vht:1; 238 uint8_t is_he:1; 239 uint8_t is_eht:1; 240 uint8_t he_gi; 241 uint8_t he_dcm; 242 uint8_t mhz; 243 uint8_t nss; 244 uint8_t mhz_hi; 245 uint8_t eht_gi; 246 }; 247 248 struct iwinfo_assoclist_entry { 249 uint8_t mac[6]; 250 int8_t signal; 251 int8_t signal_avg; 252 int8_t noise; 253 uint32_t inactive; 254 uint32_t connected_time; 255 uint32_t rx_packets; 256 uint32_t tx_packets; 257 uint64_t rx_drop_misc; 258 struct iwinfo_rate_entry rx_rate; 259 struct iwinfo_rate_entry tx_rate; 260 uint64_t rx_bytes; 261 uint64_t tx_bytes; 262 uint32_t tx_retries; 263 uint32_t tx_failed; 264 uint64_t t_offset; 265 uint8_t is_authorized:1; 266 uint8_t is_authenticated:1; 267 uint8_t is_preamble_short:1; 268 uint8_t is_wme:1; 269 uint8_t is_mfp:1; 270 uint8_t is_tdls:1; 271 uint32_t thr; 272 uint16_t llid; 273 uint16_t plid; 274 char plink_state[16]; 275 char local_ps[16]; 276 char peer_ps[16]; 277 char nonpeer_ps[16]; 278 }; 279 280 struct iwinfo_survey_entry { 281 uint64_t active_time; 282 uint64_t busy_time; 283 uint64_t busy_time_ext; 284 uint64_t rxtime; 285 uint64_t txtime; 286 uint32_t mhz; 287 uint8_t noise; 288 }; 289 290 struct iwinfo_txpwrlist_entry { 291 uint8_t dbm; 292 uint16_t mw; 293 }; 294 295 struct iwinfo_freqlist_entry { 296 uint8_t band; 297 uint8_t channel; 298 uint32_t mhz; 299 uint8_t restricted; 300 uint32_t flags; 301 }; 302 303 struct iwinfo_crypto_entry { 304 uint8_t enabled; 305 uint8_t wpa_version; 306 uint16_t group_ciphers; 307 uint16_t pair_ciphers; 308 uint8_t auth_suites; 309 uint8_t auth_algs; 310 }; 311 312 struct iwinfo_scanlist_ht_chan_entry { 313 uint8_t primary_chan; 314 uint8_t secondary_chan_off; 315 uint8_t chan_width; 316 }; 317 318 struct iwinfo_scanlist_vht_chan_entry { 319 uint8_t chan_width; 320 uint8_t center_chan_1; 321 uint8_t center_chan_2; 322 }; 323 324 extern const char * const ht_secondary_offset[4]; 325 /* 0 = 20 MHz 326 1 = 40 MHz or higher (refer to vht if supported) */ 327 extern const uint16_t ht_chan_width[2]; 328 /* 0 = 40 MHz or lower (refer to ht to a more precise width) 329 1 = 80 MHz 330 2 = 160 MHz 331 3 = 80+80 MHz */ 332 extern const uint16_t vht_chan_width[4]; 333 334 struct iwinfo_scanlist_entry { 335 uint8_t mac[6]; 336 char ssid[IWINFO_ESSID_MAX_SIZE+1]; 337 enum iwinfo_opmode mode; 338 uint8_t band; 339 uint8_t channel; 340 uint32_t mhz; 341 uint8_t signal; 342 uint8_t quality; 343 uint8_t quality_max; 344 struct iwinfo_crypto_entry crypto; 345 struct iwinfo_scanlist_ht_chan_entry ht_chan_info; 346 struct iwinfo_scanlist_vht_chan_entry vht_chan_info; 347 }; 348 349 struct iwinfo_country_entry { 350 uint16_t iso3166; 351 char ccode[4]; 352 }; 353 354 struct iwinfo_iso3166_label { 355 uint16_t iso3166; 356 const char name[28]; 357 }; 358 359 struct iwinfo_hardware_id { 360 uint16_t vendor_id; 361 uint16_t device_id; 362 uint16_t subsystem_vendor_id; 363 uint16_t subsystem_device_id; 364 char compatible[128]; 365 }; 366 367 struct iwinfo_hardware_entry { 368 char vendor_name[64]; 369 char device_name[64]; 370 uint16_t vendor_id; 371 uint16_t device_id; 372 uint16_t subsystem_vendor_id; 373 uint16_t subsystem_device_id; 374 int16_t txpower_offset; 375 int16_t frequency_offset; 376 char compatible[128]; 377 }; 378 379 extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[]; 380 381 #define IWINFO_HARDWARE_FILE "/usr/share/libiwinfo/devices.txt" 382 383 384 struct iwinfo_ops { 385 const char *name; 386 387 int (*probe)(const char *ifname); 388 int (*mode)(const char *, int *); 389 int (*channel)(const char *, int *); 390 int (*center_chan1)(const char *, int *); 391 int (*center_chan2)(const char *, int *); 392 int (*frequency)(const char *, int *); 393 int (*frequency_offset)(const char *, int *); 394 int (*txpower)(const char *, int *); 395 int (*txpower_offset)(const char *, int *); 396 int (*bitrate)(const char *, int *); 397 int (*signal)(const char *, int *); 398 int (*noise)(const char *, int *); 399 int (*quality)(const char *, int *); 400 int (*quality_max)(const char *, int *); 401 int (*mbssid_support)(const char *, int *); 402 int (*hwmodelist)(const char *, int *); 403 int (*htmodelist)(const char *, int *); 404 int (*htmode)(const char *, int *); 405 int (*ssid)(const char *, char *); 406 int (*bssid)(const char *, char *); 407 int (*country)(const char *, char *); 408 int (*hardware_id)(const char *, char *); 409 int (*hardware_name)(const char *, char *); 410 int (*encryption)(const char *, char *); 411 int (*phyname)(const char *, char *); 412 int (*assoclist)(const char *, char *, int *); 413 int (*txpwrlist)(const char *, char *, int *); 414 int (*scanlist)(const char *, char *, int *); 415 int (*freqlist)(const char *, char *, int *); 416 int (*countrylist)(const char *, char *, int *); 417 int (*survey)(const char *, char *, int *); 418 int (*lookup_phy)(const char *, char *); 419 int (*phy_path)(const char *phyname, const char **path); 420 void (*close)(void); 421 }; 422 423 const char * iwinfo_type(const char *ifname); 424 const struct iwinfo_ops * iwinfo_backend(const char *ifname); 425 const struct iwinfo_ops * iwinfo_backend_by_name(const char *name); 426 void iwinfo_finish(void); 427 428 extern const struct iwinfo_ops wext_ops; 429 extern const struct iwinfo_ops madwifi_ops; 430 extern const struct iwinfo_ops nl80211_ops; 431 extern const struct iwinfo_ops wl_ops; 432 433 #include "iwinfo/utils.h" 434 435 #endif 436
This page was automatically generated by LXR 0.3.1. • OpenWrt