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:
parent
887d8c8fe8
commit
45db339dcd
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user