about summary refs log tree commit diff
path: root/src/libnm-core-aux-intern
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-08-16 18:24:19 +0200
committerMichael Biebl <biebl@debian.org>2022-08-16 18:24:19 +0200
commit0018d1f3cf71d680d7b6bceda55a5717244d8b26 (patch)
treea058f1d106d172d3354179437ef034c9355cdf9c /src/libnm-core-aux-intern
parent6accbd3ec0e42d8633bbde4d47ed7bfe854e7e0b (diff)
New upstream version 1.39.90 upstream/1.39.90
Diffstat (limited to 'src/libnm-core-aux-intern')
-rw-r--r--src/libnm-core-aux-intern/nm-libnm-core-utils.c148
-rw-r--r--src/libnm-core-aux-intern/nm-libnm-core-utils.h108
2 files changed, 256 insertions, 0 deletions
diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.c b/src/libnm-core-aux-intern/nm-libnm-core-utils.c
index 37518815..ba05b6cd 100644
--- a/src/libnm-core-aux-intern/nm-libnm-core-utils.c
+++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.c
@@ -41,6 +41,121 @@ _nm_setting_bond_remove_options_arp_interval(NMSettingBond *s_bond)
 /*****************************************************************************/
 
 NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_ad_select_from_string,
+    NMBondAdSelect,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_AD_SELECT_NUM <= 3);
+
+        if (name && name[0] < '0' + _NM_BOND_AD_SELECT_NUM && name[0] >= '0' && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_AD_SELECT_STABLE; },
+    {"bandwith", NM_BOND_AD_SELECT_BANDWIDTH},
+    {"count", NM_BOND_AD_SELECT_COUNT},
+    {"stable", NM_BOND_AD_SELECT_STABLE}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_arp_all_targets_from_string,
+    NMBondArpAllTargets,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_ARP_ALL_TARGETS_NUM <= 2);
+
+        if (name && name[0] < '0' + _NM_BOND_ARP_ALL_TARGETS_NUM && name[0] >= '0'
+            && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_ARP_ALL_TARGETS_ANY; },
+    {"all", NM_BOND_ARP_ALL_TARGETS_ALL},
+    {"any", NM_BOND_ARP_ALL_TARGETS_ANY}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_fail_over_mac_from_string,
+    NMBondFailOverMac,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_FAIL_OVER_MAC_NUM <= 3);
+
+        if (name && name[0] < '0' + _NM_BOND_FAIL_OVER_MAC_NUM && name[0] >= '0'
+            && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_FAIL_OVER_MAC_NONE; },
+    {"active", NM_BOND_FAIL_OVER_MAC_ACTIVE},
+    {"follow", NM_BOND_FAIL_OVER_MAC_FOLLOW},
+    {"none", NM_BOND_FAIL_OVER_MAC_NONE}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_lacp_rate_from_string,
+    NMBondLacpRate,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_LACP_RATE_NUM <= 2);
+
+        if (name && name[0] < '0' + _NM_BOND_LACP_RATE_NUM && name[0] >= '0' && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_LACP_RATE_SLOW; },
+    {"fast", NM_BOND_LACP_RATE_FAST},
+    {"slow", NM_BOND_LACP_RATE_SLOW}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_arp_validate_from_string,
+    NMBondArpValidate,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_ARP_VALIDATE_NUM <= 7);
+
+        if (name && name[0] < '0' + _NM_BOND_ARP_VALIDATE_NUM && name[0] >= '0'
+            && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_ARP_VALIDATE_NONE; },
+    {"active", NM_BOND_ARP_VALIDATE_ACTIVE},
+    {"all", NM_BOND_ARP_VALIDATE_ALL},
+    {"backup", NM_BOND_ARP_VALIDATE_BACKUP},
+    {"filter", NM_BOND_ARP_VALIDATE_FILTER},
+    {"filter_active", NM_BOND_ARP_VALIDATE_FILTER_ACTIVE},
+    {"filter_backup", NM_BOND_ARP_VALIDATE_FILTER_BACKUP},
+    {"none", NM_BOND_ARP_VALIDATE_NONE}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_primary_reselect_from_string,
+    NMBondPrimaryReselect,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_PRIMARY_RESELECT_NUM <= 3);
+
+        if (name && name[0] < '0' + _NM_BOND_PRIMARY_RESELECT_NUM && name[0] >= '0'
+            && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_PRIMARY_RESELECT_ALWAYS; },
+    {"always", NM_BOND_PRIMARY_RESELECT_ALWAYS},
+    {"better", NM_BOND_PRIMARY_RESELECT_BETTER},
+    {"failure", NM_BOND_PRIMARY_RESELECT_FAILURE}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
+    _nm_setting_bond_xmit_hash_policy_from_string,
+    NMBondXmitHashPolicy,
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_XMIT_HASH_POLICY_NUM <= 6);
+
+        if (name && name[0] < '0' + _NM_BOND_XMIT_HASH_POLICY_NUM && name[0] >= '0'
+            && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
+    { return NM_BOND_XMIT_HASH_POLICY_LAYER2; },
+    {"encap2+3", NM_BOND_XMIT_HASH_POLICY_ENCAP2_3},
+    {"encap3+4", NM_BOND_XMIT_HASH_POLICY_ENCAP3_4},
+    {"layer2", NM_BOND_XMIT_HASH_POLICY_LAYER2},
+    {"layer2+3", NM_BOND_XMIT_HASH_POLICY_LAYER2_3},
+    {"layer3+4", NM_BOND_XMIT_HASH_POLICY_LAYER3_4},
+    {"vlan+srcmac", NM_BOND_XMIT_HASH_POLICY_VLAN_SRCMAC}, );
+
+NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
     _nm_setting_bond_mode_from_string,
     NMBondMode,
     {
@@ -378,3 +493,36 @@ _nm_connection_new_setting(NMConnection *connection, GType gtype)
     nm_connection_add_setting(connection, setting);
     return setting;
 }
