[PATCH] libertas: fix a few wext abuses...
o SIOCGIWNAME is not designed to return the version number of the driver. On the other hand, you are free to abuse SIOCGIWNICKN for that purpose. o Don't attempt to fix the WE19/WE20 transition in the driver, because your fixes are bogus, and redundant with the code in the kernel (you may endup with +2, you can't read 32 char ESSID...). o In SIOCSIWTXPOW, if you specified in iwrange that you want dBm, you should only get dBm, which allow to reduce code bloat. Signed-off-by: Jean Tourrilhes <jt@hpl.hp.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
d21b31fd53
commit
9483f03150
|
@ -21,52 +21,6 @@
|
|||
#include "assoc.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief Convert mw value to dbm value
|
||||
*
|
||||
* @param mw the value of mw
|
||||
* @return the value of dbm
|
||||
*/
|
||||
static int mw_to_dbm(int mw)
|
||||
{
|
||||
if (mw < 2)
|
||||
return 0;
|
||||
else if (mw < 3)
|
||||
return 3;
|
||||
else if (mw < 4)
|
||||
return 5;
|
||||
else if (mw < 6)
|
||||
return 7;
|
||||
else if (mw < 7)
|
||||
return 8;
|
||||
else if (mw < 8)
|
||||
return 9;
|
||||
else if (mw < 10)
|
||||
return 10;
|
||||
else if (mw < 13)
|
||||
return 11;
|
||||
else if (mw < 16)
|
||||
return 12;
|
||||
else if (mw < 20)
|
||||
return 13;
|
||||
else if (mw < 25)
|
||||
return 14;
|
||||
else if (mw < 32)
|
||||
return 15;
|
||||
else if (mw < 40)
|
||||
return 16;
|
||||
else if (mw < 50)
|
||||
return 17;
|
||||
else if (mw < 63)
|
||||
return 18;
|
||||
else if (mw < 79)
|
||||
return 19;
|
||||
else if (mw < 100)
|
||||
return 20;
|
||||
else
|
||||
return 21;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find the channel frequency power info with specific channel
|
||||
*
|
||||
|
@ -199,28 +153,11 @@ static void copy_active_data_rates(wlan_adapter * adapter, u8 * rates)
|
|||
static int wlan_get_name(struct net_device *dev, struct iw_request_info *info,
|
||||
char *cwrq, char *extra)
|
||||
{
|
||||
const char *cp;
|
||||
char comm[6] = { "COMM-" };
|
||||
char mrvl[6] = { "MRVL-" };
|
||||
int cnt;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_WEXT);
|
||||
|
||||
strcpy(cwrq, mrvl);
|
||||
|
||||
cp = strstr(libertas_driver_version, comm);
|
||||
if (cp == libertas_driver_version) //skip leading "COMM-"
|
||||
cp = libertas_driver_version + strlen(comm);
|
||||
else
|
||||
cp = libertas_driver_version;
|
||||
|
||||
cnt = strlen(mrvl);
|
||||
cwrq += cnt;
|
||||
while (cnt < 16 && (*cp != '-')) {
|
||||
*cwrq++ = toupper(*cp++);
|
||||
cnt++;
|
||||
}
|
||||
*cwrq = '\0';
|
||||
/* We could add support for 802.11n here as needed. Jean II */
|
||||
snprintf(cwrq, IFNAMSIZ, "IEEE 802.11b/g");
|
||||
|
||||
lbs_deb_leave(LBS_DEB_WEXT);
|
||||
return 0;
|
||||
|
@ -300,29 +237,37 @@ static int wlan_set_nick(struct net_device *dev, struct iw_request_info *info,
|
|||
static int wlan_get_nick(struct net_device *dev, struct iw_request_info *info,
|
||||
struct iw_point *dwrq, char *extra)
|
||||
{
|
||||
wlan_private *priv = dev->priv;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
const char *cp;
|
||||
char comm[6] = { "COMM-" };
|
||||
char mrvl[6] = { "MRVL-" };
|
||||
int cnt;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_WEXT);
|
||||
|
||||
/*
|
||||
* Get the Nick Name saved
|
||||
* Nick Name is not used internally in this mode,
|
||||
* therefore return something useful instead. Jean II
|
||||
*/
|
||||
|
||||
mutex_lock(&adapter->lock);
|
||||
strncpy(extra, adapter->nodename, 16);
|
||||
mutex_unlock(&adapter->lock);
|
||||
strcpy(extra, mrvl);
|
||||
|
||||
extra[16] = '\0';
|
||||
cp = strstr(libertas_driver_version, comm);
|
||||
if (cp == libertas_driver_version) //skip leading "COMM-"
|
||||
cp = libertas_driver_version + strlen(comm);
|
||||
else
|
||||
cp = libertas_driver_version;
|
||||
|
||||
/*
|
||||
* If none, we may want to get the one that was set
|
||||
*/
|
||||
cnt = strlen(mrvl);
|
||||
extra += cnt;
|
||||
while (cnt < 16 && (*cp != '-')) {
|
||||
*extra++ = toupper(*cp++);
|
||||
cnt++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Push it out !
|
||||
*/
|
||||
dwrq->length = strlen(extra) + 1;
|
||||
dwrq->length = cnt;
|
||||
|
||||
lbs_deb_leave(LBS_DEB_WEXT);
|
||||
return 0;
|
||||
|
@ -341,12 +286,12 @@ static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
|
|||
if (adapter->connect_status == LIBERTAS_CONNECTED) {
|
||||
strncpy(extra, "Mesh", 12);
|
||||
extra[12] = '\0';
|
||||
dwrq->length = strlen(extra) + 1;
|
||||
dwrq->length = strlen(extra);
|
||||
}
|
||||
|
||||
else {
|
||||
extra[0] = '\0';
|
||||
dwrq->length = 1 ;
|
||||
dwrq->length = 0;
|
||||
}
|
||||
|
||||
lbs_deb_leave(LBS_DEB_WEXT);
|
||||
|
@ -1897,8 +1842,10 @@ static int wlan_set_txpow(struct net_device *dev, struct iw_request_info *info,
|
|||
|
||||
wlan_radio_ioctl(priv, RADIO_ON);
|
||||
|
||||
/* Userspace check in iwrange if it should use dBm or mW,
|
||||
* therefore this should never happen... Jean II */
|
||||
if ((vwrq->flags & IW_TXPOW_TYPE) == IW_TXPOW_MWATT) {
|
||||
dbm = (u16) mw_to_dbm(vwrq->value);
|
||||
return -EOPNOTSUPP;
|
||||
} else
|
||||
dbm = (u16) vwrq->value;
|
||||
|
||||
|
@ -1946,12 +1893,7 @@ static int wlan_get_essid(struct net_device *dev, struct iw_request_info *info,
|
|||
* If none, we may want to get the one that was set
|
||||
*/
|
||||
|
||||
/* To make the driver backward compatible with WPA supplicant v0.2.4 */
|
||||
if (dwrq->length == 32) /* check with WPA supplicant buffer size */
|
||||
dwrq->length = min_t(size_t, adapter->curbssparams.ssid_len,
|
||||
IW_ESSID_MAX_SIZE);
|
||||
else
|
||||
dwrq->length = adapter->curbssparams.ssid_len + 1;
|
||||
dwrq->length = adapter->curbssparams.ssid_len;
|
||||
|
||||
dwrq->flags = 1; /* active */
|
||||
|
||||
|
@ -1972,14 +1914,6 @@ static int wlan_set_essid(struct net_device *dev, struct iw_request_info *info,
|
|||
|
||||
lbs_deb_enter(LBS_DEB_WEXT);
|
||||
|
||||
/*
|
||||
* WE-20 and earlier NULL pad the end of the SSID and increment
|
||||
* SSID length so it can be used like a string. WE-21 and later don't,
|
||||
* but some userspace tools aren't able to cope with the change.
|
||||
*/
|
||||
if ((in_ssid_len > 0) && (extra[in_ssid_len - 1] == '\0'))
|
||||
in_ssid_len--;
|
||||
|
||||
/* Check the size of the string */
|
||||
if (in_ssid_len > IW_ESSID_MAX_SIZE) {
|
||||
ret = -E2BIG;
|
||||
|
|
Loading…
Reference in New Issue