const struct iwinfo_ops * iwinfo_backend(const char *ifname);
void iwinfo_finish(void);
-#include "iwinfo/wext.h"
+extern const struct iwinfo_ops wext_ops;
#ifdef USE_WL
#include "iwinfo/wl.h"
#include <lauxlib.h>
#include "iwinfo.h"
-#include "iwinfo/wext_scan.h"
#define IWINFO_META "iwinfo"
return 1; \
}
+#define LUA_WRAP_INT_OP(type,op) \
+ static int iwinfo_L_##type##_##op(lua_State *L) \
+ { \
+ const char *ifname = luaL_checkstring(L, 1); \
+ int rv; \
+ if( !type##_ops.op(ifname, &rv) ) \
+ lua_pushnumber(L, rv); \
+ else \
+ lua_pushnil(L); \
+ return 1; \
+ }
+
#define LUA_WRAP_STRING(type,op) \
static int iwinfo_L_##type##_##op(lua_State *L) \
{ \
return 1; \
}
+#define LUA_WRAP_STRING_OP(type,op) \
+ static int iwinfo_L_##type##_##op(lua_State *L) \
+ { \
+ const char *ifname = luaL_checkstring(L, 1); \
+ char rv[IWINFO_BUFSIZE]; \
+ memset(rv, 0, IWINFO_BUFSIZE); \
+ if( !type##_ops.op(ifname, rv) ) \
+ lua_pushstring(L, rv); \
+ else \
+ lua_pushnil(L); \
+ return 1; \
+ }
+
#define LUA_WRAP_STRUCT(type,op) \
static int iwinfo_L_##type##_##op(lua_State *L) \
{ \
return iwinfo_L_##op(L, type##_get_##op); \
}
+#define LUA_WRAP_STRUCT_OP(type,op) \
+ static int iwinfo_L_##type##_##op(lua_State *L) \
+ { \
+ return iwinfo_L_##op(L, type##_ops.op); \
+ }
+
#endif
+++ /dev/null
-/*
- * iwinfo - Wireless Information Library - Linux Wireless Extension Headers
- *
- * Copyright (C) 2009-2010 Jo-Philipp Wich <xm@subsignal.org>
- *
- * The iwinfo library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * The iwinfo library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with the iwinfo library. If not, see http://www.gnu.org/licenses/.
- */
-
-#ifndef __IWINFO_WEXT_H_
-#define __IWINFO_WEXT_H_
-
-#include <fcntl.h>
-
-#include "iwinfo.h"
-#include "iwinfo/utils.h"
-#include "iwinfo/api/wext.h"
-
-
-int wext_probe(const char *ifname);
-int wext_get_mode(const char *ifname, int *buf);
-int wext_get_ssid(const char *ifname, char *buf);
-int wext_get_bssid(const char *ifname, char *buf);
-int wext_get_country(const char *ifname, char *buf);
-int wext_get_channel(const char *ifname, int *buf);
-int wext_get_frequency(const char *ifname, int *buf);
-int wext_get_frequency_offset(const char *ifname, int *buf);
-int wext_get_txpower(const char *ifname, int *buf);
-int wext_get_txpower_offset(const char *ifname, int *buf);
-int wext_get_bitrate(const char *ifname, int *buf);
-int wext_get_signal(const char *ifname, int *buf);
-int wext_get_noise(const char *ifname, int *buf);
-int wext_get_quality(const char *ifname, int *buf);
-int wext_get_quality_max(const char *ifname, int *buf);
-int wext_get_encryption(const char *ifname, char *buf);
-int wext_get_phyname(const char *ifname, char *buf);
-int wext_get_assoclist(const char *ifname, char *buf, int *len);
-int wext_get_txpwrlist(const char *ifname, char *buf, int *len);
-int wext_get_scanlist(const char *ifname, char *buf, int *len);
-int wext_get_freqlist(const char *ifname, char *buf, int *len);
-int wext_get_countrylist(const char *ifname, char *buf, int *len);
-int wext_get_hwmodelist(const char *ifname, int *buf);
-int wext_get_mbssid_support(const char *ifname, int *buf);
-int wext_get_hardware_id(const char *ifname, char *buf);
-int wext_get_hardware_name(const char *ifname, char *buf);
-void wext_close(void);
-
-static const struct iwinfo_ops wext_ops = {
- .name = "wext",
- .probe = wext_probe,
- .channel = wext_get_channel,
- .frequency = wext_get_frequency,
- .frequency_offset = wext_get_frequency_offset,
- .txpower = wext_get_txpower,
- .txpower_offset = wext_get_txpower_offset,
- .bitrate = wext_get_bitrate,
- .signal = wext_get_signal,
- .noise = wext_get_noise,
- .quality = wext_get_quality,
- .quality_max = wext_get_quality_max,
- .mbssid_support = wext_get_mbssid_support,
- .hwmodelist = wext_get_hwmodelist,
- .mode = wext_get_mode,
- .ssid = wext_get_ssid,
- .bssid = wext_get_bssid,
- .country = wext_get_country,
- .hardware_id = wext_get_hardware_id,
- .hardware_name = wext_get_hardware_name,
- .encryption = wext_get_encryption,
- .phyname = wext_get_phyname,
- .assoclist = wext_get_assoclist,
- .txpwrlist = wext_get_txpwrlist,
- .scanlist = wext_get_scanlist,
- .freqlist = wext_get_freqlist,
- .countrylist = wext_get_countrylist,
- .close = wext_close
-};
-
-#endif
+++ /dev/null
-/*
- * iwinfo - Wireless Information Library - Linux Wireless Extension Headers
- *
- * Copyright (C) 2009-2010 Jo-Philipp Wich <xm@subsignal.org>
- *
- * The iwinfo library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * The iwinfo library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with the iwinfo library. If not, see http://www.gnu.org/licenses/.
- */
-
-#ifndef __IWINFO_WEXT_SCAN_H_
-#define __IWINFO_WEXT_SCAN_H_
-
-#include <fcntl.h>
-
-#include "iwinfo.h"
-#include "iwinfo/utils.h"
-#include "iwinfo/api/wext.h"
-
-
-typedef struct stream_descr
-{
- char * end; /* End of the stream */
- char * current; /* Current event in stream of events */
- char * value; /* Current value in event */
-} stream_descr;
-
-/*
- * Describe how a standard IOCTL looks like.
- */
-struct iw_ioctl_description
-{
- uint8_t header_type; /* NULL, iw_point or other */
- uint8_t token_type; /* Future */
- uint16_t token_size; /* Granularity of payload */
- uint16_t min_tokens; /* Min acceptable token number */
- uint16_t max_tokens; /* Max acceptable token number */
- uint32_t flags; /* Special handling of the request */
-};
-
-/* Type of headers we know about (basically union iwreq_data) */
-#define IW_HEADER_TYPE_NULL 0 /* Not available */
-#define IW_HEADER_TYPE_CHAR 2 /* char [IFNAMSIZ] */
-#define IW_HEADER_TYPE_UINT 4 /* __u32 */
-#define IW_HEADER_TYPE_FREQ 5 /* struct iw_freq */
-#define IW_HEADER_TYPE_ADDR 6 /* struct sockaddr */
-#define IW_HEADER_TYPE_POINT 8 /* struct iw_point */
-#define IW_HEADER_TYPE_PARAM 9 /* struct iw_param */
-#define IW_HEADER_TYPE_QUAL 10 /* struct iw_quality */
-
-/* Handling flags */
-/* Most are not implemented. I just use them as a reminder of some
- * cool features we might need one day ;-) */
-#define IW_DESCR_FLAG_NONE 0x0000 /* Obvious */
-/* Wrapper level flags */
-#define IW_DESCR_FLAG_DUMP 0x0001 /* Not part of the dump command */
-#define IW_DESCR_FLAG_EVENT 0x0002 /* Generate an event on SET */
-#define IW_DESCR_FLAG_RESTRICT 0x0004 /* GET : request is ROOT only */
- /* SET : Omit payload from generated iwevent */
-#define IW_DESCR_FLAG_NOMAX 0x0008 /* GET : no limit on request size */
-/* Driver level flags */
-#define IW_DESCR_FLAG_WAIT 0x0100 /* Wait for driver event */
-
-
-/*
- * Meta-data about all the standard Wireless Extension request we
- * know about.
- */
-static const struct iw_ioctl_description standard_ioctl_descr[] = {
- [SIOCSIWCOMMIT - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_NULL,
- },
- [SIOCGIWNAME - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_CHAR,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWNWID - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- .flags = IW_DESCR_FLAG_EVENT,
- },
- [SIOCGIWNWID - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWFREQ - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_FREQ,
- .flags = IW_DESCR_FLAG_EVENT,
- },
- [SIOCGIWFREQ - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_FREQ,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWMODE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_UINT,
- .flags = IW_DESCR_FLAG_EVENT,
- },
- [SIOCGIWMODE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_UINT,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWSENS - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWSENS - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWRANGE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_NULL,
- },
- [SIOCGIWRANGE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = sizeof(struct iw_range),
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWPRIV - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_NULL,
- },
- [SIOCGIWPRIV - SIOCIWFIRST] = { /* (handled directly by us) */
- .header_type = IW_HEADER_TYPE_NULL,
- },
- [SIOCSIWSTATS - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_NULL,
- },
- [SIOCGIWSTATS - SIOCIWFIRST] = { /* (handled directly by us) */
- .header_type = IW_HEADER_TYPE_NULL,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWSPY - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct sockaddr),
- .max_tokens = IW_MAX_SPY,
- },
- [SIOCGIWSPY - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct sockaddr) +
- sizeof(struct iw_quality),
- .max_tokens = IW_MAX_SPY,
- },
- [SIOCSIWTHRSPY - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct iw_thrspy),
- .min_tokens = 1,
- .max_tokens = 1,
- },
- [SIOCGIWTHRSPY - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct iw_thrspy),
- .min_tokens = 1,
- .max_tokens = 1,
- },
- [SIOCSIWAP - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- },
- [SIOCGIWAP - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWMLME - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .min_tokens = sizeof(struct iw_mlme),
- .max_tokens = sizeof(struct iw_mlme),
- },
- [SIOCGIWAPLIST - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct sockaddr) +
- sizeof(struct iw_quality),
- .max_tokens = IW_MAX_AP,
- .flags = IW_DESCR_FLAG_NOMAX,
- },
- [SIOCSIWSCAN - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .min_tokens = 0,
- .max_tokens = sizeof(struct iw_scan_req),
- },
- [SIOCGIWSCAN - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_SCAN_MAX_DATA,
- .flags = IW_DESCR_FLAG_NOMAX,
- },
- [SIOCSIWESSID - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE + 1,
- .flags = IW_DESCR_FLAG_EVENT,
- },
- [SIOCGIWESSID - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE + 1,
- .flags = IW_DESCR_FLAG_DUMP,
- },
- [SIOCSIWNICKN - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE + 1,
- },
- [SIOCGIWNICKN - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE + 1,
- },
- [SIOCSIWRATE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWRATE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWRTS - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWRTS - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWFRAG - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWFRAG - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWTXPOW - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWTXPOW - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWRETRY - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWRETRY - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWENCODE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_ENCODING_TOKEN_MAX,
- .flags = IW_DESCR_FLAG_EVENT | IW_DESCR_FLAG_RESTRICT,
- },
- [SIOCGIWENCODE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_ENCODING_TOKEN_MAX,
- .flags = IW_DESCR_FLAG_DUMP | IW_DESCR_FLAG_RESTRICT,
- },
- [SIOCSIWPOWER - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWPOWER - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWMODUL - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWMODUL - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWGENIE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_GENERIC_IE_MAX,
- },
- [SIOCGIWGENIE - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_GENERIC_IE_MAX,
- },
- [SIOCSIWAUTH - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCGIWAUTH - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
- [SIOCSIWENCODEEXT - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .min_tokens = sizeof(struct iw_encode_ext),
- .max_tokens = sizeof(struct iw_encode_ext) +
- IW_ENCODING_TOKEN_MAX,
- },
- [SIOCGIWENCODEEXT - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .min_tokens = sizeof(struct iw_encode_ext),
- .max_tokens = sizeof(struct iw_encode_ext) +
- IW_ENCODING_TOKEN_MAX,
- },
- [SIOCSIWPMKSA - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .min_tokens = sizeof(struct iw_pmksa),
- .max_tokens = sizeof(struct iw_pmksa),
- },
-};
-
-/*
- * Meta-data about all the additional standard Wireless Extension events
- * we know about.
- */
-static const struct iw_ioctl_description standard_event_descr[] = {
- [IWEVTXDROP - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- },
- [IWEVQUAL - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_QUAL,
- },
- [IWEVCUSTOM - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_CUSTOM_MAX,
- },
- [IWEVREGISTERED - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- },
- [IWEVEXPIRED - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- },
- [IWEVGENIE - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_GENERIC_IE_MAX,
- },
- [IWEVMICHAELMICFAILURE - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = sizeof(struct iw_michaelmicfailure),
- },
- [IWEVASSOCREQIE - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_GENERIC_IE_MAX,
- },
- [IWEVASSOCRESPIE - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = IW_GENERIC_IE_MAX,
- },
- [IWEVPMKIDCAND - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = 1,
- .max_tokens = sizeof(struct iw_pmkid_cand),
- },
-};
-
-/* Size (in bytes) of various events */
-static const int event_type_size[] = {
- IW_EV_LCP_PK_LEN, /* IW_HEADER_TYPE_NULL */
- 0,
- IW_EV_CHAR_PK_LEN, /* IW_HEADER_TYPE_CHAR */
- 0,
- IW_EV_UINT_PK_LEN, /* IW_HEADER_TYPE_UINT */
- IW_EV_FREQ_PK_LEN, /* IW_HEADER_TYPE_FREQ */
- IW_EV_ADDR_PK_LEN, /* IW_HEADER_TYPE_ADDR */
- 0,
- IW_EV_POINT_PK_LEN, /* Without variable payload */
- IW_EV_PARAM_PK_LEN, /* IW_HEADER_TYPE_PARAM */
- IW_EV_QUAL_PK_LEN, /* IW_HEADER_TYPE_QUAL */
-};
-
-
-static const unsigned int standard_ioctl_num =
- (sizeof(standard_ioctl_descr) / sizeof(struct iw_ioctl_description));
-
-static const unsigned int standard_event_num =
- (sizeof(standard_event_descr) / sizeof(struct iw_ioctl_description));
-
-#define IW_IE_CYPHER_NUM 8
-#define IW_IE_KEY_MGMT_NUM 3
-
-#endif
#endif
/* Wext */
-LUA_WRAP_INT(wext,channel)
-LUA_WRAP_INT(wext,frequency)
-LUA_WRAP_INT(wext,frequency_offset)
-LUA_WRAP_INT(wext,txpower)
-LUA_WRAP_INT(wext,txpower_offset)
-LUA_WRAP_INT(wext,bitrate)
-LUA_WRAP_INT(wext,signal)
-LUA_WRAP_INT(wext,noise)
-LUA_WRAP_INT(wext,quality)
-LUA_WRAP_INT(wext,quality_max)
-LUA_WRAP_STRING(wext,ssid)
-LUA_WRAP_STRING(wext,bssid)
-LUA_WRAP_STRING(wext,country)
-LUA_WRAP_STRING(wext,hardware_name)
-LUA_WRAP_STRING(wext,phyname)
-LUA_WRAP_STRUCT(wext,mode)
-LUA_WRAP_STRUCT(wext,assoclist)
-LUA_WRAP_STRUCT(wext,txpwrlist)
-LUA_WRAP_STRUCT(wext,scanlist)
-LUA_WRAP_STRUCT(wext,freqlist)
-LUA_WRAP_STRUCT(wext,countrylist)
-LUA_WRAP_STRUCT(wext,hwmodelist)
-LUA_WRAP_STRUCT(wext,encryption)
-LUA_WRAP_STRUCT(wext,mbssid_support)
-LUA_WRAP_STRUCT(wext,hardware_id)
+LUA_WRAP_INT_OP(wext,channel)
+LUA_WRAP_INT_OP(wext,frequency)
+LUA_WRAP_INT_OP(wext,frequency_offset)
+LUA_WRAP_INT_OP(wext,txpower)
+LUA_WRAP_INT_OP(wext,txpower_offset)
+LUA_WRAP_INT_OP(wext,bitrate)
+LUA_WRAP_INT_OP(wext,signal)
+LUA_WRAP_INT_OP(wext,noise)
+LUA_WRAP_INT_OP(wext,quality)
+LUA_WRAP_INT_OP(wext,quality_max)
+LUA_WRAP_STRING_OP(wext,ssid)
+LUA_WRAP_STRING_OP(wext,bssid)
+LUA_WRAP_STRING_OP(wext,country)
+LUA_WRAP_STRING_OP(wext,hardware_name)
+LUA_WRAP_STRING_OP(wext,phyname)
+LUA_WRAP_STRUCT_OP(wext,mode)
+LUA_WRAP_STRUCT_OP(wext,assoclist)
+LUA_WRAP_STRUCT_OP(wext,txpwrlist)
+LUA_WRAP_STRUCT_OP(wext,scanlist)
+LUA_WRAP_STRUCT_OP(wext,freqlist)
+LUA_WRAP_STRUCT_OP(wext,countrylist)
+LUA_WRAP_STRUCT_OP(wext,hwmodelist)
+LUA_WRAP_STRUCT_OP(wext,encryption)
+LUA_WRAP_STRUCT_OP(wext,mbssid_support)
+LUA_WRAP_STRUCT_OP(wext,hardware_id)
#ifdef USE_WL
/* Broadcom table */
*/
#include "iwinfo/madwifi.h"
-#include "iwinfo/wext.h"
+#include "iwinfo_wext.h"
/*
int madwifi_get_mode(const char *ifname, int *buf)
{
- return wext_get_mode(ifname, buf);
+ return wext_ops.mode(ifname, buf);
}
int madwifi_get_ssid(const char *ifname, char *buf)
{
- return wext_get_ssid(ifname, buf);
+ return wext_ops.ssid(ifname, buf);
}
int madwifi_get_bssid(const char *ifname, char *buf)
{
- return wext_get_bssid(ifname, buf);
+ return wext_ops.bssid(ifname, buf);
}
int madwifi_get_channel(const char *ifname, int *buf)
int madwifi_get_txpower(const char *ifname, int *buf)
{
- return wext_get_txpower(ifname, buf);
+ return wext_ops.txpower(ifname, buf);
}
int madwifi_get_bitrate(const char *ifname, int *buf)
}
/* Return whatever wext tells us ... */
- return wext_get_bitrate(ifname, buf);
+ return wext_ops.bitrate(ifname, buf);
}
return -1;
}
/* Return whatever wext tells us ... */
- return wext_get_signal(ifname, buf);
+ return wext_ops.signal(ifname, buf);
}
return -1;
int madwifi_get_noise(const char *ifname, int *buf)
{
- return wext_get_noise(ifname, buf);
+ return wext_ops.noise(ifname, buf);
}
int madwifi_get_quality(const char *ifname, int *buf)
}
/* Return whatever wext tells us ... */
- return wext_get_quality(ifname, buf);
+ return wext_ops.quality(ifname, buf);
}
return -1;
int madwifi_get_quality_max(const char *ifname, int *buf)
{
- return wext_get_quality_max(ifname, buf);
+ return wext_ops.quality_max(ifname, buf);
}
int madwifi_get_encryption(const char *ifname, char *buf)
{
if( (res = madwifi_ifadd(ifname)) != NULL )
{
- rc = wext_get_txpwrlist(res, buf, len);
+ rc = wext_ops.txpwrlist(res, buf, len);
madwifi_ifdel(res);
}
}
/* Its an athX ... */
else if( !!madwifi_isvap(ifname, NULL) )
{
- rc = wext_get_txpwrlist(ifname, buf, len);
+ rc = wext_ops.txpwrlist(ifname, buf, len);
}
return rc;
{
if( iwinfo_ifup(e->d_name) )
{
- ret = wext_get_scanlist(e->d_name, buf, len);
+ ret = wext_ops.scanlist(e->d_name, buf, len);
break;
}
}
{
if( iwinfo_ifup(res) )
{
- wext_get_scanlist(res, buf, len);
+ wext_ops.scanlist(res, buf, len);
sleep(1);
- wext_get_scanlist(res, buf, len);
+ wext_ops.scanlist(res, buf, len);
sleep(1);
- ret = wext_get_scanlist(res, buf, len);
+ ret = wext_ops.scanlist(res, buf, len);
}
iwinfo_ifdown(res);
/* Got athX device? */
else if( !!madwifi_isvap(ifname, NULL) )
{
- ret = wext_get_scanlist(ifname, buf, len);
+ ret = wext_ops.scanlist(ifname, buf, len);
}
return ret;
struct iwinfo_hardware_entry *e;
const char *phy = madwifi_phyname(ifname);
- if (wext_get_hardware_id(phy, buf))
+ if (wext_ops.hardware_id(phy, buf))
return iwinfo_hardware_id_from_mtd((struct iwinfo_hardware_id *)buf);
return 0;
*/
#include "iwinfo/nl80211.h"
-#include "iwinfo/wext.h"
#define min(x, y) ((x) < (y)) ? (x) : (y)
return 0;
#endif
- return wext_get_txpower(ifname, buf);
+ return wext_ops.txpower(ifname, buf);
}
/* Reuse existing interface */
if ((res = nl80211_phy2ifname(ifname)) != NULL)
{
- rv = wext_get_hardware_id(res, buf);
+ rv = wext_ops.hardware_id(res, buf);
}
/* Need to spawn a temporary iface for finding IDs */
else if ((res = nl80211_ifadd(ifname)) != NULL)
{
- rv = wext_get_hardware_id(res, buf);
+ rv = wext_ops.hardware_id(res, buf);
nl80211_ifdel(res);
}
}
else
{
- rv = wext_get_hardware_id(ifname, buf);
+ rv = wext_ops.hardware_id(ifname, buf);
}
/* Failed to obtain hardware IDs, search board config */
*/
#include "iwinfo.h"
-#include "iwinfo/wext.h"
+#include "iwinfo_wext.h"
static double wext_freq2float(const struct iw_freq *in)
{
}
-int wext_probe(const char *ifname)
+static int wext_probe(const char *ifname)
{
struct iwreq wrq;
return 0;
}
-void wext_close(void)
+static void wext_close(void)
{
/* Nop */
}
-int wext_get_mode(const char *ifname, int *buf)
+static int wext_get_mode(const char *ifname, int *buf)
{
struct iwreq wrq;
return -1;
}
-int wext_get_ssid(const char *ifname, char *buf)
+static int wext_get_ssid(const char *ifname, char *buf)
{
struct iwreq wrq;
return -1;
}
-int wext_get_bssid(const char *ifname, char *buf)
+static int wext_get_bssid(const char *ifname, char *buf)
{
struct iwreq wrq;
return -1;
}
-int wext_get_bitrate(const char *ifname, int *buf)
+static int wext_get_bitrate(const char *ifname, int *buf)
{
struct iwreq wrq;
return -1;
}
-int wext_get_channel(const char *ifname, int *buf)
+static int wext_get_channel(const char *ifname, int *buf)
{
struct iwreq wrq;
struct iw_range range;
return -1;
}
-int wext_get_frequency(const char *ifname, int *buf)
+static int wext_get_frequency(const char *ifname, int *buf)
{
struct iwreq wrq;
struct iw_range range;
return -1;
}
-int wext_get_txpower(const char *ifname, int *buf)
+static int wext_get_txpower(const char *ifname, int *buf)
{
struct iwreq wrq;
return -1;
}
-int wext_get_signal(const char *ifname, int *buf)
+static int wext_get_signal(const char *ifname, int *buf)
{
struct iwreq wrq;
struct iw_statistics stats;
return -1;
}
-int wext_get_noise(const char *ifname, int *buf)
+static int wext_get_noise(const char *ifname, int *buf)
{
struct iwreq wrq;
struct iw_statistics stats;
return -1;
}
-int wext_get_quality(const char *ifname, int *buf)
+static int wext_get_quality(const char *ifname, int *buf)
{
struct iwreq wrq;
struct iw_statistics stats;
return -1;
}
-int wext_get_quality_max(const char *ifname, int *buf)
+static int wext_get_quality_max(const char *ifname, int *buf)
{
struct iwreq wrq;
struct iw_range range;
return -1;
}
-int wext_get_assoclist(const char *ifname, char *buf, int *len)
+static int wext_get_assoclist(const char *ifname, char *buf, int *len)
{
/* Stub */
return -1;
}
-int wext_get_txpwrlist(const char *ifname, char *buf, int *len)
+static int wext_get_txpwrlist(const char *ifname, char *buf, int *len)
{
struct iwreq wrq;
struct iw_range range;
return -1;
}
-int wext_get_freqlist(const char *ifname, char *buf, int *len)
+static int wext_get_freqlist(const char *ifname, char *buf, int *len)
{
struct iwreq wrq;
struct iw_range range;
return -1;
}
-int wext_get_country(const char *ifname, char *buf)
+static int wext_get_country(const char *ifname, char *buf)
{
sprintf(buf, "00");
return 0;
}
-int wext_get_countrylist(const char *ifname, char *buf, int *len)
+static int wext_get_countrylist(const char *ifname, char *buf, int *len)
{
/* Stub */
return -1;
}
-int wext_get_hwmodelist(const char *ifname, int *buf)
+static int wext_get_hwmodelist(const char *ifname, int *buf)
{
char chans[IWINFO_BUFSIZE] = { 0 };
struct iwinfo_freqlist_entry *e = NULL;
return -1;
}
-int wext_get_encryption(const char *ifname, char *buf)
+static int wext_get_encryption(const char *ifname, char *buf)
{
/* No reliable crypto info in wext */
return -1;
}
-int wext_get_phyname(const char *ifname, char *buf)
+static int wext_get_phyname(const char *ifname, char *buf)
{
/* No suitable api in wext */
strcpy(buf, ifname);
return 0;
}
-int wext_get_mbssid_support(const char *ifname, int *buf)
+static int wext_get_mbssid_support(const char *ifname, int *buf)
{
/* No multi bssid support atm */
return -1;
return rv;
}
-int wext_get_hardware_id(const char *ifname, char *buf)
+static int wext_get_hardware_id(const char *ifname, char *buf)
{
char *data;
struct iwinfo_hardware_id *id = (struct iwinfo_hardware_id *)buf;
return (id->vendor_id > 0 && id->device_id > 0) ? 0 : -1;
}
-int wext_get_hardware_name(const char *ifname, char *buf)
+static int wext_get_hardware_name(const char *ifname, char *buf)
{
sprintf(buf, "Generic WEXT");
return 0;
}
-int wext_get_txpower_offset(const char *ifname, int *buf)
+static int wext_get_txpower_offset(const char *ifname, int *buf)
{
/* Stub */
*buf = 0;
return -1;
}
-int wext_get_frequency_offset(const char *ifname, int *buf)
+static int wext_get_frequency_offset(const char *ifname, int *buf)
{
/* Stub */
*buf = 0;
return -1;
}
+
+const struct iwinfo_ops wext_ops = {
+ .name = "wext",
+ .probe = wext_probe,
+ .channel = wext_get_channel,
+ .frequency = wext_get_frequency,
+ .frequency_offset = wext_get_frequency_offset,
+ .txpower = wext_get_txpower,
+ .txpower_offset = wext_get_txpower_offset,
+ .bitrate = wext_get_bitrate,
+ .signal = wext_get_signal,
+ .noise = wext_get_noise,
+ .quality = wext_get_quality,
+ .quality_max = wext_get_quality_max,
+ .mbssid_support = wext_get_mbssid_support,
+ .hwmodelist = wext_get_hwmodelist,
+ .mode = wext_get_mode,
+ .ssid = wext_get_ssid,
+ .bssid = wext_get_bssid,
+ .country = wext_get_country,
+ .hardware_id = wext_get_hardware_id,
+ .hardware_name = wext_get_hardware_name,
+ .encryption = wext_get_encryption,
+ .phyname = wext_get_phyname,
+ .assoclist = wext_get_assoclist,
+ .txpwrlist = wext_get_txpwrlist,
+ .scanlist = wext_get_scanlist,
+ .freqlist = wext_get_freqlist,
+ .countrylist = wext_get_countrylist,
+ .close = wext_close
+};
--- /dev/null
+/*
+ * iwinfo - Wireless Information Library - Linux Wireless Extension Headers
+ *
+ * Copyright (C) 2009-2010 Jo-Philipp Wich <xm@subsignal.org>
+ *
+ * The iwinfo library is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * The iwinfo library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with the iwinfo library. If not, see http://www.gnu.org/licenses/.
+ */
+
+#ifndef __IWINFO_WEXT_SCAN_H_
+#define __IWINFO_WEXT_SCAN_H_
+
+#include <fcntl.h>
+
+#include "iwinfo.h"
+#include "iwinfo/utils.h"
+#include "iwinfo/api/wext.h"
+
+
+typedef struct stream_descr
+{
+ char * end; /* End of the stream */
+ char * current; /* Current event in stream of events */
+ char * value; /* Current value in event */
+} stream_descr;
+
+/*
+ * Describe how a standard IOCTL looks like.
+ */
+struct iw_ioctl_description
+{
+ uint8_t header_type; /* NULL, iw_point or other */
+ uint8_t token_type; /* Future */
+ uint16_t token_size; /* Granularity of payload */
+ uint16_t min_tokens; /* Min acceptable token number */
+ uint16_t max_tokens; /* Max acceptable token number */
+ uint32_t flags; /* Special handling of the request */
+};
+
+/* Type of headers we know about (basically union iwreq_data) */
+#define IW_HEADER_TYPE_NULL 0 /* Not available */
+#define IW_HEADER_TYPE_CHAR 2 /* char [IFNAMSIZ] */
+#define IW_HEADER_TYPE_UINT 4 /* __u32 */
+#define IW_HEADER_TYPE_FREQ 5 /* struct iw_freq */
+#define IW_HEADER_TYPE_ADDR 6 /* struct sockaddr */
+#define IW_HEADER_TYPE_POINT 8 /* struct iw_point */
+#define IW_HEADER_TYPE_PARAM 9 /* struct iw_param */
+#define IW_HEADER_TYPE_QUAL 10 /* struct iw_quality */
+
+/* Handling flags */
+/* Most are not implemented. I just use them as a reminder of some
+ * cool features we might need one day ;-) */
+#define IW_DESCR_FLAG_NONE 0x0000 /* Obvious */
+/* Wrapper level flags */
+#define IW_DESCR_FLAG_DUMP 0x0001 /* Not part of the dump command */
+#define IW_DESCR_FLAG_EVENT 0x0002 /* Generate an event on SET */
+#define IW_DESCR_FLAG_RESTRICT 0x0004 /* GET : request is ROOT only */
+ /* SET : Omit payload from generated iwevent */
+#define IW_DESCR_FLAG_NOMAX 0x0008 /* GET : no limit on request size */
+/* Driver level flags */
+#define IW_DESCR_FLAG_WAIT 0x0100 /* Wait for driver event */
+
+
+/*
+ * Meta-data about all the standard Wireless Extension request we
+ * know about.
+ */
+static const struct iw_ioctl_description standard_ioctl_descr[] = {
+ [SIOCSIWCOMMIT - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_NULL,
+ },
+ [SIOCGIWNAME - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_CHAR,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWNWID - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ .flags = IW_DESCR_FLAG_EVENT,
+ },
+ [SIOCGIWNWID - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWFREQ - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_FREQ,
+ .flags = IW_DESCR_FLAG_EVENT,
+ },
+ [SIOCGIWFREQ - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_FREQ,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWMODE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_UINT,
+ .flags = IW_DESCR_FLAG_EVENT,
+ },
+ [SIOCGIWMODE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_UINT,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWSENS - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWSENS - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWRANGE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_NULL,
+ },
+ [SIOCGIWRANGE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = sizeof(struct iw_range),
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWPRIV - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_NULL,
+ },
+ [SIOCGIWPRIV - SIOCIWFIRST] = { /* (handled directly by us) */
+ .header_type = IW_HEADER_TYPE_NULL,
+ },
+ [SIOCSIWSTATS - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_NULL,
+ },
+ [SIOCGIWSTATS - SIOCIWFIRST] = { /* (handled directly by us) */
+ .header_type = IW_HEADER_TYPE_NULL,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWSPY - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = sizeof(struct sockaddr),
+ .max_tokens = IW_MAX_SPY,
+ },
+ [SIOCGIWSPY - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = sizeof(struct sockaddr) +
+ sizeof(struct iw_quality),
+ .max_tokens = IW_MAX_SPY,
+ },
+ [SIOCSIWTHRSPY - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = sizeof(struct iw_thrspy),
+ .min_tokens = 1,
+ .max_tokens = 1,
+ },
+ [SIOCGIWTHRSPY - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = sizeof(struct iw_thrspy),
+ .min_tokens = 1,
+ .max_tokens = 1,
+ },
+ [SIOCSIWAP - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_ADDR,
+ },
+ [SIOCGIWAP - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_ADDR,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWMLME - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .min_tokens = sizeof(struct iw_mlme),
+ .max_tokens = sizeof(struct iw_mlme),
+ },
+ [SIOCGIWAPLIST - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = sizeof(struct sockaddr) +
+ sizeof(struct iw_quality),
+ .max_tokens = IW_MAX_AP,
+ .flags = IW_DESCR_FLAG_NOMAX,
+ },
+ [SIOCSIWSCAN - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .min_tokens = 0,
+ .max_tokens = sizeof(struct iw_scan_req),
+ },
+ [SIOCGIWSCAN - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_SCAN_MAX_DATA,
+ .flags = IW_DESCR_FLAG_NOMAX,
+ },
+ [SIOCSIWESSID - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
+ .flags = IW_DESCR_FLAG_EVENT,
+ },
+ [SIOCGIWESSID - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
+ .flags = IW_DESCR_FLAG_DUMP,
+ },
+ [SIOCSIWNICKN - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
+ },
+ [SIOCGIWNICKN - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
+ },
+ [SIOCSIWRATE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWRATE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWRTS - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWRTS - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWFRAG - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWFRAG - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWTXPOW - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWTXPOW - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWRETRY - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWRETRY - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWENCODE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_ENCODING_TOKEN_MAX,
+ .flags = IW_DESCR_FLAG_EVENT | IW_DESCR_FLAG_RESTRICT,
+ },
+ [SIOCGIWENCODE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_ENCODING_TOKEN_MAX,
+ .flags = IW_DESCR_FLAG_DUMP | IW_DESCR_FLAG_RESTRICT,
+ },
+ [SIOCSIWPOWER - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWPOWER - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWMODUL - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWMODUL - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWGENIE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_GENERIC_IE_MAX,
+ },
+ [SIOCGIWGENIE - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_GENERIC_IE_MAX,
+ },
+ [SIOCSIWAUTH - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCGIWAUTH - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_PARAM,
+ },
+ [SIOCSIWENCODEEXT - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .min_tokens = sizeof(struct iw_encode_ext),
+ .max_tokens = sizeof(struct iw_encode_ext) +
+ IW_ENCODING_TOKEN_MAX,
+ },
+ [SIOCGIWENCODEEXT - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .min_tokens = sizeof(struct iw_encode_ext),
+ .max_tokens = sizeof(struct iw_encode_ext) +
+ IW_ENCODING_TOKEN_MAX,
+ },
+ [SIOCSIWPMKSA - SIOCIWFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .min_tokens = sizeof(struct iw_pmksa),
+ .max_tokens = sizeof(struct iw_pmksa),
+ },
+};
+
+/*
+ * Meta-data about all the additional standard Wireless Extension events
+ * we know about.
+ */
+static const struct iw_ioctl_description standard_event_descr[] = {
+ [IWEVTXDROP - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_ADDR,
+ },
+ [IWEVQUAL - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_QUAL,
+ },
+ [IWEVCUSTOM - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_CUSTOM_MAX,
+ },
+ [IWEVREGISTERED - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_ADDR,
+ },
+ [IWEVEXPIRED - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_ADDR,
+ },
+ [IWEVGENIE - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_GENERIC_IE_MAX,
+ },
+ [IWEVMICHAELMICFAILURE - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = sizeof(struct iw_michaelmicfailure),
+ },
+ [IWEVASSOCREQIE - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_GENERIC_IE_MAX,
+ },
+ [IWEVASSOCRESPIE - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = IW_GENERIC_IE_MAX,
+ },
+ [IWEVPMKIDCAND - IWEVFIRST] = {
+ .header_type = IW_HEADER_TYPE_POINT,
+ .token_size = 1,
+ .max_tokens = sizeof(struct iw_pmkid_cand),
+ },
+};
+
+/* Size (in bytes) of various events */
+static const int event_type_size[] = {
+ IW_EV_LCP_PK_LEN, /* IW_HEADER_TYPE_NULL */
+ 0,
+ IW_EV_CHAR_PK_LEN, /* IW_HEADER_TYPE_CHAR */
+ 0,
+ IW_EV_UINT_PK_LEN, /* IW_HEADER_TYPE_UINT */
+ IW_EV_FREQ_PK_LEN, /* IW_HEADER_TYPE_FREQ */
+ IW_EV_ADDR_PK_LEN, /* IW_HEADER_TYPE_ADDR */
+ 0,
+ IW_EV_POINT_PK_LEN, /* Without variable payload */
+ IW_EV_PARAM_PK_LEN, /* IW_HEADER_TYPE_PARAM */
+ IW_EV_QUAL_PK_LEN, /* IW_HEADER_TYPE_QUAL */
+};
+
+
+static const unsigned int standard_ioctl_num =
+ (sizeof(standard_ioctl_descr) / sizeof(struct iw_ioctl_description));
+
+static const unsigned int standard_event_num =
+ (sizeof(standard_event_descr) / sizeof(struct iw_ioctl_description));
+
+#define IW_IE_CYPHER_NUM 8
+#define IW_IE_KEY_MGMT_NUM 3
+
+int wext_get_scanlist(const char *ifname, char *buf, int *len);
+
+#endif
*/
#include "iwinfo.h"
-#include "iwinfo/wext_scan.h"
+#include "iwinfo_wext.h"
static int wext_ioctl(const char *ifname, int cmd, struct iwreq *wrq)
*/
#include "iwinfo/wl.h"
-#include "iwinfo/wext.h"
static int wl_ioctl(const char *name, int cmd, void *buf, int len)
{
int wl_get_frequency(const char *ifname, int *buf)
{
- return wext_get_frequency(ifname, buf);
+ return wext_ops.frequency(ifname, buf);
}
int wl_get_txpower(const char *ifname, int *buf)
{
/* WLC_GET_VAR "qtxpower" */
- return wext_get_txpower(ifname, buf);
+ return wext_ops.txpower(ifname, buf);
}
int wl_get_bitrate(const char *ifname, int *buf)
int wl_get_quality(const char *ifname, int *buf)
{
- return wext_get_quality(ifname, buf);
+ return wext_ops.quality(ifname, buf);
}
int wl_get_quality_max(const char *ifname, int *buf)
{
- return wext_get_quality_max(ifname, buf);
+ return wext_ops.quality_max(ifname, buf);
}
int wl_get_encryption(const char *ifname, char *buf)
int wl_get_scanlist(const char *ifname, char *buf, int *len)
{
- return wext_get_scanlist(ifname, buf, len);
+ return wext_ops.scanlist(ifname, buf, len);
}
int wl_get_freqlist(const char *ifname, char *buf, int *len)
{
- return wext_get_freqlist(ifname, buf, len);
+ return wext_ops.freqlist(ifname, buf, len);
}
int wl_get_country(const char *ifname, char *buf)