X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fiwinfo%2Fsrc%2Fiwinfo_lualib.c;h=5509f4b6ae212fd8ff1c19c46ea1227bbe61840a;hp=0b007c6aff9ec05c983e0437a1d28f003d82bf67;hb=aff68f53751c706dd623eb794106eab59991e69d;hpb=2a9a87e89172c147c1dc222f67221f825755e9aa diff --git a/libs/iwinfo/src/iwinfo_lualib.c b/libs/iwinfo/src/iwinfo_lualib.c index 0b007c6af..5509f4b6a 100644 --- a/libs/iwinfo/src/iwinfo_lualib.c +++ b/libs/iwinfo/src/iwinfo_lualib.c @@ -19,17 +19,23 @@ #include "iwinfo_lualib.h" /* Determine type */ -int iwinfo_L_type(lua_State *L) +static int iwinfo_L_type(lua_State *L) { const char *ifname = luaL_checkstring(L, 1); +#ifdef USE_MADWIFI + if( madwifi_probe(ifname) ) + lua_pushstring(L, "madwifi"); + else +#endif + +#ifdef USE_WL if( wl_probe(ifname) ) lua_pushstring(L, "wl"); + else +#endif - else if( madwifi_probe(ifname) ) - lua_pushstring(L, "madwifi"); - - else if( wext_probe(ifname) ) + if( wext_probe(ifname) ) lua_pushstring(L, "wext"); else @@ -39,7 +45,7 @@ int iwinfo_L_type(lua_State *L) } /* Wrapper for assoclist */ -int iwinfo_L_assoclist(lua_State *L, int (*func)(const char *, char *, int *)) +static int iwinfo_L_assoclist(lua_State *L, int (*func)(const char *, char *, int *)) { int i, len; char rv[IWINFO_BUFSIZE]; @@ -75,6 +81,176 @@ int iwinfo_L_assoclist(lua_State *L, int (*func)(const char *, char *, int *)) return 1; } +/* Wrapper for tx power list */ +static int iwinfo_L_txpwrlist(lua_State *L, int (*func)(const char *, char *, int *)) +{ + int i, x, len; + char rv[IWINFO_BUFSIZE]; + const char *ifname = luaL_checkstring(L, 1); + struct iwinfo_txpwrlist_entry *e; + + lua_newtable(L); + memset(rv, 0, sizeof(rv)); + + if( !(*func)(ifname, rv, &len) ) + { + for( i = 0, x = 1; i < len; i += sizeof(struct iwinfo_txpwrlist_entry), x++ ) + { + e = (struct iwinfo_txpwrlist_entry *) &rv[i]; + + lua_newtable(L); + + lua_pushnumber(L, e->mw); + lua_setfield(L, -2, "mw"); + + lua_pushnumber(L, e->dbm); + lua_setfield(L, -2, "dbm"); + + lua_rawseti(L, -2, x); + } + } + + return 1; +} + +/* Wrapper for scan list */ +static int iwinfo_L_scanlist(lua_State *L, int (*func)(const char *, char *, int *)) +{ + int i, j, x, y, len; + char rv[IWINFO_BUFSIZE]; + char macstr[18]; + const char *ifname = luaL_checkstring(L, 1); + struct iwinfo_scanlist_entry *e; + + lua_newtable(L); + memset(rv, 0, sizeof(rv)); + + if( !(*func)(ifname, rv, &len) ) + { + for( i = 0, x = 1; i < len; i += sizeof(struct iwinfo_scanlist_entry), x++ ) + { + e = (struct iwinfo_scanlist_entry *) &rv[i]; + + lua_newtable(L); + + /* BSSID */ + sprintf(macstr, "%02X:%02X:%02X:%02X:%02X:%02X", + e->mac[0], e->mac[1], e->mac[2], + e->mac[3], e->mac[4], e->mac[5]); + + lua_pushstring(L, macstr); + lua_setfield(L, -2, "bssid"); + + /* ESSID */ + if( e->ssid[0] ) + { + lua_pushstring(L, (char *) e->ssid); + lua_setfield(L, -2, "ssid"); + } + + /* Channel */ + lua_pushinteger(L, e->channel); + lua_setfield(L, -2, "channel"); + + /* Mode */ + lua_pushstring(L, (char *) e->mode); + lua_setfield(L, -2, "mode"); + + /* Quality, Signal */ + lua_pushinteger(L, e->quality); + lua_setfield(L, -2, "quality"); + + lua_pushinteger(L, e->quality_max); + lua_setfield(L, -2, "quality_max"); + + lua_pushnumber(L, (e->signal - 0x100)); + lua_setfield(L, -2, "signal"); + + /* Crypto */ + lua_pushboolean(L, (!e->crypto.wpa_version && e->crypto.enabled)); + lua_setfield(L, -2, "wep"); + + if( e->crypto.wpa_version ) + { + lua_pushinteger(L, e->crypto.wpa_version); + lua_setfield(L, -2, "wpa"); + + lua_newtable(L); + for( j = 0, y = 1; j < IW_IE_CYPHER_NUM; j++ ) + { + if( e->crypto.group_ciphers & (1<crypto.pair_ciphers & (1<crypto.auth_suites & (1<mhz); + lua_setfield(L, -2, "mhz"); + + /* Channel */ + lua_pushinteger(L, e->channel); + lua_setfield(L, -2, "channel"); + + lua_rawseti(L, -2, x); + } + } + + return 1; +} + +#ifdef USE_WL /* Broadcom */ LUA_WRAP_INT(wl,channel) LUA_WRAP_INT(wl,frequency) @@ -83,12 +259,18 @@ LUA_WRAP_INT(wl,signal) LUA_WRAP_INT(wl,noise) LUA_WRAP_INT(wl,quality) LUA_WRAP_INT(wl,quality_max) +LUA_WRAP_INT(wl,mbssid_support) LUA_WRAP_STRING(wl,mode) LUA_WRAP_STRING(wl,ssid) LUA_WRAP_STRING(wl,bssid) LUA_WRAP_STRING(wl,enctype) -LUA_WRAP_ASSOCLIST(wl) +LUA_WRAP_LIST(wl,assoclist) +LUA_WRAP_LIST(wl,txpwrlist) +LUA_WRAP_LIST(wl,scanlist) +LUA_WRAP_LIST(wl,freqlist) +#endif +#ifdef USE_MADWIFI /* Madwifi */ LUA_WRAP_INT(madwifi,channel) LUA_WRAP_INT(madwifi,frequency) @@ -97,11 +279,16 @@ LUA_WRAP_INT(madwifi,signal) LUA_WRAP_INT(madwifi,noise) LUA_WRAP_INT(madwifi,quality) LUA_WRAP_INT(madwifi,quality_max) +LUA_WRAP_INT(madwifi,mbssid_support) LUA_WRAP_STRING(madwifi,mode) LUA_WRAP_STRING(madwifi,ssid) LUA_WRAP_STRING(madwifi,bssid) LUA_WRAP_STRING(madwifi,enctype) -LUA_WRAP_ASSOCLIST(madwifi) +LUA_WRAP_LIST(madwifi,assoclist) +LUA_WRAP_LIST(madwifi,txpwrlist) +LUA_WRAP_LIST(madwifi,scanlist) +LUA_WRAP_LIST(madwifi,freqlist) +#endif /* Wext */ LUA_WRAP_INT(wext,channel) @@ -111,12 +298,17 @@ LUA_WRAP_INT(wext,signal) LUA_WRAP_INT(wext,noise) LUA_WRAP_INT(wext,quality) LUA_WRAP_INT(wext,quality_max) +LUA_WRAP_INT(wext,mbssid_support) LUA_WRAP_STRING(wext,mode) LUA_WRAP_STRING(wext,ssid) LUA_WRAP_STRING(wext,bssid) LUA_WRAP_STRING(wext,enctype) -LUA_WRAP_ASSOCLIST(wext) +LUA_WRAP_LIST(wext,assoclist) +LUA_WRAP_LIST(wext,txpwrlist) +LUA_WRAP_LIST(wext,scanlist) +LUA_WRAP_LIST(wext,freqlist) +#ifdef USE_WL /* Broadcom table */ static const luaL_reg R_wl[] = { LUA_REG(wl,channel), @@ -131,9 +323,15 @@ static const luaL_reg R_wl[] = { LUA_REG(wl,bssid), LUA_REG(wl,enctype), LUA_REG(wl,assoclist), + LUA_REG(wl,txpwrlist), + LUA_REG(wl,scanlist), + LUA_REG(wl,freqlist), + LUA_REG(wl,mbssid_support), { NULL, NULL } }; +#endif +#ifdef USE_MADWIFI /* Madwifi table */ static const luaL_reg R_madwifi[] = { LUA_REG(madwifi,channel), @@ -148,8 +346,13 @@ static const luaL_reg R_madwifi[] = { LUA_REG(madwifi,bssid), LUA_REG(madwifi,enctype), LUA_REG(madwifi,assoclist), + LUA_REG(madwifi,txpwrlist), + LUA_REG(madwifi,scanlist), + LUA_REG(madwifi,freqlist), + LUA_REG(madwifi,mbssid_support), { NULL, NULL } }; +#endif /* Wext table */ static const luaL_reg R_wext[] = { @@ -165,6 +368,10 @@ static const luaL_reg R_wext[] = { LUA_REG(wext,bssid), LUA_REG(wext,enctype), LUA_REG(wext,assoclist), + LUA_REG(wext,txpwrlist), + LUA_REG(wext,scanlist), + LUA_REG(wext,freqlist), + LUA_REG(wext,mbssid_support), { NULL, NULL } }; @@ -178,17 +385,21 @@ static const luaL_reg R_common[] = { LUALIB_API int luaopen_iwinfo(lua_State *L) { luaL_register(L, IWINFO_META, R_common); +#ifdef USE_WL luaL_newmetatable(L, IWINFO_WL_META); luaL_register(L, NULL, R_wl); lua_pushvalue(L, -1); lua_setfield(L, -2, "__index"); lua_setfield(L, -2, "wl"); +#endif +#ifdef USE_MADWIFI luaL_newmetatable(L, IWINFO_MADWIFI_META); luaL_register(L, NULL, R_madwifi); lua_pushvalue(L, -1); lua_setfield(L, -2, "__index"); lua_setfield(L, -2, "madwifi"); +#endif luaL_newmetatable(L, IWINFO_WEXT_META); luaL_register(L, NULL, R_wext);