diff options
author | Ashok Nagarajan <ashok@cozybit.com> | 2013-06-03 10:33:36 -0700 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-06-11 14:24:36 +0200 |
commit | ffb3cf3000aa12facdccbdfcb10bfebda7199209 (patch) | |
tree | c53a2391c5750b5e9547e9122cabb412c5d43ea6 /net/wireless | |
parent | 66de671374f003467b5ef7c65ecbe1930480c8c9 (diff) | |
download | op-kernel-dev-ffb3cf3000aa12facdccbdfcb10bfebda7199209.zip op-kernel-dev-ffb3cf3000aa12facdccbdfcb10bfebda7199209.tar.gz |
{nl,mac,cfg}80211: Allow user to configure basic rates for mesh
Currently mesh uses mandatory rates as the default basic rates. Allow basic
rates to be configured during mesh join. Basic rates are applied only if
channel is also provided with mesh join command.
Signed-off-by: Ashok Nagarajan <ashok@cozybit.com>
[some whitespace fixes, refuse basic rates w/o channel]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/mesh.c | 10 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 17 |
2 files changed, 27 insertions, 0 deletions
diff --git a/net/wireless/mesh.c b/net/wireless/mesh.c index 0daaf72..30c4920 100644 --- a/net/wireless/mesh.c +++ b/net/wireless/mesh.c @@ -162,6 +162,16 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev, setup->chandef.center_freq1 = setup->chandef.chan->center_freq; } + /* + * check if basic rates are available otherwise use mandatory rates as + * basic rates + */ + if (!setup->basic_rates) { + struct ieee80211_supported_band *sband = + rdev->wiphy.bands[setup->chandef.chan->band]; + setup->basic_rates = ieee80211_mandatory_rates(sband); + } + if (!cfg80211_reg_can_beacon(&rdev->wiphy, &setup->chandef)) return -EINVAL; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 8aa83c0..687cb64 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -7487,6 +7487,23 @@ static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info) setup.chandef.chan = NULL; } + if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { + u8 *rates = nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); + int n_rates = + nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); + struct ieee80211_supported_band *sband; + + if (!setup.chandef.chan) + return -EINVAL; + + sband = rdev->wiphy.bands[setup.chandef.chan->band]; + + err = ieee80211_get_ratemask(sband, rates, n_rates, + &setup.basic_rates); + if (err) + return err; + } + return cfg80211_join_mesh(rdev, dev, &setup, &cfg); } |