static void nv_fix_wl(const char *oldnv, const char *newnv) { char *p; if (nvram_get(wl_nvname(newnv, 0, 0)) == NULL) { p = nvram_get(oldnv); if (p != NULL) nvram_set(wl_nvname(newnv, -1, 0), p); nvram_unset(oldnv); } }
int get_radio(int unit) { uint32 n; return (wl_ioctl(nvram_safe_get(wl_nvname("ifname", unit, 0)), WLC_GET_RADIO, &n, sizeof(n)) == 0) && ((n & WL_RADIO_SW_DISABLE) == 0); }
static int validate_main(int argc, char **argv) { const defaults_t *t; char *p; int i; int force = 0; int unit = 0; for (i = 1; i < argc; ++i) { if (strcmp(argv[i], "--restore") == 0) { force = 1; } else if (strncmp(argv[i], "--wl", 4) == 0) { unit = atoi(argv[i] + 4); } } for (t = defaults; t->key; t++) { if (strncmp(t->key, "wl_", 3) == 0) { // sync wl_ and wlX_ p = wl_nvname(t->key + 3, unit, 0); if (force || nvram_get(p) == NULL) nvram_set(p, t->value); } } return 0; }
static int print_wlnv(int idx, int unit, int subunit, void *param) { char *k = param; char *nv; nv = wl_nvname(k + 3, unit, subunit); web_printf("\t'%s': '", nv); // AB multiSSID web_putj(nvram_safe_get(nv)); web_puts("',\n"); return 1; }
void set_radio(int on, int unit) { uint32 n; #ifndef WL_BSS_INFO_VERSION #error WL_BSS_INFO_VERSION #endif #if WL_BSS_INFO_VERSION >= 108 n = on ? (WL_RADIO_SW_DISABLE << 16) : ((WL_RADIO_SW_DISABLE << 16) | 1); wl_ioctl(nvram_safe_get(wl_nvname("ifname", unit, 0)), WLC_SET_RADIO, &n, sizeof(n)); if (!on) { led(LED_WLAN, 0); led(LED_DIAG, 0); } #else n = on ? 0 : WL_RADIO_SW_DISABLE; wl_ioctl(nvram_safe_get(wl_nvname("ifname", unit, 0)), WLC_SET_RADIO, &n, sizeof(n)); if (!on) { led(LED_DIAG, 0); } #endif }
static int radio_on(int idx, int unit, int subunit, void *param) { return nvram_match(wl_nvname("radio", unit, 0), "1"); }
static int get_wl_clients(int idx, int unit, int subunit, void *param) { char *comma = param; int i; char *p; char buf[32]; #if 1 char *wlif; scb_val_t rssi; sta_info_t sti; int cmd; struct maclist *mlist; int mlsize; char ifname[16]; mlsize = sizeof(struct maclist) + (255 * sizeof(struct ether_addr)); if ((mlist = malloc(mlsize)) != NULL) { // wlif = nvram_safe_get(wl_nvname("ifname", unit, 0)); wlif = nvram_safe_get(wl_nvname("ifname", unit, subunit)); // AB multiSSID cmd = WLC_GET_ASSOCLIST; while (1) { mlist->count = 255; if (wl_ioctl(wlif, cmd, mlist, mlsize) == 0) { for (i = 0; i < mlist->count; ++i) { rssi.ea = mlist->ea[i]; rssi.val = 0; if (wl_ioctl(wlif, WLC_GET_RSSI, &rssi, sizeof(rssi)) != 0) continue; // sta_info0<mac> memset(&sti, 0, sizeof(sti)); strcpy((char *)&sti, "sta_info"); memcpy((char *)&sti + 9, rssi.ea.octet, 6); if (wl_ioctl(wlif, WLC_GET_VAR, &sti, sizeof(sti)) != 0) continue; p = wlif; if (sti.flags & WL_STA_WDS) { if (cmd != WLC_GET_WDSLIST) continue; if ((sti.flags & WL_WDS_LINKUP) == 0) continue; if (get_wds_ifname(&rssi.ea, ifname)) p = ifname; } web_printf("%c['%s','%s',%d,%u,%u,%u,%d]", *comma, p, ether_etoa(rssi.ea.octet, buf), rssi.val, sti.tx_rate, sti.rx_rate, sti.in, unit); *comma = ','; } } if (cmd == WLC_GET_WDSLIST) break; cmd = WLC_GET_WDSLIST; } free(mlist); } #else char *wlif; scb_val_t rssi; sta_info_t sti; int j; struct maclist *mlist; int mlsize; char ifname[16]; mlsize = sizeof(struct maclist) + (127 * sizeof(struct ether_addr)); if ((mlist = malloc(mlsize)) != NULL) { for (j = 0; j < 2; ++j) { wlif = nvram_safe_get("wl0_ifname"); strcpy((char *)mlist, j ? "autho_sta_list" : "authe_sta_list"); if (wl_ioctl(wlif, WLC_GET_VAR, mlist, mlsize) == 0) { for (i = 0; i < mlist->count; ++i) { rssi.ea = mlist->ea[i]; rssi.val = 0; if (wl_ioctl(wlif, WLC_GET_RSSI, &rssi, sizeof(rssi)) != 0) continue; // sta_info0<mac> memset(&sti, 0, sizeof(sti)); strcpy((char *)&sti, "sta_info"); memcpy((char *)&sti + 9, rssi.ea.octet, 6); if (wl_ioctl(wlif, WLC_GET_VAR, &sti, sizeof(sti)) != 0) continue; p = wlif; if (sti.flags & WL_STA_WDS) { if ((sti.flags & WL_WDS_LINKUP) == 0) continue; if (get_wds_ifname(&rssi.ea, ifname)) p = ifname; } web_printf("%c['%s','%s',%d]", *comma, p, ether_etoa(rssi.ea.octet, buf), rssi.val); *comma = ','; } } } free(mlist); } #endif return 0; }
int wl_client(int unit, int subunit) { char *mode = nvram_safe_get(wl_nvname("mode", unit, subunit)); return ((strcmp(mode, "sta") == 0) || (strcmp(mode, "wet") == 0)); }
#ifdef CONFIG_BCMWL5 if (wlconf(ifname, unit, subunit) == 0) { const char *mode = nvram_safe_get(wl_nvname("mode", unit, subunit)); if (strcmp(mode, "wet") == 0) { // Enable host DHCP relay if (nvram_match("lan_proto", "static")) { #ifdef __CONFIG_DHDAP__ is_dhd = !dhd_probe(ifname); if(is_dhd) { char macbuf[sizeof("wet_host_mac") + 1 + ETHER_ADDR_LEN]; dhd_iovar_setbuf(ifname, "wet_host_mac", ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN , macbuf, sizeof(macbuf)); } else #endif /* __CONFIG_DHDAP__ */ wl_iovar_set(ifname, "wet_host_mac", ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN); } } sta |= (strcmp(mode, "sta") == 0); if ((strcmp(mode, "ap") != 0) && (strcmp(mode, "wet") != 0) && (strcmp(mode, "psta") != 0) && (strcmp(mode, "psr") != 0)) continue; }