libnm-core: enforce team and team-port defaults
Rework a bit the way default values are check, set and aligned.
This commit is contained in:
@@ -68,13 +68,13 @@ enum {
|
||||
|
||||
/* Keep aligned with team-port properties enum */
|
||||
static const _NMUtilsTeamPropertyKeys _prop_to_keys[LAST_PROP] = {
|
||||
[PROP_0] = { NULL, NULL, NULL },
|
||||
[PROP_CONFIG] = { NULL, NULL, NULL },
|
||||
[PROP_QUEUE_ID] = { "queue_id", NULL, NULL },
|
||||
[PROP_PRIO] = { "prio", NULL, NULL },
|
||||
[PROP_STICKY] = { "sticky", NULL, NULL },
|
||||
[PROP_LACP_PRIO] = { "lacp_prio", NULL, NULL },
|
||||
[PROP_LACP_KEY] = { "lacp_key", NULL, NULL },
|
||||
[PROP_0] = { NULL, NULL, NULL, 0 },
|
||||
[PROP_CONFIG] = { NULL, NULL, NULL, 0 },
|
||||
[PROP_QUEUE_ID] = { "queue_id", NULL, NULL, NM_SETTING_TEAM_PORT_QUEUE_ID_DEFAULT },
|
||||
[PROP_PRIO] = { "prio", NULL, NULL, 0 },
|
||||
[PROP_STICKY] = { "sticky", NULL, NULL, 0 },
|
||||
[PROP_LACP_PRIO] = { "lacp_prio", NULL, NULL, NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT },
|
||||
[PROP_LACP_KEY] = { "lacp_key", NULL, NULL, 0 },
|
||||
};
|
||||
|
||||
|
||||
@@ -276,11 +276,11 @@ nm_setting_team_port_init (NMSettingTeamPort *setting)
|
||||
{
|
||||
NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting);
|
||||
|
||||
priv->queue_id = -1;
|
||||
priv->lacp_prio = 255;
|
||||
priv->queue_id = NM_SETTING_TEAM_PORT_QUEUE_ID_DEFAULT;
|
||||
priv->lacp_prio = NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT;
|
||||
}
|
||||
|
||||
#define JSON_TO_VAL(typ, id) _nm_utils_json_extract_##typ (priv->config, _prop_to_keys[id])
|
||||
#define JSON_TO_VAL(typ, id) _nm_utils_json_extract_##typ (priv->config, _prop_to_keys[id], TRUE)
|
||||
|
||||
static void
|
||||
set_property (GObject *object, guint prop_id,
|
||||
@@ -304,7 +304,7 @@ set_property (GObject *object, guint prop_id,
|
||||
if (priv->queue_id == g_value_get_int (value))
|
||||
break;
|
||||
priv->queue_id = g_value_get_int (value);
|
||||
if (priv->queue_id > -1)
|
||||
if (priv->queue_id != NM_SETTING_TEAM_PORT_QUEUE_ID_DEFAULT)
|
||||
align_value = value;
|
||||
align_config = TRUE;
|
||||
break;
|
||||
@@ -329,7 +329,7 @@ set_property (GObject *object, guint prop_id,
|
||||
break;
|
||||
priv->lacp_prio = g_value_get_int (value);
|
||||
/* from libteam sources: lacp_prio default value is 0xff */
|
||||
if (priv->lacp_prio != 255)
|
||||
if (priv->lacp_prio != NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT)
|
||||
align_value = value;
|
||||
align_config = TRUE;
|
||||
break;
|
||||
@@ -337,7 +337,7 @@ set_property (GObject *object, guint prop_id,
|
||||
if (priv->lacp_key == g_value_get_int (value))
|
||||
break;
|
||||
priv->lacp_key = g_value_get_int (value);
|
||||
if (priv->lacp_key > 0)
|
||||
if (priv->lacp_key)
|
||||
align_value = value;
|
||||
align_config = TRUE;
|
||||
break;
|
||||
|
@@ -45,6 +45,9 @@ G_BEGIN_DECLS
|
||||
#define NM_SETTING_TEAM_PORT_LACP_PRIO "lacp-prio"
|
||||
#define NM_SETTING_TEAM_PORT_LACP_KEY "lacp-key"
|
||||
|
||||
#define NM_SETTING_TEAM_PORT_QUEUE_ID_DEFAULT -1
|
||||
#define NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT 255
|
||||
|
||||
/**
|
||||
* NMSettingTeamPort:
|
||||
*
|
||||
|
@@ -83,22 +83,26 @@ enum {
|
||||
|
||||
/* Keep aligned with team properties enum */
|
||||
static const _NMUtilsTeamPropertyKeys _prop_to_keys[LAST_PROP] = {
|
||||
[PROP_0] = { NULL, NULL, NULL },
|
||||
[PROP_CONFIG] = { NULL, NULL, NULL },
|
||||
[PROP_NOTIFY_PEERS_COUNT] = { "notify_peers", "count", NULL },
|
||||
[PROP_NOTIFY_PEERS_INTERVAL] = { "notify_peers", "interval", NULL },
|
||||
[PROP_MCAST_REJOIN_COUNT] = { "mcast_rejoin", "count", NULL },
|
||||
[PROP_MCAST_REJOIN_INTERVAL] = { "mcast_rejoin", "interval", NULL },
|
||||
[PROP_RUNNER] = { "runner", "name", NULL },
|
||||
[PROP_RUNNER_HWADDR_POLICY] = { "runner", "hwaddr_policy", NULL },
|
||||
[PROP_RUNNER_TX_HASH] = { "runner", "tx_hash", NULL },
|
||||
[PROP_RUNNER_TX_BALANCER] = { "runner", "tx_balancer", "name" },
|
||||
[PROP_RUNNER_TX_BALANCER_INTERVAL] = { "runner", "tx_balancer", "interval" },
|
||||
[PROP_RUNNER_ACTIVE] = { "runner", "active", NULL },
|
||||
[PROP_RUNNER_FAST_RATE] = { "runner", "fast_rate", NULL },
|
||||
[PROP_RUNNER_SYS_PRIO] = { "runner", "sys_prio", NULL },
|
||||
[PROP_RUNNER_MIN_PORTS] = { "runner", "min_ports", NULL },
|
||||
[PROP_RUNNER_AGG_SELECT_POLICY] = { "runner", "agg_select_policy", NULL },
|
||||
[PROP_0] = { NULL, NULL, NULL, 0 },
|
||||
[PROP_CONFIG] = { NULL, NULL, NULL, 0 },
|
||||
[PROP_NOTIFY_PEERS_COUNT] = { "notify_peers", "count", NULL, 0 },
|
||||
[PROP_NOTIFY_PEERS_INTERVAL] = { "notify_peers", "interval", NULL, 0 },
|
||||
[PROP_MCAST_REJOIN_COUNT] = { "mcast_rejoin", "count", NULL, 0 },
|
||||
[PROP_MCAST_REJOIN_INTERVAL] = { "mcast_rejoin", "interval", NULL, 0 },
|
||||
[PROP_RUNNER] = { "runner", "name", NULL,
|
||||
{.default_str = NM_SETTING_TEAM_RUNNER_DEFAULT} },
|
||||
[PROP_RUNNER_HWADDR_POLICY] = { "runner", "hwaddr_policy", NULL, 0 },
|
||||
[PROP_RUNNER_TX_HASH] = { "runner", "tx_hash", NULL, 0 },
|
||||
[PROP_RUNNER_TX_BALANCER] = { "runner", "tx_balancer", "name", 0 },
|
||||
[PROP_RUNNER_TX_BALANCER_INTERVAL] = { "runner", "tx_balancer", "interval",
|
||||
NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT },
|
||||
[PROP_RUNNER_ACTIVE] = { "runner", "active", NULL, 0 },
|
||||
[PROP_RUNNER_FAST_RATE] = { "runner", "fast_rate", NULL, 0 },
|
||||
[PROP_RUNNER_SYS_PRIO] = { "runner", "sys_prio", NULL,
|
||||
NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT },
|
||||
[PROP_RUNNER_MIN_PORTS] = { "runner", "min_ports", NULL, 0 },
|
||||
[PROP_RUNNER_AGG_SELECT_POLICY] = { "runner", "agg_select_policy", NULL,
|
||||
{.default_str = NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_DEFAULT} },
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -540,6 +544,8 @@ nm_setting_team_init (NMSettingTeam *setting)
|
||||
NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting);
|
||||
|
||||
priv->runner = g_strdup (NM_SETTING_TEAM_RUNNER_ROUNDROBIN);
|
||||
priv->runner_sys_prio = NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT;
|
||||
priv->runner_tx_balancer_interval = NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -559,7 +565,7 @@ finalize (GObject *object)
|
||||
}
|
||||
|
||||
|
||||
#define JSON_TO_VAL(typ, id) _nm_utils_json_extract_##typ (priv->config, _prop_to_keys[id])
|
||||
#define JSON_TO_VAL(typ, id) _nm_utils_json_extract_##typ (priv->config, _prop_to_keys[id], FALSE)
|
||||
|
||||
static void
|
||||
_align_team_properties (NMSettingTeam *setting)
|
||||
@@ -651,7 +657,9 @@ set_property (GObject *object, guint prop_id,
|
||||
case PROP_RUNNER:
|
||||
g_free (priv->runner);
|
||||
priv->runner = g_value_dup_string (value);
|
||||
if (priv->runner && !nm_streq (priv->runner, "roundrobin"))
|
||||
if ( priv->runner
|
||||
&& !nm_streq (priv->runner,
|
||||
NM_SETTING_TEAM_RUNNER_DEFAULT))
|
||||
align_value = value;
|
||||
align_config = TRUE;
|
||||
break;
|
||||
@@ -687,7 +695,8 @@ set_property (GObject *object, guint prop_id,
|
||||
if (priv->runner_tx_balancer_interval == g_value_get_int (value))
|
||||
break;
|
||||
priv->runner_tx_balancer_interval = g_value_get_int (value);
|
||||
if (priv->runner_tx_balancer_interval)
|
||||
if (priv->runner_tx_balancer_interval !=
|
||||
NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT)
|
||||
align_value = value;
|
||||
align_config = TRUE;
|
||||
break;
|
||||
@@ -711,7 +720,7 @@ set_property (GObject *object, guint prop_id,
|
||||
if (priv->runner_sys_prio == g_value_get_int (value))
|
||||
break;
|
||||
priv->runner_sys_prio = g_value_get_int (value);
|
||||
if (priv->runner_sys_prio)
|
||||
if (priv->runner_sys_prio != NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT)
|
||||
align_value = value;
|
||||
align_config = TRUE;
|
||||
break;
|
||||
|
@@ -70,6 +70,14 @@ G_BEGIN_DECLS
|
||||
#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_COUNT "count"
|
||||
#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_PORT_CONFIG "port_config"
|
||||
|
||||
#define NM_SETTING_TEAM_NOTIFY_PEERS_COUNT_ACTIVEBACKUP_DEFAULT 1
|
||||
#define NM_SETTING_TEAM_NOTIFY_MCAST_COUNT_ACTIVEBACKUP_DEFAULT 1
|
||||
#define NM_SETTING_TEAM_RUNNER_DEFAULT NM_SETTING_TEAM_RUNNER_ROUNDROBIN
|
||||
#define NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_DEFAULT NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_SAME_ALL
|
||||
#define NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT 50
|
||||
#define NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT 255
|
||||
#define NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_DEFAULT NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_LACP_PRIO
|
||||
|
||||
/**
|
||||
* NMSettingTeam:
|
||||
*
|
||||
|
@@ -85,18 +85,24 @@ typedef struct {
|
||||
const char *key1;
|
||||
const char *key2;
|
||||
const char *key3;
|
||||
union {
|
||||
int default_int;
|
||||
gboolean default_bool;
|
||||
const char *default_str;
|
||||
};
|
||||
} _NMUtilsTeamPropertyKeys;
|
||||
|
||||
static inline int
|
||||
_nm_utils_json_extract_int (char *conf,
|
||||
_NMUtilsTeamPropertyKeys key)
|
||||
_NMUtilsTeamPropertyKeys key,
|
||||
gboolean is_port)
|
||||
{
|
||||
gs_free GValue *t_value = NULL;
|
||||
int ret;
|
||||
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, FALSE);
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port);
|
||||
if (!t_value)
|
||||
return 0;
|
||||
return key.default_int;
|
||||
|
||||
ret = g_value_get_int (t_value);
|
||||
g_value_unset (t_value);
|
||||
@@ -105,14 +111,15 @@ _nm_utils_json_extract_int (char *conf,
|
||||
|
||||
static inline gboolean
|
||||
_nm_utils_json_extract_boolean (char *conf,
|
||||
_NMUtilsTeamPropertyKeys key)
|
||||
_NMUtilsTeamPropertyKeys key,
|
||||
gboolean is_port)
|
||||
{
|
||||
gs_free GValue *t_value = NULL;
|
||||
gboolean ret;
|
||||
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, FALSE);
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port);
|
||||
if (!t_value)
|
||||
return FALSE;
|
||||
return key.default_bool;
|
||||
|
||||
ret = g_value_get_boolean (t_value);
|
||||
g_value_unset (t_value);
|
||||
@@ -121,14 +128,15 @@ _nm_utils_json_extract_boolean (char *conf,
|
||||
|
||||
static inline char *
|
||||
_nm_utils_json_extract_string (char *conf,
|
||||
_NMUtilsTeamPropertyKeys key)
|
||||
_NMUtilsTeamPropertyKeys key,
|
||||
gboolean is_port)
|
||||
{
|
||||
gs_free GValue *t_value = NULL;
|
||||
char *ret;
|
||||
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, FALSE);
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port);
|
||||
if (!t_value)
|
||||
return NULL;
|
||||
return g_strdup (key.default_str);
|
||||
|
||||
ret = g_value_dup_string (t_value);
|
||||
g_value_unset (t_value);
|
||||
@@ -137,12 +145,13 @@ _nm_utils_json_extract_string (char *conf,
|
||||
|
||||
static inline char **
|
||||
_nm_utils_json_extract_strv (char *conf,
|
||||
_NMUtilsTeamPropertyKeys key)
|
||||
_NMUtilsTeamPropertyKeys key,
|
||||
gboolean is_port)
|
||||
{
|
||||
gs_free GValue *t_value = NULL;
|
||||
char **ret;
|
||||
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, FALSE);
|
||||
t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port);
|
||||
if (!t_value)
|
||||
return NULL;
|
||||
|
||||
|
@@ -4535,16 +4535,18 @@ _nm_utils_team_config_get (const char *conf,
|
||||
json_object_set_new (json, "runner", json_element);
|
||||
}
|
||||
if (!runner) {
|
||||
runner = "roundrobin";
|
||||
runner = NM_SETTING_TEAM_RUNNER_DEFAULT;
|
||||
json_object_set_new (json_element, "name", json_string (runner));
|
||||
}
|
||||
|
||||
|
||||
if (nm_streq (runner, "activebackup")) {
|
||||
_json_add_object (json, "notify_peers", "count", NULL, json_integer (1));
|
||||
_json_add_object (json, "mcast_rejoin", "count", NULL, json_integer (1));
|
||||
_json_add_object (json, "runner", "hwaddr_policy", NULL, json_string ("same_all"));
|
||||
} else if (nm_streq (runner, "loadbalance") || nm_streq (runner, "lacp")) {
|
||||
if (nm_streq (runner, NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP)) {
|
||||
_json_add_object (json, "notify_peers", "count", NULL,
|
||||
json_integer (NM_SETTING_TEAM_NOTIFY_PEERS_COUNT_ACTIVEBACKUP_DEFAULT));
|
||||
_json_add_object (json, "mcast_rejoin", "count", NULL,
|
||||
json_integer (NM_SETTING_TEAM_NOTIFY_MCAST_COUNT_ACTIVEBACKUP_DEFAULT));
|
||||
} else if ( nm_streq (runner, NM_SETTING_TEAM_RUNNER_LOADBALANCE)
|
||||
|| nm_streq (runner, NM_SETTING_TEAM_RUNNER_LACP)) {
|
||||
json_element = json_array ();
|
||||
json_array_append_new (json_element, json_string ("eth"));
|
||||
json_array_append_new (json_element, json_string ("ipv4"));
|
||||
|
Reference in New Issue
Block a user