diff options
| author | Michael Biebl <biebl@debian.org> | 2022-08-16 18:24:19 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2022-08-16 18:24:19 +0200 |
| commit | 0018d1f3cf71d680d7b6bceda55a5717244d8b26 (patch) | |
| tree | a058f1d106d172d3354179437ef034c9355cdf9c /src/libnm-core-aux-intern | |
| parent | 6accbd3ec0e42d8633bbde4d47ed7bfe854e7e0b (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.c | 148 | ||||
| -rw-r--r-- | src/libnm-core-aux-intern/nm-libnm-core-utils.h | 108 |
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__ */ |