wifi: add 6ghz device capability flag

Adds a new WiFi 6GHz capability flag, NM_WIFI_DEVICE_CAP_FREQ_6GHZ,
along side the existing NM_WIFI_DEVICE_CAP_FREQ_2GHZ &
NM_WIFI_DEVICE_CAP_FREQ_5GHZ flags.

Gnome settings utilizes the 2 existing flags to present supported
bands in gnome-settings. I will be using this additional flag in
modifications there.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1739
This commit is contained in:
Korbin Bickel 2023-09-25 11:14:57 -04:00 committed by Beniamino Galvani
parent fa1239df14
commit 8f438d8d08
8 changed files with 842 additions and 630 deletions

View file

@ -225,6 +225,7 @@ typedef enum {
_NM_WIFI_DEVICE_CAP_FREQ_VALID = 0x00000100,
_NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200,
_NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400,
_NM_WIFI_DEVICE_CAP_FREQ_6GHZ = 0x00000800,
_NM_WIFI_DEVICE_CAP_MESH = 0x00001000,
_NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000,
} _NMDeviceWifiCapabilities;

View file

@ -292,6 +292,7 @@ test_device_wifi_capabilities(void)
_E(NM_WIFI_DEVICE_CAP_FREQ_VALID);
_E(NM_WIFI_DEVICE_CAP_FREQ_2GHZ);
_E(NM_WIFI_DEVICE_CAP_FREQ_5GHZ);
_E(NM_WIFI_DEVICE_CAP_FREQ_6GHZ);
_E(NM_WIFI_DEVICE_CAP_MESH);
_E(NM_WIFI_DEVICE_CAP_IBSS_RSN);
#undef _E

View file

@ -306,6 +306,7 @@ typedef enum /*< flags >*/ {
* @NM_WIFI_DEVICE_CAP_FREQ_VALID: device reports frequency capabilities
* @NM_WIFI_DEVICE_CAP_FREQ_2GHZ: device supports 2.4GHz frequencies
* @NM_WIFI_DEVICE_CAP_FREQ_5GHZ: device supports 5GHz frequencies
* @NM_WIFI_DEVICE_CAP_FREQ_6GHZ: device supports 6GHz frequencies
* @NM_WIFI_DEVICE_CAP_MESH: device supports acting as a mesh point. Since: 1.20.
* @NM_WIFI_DEVICE_CAP_IBSS_RSN: device supports WPA2/RSN in an IBSS network. Since: 1.22.
*
@ -324,6 +325,7 @@ typedef enum /*< flags >*/ {
NM_WIFI_DEVICE_CAP_FREQ_VALID = 0x00000100,
NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200,
NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400,
NM_WIFI_DEVICE_CAP_FREQ_6GHZ = 0x00000800,
NM_WIFI_DEVICE_CAP_MESH = 0x00001000,
NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000,
} NMDeviceWifiCapabilities;

View file

@ -696,10 +696,12 @@ nl80211_wiphy_info_handler(const struct nl_msg *msg, void *arg)
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_VALID;
if (f->freq > 2400 && f->freq < 2500)
if (f->freq >= 2401 && f->freq <= 2495)
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ;
if (f->freq > 4900 && f->freq < 6000)
if (f->freq >= 5150 && f->freq <= 5895)
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ;
if (f->freq >= 5925 && f->freq <= 7125)
info->caps |= _NM_WIFI_DEVICE_CAP_FREQ_6GHZ;
info->num_freqs++;
}

View file

@ -724,8 +724,8 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan)
guint32 response_len = 0;
struct iw_range_with_scan_capa *scan_capa_range;
int i;
gboolean freq_valid = FALSE, has_5ghz = FALSE, has_2ghz = FALSE;
char ifname[IFNAMSIZ];
gboolean freq_valid = FALSE, has_6ghz = FALSE, has_5ghz = FALSE, has_2ghz = FALSE;
char ifname[IFNAMSIZ];
if (!nmp_utils_if_indextoname(ifindex, ifname)) {
_LOGW(LOGD_PLATFORM | LOGD_WIFI, "can't determine interface name for ifindex %d", ifindex);
@ -762,10 +762,12 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan)
for (i = 0; i < wext->num_freqs; i++) {
wext->freqs[i] = iw_freq_to_uint32(&range.freq[i]);
freq_valid = TRUE;
if (wext->freqs[i] > 2400 && wext->freqs[i] < 2500)
if (wext->freqs[i] >= 2401 && wext->freqs[i] <= 2495)
has_2ghz = TRUE;
else if (wext->freqs[i] > 4900 && wext->freqs[i] < 6000)
else if (wext->freqs[i] >= 5150 && wext->freqs[i] <= 5895)
has_5ghz = TRUE;
else if (wext->freqs[i] >= 5925 && wext->freqs[i] <= 7125)
has_6ghz = TRUE;
}
/* Check for scanning capability; cards that can't scan are not supported */
@ -798,6 +800,8 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan)
wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ;
if (has_5ghz)
wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_5GHZ;
if (has_6ghz)
wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_6GHZ;
_LOGI(LOGD_PLATFORM | LOGD_WIFI, "(%s): using WEXT for Wi-Fi device control", ifname);

View file

@ -597,6 +597,12 @@ _metagen_device_detail_wifi_properties_get_fcn(NMC_META_GENERIC_INFO_GET_FCN_ARG
? (NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_5GHZ) ? N_("yes") : N_("no"))
: N_("unknown"),
get_type);
case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ:
return nmc_meta_generic_get_str_i18n(
NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_VALID)
? (NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_6GHZ) ? N_("yes") : N_("no"))
: N_("unknown"),
get_type);
case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH:
return nmc_meta_generic_get_bool(NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_MESH), get_type);
case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN:
@ -643,6 +649,9 @@ const NmcMetaGenericInfo *const
_METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES(
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_5GHZ,
"5GHZ"),
_METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES(
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ,
"6GHZ"),
_METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES(
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH,
"MESH"),

View file

@ -227,6 +227,7 @@ typedef enum {
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_ADHOC,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_2GHZ,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_5GHZ,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN,
_NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_NUM,

File diff suppressed because it is too large Load diff