diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2005-04-08 12:55:23 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2005-04-08 12:55:23 +0000 |
commit | ecddea7eab992c6c8223d7c11ea5c47538d20706 (patch) | |
tree | a83c5d70da61ca49b7ea44bd5e0a9065af99c7fc | |
parent | d79e48e59b54d84d97c124b62ed6f30c60c6aece (diff) |
add SIOCSIWFREQ
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@580 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r-- | openwrt/package/openwrt/wlcompat.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/openwrt/package/openwrt/wlcompat.c b/openwrt/package/openwrt/wlcompat.c index ac85da0cf..e120ee1da 100644 --- a/openwrt/package/openwrt/wlcompat.c +++ b/openwrt/package/openwrt/wlcompat.c @@ -104,6 +104,27 @@ static int wlcompat_ioctl(struct net_device *dev, wrqu->freq.e = 0; break; } + case SIOCSIWFREQ: + { + if (wrqu->freq.e == 1) { + int channel = 0; + int f = wrqu->freq.m / 100000; + while ((channel < NUM_CHANNELS + 1) && (f != channel_frequency[channel])) + channel++; + + if (channel == NUM_CHANNELS) { // channel not found + err = -EINVAL; + } else { + wrqu->freq.e = 0; + wrqu->freq.m = channel + 1; + } + } + if ((wrqu->freq.e == 0) && (wrqu->freq.m < 1000)) { + wl_ioctl(dev, WLC_SET_CHANNEL, &wrqu->freq.m, sizeof(int)); + } else { + err = -EINVAL; + } + } case SIOCGIWAP: { wrqu->ap_addr.sa_family = ARPHRD_ETHER; @@ -174,7 +195,7 @@ static const iw_handler wlcompat_handler[] = { wlcompat_ioctl, /* SIOCGIWNAME */ NULL, /* SIOCSIWNWID */ NULL, /* SIOCGIWNWID */ - NULL, /* SIOCSIWFREQ */ + wlcompat_ioctl, /* SIOCSIWFREQ */ wlcompat_ioctl, /* SIOCGIWFREQ */ NULL, /* SIOCSIWMODE */ NULL, /* SIOCGIWMODE */ |