summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2022-03-14 09:22:30 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2022-03-14 09:22:30 +0100
commite2fe97a25f8da9e898970346ce5b0fca5fe68ad0 (patch)
tree20917da669db547ca7f69b36948514f1317f598f
parent9863475b2dad6a2ed4ef31893fcf3f37df4dbb66 (diff)
parent5abb1133868ff34fb1de633eb25937670389f18a (diff)
merge: branch 'bg/wifi-disabled-freq'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1142 https://bugzilla.redhat.com/show_bug.cgi?id=2062785
-rw-r--r--src/libnm-platform/wifi/nm-wifi-utils-nl80211.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c
index b7e5c45af8..475b8a390a 100644
--- a/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c
+++ b/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c
@@ -601,7 +601,7 @@ nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg)
struct nlattr *nl_freq;
int rem_freq;
int rem_band;
- int freq_idx;
+ guint num_alloc;
#ifdef NL80211_FREQUENCY_ATTR_NO_IR
G_STATIC_ASSERT_EXPR(NL80211_FREQUENCY_ATTR_PASSIVE_SCAN == NL80211_FREQUENCY_ATTR_NO_IR
@@ -655,8 +655,10 @@ nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg)
}
}
- /* Find number of supported frequencies */
+ /* Read supported frequencies */
+ num_alloc = 32;
info->num_freqs = 0;
+ info->freqs = g_new(guint32, num_alloc);
nla_for_each_nested (nl_band, tb[NL80211_ATTR_WIPHY_BANDS], rem_band) {
if (nla_parse_nested_arr(tb_band, nl_band, NULL) < 0)
@@ -669,38 +671,28 @@ nl80211_wiphy_info_handler(struct nl_msg *msg, void *arg)
if (!tb_freq[NL80211_FREQUENCY_ATTR_FREQ])
continue;
- info->num_freqs++;
- }
- }
-
- /* Read supported frequencies */
- info->freqs = g_malloc0(sizeof(guint32) * info->num_freqs);
-
- freq_idx = 0;
- nla_for_each_nested (nl_band, tb[NL80211_ATTR_WIPHY_BANDS], rem_band) {
- if (nla_parse_nested_arr(tb_band, nl_band, NULL) < 0)
- return NL_SKIP;
-
- nla_for_each_nested (nl_freq, tb_band[NL80211_BAND_ATTR_FREQS], rem_freq) {
- if (nla_parse_nested_arr(tb_freq, nl_freq, freq_policy) < 0)
+ if (tb_freq[NL80211_FREQUENCY_ATTR_DISABLED])
continue;
- if (!tb_freq[NL80211_FREQUENCY_ATTR_FREQ])
- continue;
-
- info->freqs[freq_idx] = nla_get_u32(tb_freq[NL80211_FREQUENCY_ATTR_FREQ]);
+ if (info->num_freqs >= num_alloc) {
+ num_alloc *= 2;
+ info->freqs = g_renew(guint32, info->freqs, num_alloc);
+ }
+ info->freqs[info->num_freqs] = nla_get_u32(tb_freq[NL80211_FREQUENCY_ATTR_FREQ]);
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_VALID;
- if (info->freqs[freq_idx] > 2400 && info->freqs[freq_idx] < 2500)
+ if (info->freqs[info->num_freqs] > 2400 && info->freqs[info->num_freqs] < 2500)
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ;
- if (info->freqs[freq_idx] > 4900 && info->freqs[freq_idx] < 6000)
+ if (info->freqs[info->num_freqs] > 4900 && info->freqs[info->num_freqs] < 6000)
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ;
- freq_idx++;
+ info->num_freqs++;
}
}
+ info->freqs = g_renew(guint32, info->freqs, info->num_freqs);
+
/* Read security/encryption support */
if (tb[NL80211_ATTR_CIPHER_SUITES]) {
guint32 *ciphers = nla_data(tb[NL80211_ATTR_CIPHER_SUITES]);