summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Giudici <fgiudici@redhat.com>2017-11-15 18:23:57 +0100
committerFrancesco Giudici <fgiudici@redhat.com>2017-12-08 00:46:27 +0100
commitfdd41852ee6688170c554eb2d76cbbd330f40f1d (patch)
treed1b1c68d2f11a20b9909fc37e04f2f3356df7201
parentf0ae71e7d687a52058f0c964047da6d8602e68e8 (diff)
downloadNetworkManager-fdd41852ee6688170c554eb2d76cbbd330f40f1d.tar.gz
libnm-core: json: share code to load defaults in team(-port).config
Move code from _nm_utils_team_config_get to the brand new _json_team_add_defaults function without any change. Then remove the duplicated code from _nm_utils_team_config_equal and leverage the new function. Here the only functional change is that the defaults for "notify_peers" and "mcast_rejoin" for the "activebackup" runner are added (the only case in which their default values are different than 0).
-rw-r--r--libnm-core/nm-utils.c108
1 files changed, 50 insertions, 58 deletions
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
index 326c015bfa..8ca6ac74c7 100644
--- a/libnm-core/nm-utils.c
+++ b/libnm-core/nm-utils.c
@@ -4396,6 +4396,50 @@ _json_del_object (json_t *json,
return TRUE;
}
+/* Adds in place to json the defaults for missing properties */
+static void
+_json_team_add_defaults (json_t *json,
+ gboolean port_config)
+{
+ json_t *json_element;
+ const char *runner = NULL;
+
+ if (port_config) {
+ _json_add_object (json, "link_watch", "name", NULL,
+ json_string (NM_TEAM_LINK_WATCHER_ETHTOOL));
+ } else {
+ /* Retrieve runner or add default one */
+ json_element = json_object_get (json, "runner");
+ if (json_element) {
+ runner = json_string_value (json_object_get (json_element, "name"));
+ } else {
+ json_element = json_object ();
+ json_object_set_new (json, "runner", json_element);
+ }
+ if (!runner) {
+ runner = NM_SETTING_TEAM_RUNNER_DEFAULT;
+ json_object_set_new (json_element, "name", json_string (runner));
+ }
+
+
+ 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"));
+ json_array_append_new (json_element, json_string ("ipv6"));
+ _json_add_object (json, "runner", "tx_hash", NULL, json_element);
+ }
+ }
+}
+
+
+
static NMTeamLinkWatcher *
_nm_utils_team_link_watcher_from_json (json_t *json_element)
{
@@ -4568,9 +4612,8 @@ _nm_utils_team_config_equal (const char *conf1,
gboolean port_config)
{
json_t *json1 = NULL, *json2 = NULL, *json;
- json_t *array, *name;
gs_free char *dump1 = NULL, *dump2 = NULL;
- json_t *value, *property;
+ json_t *value;
json_error_t jerror;
const char *key;
gboolean ret;
@@ -4594,33 +4637,8 @@ _nm_utils_team_config_equal (const char *conf1,
* configuration. Add them with the default value if necessary, depending
* on the configuration type.
*/
- for (i = 0, json = json1; i < 2; i++, json = json2) {
- if (port_config) {
- property = json_object_get (json, "link_watch");
- if (!property) {
- property = json_object ();
- json_object_set_new (property, "name", json_string ("ethtool"));
- json_object_set_new (json, "link_watch", property);
- }
- } else {
- property = json_object_get (json, "runner");
- if (!property) {
- property = json_object ();
- json_object_set_new (property, "name", json_string ("roundrobin"));
- json_object_set_new (json, "runner", property);
- } else if ( (name = json_object_get (property, "name"))
- && NM_IN_STRSET (json_string_value (name), "lacp", "loadbalance")) {
- /* Add default tx_hash when missing */
- if (!json_object_get (property, "tx_hash")) {
- array = json_array ();
- json_array_append_new (array, json_string ("eth"));
- json_array_append_new (array, json_string ("ipv4"));
- json_array_append_new (array, json_string ("ipv6"));
- json_object_set_new (property, "tx_hash", array);
- }
- }
- }
- }
+ for (i = 0, json = json1; i < 2; i++, json = json2)
+ _json_team_add_defaults (json, port_config);
/* Only consider a given subset of nodes, others can change depending on
* current state */
@@ -4657,7 +4675,6 @@ _nm_utils_team_config_get (const char *conf,
json_t *json_element;
GValue *value = NULL;
json_error_t jerror;
- const char *runner = NULL;
if (!key)
return NULL;
@@ -4677,35 +4694,10 @@ _nm_utils_team_config_get (const char *conf,
* the link-watchers property only here: and for this compound property it is
* fine to show the default value only if explicitly set.
*/
- if (!port_config) {
- /* Retrieve runner or add default one */
- json_element = json_object_get (json, "runner");
- if (json_element) {
- runner = json_string_value (json_object_get (json_element, "name"));
- } else {
- json_element = json_object ();
- json_object_set_new (json, "runner", json_element);
- }
- if (!runner) {
- runner = NM_SETTING_TEAM_RUNNER_DEFAULT;
- json_object_set_new (json_element, "name", json_string (runner));
- }
+ if (!port_config)
+ _json_team_add_defaults (json, port_config);
-
- 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"));
- json_array_append_new (json_element, json_string ("ipv6"));
- _json_add_object (json, "runner", "tx_hash", NULL, json_element);
- }
- }
+ /* Now search the property to retrieve */
json_element = json_object_get (json, key);
if (json_element && key2)
json_element = json_object_get (json_element, key2);