static int lua_get_acllist(lua_State *L, void *wl, lua_cmd_t *cmd, char *argv) { struct maclist *maclist = (struct maclist *) buf; uint i, max = (WLC_IOCTL_MAXLEN - sizeof(int)) / ETHER_ADDR_LEN; struct ether_addr *ea; int ret; maclist->count = htod32(max); if ((ret = wlu_get(wl, WLC_GET_MACLIST, maclist, WLC_IOCTL_MAXLEN)) < 0) { return ret; } maclist->count = dtoh32(maclist->count); lua_newtable(L); for (i = 0, ea = maclist->ea; i < maclist->count && i < max; i++, ea++) { lua_newtable(L); lua_pushstring(L, wl_ether_etoa(ea)); lua_setfield(L, -2, "macaddr"); lua_rawseti(L, -2, i+1); } return ret; }
int wlmMacAddrGet(char *macAddr, int length) { struct ether_addr ea; if (length != ETHER_ADDR_LEN) { printf("wlmMacAddrGet: MAC Address requires %d bytes", ETHER_ADDR_LEN); return FALSE; } /* query for 'cur_etheraddr' to get MAC address */ if (wlu_iovar_get(irh, "cur_etheraddr", &ea, ETHER_ADDR_LEN)) { printf("wlmMacAddrGet: %s\n", wlmLastError()); return FALSE; } strncpy(macAddr, wl_ether_etoa(&ea), length); return TRUE; }
int wlmBssidGet(char *bssid, int length) { struct ether_addr ea; if (length != ETHER_ADDR_LEN) { printf("wlmBssiGet: bssid requires %d bytes", ETHER_ADDR_LEN); return FALSE; } if (wlu_get(irh, WLC_GET_BSSID, &ea, ETHER_ADDR_LEN) == 0) { /* associated - format and return bssid */ strncpy(bssid, wl_ether_etoa(&ea), length); } else { /* not associated - return empty string */ memset(bssid, 0, length); } return TRUE; }
int qtn_monitor_main(int argc, char *argv[]) { FILE *fp; sigset_t sigs_to_catch; int ret, retval = 0; time_t start_time = uptime(); /* write pid */ if ((fp = fopen("/var/run/qtn_monitor.pid", "w")) != NULL) { fprintf(fp, "%d", getpid()); fclose(fp); } /* set the signal handler */ sigemptyset(&sigs_to_catch); sigaddset(&sigs_to_catch, SIGTERM); sigprocmask(SIG_UNBLOCK, &sigs_to_catch, NULL); signal(SIGTERM, qtn_monitor_exit); QTN_RESET: ret = rpc_qcsapi_init(1); if (ret < 0) { dbG("rpc_qcsapi_init error, return: %d\n", ret); retval = -1; goto ERROR; } #if 0 /* replaced by STATELESS, send configuration from brcm to qtn */ else if (nvram_get_int("qtn_restore_defaults")) { nvram_unset("qtn_restore_defaults"); rpc_qcsapi_restore_default_config(0); dbG("Restaring Qcsapi init...\n"); sleep(15); goto QTN_RESET; } #endif #if 0 if(nvram_get_int("sw_mode") == SW_MODE_AP && nvram_get_int("wlc_psta") == 1 && nvram_get_int("wlc_band") == 1){ dbG("[sw_mode] start QTN PSTA mode\n"); start_psta_qtn(); } #endif ret = qcsapi_init(); if (ret < 0) { dbG("Qcsapi qcsapi_init error, return: %d\n", ret); retval = -1; goto ERROR; } else dbG("Qcsapi qcsapi init takes %ld seconds\n", uptime() - start_time); dbG("defer lanport_ctrl(1)\n"); lanport_ctrl(1); eval("ifconfig", "br0:1", "down"); #if defined(RTCONFIG_JFFS2ND_BACKUP) check_2nd_jffs(); #endif nvram_set("qtn_ready", "1"); if(nvram_get_int("AllLED") == 0) setAllLedOff(); // dbG("[QTN] update router_command.sh from brcm to qtn\n"); // qcsapi_wifi_run_script("set_test_mode", "update_router_command"); #if 1 /* STATELESS */ if(nvram_get_int("sw_mode") == SW_MODE_AP && nvram_get_int("wlc_psta") == 1 && nvram_get_int("wlc_band") == 1){ dbG("[sw_mode] skip start_psta_qtn, QTN will run scripts automatically\n"); // start_psta_qtn(); }else{ dbG("[***] rpc_parse_nvram_from_httpd\n"); rpc_parse_nvram_from_httpd(1,-1); /* wifi0 */ rpc_parse_nvram_from_httpd(1,1); /* wifi1 */ rpc_parse_nvram_from_httpd(1,2); /* wifi2 */ rpc_parse_nvram_from_httpd(1,3); /* wifi3 */ dbG("[sw_mode] skip start_ap_qtn, QTN will run scripts automatically\n"); // start_ap_qtn(); qcsapi_mac_addr wl_mac_addr; ret = rpc_qcsapi_interface_get_mac_addr(WIFINAME, &wl_mac_addr); if (ret < 0) dbG("rpc_qcsapi_interface_get_mac_addr, return: %d\n", ret); else { nvram_set("1:macaddr", wl_ether_etoa((struct ether_addr *) &wl_mac_addr)); nvram_set("wl1_hwaddr", wl_ether_etoa((struct ether_addr *) &wl_mac_addr)); } rpc_update_wdslist(); if(nvram_get_int("wps_enable") == 1){ ret = rpc_qcsapi_wifi_disable_wps(WIFINAME, 0); if (ret < 0) dbG("rpc_qcsapi_wifi_disable_wps %s error, return: %d\n", WIFINAME, ret); ret = qcsapi_wps_set_ap_pin(WIFINAME, nvram_safe_get("wps_device_pin")); if (ret < 0) dbG("qcsapi_wps_set_ap_pin %s error, return: %d\n", WIFINAME, ret); ret = qcsapi_wps_registrar_set_pp_devname(WIFINAME, 0, (const char *) get_productid()); if (ret < 0) dbG("qcsapi_wps_registrar_set_pp_devname %s error, return: %d\n", WIFINAME, ret); }else{ ret = rpc_qcsapi_wifi_disable_wps(WIFINAME, 1); if (ret < 0) dbG("rpc_qcsapi_wifi_disable_wps %s error, return: %d\n", WIFINAME, ret); } rpc_set_radio(1, 0, nvram_get_int("wl1_radio")); } #endif if(nvram_get_int("wl1_80211h") == 1){ dbG("[80211h] set_80211h_on\n"); qcsapi_wifi_run_script("router_command.sh", "80211h_on"); }else{ dbG("[80211h] set_80211h_off\n"); qcsapi_wifi_run_script("router_command.sh", "80211h_off"); } if(nvram_get_int("sw_mode") == SW_MODE_ROUTER || (nvram_get_int("sw_mode") == SW_MODE_AP && nvram_get_int("wlc_psta") == 0)){ if(nvram_get_int("wl1_chanspec") == 0){ if (nvram_match("1:ccode", "EU")){ if(nvram_get_int("acs_dfs") != 1){ dbG("[dfs] start nodfs scanning and selection\n"); start_nodfs_scan_qtn(); } }else{ /* all country except EU */ dbG("[dfs] start nodfs scanning and selection\n"); start_nodfs_scan_qtn(); } } } if(nvram_get_int("sw_mode") == SW_MODE_AP && nvram_get_int("wlc_psta") == 1 && nvram_get_int("wlc_band") == 0){ ret = qcsapi_wifi_reload_in_mode(WIFINAME, qcsapi_station); if (ret < 0) dbG("qtn reload_in_mode STA fail\n"); } if(nvram_get_int("QTNTELNETSRV") == 1 && nvram_get_int("sw_mode") == SW_MODE_ROUTER){ dbG("[QTNT] enable telnet server\n"); qcsapi_wifi_run_script("router_command.sh", "enable_telnet_srv 1"); } dbG("[dbg] qtn_monitor startup\n"); ERROR: remove("/var/run/qtn_monitor.pid"); if (nvram_get_int("led_disable") == 1) { setAllLedOff_qtn(); // qcsapi_wifi_run_script("router_command.sh", "wifi_led_off"); // qcsapi_led_set(1, 0); } return retval; }
void bcm_p2p_discovery_process_wlan_event(void * context, uint32 eventType, wl_event_msg_t *wlEvent, uint8 *data, uint32 length) { bcm_p2p_discovery_t *disc = &gDisc; (void)context; #ifndef BCMDBG_ESCAN (void)data; (void)length; #endif #ifdef BCMDBG { int i; char *event_name = "UNKNOWN"; for (i = 0; i < bcmevent_names_size; i++) if (bcmevent_names[i].event == eventType) event_name = (char *)bcmevent_names[i].name; WL_P2PO(("WLAN event %s (%d)\n", event_name, eventType)); } #endif /* BCMDBG */ if (eventType == WLC_E_ESCAN_RESULT) { if (wlEvent->status == WLC_E_STATUS_PARTIAL) { #ifdef BCMDBG_ESCAN wl_escan_result_t *escan_data = (wl_escan_result_t *)data; if (length >= sizeof(*escan_data)) { wl_bss_info_t *bi = &escan_data->bss_info[0]; bcm_decode_probe_response_t pr; struct ether_addr *addr; if (!bcm_decode_ie_probe_response(bi, &pr)) { return; } /* default address */ addr = &bi->BSSID; /* P2P not supported */ if (!pr.isP2P) { char ssidbuf[4*32+1]; wl_format_ssid(ssidbuf, bi->SSID, bi->SSID_len); dbg(" AP %-20.20s %s %d\n", ssidbuf, wl_ether_etoa(addr), pr.channel); return; } if (pr.isP2PDeviceInfoDecoded) { /* use device address */ addr = &pr.p2pDeviceInfo.deviceAddress; dbg("P2P %-20.20s %s %d\n", pr.p2pDeviceInfo.deviceName, wl_ether_etoa(addr), pr.channel); } } #endif /* BCMDBG_ESCAN */ } else if (wlEvent->status == WLC_E_STATUS_SUCCESS) { WL_P2PO(("WLC_E_ESCAN_RESULT status=WLC_E_STATUS_SUCCESS\n")); fsm(disc, EVENT_SCAN_COMPLETE); } else { WL_P2PO(("WLC_E_ESCAN_RESULT status=%d\n", wlEvent->status)); /* escan may have failed/restarted but keep state machine running */ fsm(disc, EVENT_SCAN_COMPLETE); } } }
static int lua_get_stalist(lua_State *L, void *wl, lua_cmd_t *cmd, char *argv) { sta_info_t *sta; struct maclist *maclist = (struct maclist *) buf; uint i, max = (WLC_IOCTL_MAXLEN - sizeof(int)) / ETHER_ADDR_LEN; struct ether_addr *ea; int buflen, ret; char *param; maclist->count = htod32(max); if ((ret = wlu_get(wl, WLC_GET_ASSOCLIST, maclist, WLC_IOCTL_MAXLEN)) < 0) { return ret; } maclist->count = dtoh32(maclist->count); lua_newtable(L); for (i = 0, ea = maclist->ea; i < maclist->count && i < max; i++, ea++) { strcpy(buf, "sta_info"); buflen = strlen(buf) + 1; param = (char *)(buf + buflen); memcpy(param, (char*)&ea, ETHER_ADDR_LEN); if ((ret = wlu_get(wl, WLC_GET_VAR, buf, WLC_IOCTL_MEDLEN)) < 0) return ret; /* display the sta info */ sta = (sta_info_t *)buf; sta->flags = dtoh32(sta->flags); lua_newtable(L); lua_pushstring(L, wl_ether_etoa(ea)); lua_setfield(L, -2, "macaddr"); lua_pushstring(L, (sta->flags & WL_STA_N_CAP) ? " 11n" : "11g"); lua_setfield(L, -2, "mode"); lua_pushboolean(L, ((sta->flags & WL_STA_PS) != 0)); lua_setfield(L, -2, "pwr"); lua_pushnumber(L, sta->RSSI); lua_setfield(L, -2, "ccq"); lua_pushnumber(L, sta->tx_rate); lua_setfield(L, -2, "rate"); lua_pushstring(L, (sta->flags & WL_STA_AUTHO) ? "psk" : "none"); lua_setfield(L, -2, "auth"); lua_pushstring(L, (sta->flags & WL_STA_AUTHO) ? "aes" : "none"); lua_setfield(L, -2, "cipher"); lua_pushnumber(L, dtoh32(sta->tx_pkts)); lua_setfield(L, -2, "tx_packets"); lua_pushnumber(L, dtoh32(sta->rx_ucast_pkts)); lua_setfield(L, -2, "rx_packets"); lua_pushnumber(L, sta->idle); lua_setfield(L, -2, "inact"); lua_pushnumber(L, sta->in); lua_setfield(L, -2, "assoc_time"); lua_rawseti(L, -2, i+1); } return ret; }
static int lua_get_scan(lua_State *L, void *wl, lua_cmd_t *cmd, char *argv) { int ret; wl_scan_results_t *list = (wl_scan_results_t*)buf; wl_bss_info_t *bi; char ssid[33]; uint i; ret = wl_get_scan(wl, WLC_SCAN_RESULTS, buf, WL_DUMP_BUF_LEN); if (ret == 0) { lua_newtable(L); bi = list->bss_info; for (i = 0; i < list->count; i++, bi = (wl_bss_info_t*)((int8*)bi + dtoh32(bi->length))) { lua_newtable(L); lua_pushstring(L, wl_ether_etoa(&bi->BSSID)); lua_setfield(L, -2, "bssid"); memset(ssid, 0, sizeof(ssid)); memcpy(ssid, bi->SSID, bi->SSID_len); lua_pushstring(L, ssid); lua_setfield(L, -2, "ssid"); lua_pushnumber(L, (int16)(dtoh16(bi->RSSI))); lua_setfield(L, -2, "rssi"); lua_pushnumber(L, bi->ctl_ch); lua_setfield(L, -2, "channel"); lua_pushstring(L, bi->n_cap ? "11n" : "11g"); lua_setfield(L, -2, "bgn_mode"); if (bi->capability & DOT11_CAP_PRIVACY) { if (dtoh32(bi->ie_length) && wl_if_wpa_rsn_ies((uint8 *)(((uint8 *)bi) + dtoh16(bi->ie_offset)), dtoh32(bi->ie_length))) { lua_pushstring(L, "psk"); lua_setfield(L, -2, "auth"); } else { lua_pushstring(L, "wep"); lua_setfield(L, -2, "auth"); } } else { lua_pushstring(L, "none"); lua_setfield(L, -2, "auth"); } lua_pushstring(L, (dtoh32(bi->nbss_cap) & HT_CAP_40MHZ) ? "40MHz" : "20MHz"); lua_setfield(L, -2, "cwm"); lua_rawseti(L, -2, i+1); } } return ret; }