On 2020-06-04 00:09, John Crispin wrote:
When we start a multiple bssid AP we need to pass the index and number
of
peers aswell to the kernel. This info needs to be propagated to the
driver.
Signed-off-by: John Crispin <john@xxxxxxxxxxx>
---
include/net/cfg80211.h | 12 ++++++++++++
include/uapi/linux/nl80211.h | 7 +++++++
net/wireless/nl80211.c | 15 +++++++++++++++
3 files changed, 34 insertions(+)
[...]
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 3b502514944c..58ce67bc31da 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -667,6 +667,8 @@ const struct nla_policy
nl80211_policy[NUM_NL80211_ATTR] = {
NL80211_MULTIPLE_BSSID_LEGACY,
NL80211_MULTIPLE_BSSID_NON_TRANSMITTED),
[NL80211_ATTR_MULTI_BSSID_PARENT] = { .type = NLA_U32 },
+ [NL80211_ATTR_MULTI_BSSID_INDEX] = { .type = NLA_U32 },
+ [NL80211_ATTR_MULTI_BSSID_COUNT] = { .type = NLA_U32 },
};
/* policy for the key attributes */
@@ -4996,6 +4998,11 @@ static int nl80211_start_ap(struct sk_buff
*skb, struct genl_info *info)
!info->attrs[NL80211_ATTR_BEACON_HEAD])
return -EINVAL;
+ if (wdev->multi_bssid_mode == NL80211_MULTIPLE_BSSID_NON_TRANSMITTED
&&
+ (!info->attrs[NL80211_ATTR_MULTI_BSSID_INDEX] ||
+ !info->attrs[NL80211_ATTR_MULTI_BSSID_COUNT]))
+ return -EINVAL;
+
err = nl80211_parse_beacon(rdev, info->attrs, ¶ms.beacon);
if (err)
return err;
@@ -5150,6 +5157,14 @@ static int nl80211_start_ap(struct sk_buff
*skb, struct genl_info *info)
return err;
}
+ if (info->attrs[NL80211_ATTR_MULTI_BSSID_INDEX])
+ params.multi_bssid.index = nla_get_u32(
+ info->attrs[NL80211_ATTR_MULTI_BSSID_INDEX]);
+
+ if (info->attrs[NL80211_ATTR_MULTI_BSSID_COUNT])
+ params.multi_bssid.count = nla_get_u32(
+ info->attrs[NL80211_ATTR_MULTI_BSSID_COUNT]);
+
John,
Does the count include transmitting and non-transmitting APs? Or just
child-node counts.
Are you expecting start_ap() for all non-trasmitting AP as well? Hope
this count can be
set only for parent AP?
-Rajkumar