summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Giudici <fgiudici@redhat.com>2017-11-08 18:10:27 +0100
committerFrancesco Giudici <fgiudici@redhat.com>2017-11-09 17:56:15 +0100
commit3e34e404b475cd44fea7448e9b2b5176de709ef8 (patch)
tree2de98b1b23e50c6121716324f61106f4bba264ad
parent81527f1a092b97499ed924e583e1576433a7aa4e (diff)
downloadNetworkManager-fg/team_abstraction_rh1398925.tar.gz
libnm-core: enforce team and team-port defaultsfg/team_abstraction_rh1398925
Rework a bit the way default values are check, set and aligned.
-rw-r--r--libnm-core/nm-setting-team-port.c26
-rw-r--r--libnm-core/nm-setting-team-port.h3
-rw-r--r--libnm-core/nm-setting-team.c49
-rw-r--r--libnm-core/nm-setting-team.h8
-rw-r--r--libnm-core/nm-utils-private.h31
-rw-r--r--libnm-core/nm-utils.c14
6 files changed, 81 insertions, 50 deletions
diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c
index 09b0ca8036..9886cdc91e 100644
--- a/libnm-core/nm-setting-team-port.c
+++ b/libnm-core/nm-setting-team-port.c
@@ -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;
diff --git a/libnm-core/nm-setting-team-port.h b/libnm-core/nm-setting-team-port.h
index fbb772d1a1..2643daba3c 100644
--- a/libnm-core/nm-setting-team-port.h
+++ b/libnm-core/nm-setting-team-port.h
@@ -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:
*
diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c
index efeab675f0..884c370716 100644
--- a/libnm-core/nm-setting-team.c
+++ b/libnm-core/nm-setting-team.c
@@ -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;
diff --git a/libnm-core/nm-setting-team.h b/libnm-core/nm-setting-team.h
index 80ec5f1569..18811374d0 100644
--- a/libnm-core/nm-setting-team.h
+++ b/libnm-core/nm-setting-team.h
@@ -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:
*
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h
index aaf80363f5..6b8d58726a 100644
--- a/libnm-core/nm-utils-private.h
+++ b/libnm-core/nm-utils-private.h
@@ -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;
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
index ec7a80f958..6c8436cc5d 100644
--- a/libnm-core/nm-utils.c
+++ b/libnm-core/nm-utils.c
@@ -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"));