+
+/*****************************************************************************/
+
+NMMptcpFlags
+nm_mptcp_flags_normalize(NMMptcpFlags flags)
+{
+    /* Certain combinations of flags are incompatible. Normalize them.
+     *
+     * This function never returns 0x0 (NONE). If the flags are neither
+     * disabled,enabled-on-global-iface,enabled, then we default to "enabled". */
+
+    if (NM_FLAGS_HAS(flags, NM_MPTCP_FLAGS_DISABLED)) {
+        /* If the disabled flag is set, then that's the end of it. */
+        return NM_MPTCP_FLAGS_DISABLED;
+    }
+
+    /* Clear all unknown flags. */
+    flags &= _NM_MPTCP_FLAGS_ALL;
+
+    /* We must either set "enabled-on-global-iface" or "enabled". The
+     * former takes precedence, if they are both set.
+     *
+     * If neither is set, we default to "enabled".  */
+    if (NM_FLAGS_HAS(flags, NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE))
+        flags = NM_FLAGS_UNSET(flags, NM_MPTCP_FLAGS_ENABLED);
+    else
+        flags = NM_FLAGS_SET(flags, NM_MPTCP_FLAGS_ENABLED);
+
+    if (NM_FLAGS_ALL(flags, NM_MPTCP_FLAGS_SIGNAL | NM_MPTCP_FLAGS_FULLMESH))
+        flags = NM_FLAGS_UNSET(flags, NM_MPTCP_FLAGS_FULLMESH);
+
+    return flags;
+}
diff --git a/src/libnm-core-aux-intern/nm-libnm-core-utils.h b/src/libnm-core-aux-intern/nm-libnm-core-utils.h
index eb30c931..5c827c01 100644
--- a/src/libnm-core-aux-intern/nm-libnm-core-utils.h
+++ b/src/libnm-core-aux-intern/nm-libnm-core-utils.h
@@ -58,6 +58,102 @@ void _nm_setting_bond_remove_options_miimon(NMSettingBond *s_bond);
 void _nm_setting_bond_remove_options_arp_interval(NMSettingBond *s_bond);
 
 typedef enum {
+    NM_BOND_AD_SELECT_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_AD_SELECT_STABLE    = 0,
+    NM_BOND_AD_SELECT_BANDWIDTH = 1,
+    NM_BOND_AD_SELECT_COUNT     = 2,
+
+    _NM_BOND_AD_SELECT_NUM,
+} NMBondAdSelect;
+
+NMBondAdSelect _nm_setting_bond_ad_select_from_string(const char *str);
+
+typedef enum {
+    NM_BOND_ARP_ALL_TARGETS_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_ARP_ALL_TARGETS_ANY = 0,
+    NM_BOND_ARP_ALL_TARGETS_ALL = 1,
+
+    _NM_BOND_ARP_ALL_TARGETS_NUM,
+} NMBondArpAllTargets;
+
+NMBondArpAllTargets _nm_setting_bond_arp_all_targets_from_string(const char *str);
+
+typedef enum {
+    NM_BOND_FAIL_OVER_MAC_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_FAIL_OVER_MAC_NONE   = 0,
+    NM_BOND_FAIL_OVER_MAC_ACTIVE = 1,
+    NM_BOND_FAIL_OVER_MAC_FOLLOW = 2,
+
+    _NM_BOND_FAIL_OVER_MAC_NUM,
+} NMBondFailOverMac;
+
+NMBondFailOverMac _nm_setting_bond_fail_over_mac_from_string(const char *str);
+
+typedef enum {
+    NM_BOND_LACP_RATE_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_LACP_RATE_SLOW = 0,
+    NM_BOND_LACP_RATE_FAST = 1,
+
+    _NM_BOND_LACP_RATE_NUM,
+} NMBondLacpRate;
+
+NMBondLacpRate _nm_setting_bond_lacp_rate_from_string(const char *str);
+
+typedef enum {
+    NM_BOND_ARP_VALIDATE_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_ARP_VALIDATE_NONE          = 0,
+    NM_BOND_ARP_VALIDATE_ACTIVE        = 1,
+    NM_BOND_ARP_VALIDATE_BACKUP        = 2,
+    NM_BOND_ARP_VALIDATE_ALL           = 3,
+    NM_BOND_ARP_VALIDATE_FILTER        = 4,
+    NM_BOND_ARP_VALIDATE_FILTER_ACTIVE = 5,
+    NM_BOND_ARP_VALIDATE_FILTER_BACKUP = 6,
+
+    _NM_BOND_ARP_VALIDATE_NUM,
+} NMBondArpValidate;
+
+NMBondArpValidate _nm_setting_bond_arp_validate_from_string(const char *str);
+
+typedef enum {
+    NM_BOND_PRIMARY_RESELECT_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_PRIMARY_RESELECT_ALWAYS  = 0,
+    NM_BOND_PRIMARY_RESELECT_BETTER  = 1,
+    NM_BOND_PRIMARY_RESELECT_FAILURE = 2,
+
+    _NM_BOND_PRIMARY_RESELECT_NUM,
+} NMBondPrimaryReselect;
+
+NMBondPrimaryReselect _nm_setting_bond_primary_reselect_from_string(const char *str);
+
+typedef enum {
+    NM_BOND_XMIT_HASH_POLICY_UNKNOWN = -1,
+
+    /* The numeric values correspond to kernel's numbering. */
+    NM_BOND_XMIT_HASH_POLICY_LAYER2      = 0,
+    NM_BOND_XMIT_HASH_POLICY_LAYER3_4    = 1,
+    NM_BOND_XMIT_HASH_POLICY_LAYER2_3    = 2,
+    NM_BOND_XMIT_HASH_POLICY_ENCAP2_3    = 3,
+    NM_BOND_XMIT_HASH_POLICY_ENCAP3_4    = 4,
+    NM_BOND_XMIT_HASH_POLICY_VLAN_SRCMAC = 5,
+
+    _NM_BOND_XMIT_HASH_POLICY_NUM,
+} NMBondXmitHashPolicy;
+
+NMBondXmitHashPolicy _nm_setting_bond_xmit_hash_policy_from_string(const char *str);
+
+typedef enum {
     NM_BOND_MODE_UNKNOWN = -1,
 
     /* The numeric values correspond to kernel's numbering of the modes. */
@@ -171,4 +267,16 @@ gboolean nm_settings_connection_validate_permission_user(const char *item, gssiz
 gpointer _nm_connection_ensure_setting(NMConnection *connection, GType gtype);
 gpointer _nm_connection_new_setting(NMConnection *connection, GType gtype);
 
+/*****************************************************************************/
+
+#define _NM_MPTCP_FLAGS_ALL                                                                    \
+    ((NMMptcpFlags) (NM_MPTCP_FLAGS_DISABLED | NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE          \
+                     | NM_MPTCP_FLAGS_ENABLED | NM_MPTCP_FLAGS_SIGNAL | NM_MPTCP_FLAGS_SUBFLOW \
+                     | NM_MPTCP_FLAGS_BACKUP | NM_MPTCP_FLAGS_FULLMESH))
+
+#define _NM_MPTCP_FLAGS_DEFAULT \
+    ((NMMptcpFlags) (NM_MPTCP_FLAGS_ENABLED_ON_GLOBAL_IFACE | NM_MPTCP_FLAGS_SUBFLOW))
+
+NMMptcpFlags nm_mptcp_flags_normalize(NMMptcpFlags flags);
+
 #endif /* __NM_LIBNM_SHARED_UTILS_H__ */