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_VALID = 0x00000100,
_NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200, _NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200,
_NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400, _NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400,
_NM_WIFI_DEVICE_CAP_FREQ_6GHZ = 0x00000800,
_NM_WIFI_DEVICE_CAP_MESH = 0x00001000, _NM_WIFI_DEVICE_CAP_MESH = 0x00001000,
_NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000, _NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000,
} _NMDeviceWifiCapabilities; } _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_VALID);
_E(NM_WIFI_DEVICE_CAP_FREQ_2GHZ); _E(NM_WIFI_DEVICE_CAP_FREQ_2GHZ);
_E(NM_WIFI_DEVICE_CAP_FREQ_5GHZ); _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_MESH);
_E(NM_WIFI_DEVICE_CAP_IBSS_RSN); _E(NM_WIFI_DEVICE_CAP_IBSS_RSN);
#undef _E #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_VALID: device reports frequency capabilities
* @NM_WIFI_DEVICE_CAP_FREQ_2GHZ: device supports 2.4GHz frequencies * @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_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_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. * @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_VALID = 0x00000100,
NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200, NM_WIFI_DEVICE_CAP_FREQ_2GHZ = 0x00000200,
NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400, NM_WIFI_DEVICE_CAP_FREQ_5GHZ = 0x00000400,
NM_WIFI_DEVICE_CAP_FREQ_6GHZ = 0x00000800,
NM_WIFI_DEVICE_CAP_MESH = 0x00001000, NM_WIFI_DEVICE_CAP_MESH = 0x00001000,
NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000, NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000,
} NMDeviceWifiCapabilities; } 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; 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; 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; 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++; info->num_freqs++;
} }

View file

@ -724,7 +724,7 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan)
guint32 response_len = 0; guint32 response_len = 0;
struct iw_range_with_scan_capa *scan_capa_range; struct iw_range_with_scan_capa *scan_capa_range;
int i; int i;
gboolean freq_valid = FALSE, has_5ghz = FALSE, has_2ghz = FALSE; gboolean freq_valid = FALSE, has_6ghz = FALSE, has_5ghz = FALSE, has_2ghz = FALSE;
char ifname[IFNAMSIZ]; char ifname[IFNAMSIZ];
if (!nmp_utils_if_indextoname(ifindex, ifname)) { if (!nmp_utils_if_indextoname(ifindex, ifname)) {
@ -762,10 +762,12 @@ nm_wifi_utils_wext_new(int ifindex, gboolean check_scan)
for (i = 0; i < wext->num_freqs; i++) { for (i = 0; i < wext->num_freqs; i++) {
wext->freqs[i] = iw_freq_to_uint32(&range.freq[i]); wext->freqs[i] = iw_freq_to_uint32(&range.freq[i]);
freq_valid = TRUE; freq_valid = TRUE;
if (wext->freqs[i] > 2400 && wext->freqs[i] < 2500) if (wext->freqs[i] >= 2401 && wext->freqs[i] <= 2495)
has_2ghz = TRUE; 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; 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 */ /* 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; wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_2GHZ;
if (has_5ghz) if (has_5ghz)
wext->parent.caps |= _NM_WIFI_DEVICE_CAP_FREQ_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); _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")) ? (NM_FLAGS_HAS(wcaps, NM_WIFI_DEVICE_CAP_FREQ_5GHZ) ? N_("yes") : N_("no"))
: N_("unknown"), : N_("unknown"),
get_type); 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: 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); 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: case NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN:
@ -643,6 +649,9 @@ const NmcMetaGenericInfo *const
_METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES( _METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES(
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_5GHZ, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_5GHZ,
"5GHZ"), "5GHZ"),
_METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES(
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_6GHZ,
"6GHZ"),
_METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES( _METAGEN_DEVICE_DETAIL_WIFI_PROPERTIES(
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_MESH,
"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_ADHOC,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_2GHZ, 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_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_MESH,
NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN, NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_IBSS_RSN,
_NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_NUM, _NMC_GENERIC_INFO_TYPE_DEVICE_DETAIL_WIFI_PROPERTIES_NUM,

File diff suppressed because it is too large Load diff