diff --git a/openwrt/package/openwrt/wlcompat.c b/openwrt/package/openwrt/wlcompat.c index cce64e7c5..ac85da0cf 100644 --- a/openwrt/package/openwrt/wlcompat.c +++ b/openwrt/package/openwrt/wlcompat.c @@ -81,7 +81,7 @@ static int wlcompat_ioctl_getiwrange(struct net_device *dev, range->max_pmt = 65535 * 1000; range->txpower_capa = IW_TXPOW_MWATT; - + return 0; } @@ -119,6 +119,17 @@ static int wlcompat_ioctl(struct net_device *dev, memcpy(extra,ssid.SSID,ssid.SSID_len + 1); break; } + case SIOCSIWESSID: + { + wlc_ssid_t ssid; + memset(&ssid, 0, sizeof(ssid)); + ssid.SSID_len = strlen(extra); + if (ssid.SSID_len > WLC_ESSID_MAX_SIZE) + ssid.SSID_len = WLC_ESSID_MAX_SIZE; + memcpy(ssid.SSID, extra, ssid.SSID_len); + wl_ioctl(dev, WLC_SET_SSID, &ssid, sizeof(ssid)); + break; + } case SIOCGIWRTS: { wl_ioctl(dev,WLC_GET_RTS,&(wrqu->rts.value),sizeof(int)); @@ -148,6 +159,11 @@ static int wlcompat_ioctl(struct net_device *dev, err = wlcompat_ioctl_getiwrange(dev, extra); break; } + default: + { + err = -EINVAL; + break; + } } return err; @@ -180,7 +196,7 @@ static const iw_handler wlcompat_handler[] = { NULL, /* SIOCGIWAPLIST */ NULL, /* -- hole -- */ NULL, /* -- hole -- */ - NULL, /* SIOCSIWESSID */ + wlcompat_ioctl, /* SIOCSIWESSID */ wlcompat_ioctl, /* SIOCGIWESSID */ NULL, /* SIOCSIWNICKN */ NULL, /* SIOCGIWNICKN */