X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/ae0b813b36aeed09cb495b96050ef6083b30736c..8bb07ec4ed27e91fef68badb99096256c6b9ac35:/openwrt/package/wificonf/wificonf.c?ds=sidebyside diff --git a/openwrt/package/wificonf/wificonf.c b/openwrt/package/wificonf/wificonf.c index a93bba3ed..068090cc9 100644 --- a/openwrt/package/wificonf/wificonf.c +++ b/openwrt/package/wificonf/wificonf.c @@ -395,7 +395,8 @@ void start_watchdog(int skfd, char *ifname) FILE *f; char *v, *next; unsigned char buf[8192], buf2[8192], wbuf[80], *p, *tmp; - int wds = 0, i, restart_wds; + int wds = 0, i, j, restart_wds; + wlc_ssid_t ssid; if (fork()) return; @@ -415,11 +416,41 @@ void start_watchdog(int skfd, char *ifname) } } v = nvram_safe_get(wl_var("ssid")); + ssid.SSID_len = strlen(v); + strncpy(ssid.SSID, v, 32); for (;;) { sleep(5); - if (bcom_ioctl(skfd, ifname, WLC_GET_BSSID, buf, 6) < 0) - bcom_ioctl(skfd, ifname, WLC_SET_SSID, v, strlen(v)); + + /* client mode */ + bcom_ioctl(skfd, ifname, WLC_GET_AP, &i, sizeof(i)); + if (!i) { + i = 0; + if (bcom_ioctl(skfd, ifname, WLC_GET_BSSID, buf, 6) < 0) + i = 1; + memcpy(buf + 6, "\x00\x00\x00\x00\x00\x00", 6); + if (memcmp(buf, buf + 6, 6) == 0) + i = 1; + + memset(buf, 0, 8192); + strcpy(buf, "sta_info"); + bcom_ioctl(skfd, ifname, WLC_GET_BSSID, buf + strlen(buf) + 1, 6); + if (bcom_ioctl(skfd, ifname, WLC_GET_VAR, buf, 8192) < 0) { + i = 1; + } else { + sta_info_t *sta = (sta_info_t *) (buf + 4); + if ((sta->flags & 0x18) != 0x18) + i = 1; + if (sta->idle > 20) + i = 1; + } + + if (i) + bcom_ioctl(skfd, ifname, WLC_SET_SSID, &ssid, sizeof(ssid)); + } + + + /* wds */ p = buf2; restart_wds = 0; for (i = 0; i < wds; i++) { @@ -520,7 +551,7 @@ static void setup_bcom_vif_sec(int skfd, char *ifname, int vif) wep = 1; bcom_set_bss_int(skfd, ifname, vif, "wsec", WEP_ENABLED); bcom_set_bss_int(skfd, ifname, vif, "wsec_restrict", 1); - bcom_set_bss_int(skfd, ifname, vif, "auth", 1); + bcom_set_bss_int(skfd, ifname, vif, "auth", nvram_enabled(vif_var(vif, "auth"))); } else { wep = 0; } @@ -749,6 +780,11 @@ static void setup_bcom_new(int skfd, char *ifname) } + if ((val = atoi(nvram_safe_get(wl_var("rate")))) > 0) { + val /= 500000; + bcom_set_int(skfd, ifname, "bg_rate", val); + bcom_set_int(skfd, ifname, "a_rate", val); + } if (v = nvram_get(wl_var("rts"))) { val = atoi(v); bcom_set_int(skfd, ifname, "rtsthresh", val); @@ -792,6 +828,10 @@ static void setup_bcom_old(int skfd, char *ifname) setup_bcom_common(skfd, ifname); + if ((val = atoi(nvram_safe_get(wl_var("rate")))) > 0) { + val *= 2; + bcom_ioctl(skfd, ifname, 13, &val, sizeof(val)); + } if (v = nvram_get(wl_var("frag"))) { val = atoi(v); bcom_ioctl(skfd, ifname, WLC_SET_FRAG, &val, sizeof(val)); @@ -837,8 +877,14 @@ static void setup_bcom_old(int skfd, char *ifname) bcom_ioctl(skfd, ifname, WLC_SET_EAP_RESTRICT, &val, sizeof(val)); bcom_set_int(skfd, ifname, "sup_wpa", 0); } + + if (v = nvram_get(wl_var("auth"))) { + val = atoi(v); + bcom_ioctl(skfd, ifname, WLC_SET_AUTH, &val, sizeof(val)); + } } + static void set_wext_ssid(int skfd, char *ifname) { char *buffer;