- 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 */