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=33254637af88c7a747e9167ef21d6496dd5f2c62;hb=aff68f53751c706dd623eb794106eab59991e69d;hpb=20cadd41ca926b233e0ff5ee2e11a8fb2e5e1fb5 diff --git a/libs/iwinfo/src/iwinfo_lualib.c b/libs/iwinfo/src/iwinfo_lualib.c index 33254637a..5509f4b6a 100644 --- a/libs/iwinfo/src/iwinfo_lualib.c +++ b/libs/iwinfo/src/iwinfo_lualib.c @@ -23,13 +23,19 @@ 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 @@ -75,6 +81,176 @@ static int iwinfo_L_assoclist(lua_State *L, int (*func)(const char *, char *, in 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) @@ -88,8 +264,13 @@ 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) @@ -103,7 +284,11 @@ 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) @@ -118,8 +303,12 @@ 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), @@ -134,10 +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), @@ -152,9 +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[] = { @@ -170,6 +368,9 @@ 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 } }; @@ -184,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);