提交 9483f031 编写于 作者: J Jean Tourrilhes 提交者: David S. Miller

[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: NJean Tourrilhes <jt@hpl.hp.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 d21b31fd
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部