X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/56d6d3bbec7385c602b6d034b718bd1139bd2c95..7a33fb1c962d1881606fe7b8925afc253bf36706:/package/wificonf/wificonf.c?ds=sidebyside diff --git a/package/wificonf/wificonf.c b/package/wificonf/wificonf.c index abf5230e0..b3acbff69 100644 --- a/package/wificonf/wificonf.c +++ b/package/wificonf/wificonf.c @@ -126,11 +126,11 @@ int bcom_set_val(int skfd, char *ifname, char *var, void *val, int len) return -1; strcpy(buf, var); + memcpy(&buf[strlen(var) + 1], val, len); if ((ret = bcom_ioctl(skfd, ifname, WLC_SET_VAR, buf, sizeof(buf)))) return ret; - memcpy(val, buf, len); return 0; } @@ -172,10 +172,13 @@ void setup_bcom(int skfd, char *ifname) char buf[8192]; char wbuf[80]; char *v; + int wds_enabled = 0; if (bcom_ioctl(skfd, ifname, WLC_GET_MAGIC, &val, sizeof(val)) < 0) return; + nvram_set(wl_var("ifname"), ifname); + stop_bcom(skfd, ifname); /* Set Country */ @@ -183,16 +186,9 @@ void setup_bcom(int skfd, char *ifname) buf[3] = 0; bcom_ioctl(skfd, ifname, WLC_SET_COUNTRY, buf, 4); - /* Set up afterburner */ - val = ABO_AUTO; - if (nvram_enabled(wl_var("afterburner"))) - val = ABO_ON; - if (nvram_disabled(wl_var("afterburner"))) - val = ABO_OFF; - bcom_set_val(skfd, ifname, "afterburner_override", &val, sizeof(val)); - /* Set other options */ val = nvram_enabled(wl_var("lazywds")); + wds_enabled = val; bcom_ioctl(skfd, ifname, WLC_SET_LAZYWDS, &val, sizeof(val)); if (v = nvram_get(wl_var("frag"))) { @@ -268,11 +264,25 @@ void setup_bcom(int skfd, char *ifname) if (ether_atoe(wbuf, addr->ether_addr_octet)) { wdslist->count++; addr++; + wds_enabled = 1; } } bcom_ioctl(skfd, ifname, WLC_SET_WDSLIST, buf, sizeof(buf)); } + /* Set up afterburner, disabled it if WDS is enabled */ + if (wds_enabled) { + val = ABO_OFF; + } else { + val = ABO_AUTO; + if (nvram_enabled(wl_var("afterburner"))) + val = ABO_ON; + if (nvram_disabled(wl_var("afterburner"))) + val = ABO_OFF; + } + + bcom_set_val(skfd, ifname, "afterburner_override", &val, sizeof(val)); + /* Set up G mode */ bcom_ioctl(skfd, ifname, WLC_GET_PHYTYPE, &val, sizeof(val)); if (val == 2) { @@ -323,7 +333,7 @@ void setup_bcom(int skfd, char *ifname) val = TKIP_ENABLED; else if (nvram_match(wl_var("crypto"), "aes")) val = AES_ENABLED; - else if (nvram_match(wl_var("crypto"), "tkip+aes")) + else if (nvram_match(wl_var("crypto"), "tkip+aes") || nvram_match(wl_var("crypto"), "aes+tkip")) val = TKIP_ENABLED | AES_ENABLED; else val = 0; @@ -420,7 +430,7 @@ void set_wext_mode(skfd, ifname) /* Set operation mode */ ap = !nvram_match(wl_var("mode"), "sta") && !nvram_match(wl_var("mode"), "wet"); infra = !nvram_disabled(wl_var("infra")); - wet = nvram_enabled(wl_var("wet")) || !nvram_match(wl_var("mode"), "wet"); + wet = !ap && !nvram_disabled(wl_var("wet")); wrq.u.mode = (!infra ? IW_MODE_ADHOC : (ap ? IW_MODE_MASTER : (wet ? IW_MODE_REPEAT : IW_MODE_INFRA))); IW_SET_EXT_ERR(skfd, ifname, SIOCSIWMODE, &wrq, "Set Mode"); @@ -474,10 +484,15 @@ static int setup_interfaces(int skfd, char *ifname, char *args[], int count) if(iw_get_ext(skfd, ifname, SIOCGIWNAME, &wrq) < 0) return 0; - stop_bcom(skfd, ifname); - set_wext_mode(skfd, ifname); - setup_bcom(skfd, ifname); - setup_wext(skfd, ifname); + if (strncmp(ifname, "ath", 3) == 0) { + set_wext_mode(skfd, ifname); + setup_wext(skfd, ifname); + } else { + stop_bcom(skfd, ifname); + set_wext_mode(skfd, ifname); + setup_bcom(skfd, ifname); + setup_wext(skfd, ifname); + } prefix[2]++; }