summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-03-03 08:30:10 +0100
committerThomas Haller <thaller@redhat.com>2021-03-05 11:09:13 +0100
commit367be3585fa45e6733ee5df7a582ab7776b38b79 (patch)
treeb534fd8b29c1bbc740999ac760f008ba188d7311
parent096ee5ed6ebc892096a059ed9865f5d7f93b332d (diff)
downloadNetworkManager-367be3585fa45e6733ee5df7a582ab7776b38b79.tar.gz
libnm-base: add internal _NMDeviceWifiCapabilities type
-rw-r--r--src/libnm-base/nm-base.h18
-rw-r--r--src/libnm-core-impl/tests/test-general.c54
2 files changed, 72 insertions, 0 deletions
diff --git a/src/libnm-base/nm-base.h b/src/libnm-base/nm-base.h
index 8bacfa6e73..399c0f53be 100644
--- a/src/libnm-base/nm-base.h
+++ b/src/libnm-base/nm-base.h
@@ -190,6 +190,24 @@ typedef enum {
_NM_SETTING_WIRELESS_WAKE_ON_WLAN_DEFAULT | _NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE,
} _NMSettingWirelessWakeOnWLan;
+typedef enum {
+ /* Mirrors libnm's NMDeviceWifiCapabilities */
+ _NM_WIFI_DEVICE_CAP_NONE = 0x00000000,
+ _NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001,
+ _NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002,
+ _NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004,
+ _NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008,
+ _NM_WIFI_DEVICE_CAP_WPA = 0x00000010,
+ _NM_WIFI_DEVICE_CAP_RSN = 0x00000020,
+ _NM_WIFI_DEVICE_CAP_AP = 0x00000040,
+ _NM_WIFI_DEVICE_CAP_ADHOC = 0x00000080,
+ _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_MESH = 0x00001000,
+ _NM_WIFI_DEVICE_CAP_IBSS_RSN = 0x00002000,
+} _NMDeviceWifiCapabilities;
+
/*****************************************************************************/
typedef enum {
diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c
index 305f821345..c3141e3c21 100644
--- a/src/libnm-core-impl/tests/test-general.c
+++ b/src/libnm-core-impl/tests/test-general.c
@@ -210,6 +210,59 @@ test_wireless_wake_on_wlan_enum(void)
/*****************************************************************************/
+static void
+test_device_wifi_capabilities(void)
+{
+ nm_auto_unref_gtypeclass GFlagsClass *flags_class = NULL;
+ gs_unref_hashtable GHashTable *vals = g_hash_table_new(nm_direct_hash, NULL);
+ guint i;
+
+ G_STATIC_ASSERT_EXPR(sizeof(NMDeviceWifiCapabilities) == sizeof(_NMDeviceWifiCapabilities));
+ G_STATIC_ASSERT_EXPR(sizeof(NMDeviceWifiCapabilities) < sizeof(gint64));
+
+ G_STATIC_ASSERT_EXPR(sizeof(NMDeviceWifiCapabilities) < sizeof(gint64));
+ g_assert((((gint64)((NMDeviceWifiCapabilities) -1)) < 0)
+ == (((gint64)((_NMDeviceWifiCapabilities) -1)) < 0));
+
+#define _E(n) \
+ G_STMT_START \
+ { \
+ G_STATIC_ASSERT_EXPR(n == (gint64) _##n); \
+ G_STATIC_ASSERT_EXPR(_##n == (gint64) n); \
+ if (!g_hash_table_add(vals, GUINT_TO_POINTER(n))) \
+ g_assert_not_reached(); \
+ } \
+ G_STMT_END
+ _E(NM_WIFI_DEVICE_CAP_NONE);
+ _E(NM_WIFI_DEVICE_CAP_CIPHER_WEP40);
+ _E(NM_WIFI_DEVICE_CAP_CIPHER_WEP104);
+ _E(NM_WIFI_DEVICE_CAP_CIPHER_TKIP);
+ _E(NM_WIFI_DEVICE_CAP_CIPHER_CCMP);
+ _E(NM_WIFI_DEVICE_CAP_WPA);
+ _E(NM_WIFI_DEVICE_CAP_RSN);
+ _E(NM_WIFI_DEVICE_CAP_AP);
+ _E(NM_WIFI_DEVICE_CAP_ADHOC);
+ _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_MESH);
+ _E(NM_WIFI_DEVICE_CAP_IBSS_RSN);
+#undef _E
+
+ flags_class = G_FLAGS_CLASS(g_type_class_ref(NM_TYPE_DEVICE_WIFI_CAPABILITIES));
+ for (i = 0; i < flags_class->n_values; i++) {
+ const GFlagsValue *value = &flags_class->values[i];
+
+ if (!g_hash_table_contains(vals, GUINT_TO_POINTER(value->value))) {
+ g_error("The enum value %s from NMDeviceWifiCapabilities is not checked for "
+ "_NMDeviceWifiCapabilities",
+ value->value_name);
+ }
+ }
+}
+
+/*****************************************************************************/
+
typedef struct _nm_packed {
int v0;
char v1;
@@ -10382,6 +10435,7 @@ main(int argc, char **argv)
g_test_add_func("/core/general/test_wired_wake_on_lan_enum", test_wired_wake_on_lan_enum);
g_test_add_func("/core/general/test_wireless_wake_on_wlan_enum",
test_wireless_wake_on_wlan_enum);
+ g_test_add_func("/core/general/test_device_wifi_capabilities", test_device_wifi_capabilities);
g_test_add_func("/core/general/test_nm_hash", test_nm_hash);
g_test_add_func("/core/general/test_nm_g_slice_free_fcn", test_nm_g_slice_free_fcn);
g_test_add_func("/core/general/test_c_list_sort", test_c_list_sort);