libnm-utils: convert string bond opts to int

NMPlatform code for bond netlink support will use the numeric values,
therefore we need functions to convert all the string values to int.
This commit is contained in:
Fernando Fernandez Mancera
2022-07-26 12:11:56 +02:00
parent f900f7bc2c
commit 32870d8233
4 changed files with 248 additions and 0 deletions

View File

@@ -40,6 +40,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,

View File

@@ -57,6 +57,102 @@ const char **nm_utils_bond_option_arp_ip_targets_split(const char *arp_ip_target
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,

View File

@@ -764,6 +764,39 @@ _nm_setting_bond_get_option_type(NMSettingBond *setting, const char *name)
return option_meta->opt_type;
}
guint32
_nm_setting_bond_opt_value_as_u32(NMSettingBond *s_bond, const char *opt)
{
nm_assert(_get_option_meta(opt)->opt_type == NM_BOND_OPTION_TYPE_INT);
return _nm_utils_ascii_str_to_uint64(nm_setting_bond_get_option_normalized(s_bond, opt),
10,
0,
G_MAXUINT32,
0);
}
guint16
_nm_setting_bond_opt_value_as_u16(NMSettingBond *s_bond, const char *opt)
{
nm_assert(_get_option_meta(opt)->opt_type == NM_BOND_OPTION_TYPE_INT);
return _nm_utils_ascii_str_to_uint64(nm_setting_bond_get_option_normalized(s_bond, opt),
10,
0,
G_MAXUINT16,
0);
}
guint8
_nm_setting_bond_opt_value_as_u8(NMSettingBond *s_bond, const char *opt)
{
nm_assert(_get_option_meta(opt)->opt_type == NM_BOND_OPTION_TYPE_INT);
return _nm_utils_ascii_str_to_uint64(nm_setting_bond_get_option_normalized(s_bond, opt),
10,
0,
G_MAXUINT8,
0);
}
/*****************************************************************************/
static gboolean

View File

@@ -517,6 +517,10 @@ NMConnectionMultiConnect _nm_connection_get_multi_connect(NMConnection *connecti
gboolean _nm_setting_bond_option_supported(const char *option, NMBondMode mode);
guint32 _nm_setting_bond_opt_value_as_u32(NMSettingBond *s_bond, const char *opt);
guint16 _nm_setting_bond_opt_value_as_u16(NMSettingBond *s_bond, const char *opt);
guint8 _nm_setting_bond_opt_value_as_u8(NMSettingBond *s_bond, const char *opt);
/*****************************************************************************/
GPtrArray *_nm_setting_bridge_get_vlans(NMSettingBridge *setting);