summary refs log tree commit diff
path: root/libnm-core/nm-utils-private.h
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-core/nm-utils-private.h')
-rw-r--r--libnm-core/nm-utils-private.h120
1 files changed, 119 insertions, 1 deletions
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h
index 03c87907..c76b3200 100644
--- a/libnm-core/nm-utils-private.h
+++ b/libnm-core/nm-utils-private.h
@@ -15,7 +15,7 @@
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA 02110-1301 USA.
  *
- * Copyright 2005 - 2014 Red Hat, Inc.
+ * Copyright 2005 - 2017 Red Hat, Inc.
  */
 
 #ifndef __NM_UTILS_PRIVATE_H__
@@ -33,6 +33,8 @@ struct _NMVariantAttributeSpec {
 	const GVariantType *type;
 	bool v4:1;
 	bool v6:1;
+	bool no_value:1;
+	bool consumes_rest:1;
 	char str_type;
 };
 
@@ -78,4 +80,120 @@ void        _nm_utils_bytes_from_dbus   (GVariant *dbus_value,
 
 char *      _nm_utils_hwaddr_canonical_or_invalid (const char *mac, gssize length);
 
+GPtrArray * _nm_utils_team_link_watchers_from_variant (GVariant *value);
+GVariant *  _nm_utils_team_link_watchers_to_variant (GPtrArray *link_watchers);
+
+/* JSON to GValue conversion macros */
+
+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,
+                            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, is_port);
+	if (!t_value)
+		return key.default_int;
+
+	ret = g_value_get_int (t_value);
+	g_value_unset (t_value);
+	return ret;
+}
+
+static inline gboolean
+_nm_utils_json_extract_boolean (char *conf,
+                                _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, is_port);
+	if (!t_value)
+		return key.default_bool;
+
+	ret = g_value_get_boolean (t_value);
+	g_value_unset (t_value);
+	return ret;
+}
+
+static inline char *
+_nm_utils_json_extract_string (char *conf,
+                               _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, is_port);
+	if (!t_value)
+		return g_strdup (key.default_str);
+
+	ret = g_value_dup_string (t_value);
+	g_value_unset (t_value);
+	return ret;
+}
+
+static inline char **
+_nm_utils_json_extract_strv (char *conf,
+                             _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, is_port);
+	if (!t_value)
+		return NULL;
+
+	ret = g_strdupv (g_value_get_boxed (t_value));
+	g_value_unset (t_value);
+	return ret;
+}
+
+static inline GPtrArray *
+_nm_utils_json_extract_ptr_array (char *conf,
+                             _NMUtilsTeamPropertyKeys key,
+                             gboolean is_port)
+{
+	gs_free GValue *t_value = NULL;
+	GPtrArray *data, *ret;
+	guint i;
+
+	ret = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
+	t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port);
+	if (!t_value)
+		return ret;
+
+	data = g_value_get_boxed (t_value);
+	if (!data)
+		return ret;
+
+	for (i = 0; i < data->len; i++)
+		g_ptr_array_add (ret, nm_team_link_watcher_dup (data->pdata[i]));
+	g_value_unset (t_value);
+	return ret;
+}
+
+static inline void
+_nm_utils_json_append_gvalue (char **conf,
+                              _NMUtilsTeamPropertyKeys key,
+                              const GValue *val)
+{
+	_nm_utils_team_config_set (conf, key.key1, key.key2, key.key3, val);
+}
+
 #endif