diff options
author | Thomas Haller <thaller@redhat.com> | 2021-03-03 08:30:10 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-03-05 11:09:13 +0100 |
commit | 8a3df8419af71c43c5e8b2ef51a8eaa7c6db7a33 (patch) | |
tree | 436ce1b233ce599db7c6d5654f910538a41e8d79 | |
parent | ad91e92b25c98c6398af6f651a205a9ac0ae5c55 (diff) | |
download | NetworkManager-8a3df8419af71c43c5e8b2ef51a8eaa7c6db7a33.tar.gz |
libnm-base: add internal _NMVlanFlags type
-rw-r--r-- | src/libnm-base/nm-base.h | 11 | ||||
-rw-r--r-- | src/libnm-core-impl/tests/test-general.c | 45 | ||||
-rw-r--r-- | src/libnm-core-intern/nm-core-internal.h | 6 | ||||
-rw-r--r-- | src/libnm-core-public/nm-setting-vlan.h | 3 |
4 files changed, 64 insertions, 1 deletions
diff --git a/src/libnm-base/nm-base.h b/src/libnm-base/nm-base.h index 1e0ba29a27..ca8a59d742 100644 --- a/src/libnm-base/nm-base.h +++ b/src/libnm-base/nm-base.h @@ -217,6 +217,17 @@ typedef enum { _NM_802_11_MODE_MESH = 4, } _NM80211Mode; +typedef enum { + /* Mirrors libnm's NMVlanFlags */ + _NM_VLAN_FLAG_REORDER_HEADERS = 0x1, + _NM_VLAN_FLAG_GVRP = 0x2, + _NM_VLAN_FLAG_LOOSE_BINDING = 0x4, + _NM_VLAN_FLAG_MVRP = 0x8, + + _NM_VLAN_FLAGS_ALL = _NM_VLAN_FLAG_REORDER_HEADERS | _NM_VLAN_FLAG_GVRP + | _NM_VLAN_FLAG_LOOSE_BINDING | _NM_VLAN_FLAG_MVRP, +} _NMVlanFlags; + /*****************************************************************************/ typedef enum { diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c index 4008d296be..629058fc07 100644 --- a/src/libnm-core-impl/tests/test-general.c +++ b/src/libnm-core-impl/tests/test-general.c @@ -307,6 +307,50 @@ test_80211_mode(void) /*****************************************************************************/ +static void +test_vlan_flags(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(NMVlanFlags) == sizeof(_NMVlanFlags)); + G_STATIC_ASSERT_EXPR(sizeof(NMVlanFlags) < sizeof(gint64)); + + G_STATIC_ASSERT_EXPR(sizeof(NMVlanFlags) < sizeof(gint64)); + g_assert((((gint64)((NMVlanFlags) -1)) < 0) == (((gint64)((_NMVlanFlags) -1)) < 0)); + +#define _E(n) \ + G_STMT_START \ + { \ + G_STATIC_ASSERT_EXPR(n == (gint64) _##n); \ + G_STATIC_ASSERT_EXPR(_##n == (gint64) n); \ + g_assert(n == NM_VLAN_FLAGS_CAST(_##n)); \ + if (!g_hash_table_add(vals, GUINT_TO_POINTER(n))) \ + g_assert_not_reached(); \ + } \ + G_STMT_END + _E(NM_VLAN_FLAG_REORDER_HEADERS); + _E(NM_VLAN_FLAG_GVRP); + _E(NM_VLAN_FLAG_LOOSE_BINDING); + _E(NM_VLAN_FLAG_MVRP); + _E(NM_VLAN_FLAGS_ALL); +#undef _E + + flags_class = G_FLAGS_CLASS(g_type_class_ref(NM_TYPE_VLAN_FLAGS)); + 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 NMVlanFlags is not checked for " + "_NMVlanFlags", + value->value_name); + } + } +} + +/*****************************************************************************/ + typedef struct _nm_packed { int v0; char v1; @@ -10481,6 +10525,7 @@ main(int argc, char **argv) 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_80211_mode", test_80211_mode); + g_test_add_func("/core/general/test_vlan_flags", test_vlan_flags); 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); diff --git a/src/libnm-core-intern/nm-core-internal.h b/src/libnm-core-intern/nm-core-internal.h index 63988e402f..6721a35913 100644 --- a/src/libnm-core-intern/nm-core-internal.h +++ b/src/libnm-core-intern/nm-core-internal.h @@ -240,6 +240,12 @@ NM_802_11_MODE_CAST(_NM80211Mode v) return (NM80211Mode) v; } +static inline NMVlanFlags +NM_VLAN_FLAGS_CAST(_NMVlanFlags v) +{ + return (NMVlanFlags) v; +} + /*****************************************************************************/ static inline NMTernary diff --git a/src/libnm-core-public/nm-setting-vlan.h b/src/libnm-core-public/nm-setting-vlan.h index 4b2ca429cf..af781ee294 100644 --- a/src/libnm-core-public/nm-setting-vlan.h +++ b/src/libnm-core-public/nm-setting-vlan.h @@ -78,6 +78,7 @@ typedef enum { * #NMVlanFlags values control the behavior of the VLAN interface. **/ typedef enum { /*< flags >*/ + NM_VLAN_FLAG_REORDER_HEADERS = 0x1, NM_VLAN_FLAG_GVRP = 0x2, NM_VLAN_FLAG_LOOSE_BINDING = 0x4, @@ -86,7 +87,7 @@ typedef enum { /*< flags >*/ /* NOTE: if adding flags update nm-setting-vlan.c::verify() */ /* NOTE: these flags must correspond to the value from the kernel - * header files. */ + * header files. */ } NMVlanFlags; #define NM_VLAN_FLAGS_ALL \ |