3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-18 17:22:50 +01:00

dpp: use wiphy_supports_multicast_rx

The ath10k driver has shown some performance issues, specifically
packet loss, when frame watches are registered with the multicast
RX flag set. This is relevant for DPP which registers for these
when DPP starts (if the driver supports it). This has only been
observed when there are large groups of clients all using the same
wifi channel so its unlikely to be much of an issue for those using
IWD/ath10k and DPP unless you run large deployments of clients.

But for large deployments with IWD/ath10k we need a way to disable
the multicast RX registrations. Now, with the addition of
wiphy_supports_multicast_rx we can both check that the driver
supports this as well as if its been disabled by the driver quirk.
This commit is contained in:
James Prestwood 2024-11-25 07:06:22 -08:00 committed by Denis Kenzior
parent 887d8c8fe8
commit 45db339dcd

View File

@ -3739,9 +3739,8 @@ static void dpp_create(struct netdev *netdev)
dpp->key_len = l_ecc_curve_get_scalar_bytes(dpp->curve); dpp->key_len = l_ecc_curve_get_scalar_bytes(dpp->curve);
dpp->nonce_len = dpp_nonce_len_from_key_len(dpp->key_len); dpp->nonce_len = dpp_nonce_len_from_key_len(dpp->key_len);
dpp->max_roc = wiphy_get_max_roc_duration(wiphy_find_by_wdev(wdev_id)); dpp->max_roc = wiphy_get_max_roc_duration(wiphy_find_by_wdev(wdev_id));
dpp->mcast_support = wiphy_has_ext_feature( dpp->mcast_support = wiphy_supports_multicast_rx(
wiphy_find_by_wdev(dpp->wdev_id), wiphy_find_by_wdev(dpp->wdev_id));
NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS);
l_ecdh_generate_key_pair(dpp->curve, &dpp->boot_private, l_ecdh_generate_key_pair(dpp->curve, &dpp->boot_private,
&dpp->boot_public); &dpp->boot_public);
@ -4106,7 +4105,7 @@ static struct l_dbus_message *dpp_start_configurator_common(
} else } else
dpp->current_freq = bss->frequency; dpp->current_freq = bss->frequency;
dpp_add_frame_watches(dpp, responder); dpp_add_frame_watches(dpp, responder && dpp->mcast_support);
dpp->uri = dpp_generate_uri(dpp->own_asn1, dpp->own_asn1_len, 2, dpp->uri = dpp_generate_uri(dpp->own_asn1, dpp->own_asn1_len, 2,
netdev_get_address(dpp->netdev), netdev_get_address(dpp->netdev),
@ -4535,7 +4534,7 @@ static struct l_dbus_message *dpp_start_pkex_configurator(struct dpp_sm *dpp,
dpp->config = dpp_configuration_new(network_get_settings(network), dpp->config = dpp_configuration_new(network_get_settings(network),
network_get_ssid(network), network_get_ssid(network),
hs->akm_suite); hs->akm_suite);
dpp_add_frame_watches(dpp, true); dpp_add_frame_watches(dpp, dpp->mcast_support);
dpp_reset_protocol_timer(dpp, DPP_PKEX_PROTO_TIMEOUT); dpp_reset_protocol_timer(dpp, DPP_PKEX_PROTO_TIMEOUT);
dpp_property_changed_notify(dpp); dpp_property_changed_notify(dpp);