cfg80211: Clean up connect params and channel fetching
Addition of the frequency hints showed up couple of places in cfg80211 where pointers could be marked const and a shared function could be used to fetch a valid channel. Signed-off-by: Jouni Malinen <j@w1.fi> [fix mwifiex] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Родитель
b43504cf75
Коммит
664834dee6
|
@ -1583,8 +1583,9 @@ static int mwifiex_cfg80211_inform_ibss_bss(struct mwifiex_private *priv)
|
|||
* the function notifies the CFG802.11 subsystem of the new BSS connection.
|
||||
*/
|
||||
static int
|
||||
mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
|
||||
u8 *bssid, int mode, struct ieee80211_channel *channel,
|
||||
mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len,
|
||||
const u8 *ssid, const u8 *bssid, int mode,
|
||||
struct ieee80211_channel *channel,
|
||||
struct cfg80211_connect_params *sme, bool privacy)
|
||||
{
|
||||
struct cfg80211_ssid req_ssid;
|
||||
|
|
|
@ -1732,9 +1732,9 @@ struct cfg80211_ibss_params {
|
|||
struct cfg80211_connect_params {
|
||||
struct ieee80211_channel *channel;
|
||||
struct ieee80211_channel *channel_hint;
|
||||
u8 *bssid;
|
||||
const u8 *bssid;
|
||||
const u8 *bssid_hint;
|
||||
u8 *ssid;
|
||||
const u8 *ssid;
|
||||
size_t ssid_len;
|
||||
enum nl80211_auth_type auth_type;
|
||||
u8 *ie;
|
||||
|
|
|
@ -857,6 +857,19 @@ static int nl80211_key_allowed(struct wireless_dev *wdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct ieee80211_channel *nl80211_get_valid_chan(struct wiphy *wiphy,
|
||||
struct nlattr *tb)
|
||||
{
|
||||
struct ieee80211_channel *chan;
|
||||
|
||||
if (tb == NULL)
|
||||
return NULL;
|
||||
chan = ieee80211_get_channel(wiphy, nla_get_u32(tb));
|
||||
if (!chan || chan->flags & IEEE80211_CHAN_DISABLED)
|
||||
return NULL;
|
||||
return chan;
|
||||
}
|
||||
|
||||
static int nl80211_put_iftypes(struct sk_buff *msg, u32 attr, u16 ifmodes)
|
||||
{
|
||||
struct nlattr *nl_modes = nla_nest_start(msg, attr);
|
||||
|
@ -6199,9 +6212,9 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
|
|||
return -EOPNOTSUPP;
|
||||
|
||||
bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
|
||||
chan = ieee80211_get_channel(&rdev->wiphy,
|
||||
nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
|
||||
if (!chan || (chan->flags & IEEE80211_CHAN_DISABLED))
|
||||
chan = nl80211_get_valid_chan(&rdev->wiphy,
|
||||
info->attrs[NL80211_ATTR_WIPHY_FREQ]);
|
||||
if (!chan)
|
||||
return -EINVAL;
|
||||
|
||||
ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
|
||||
|
@ -6354,9 +6367,9 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
|
||||
|
||||
chan = ieee80211_get_channel(&rdev->wiphy,
|
||||
nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
|
||||
if (!chan || (chan->flags & IEEE80211_CHAN_DISABLED))
|
||||
chan = nl80211_get_valid_chan(&rdev->wiphy,
|
||||
info->attrs[NL80211_ATTR_WIPHY_FREQ]);
|
||||
if (!chan)
|
||||
return -EINVAL;
|
||||
|
||||
ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
|
||||
|
@ -7013,19 +7026,14 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
|
|||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
|
||||
connect.channel =
|
||||
ieee80211_get_channel(wiphy,
|
||||
nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
|
||||
if (!connect.channel ||
|
||||
connect.channel->flags & IEEE80211_CHAN_DISABLED)
|
||||
connect.channel = nl80211_get_valid_chan(
|
||||
wiphy, info->attrs[NL80211_ATTR_WIPHY_FREQ]);
|
||||
if (!connect.channel)
|
||||
return -EINVAL;
|
||||
} else if (info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]) {
|
||||
connect.channel_hint =
|
||||
ieee80211_get_channel(wiphy,
|
||||
nla_get_u32(
|
||||
info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]));
|
||||
if (!connect.channel_hint ||
|
||||
connect.channel_hint->flags & IEEE80211_CHAN_DISABLED)
|
||||
connect.channel_hint = nl80211_get_valid_chan(
|
||||
wiphy, info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]);
|
||||
if (!connect.channel_hint)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче