• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/iwinfo/include/iwinfo.h

  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