Retrieve driver capabilities for maximum number of interfaces for MBSSID and maximum allowed profile periodicity for enhanced MBSSID advertisements. Signed-off-by: Aloka Dixit <quic_alokad@xxxxxxxxxxx> --- v2: Moved changes in driver_nl80211_capa.c to this patch instead of a separate one. hostapd/main.c | 3 +++ src/ap/hostapd.h | 5 +++++ src/drivers/driver.h | 5 +++++ src/drivers/driver_nl80211_capa.c | 27 +++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/hostapd/main.c b/hostapd/main.c index 21932d1bea06..e13e1665b6ce 100644 --- a/hostapd/main.c +++ b/hostapd/main.c @@ -241,6 +241,9 @@ static int hostapd_driver_init(struct hostapd_iface *iface) wpa_printf(MSG_ERROR, "set_wowlan failed"); } os_free(triggs); + + iface->mbssid_max_interfaces = capa.mbssid_max_interfaces; + iface->ema_max_periodicity = capa.ema_max_periodicity; } return 0; diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index 297faaf1409c..36c6a8b21d08 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -625,6 +625,11 @@ struct hostapd_iface { /* Previous WMM element information */ struct hostapd_wmm_ac_params prev_wmm[WMM_AC_NUM]; + /* Maximum number of interfaces supported for MBSSID advertisements */ + u8 mbssid_max_interfaces; + /* Maximum profile periodicity for enhanced MBSSID advertisements */ + u8 ema_max_periodicity; + int (*enable_iface_cb)(struct hostapd_iface *iface); int (*disable_iface_cb)(struct hostapd_iface *iface); }; diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 677b729d5d4a..39a2e6387d8a 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -2179,6 +2179,11 @@ struct wpa_driver_capa { /* Maximum number of supported CSA counters */ u16 max_csa_counters; + + /* Maximum number of interfaces supported for MBSSID advertisements */ + u8 mbssid_max_interfaces; + /* Maximum profile periodicity for enhanced MBSSID advertisements */ + u8 ema_max_periodicity; }; diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c index a0803bad046a..00c6d5d82335 100644 --- a/src/drivers/driver_nl80211_capa.c +++ b/src/drivers/driver_nl80211_capa.c @@ -850,6 +850,30 @@ err: } +static void wiphy_info_mbssid(struct wpa_driver_capa *cap, struct nlattr *attr) +{ + struct nlattr *config[NL80211_MBSSID_CONFIG_ATTR_MAX + 1]; + + if (nla_parse_nested(config, NL80211_MBSSID_CONFIG_ATTR_MAX, attr, + NULL)) + return; + + if (!config[NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES]) + return; + + cap->mbssid_max_interfaces = + nla_get_u8(config[NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES]); + + if (config[NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY]) + cap->ema_max_periodicity = + nla_get_u8(config[NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY]); + + wpa_printf(MSG_DEBUG, + "multiple_bssid: max interfaces %u, max profile periodicity %u\n", + cap->mbssid_max_interfaces, cap->ema_max_periodicity); +} + + static int wiphy_info_handler(struct nl_msg *msg, void *arg) { struct nlattr *tb[NL80211_ATTR_MAX + 1]; @@ -1081,6 +1105,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg) if (tb[NL80211_ATTR_WIPHY_SELF_MANAGED_REG]) capa->flags |= WPA_DRIVER_FLAGS_SELF_MANAGED_REGULATORY; + if (tb[NL80211_ATTR_MBSSID_CONFIG]) + wiphy_info_mbssid(capa, tb[NL80211_ATTR_MBSSID_CONFIG]); + return NL_SKIP; } -- 2.31.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap