diff options
| author | Michael Biebl <biebl@debian.org> | 2020-10-05 22:27:18 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2020-10-05 22:27:18 +0200 |
| commit | aafc1dbe4712c86189bbc1d4d54ad8cb4c69be7e (patch) | |
| tree | a2a9bb4d007339a0b1304540388230ccedac32bd /libnm-core/nm-setting-team-port.c | |
| parent | e7b44ef4c80907346ec7492a09c45277459924fc (diff) | |
New upstream version 1.27.90 upstream/1.27.90
Diffstat (limited to 'libnm-core/nm-setting-team-port.c')
| -rw-r--r-- | libnm-core/nm-setting-team-port.c | 804 |
1 files changed, 416 insertions, 388 deletions
diff --git a/libnm-core/nm-setting-team-port.c b/libnm-core/nm-setting-team-port.c index e256a503..8fff5bdc 100644 --- a/libnm-core/nm-setting-team-port.c +++ b/libnm-core/nm-setting-team-port.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1+ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2017 Red Hat, Inc. * Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us> @@ -27,34 +27,41 @@ /*****************************************************************************/ -static GParamSpec *obj_properties[_NM_TEAM_ATTRIBUTE_PORT_NUM] = { NULL, }; +static GParamSpec *obj_properties[_NM_TEAM_ATTRIBUTE_PORT_NUM] = { + NULL, +}; typedef struct { - NMTeamSetting *team_setting; + NMTeamSetting *team_setting; } NMSettingTeamPortPrivate; -G_DEFINE_TYPE (NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING) +G_DEFINE_TYPE(NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING) -#define NM_SETTING_TEAM_PORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortPrivate)) +#define NM_SETTING_TEAM_PORT_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_TEAM_PORT, NMSettingTeamPortPrivate)) /*****************************************************************************/ NMTeamSetting * -_nm_setting_team_port_get_team_setting (NMSettingTeamPort *setting) +_nm_setting_team_port_get_team_setting(NMSettingTeamPort *setting) { - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting; } /*****************************************************************************/ -#define _maybe_changed(self, changed) \ - nm_team_setting_maybe_changed (NM_SETTING (_NM_ENSURE_TYPE (NMSettingTeamPort *, self)), (const GParamSpec *const*) obj_properties, (changed)) +#define _maybe_changed(self, changed) \ + nm_team_setting_maybe_changed(NM_SETTING(_NM_ENSURE_TYPE(NMSettingTeamPort *, self)), \ + (const GParamSpec *const *) obj_properties, \ + (changed)) #define _maybe_changed_with_assert(self, changed) \ - G_STMT_START { \ - if (!_maybe_changed ((self), (changed))) \ - nm_assert_not_reached (); \ - } G_STMT_END + G_STMT_START \ + { \ + if (!_maybe_changed((self), (changed))) \ + nm_assert_not_reached(); \ + } \ + G_STMT_END /*****************************************************************************/ @@ -65,11 +72,11 @@ _nm_setting_team_port_get_team_setting (NMSettingTeamPort *setting) * Returns: the #NMSettingTeamPort:config property of the setting **/ const char * -nm_setting_team_port_get_config (NMSettingTeamPort *setting) +nm_setting_team_port_get_config(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), NULL); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), NULL); - return nm_team_setting_config_get (NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting); + return nm_team_setting_config_get(NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting); } /** @@ -81,11 +88,11 @@ nm_setting_team_port_get_config (NMSettingTeamPort *setting) * Since: 1.12 **/ int -nm_setting_team_port_get_queue_id (NMSettingTeamPort *setting) +nm_setting_team_port_get_queue_id(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), -1); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), -1); - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting->d.port.queue_id; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting->d.port.queue_id; } /** @@ -97,11 +104,11 @@ nm_setting_team_port_get_queue_id (NMSettingTeamPort *setting) * Since: 1.12 **/ int -nm_setting_team_port_get_prio (NMSettingTeamPort *setting) +nm_setting_team_port_get_prio(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), 0); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), 0); - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting->d.port.prio; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting->d.port.prio; } /** @@ -113,11 +120,11 @@ nm_setting_team_port_get_prio (NMSettingTeamPort *setting) * Since: 1.12 **/ gboolean -nm_setting_team_port_get_sticky (NMSettingTeamPort *setting) +nm_setting_team_port_get_sticky(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), FALSE); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), FALSE); - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting->d.port.sticky; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting->d.port.sticky; } /** @@ -129,11 +136,11 @@ nm_setting_team_port_get_sticky (NMSettingTeamPort *setting) * Since: 1.12 **/ int -nm_setting_team_port_get_lacp_prio (NMSettingTeamPort *setting) +nm_setting_team_port_get_lacp_prio(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), 0); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), 0); - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting->d.port.lacp_prio; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting->d.port.lacp_prio; } /** @@ -145,11 +152,11 @@ nm_setting_team_port_get_lacp_prio (NMSettingTeamPort *setting) * Since: 1.12 **/ int -nm_setting_team_port_get_lacp_key (NMSettingTeamPort *setting) +nm_setting_team_port_get_lacp_key(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), 0); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), 0); - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting->d.port.lacp_key; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting->d.port.lacp_key; } /** @@ -161,11 +168,11 @@ nm_setting_team_port_get_lacp_key (NMSettingTeamPort *setting) * Since: 1.12 **/ guint -nm_setting_team_port_get_num_link_watchers (NMSettingTeamPort *setting) +nm_setting_team_port_get_num_link_watchers(NMSettingTeamPort *setting) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), 0); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), 0); - return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting->d.link_watchers->len; + return NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting->d.link_watchers->len; } /** @@ -178,17 +185,17 @@ nm_setting_team_port_get_num_link_watchers (NMSettingTeamPort *setting) * Since: 1.12 **/ NMTeamLinkWatcher * -nm_setting_team_port_get_link_watcher (NMSettingTeamPort *setting, guint idx) +nm_setting_team_port_get_link_watcher(NMSettingTeamPort *setting, guint idx) { - NMSettingTeamPortPrivate *priv; + NMSettingTeamPortPrivate *priv; - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), NULL); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), NULL); - priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting); + priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(setting); - g_return_val_if_fail (idx < priv->team_setting->d.link_watchers->len, NULL); + g_return_val_if_fail(idx < priv->team_setting->d.link_watchers->len, NULL); - return priv->team_setting->d.link_watchers->pdata[idx]; + return priv->team_setting->d.link_watchers->pdata[idx]; } /** @@ -204,15 +211,15 @@ nm_setting_team_port_get_link_watcher (NMSettingTeamPort *setting, guint idx) * Since: 1.12 **/ gboolean -nm_setting_team_port_add_link_watcher (NMSettingTeamPort *setting, - NMTeamLinkWatcher *link_watcher) +nm_setting_team_port_add_link_watcher(NMSettingTeamPort *setting, NMTeamLinkWatcher *link_watcher) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), FALSE); - g_return_val_if_fail (link_watcher != NULL, FALSE); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), FALSE); + g_return_val_if_fail(link_watcher != NULL, FALSE); - return _maybe_changed (setting, - nm_team_setting_value_link_watchers_add (NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting, - link_watcher)); + return _maybe_changed(setting, + nm_team_setting_value_link_watchers_add( + NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting, + link_watcher)); } /** @@ -225,19 +232,18 @@ nm_setting_team_port_add_link_watcher (NMSettingTeamPort *setting, * Since: 1.12 **/ void -nm_setting_team_port_remove_link_watcher (NMSettingTeamPort *setting, guint idx) +nm_setting_team_port_remove_link_watcher(NMSettingTeamPort *setting, guint idx) { - NMSettingTeamPortPrivate *priv; + NMSettingTeamPortPrivate *priv; - g_return_if_fail (NM_IS_SETTING_TEAM_PORT (setting)); + g_return_if_fail(NM_IS_SETTING_TEAM_PORT(setting)); - priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting); + priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(setting); - g_return_if_fail (idx < priv->team_setting->d.link_watchers->len); + g_return_if_fail(idx < priv->team_setting->d.link_watchers->len); - _maybe_changed_with_assert (setting, - nm_team_setting_value_link_watchers_remove (priv->team_setting, - idx)); + _maybe_changed_with_assert(setting, + nm_team_setting_value_link_watchers_remove(priv->team_setting, idx)); } /** @@ -252,15 +258,16 @@ nm_setting_team_port_remove_link_watcher (NMSettingTeamPort *setting, guint idx) * Since: 1.12 **/ gboolean -nm_setting_team_port_remove_link_watcher_by_value (NMSettingTeamPort *setting, - NMTeamLinkWatcher *link_watcher) +nm_setting_team_port_remove_link_watcher_by_value(NMSettingTeamPort *setting, + NMTeamLinkWatcher *link_watcher) { - g_return_val_if_fail (NM_IS_SETTING_TEAM_PORT (setting), FALSE); - g_return_val_if_fail (link_watcher, FALSE); + g_return_val_if_fail(NM_IS_SETTING_TEAM_PORT(setting), FALSE); + g_return_val_if_fail(link_watcher, FALSE); - return _maybe_changed (setting, - nm_team_setting_value_link_watchers_remove_by_value (NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting, - link_watcher)); + return _maybe_changed(setting, + nm_team_setting_value_link_watchers_remove_by_value( + NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting, + link_watcher)); } /** @@ -272,227 +279,218 @@ nm_setting_team_port_remove_link_watcher_by_value (NMSettingTeamPort *setting, * Since: 1.12 **/ void -nm_setting_team_port_clear_link_watchers (NMSettingTeamPort *setting) +nm_setting_team_port_clear_link_watchers(NMSettingTeamPort *setting) { - g_return_if_fail (NM_IS_SETTING_TEAM_PORT (setting)); + g_return_if_fail(NM_IS_SETTING_TEAM_PORT(setting)); - _maybe_changed (setting, - nm_team_setting_value_link_watchers_set_list (NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting, - NULL, - 0)); + _maybe_changed(setting, + nm_team_setting_value_link_watchers_set_list( + NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting, + NULL, + 0)); } static gboolean -verify (NMSetting *setting, NMConnection *connection, GError **error) +verify(NMSetting *setting, NMConnection *connection, GError **error) { - NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting); - - if (connection) { - NMSettingConnection *s_con; - const char *slave_type; - - s_con = nm_connection_get_setting_connection (connection); - if (!s_con) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_MISSING_SETTING, - _("missing setting")); - g_prefix_error (error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME); - return FALSE; - } - - slave_type = nm_setting_connection_get_slave_type (s_con); - if ( slave_type - && strcmp (slave_type, NM_SETTING_TEAM_SETTING_NAME)) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("A connection with a '%s' setting must have the slave-type set to '%s'. Instead it is '%s'"), - NM_SETTING_TEAM_PORT_SETTING_NAME, - NM_SETTING_TEAM_SETTING_NAME, - slave_type); - g_prefix_error (error, "%s.%s: ", NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_SLAVE_TYPE); - return FALSE; - } - } - - if (!nm_team_setting_verify (priv->team_setting, error)) - return FALSE; - - return TRUE; + NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(setting); + + if (connection) { + NMSettingConnection *s_con; + const char * slave_type; + + s_con = nm_connection_get_setting_connection(connection); + if (!s_con) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_MISSING_SETTING, + _("missing setting")); + g_prefix_error(error, "%s: ", NM_SETTING_CONNECTION_SETTING_NAME); + return FALSE; + } + + slave_type = nm_setting_connection_get_slave_type(s_con); + if (slave_type && strcmp(slave_type, NM_SETTING_TEAM_SETTING_NAME)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("A connection with a '%s' setting must have the slave-type set to '%s'. " + "Instead it is '%s'"), + NM_SETTING_TEAM_PORT_SETTING_NAME, + NM_SETTING_TEAM_SETTING_NAME, + slave_type); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_CONNECTION_SETTING_NAME, + NM_SETTING_CONNECTION_SLAVE_TYPE); + return FALSE; + } + } + + if (!nm_team_setting_verify(priv->team_setting, error)) + return FALSE; + + return TRUE; } static NMTernary -compare_property (const NMSettInfoSetting *sett_info, - guint property_idx, - NMConnection *con_a, - NMSetting *set_a, - NMConnection *con_b, - NMSetting *set_b, - NMSettingCompareFlags flags) +compare_property(const NMSettInfoSetting *sett_info, + guint property_idx, + NMConnection * con_a, + NMSetting * set_a, + NMConnection * con_b, + NMSetting * set_b, + NMSettingCompareFlags flags) { - NMSettingTeamPortPrivate *a_priv; - NMSettingTeamPortPrivate *b_priv; - - if (nm_streq (sett_info->property_infos[property_idx].name, NM_SETTING_TEAM_PORT_LINK_WATCHERS)) { - - if (NM_FLAGS_HAS (flags, NM_SETTING_COMPARE_FLAG_INFERRABLE)) - return NM_TERNARY_DEFAULT; - if (!set_b) - return TRUE; - a_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (set_a); - b_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (set_b); - return nm_team_link_watchers_equal (a_priv->team_setting->d.link_watchers, - b_priv->team_setting->d.link_watchers, - TRUE); - } - - if (nm_streq (sett_info->property_infos[property_idx].name, NM_SETTING_TEAM_PORT_CONFIG)) { - if (set_b) { - if (NM_FLAGS_HAS (flags, NM_SETTING_COMPARE_FLAG_INFERRABLE)) { - /* If we are trying to match a connection in order to assume it (and thus - * @flags contains INFERRABLE), use the "relaxed" matching for team - * configuration. Otherwise, for all other purposes (including connection - * comparison before an update), resort to the default string comparison. */ - return TRUE; - } - - a_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (set_a); - b_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (set_b); - - return nm_streq0 (nm_team_setting_config_get (a_priv->team_setting), - nm_team_setting_config_get (b_priv->team_setting)); - } - - return TRUE; - } - - return NM_SETTING_CLASS (nm_setting_team_port_parent_class)->compare_property (sett_info, - property_idx, - con_a, - set_a, - con_b, - set_b, - flags); + NMSettingTeamPortPrivate *a_priv; + NMSettingTeamPortPrivate *b_priv; + + if (nm_streq(sett_info->property_infos[property_idx].name, + NM_SETTING_TEAM_PORT_LINK_WATCHERS)) { + if (NM_FLAGS_HAS(flags, NM_SETTING_COMPARE_FLAG_INFERRABLE)) + return NM_TERNARY_DEFAULT; + if (!set_b) + return TRUE; + a_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(set_a); + b_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(set_b); + return nm_team_link_watchers_equal(a_priv->team_setting->d.link_watchers, + b_priv->team_setting->d.link_watchers, + TRUE); + } + + if (nm_streq(sett_info->property_infos[property_idx].name, NM_SETTING_TEAM_PORT_CONFIG)) { + if (set_b) { + if (NM_FLAGS_HAS(flags, NM_SETTING_COMPARE_FLAG_INFERRABLE)) { + /* If we are trying to match a connection in order to assume it (and thus + * @flags contains INFERRABLE), use the "relaxed" matching for team + * configuration. Otherwise, for all other purposes (including connection + * comparison before an update), resort to the default string comparison. */ + return TRUE; + } + + a_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(set_a); + b_priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(set_b); + + return nm_streq0(nm_team_setting_config_get(a_priv->team_setting), + nm_team_setting_config_get(b_priv->team_setting)); + } + + return TRUE; + } + + return NM_SETTING_CLASS(nm_setting_team_port_parent_class) + ->compare_property(sett_info, property_idx, con_a, set_a, con_b, set_b, flags); } static void -duplicate_copy_properties (const NMSettInfoSetting *sett_info, - NMSetting *src, - NMSetting *dst) +duplicate_copy_properties(const NMSettInfoSetting *sett_info, NMSetting *src, NMSetting *dst) { - _maybe_changed (NM_SETTING_TEAM_PORT (dst), - nm_team_setting_reset (NM_SETTING_TEAM_PORT_GET_PRIVATE (dst)->team_setting, - NM_SETTING_TEAM_PORT_GET_PRIVATE (src)->team_setting)); + _maybe_changed(NM_SETTING_TEAM_PORT(dst), + nm_team_setting_reset(NM_SETTING_TEAM_PORT_GET_PRIVATE(dst)->team_setting, + NM_SETTING_TEAM_PORT_GET_PRIVATE(src)->team_setting)); } static gboolean -init_from_dbus (NMSetting *setting, - GHashTable *keys, - GVariant *setting_dict, - GVariant *connection_dict, - guint /* NMSettingParseFlags */ parse_flags, - GError **error) +init_from_dbus(NMSetting * setting, + GHashTable * keys, + GVariant * setting_dict, + GVariant * connection_dict, + guint /* NMSettingParseFlags */ parse_flags, + GError ** error) { - guint32 changed = 0; - gboolean success; - - success = nm_team_setting_reset_from_dbus (NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting, - setting_dict, - keys, - &changed, - parse_flags, - error); - _maybe_changed (NM_SETTING_TEAM_PORT (setting), changed); - return success; + guint32 changed = 0; + gboolean success; + + success = + nm_team_setting_reset_from_dbus(NM_SETTING_TEAM_PORT_GET_PRIVATE(setting)->team_setting, + setting_dict, + keys, + &changed, + parse_flags, + error); + _maybe_changed(NM_SETTING_TEAM_PORT(setting), changed); + return success; } /*****************************************************************************/ static void -get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - NMSettingTeamPort *setting = NM_SETTING_TEAM_PORT (object); - NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting); - - switch (prop_id) { - case NM_TEAM_ATTRIBUTE_CONFIG: - g_value_set_string (value, - nm_team_setting_config_get (priv->team_setting)); - break; - case NM_TEAM_ATTRIBUTE_PORT_STICKY: - g_value_set_boolean (value, - nm_team_setting_value_get_bool (priv->team_setting, - prop_id)); - break; - case NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID: - case NM_TEAM_ATTRIBUTE_PORT_PRIO: - case NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO: - case NM_TEAM_ATTRIBUTE_PORT_LACP_KEY: - g_value_set_int (value, - nm_team_setting_value_get_int32 (priv->team_setting, - prop_id)); - break; - case NM_TEAM_ATTRIBUTE_LINK_WATCHERS: - g_value_take_boxed (value, _nm_utils_copy_array (priv->team_setting->d.link_watchers, - (NMUtilsCopyFunc) _nm_team_link_watcher_ref, - (GDestroyNotify) nm_team_link_watcher_unref)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + NMSettingTeamPort * setting = NM_SETTING_TEAM_PORT(object); + NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(setting); + + switch (prop_id) { + case NM_TEAM_ATTRIBUTE_CONFIG: + g_value_set_string(value, nm_team_setting_config_get(priv->team_setting)); + break; + case NM_TEAM_ATTRIBUTE_PORT_STICKY: + g_value_set_boolean(value, nm_team_setting_value_get_bool(priv->team_setting, prop_id)); + break; + case NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID: + case NM_TEAM_ATTRIBUTE_PORT_PRIO: + case NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO: + case NM_TEAM_ATTRIBUTE_PORT_LACP_KEY: + g_value_set_int(value, nm_team_setting_value_get_int32(priv->team_setting, prop_id)); + break; + case NM_TEAM_ATTRIBUTE_LINK_WATCHERS: + g_value_take_boxed(value, + _nm_utils_copy_array(priv->team_setting->d.link_watchers, + (NMUtilsCopyFunc) _nm_team_link_watcher_ref, + (GDestroyNotify) nm_team_link_watcher_unref)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } } static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) +set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - NMSettingTeamPort *setting = NM_SETTING_TEAM_PORT (object); - NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting); - guint32 changed; - const GPtrArray *v_ptrarr; - - switch (prop_id) { - case NM_TEAM_ATTRIBUTE_CONFIG: - changed = nm_team_setting_config_set (priv->team_setting, g_value_get_string (value)); - break; - case NM_TEAM_ATTRIBUTE_PORT_STICKY: - changed = nm_team_setting_value_set_bool (priv->team_setting, - prop_id, - g_value_get_boolean (value)); - break; - case NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID: - case NM_TEAM_ATTRIBUTE_PORT_PRIO: - case NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO: - case NM_TEAM_ATTRIBUTE_PORT_LACP_KEY: - changed = nm_team_setting_value_set_int32 (priv->team_setting, - prop_id, - g_value_get_int (value)); - break; - case NM_TEAM_ATTRIBUTE_LINK_WATCHERS: - v_ptrarr = g_value_get_boxed (value); - changed = nm_team_setting_value_link_watchers_set_list (priv->team_setting, - v_ptrarr ? (const NMTeamLinkWatcher *const*) v_ptrarr->pdata : NULL, - v_ptrarr ? v_ptrarr->len : 0u); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - return; - } - - _maybe_changed (setting, changed & ~(((guint32) 1) << prop_id)); + NMSettingTeamPort * setting = NM_SETTING_TEAM_PORT(object); + NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(setting); + guint32 changed; + const GPtrArray * v_ptrarr; + + switch (prop_id) { + case NM_TEAM_ATTRIBUTE_CONFIG: + changed = nm_team_setting_config_set(priv->team_setting, g_value_get_string(value)); + break; + case NM_TEAM_ATTRIBUTE_PORT_STICKY: + changed = + nm_team_setting_value_set_bool(priv->team_setting, prop_id, g_value_get_boolean(value)); + break; + case NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID: + case NM_TEAM_ATTRIBUTE_PORT_PRIO: + case NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO: + case NM_TEAM_ATTRIBUTE_PORT_LACP_KEY: + changed = + nm_team_setting_value_set_int32(priv->team_setting, prop_id, g_value_get_int(value)); + break; + case NM_TEAM_ATTRIBUTE_LINK_WATCHERS: + v_ptrarr = g_value_get_boxed(value); + changed = nm_team_setting_value_link_watchers_set_list( + priv->team_setting, + v_ptrarr ? (const NMTeamLinkWatcher *const *) v_ptrarr->pdata : NULL, + v_ptrarr ? v_ptrarr->len : 0u); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + return; + } + + _maybe_changed(setting, changed & ~(((guint32) 1) << prop_id)); } /*****************************************************************************/ static void -nm_setting_team_port_init (NMSettingTeamPort *setting) +nm_setting_team_port_init(NMSettingTeamPort *setting) { - NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (setting); + NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(setting); - priv->team_setting = nm_team_setting_new (TRUE, NULL); + priv->team_setting = nm_team_setting_new(TRUE, NULL); } /** @@ -503,155 +501,185 @@ nm_setting_team_port_init (NMSettingTeamPort *setting) * Returns: (transfer full): the new empty #NMSettingTeamPort object **/ NMSetting * -nm_setting_team_port_new (void) +nm_setting_team_port_new(void) { - return (NMSetting *) g_object_new (NM_TYPE_SETTING_TEAM_PORT, NULL); + return (NMSetting *) g_object_new(NM_TYPE_SETTING_TEAM_PORT, NULL); } static void -finalize (GObject *object) +finalize(GObject *object) { - NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE (object); + NMSettingTeamPortPrivate *priv = NM_SETTING_TEAM_PORT_GET_PRIVATE(object); - nm_team_setting_free (priv->team_setting); + nm_team_setting_free(priv->team_setting); - G_OBJECT_CLASS (nm_setting_team_port_parent_class)->finalize (object); + G_OBJECT_CLASS(nm_setting_team_port_parent_class)->finalize(object); } static void -nm_setting_team_port_class_init (NMSettingTeamPortClass *klass) +nm_setting_team_port_class_init(NMSettingTeamPortClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - NMSettingClass *setting_class = NM_SETTING_CLASS (klass); - GArray *properties_override = _nm_sett_info_property_override_create_array (); - - g_type_class_add_private (klass, sizeof (NMSettingTeamPortPrivate)); - - object_class->get_property = get_property; - object_class->set_property = set_property; - object_class->finalize = finalize; - - setting_class->compare_property = compare_property; - setting_class->verify = verify; - setting_class->duplicate_copy_properties = duplicate_copy_properties; - setting_class->init_from_dbus = init_from_dbus; - - /** - * NMSettingTeamPort:config: - * - * The JSON configuration for the team port. The property should contain raw - * JSON configuration data suitable for teamd, because the value is passed - * directly to teamd. If not specified, the default configuration is - * used. See man teamd.conf for the format details. - **/ - /* ---ifcfg-rh--- - * property: config - * variable: TEAM_PORT_CONFIG - * description: Team port configuration in JSON. See man teamd.conf for details. - * ---end--- - */ - obj_properties[NM_TEAM_ATTRIBUTE_CONFIG] = - g_param_spec_string (NM_SETTING_TEAM_PORT_CONFIG, "", "", - NULL, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_CONFIG], &nm_sett_info_propert_type_team_s); - - /** - * NMSettingTeamPort:queue-id: - * - * Corresponds to the teamd ports.PORTIFNAME.queue_id. - * When set to -1 means the parameter is skipped from the json config. - * - * Since: 1.12 - **/ - obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID] = - g_param_spec_int (NM_SETTING_TEAM_PORT_QUEUE_ID, "", "", - G_MININT32, G_MAXINT32, -1, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID], &nm_sett_info_propert_type_team_i); - - /** - * NMSettingTeamPort:prio: - * - * Corresponds to the teamd ports.PORTIFNAME.prio. - * - * Since: 1.12 - **/ - obj_properties[NM_TEAM_ATTRIBUTE_PORT_PRIO] = - g_param_spec_int (NM_SETTING_TEAM_PORT_PRIO, "", "", - G_MININT32, G_MAXINT32, 0, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_PRIO], &nm_sett_info_propert_type_team_i); - - /** - * NMSettingTeamPort:sticky: - * - * Corresponds to the teamd ports.PORTIFNAME.sticky. - * - * Since: 1.12 - **/ - obj_properties[NM_TEAM_ATTRIBUTE_PORT_STICKY] = - g_param_spec_boolean (NM_SETTING_TEAM_PORT_STICKY, "", "", - FALSE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_STICKY], &nm_sett_info_propert_type_team_b); - - /** - * NMSettingTeamPort:lacp-prio: - * - * Corresponds to the teamd ports.PORTIFNAME.lacp_prio. - * - * Since: 1.12 - **/ - obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO] = - g_param_spec_int (NM_SETTING_TEAM_PORT_LACP_PRIO, "", "", - G_MININT32, G_MAXINT32, -1, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO], &nm_sett_info_propert_type_team_i); - - /** - * NMSettingTeamPort:lacp-key: - * - * Corresponds to the teamd ports.PORTIFNAME.lacp_key. - * - * Since: 1.12 - **/ - obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY] = - g_param_spec_int (NM_SETTING_TEAM_PORT_LACP_KEY, "", "", - G_MININT32, G_MAXINT32, -1, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY], &nm_sett_info_propert_type_team_i); - - /** - * NMSettingTeamPort:link-watchers: (type GPtrArray(NMTeamLinkWatcher)) - * - * Link watchers configuration for the connection: each link watcher is - * defined by a dictionary, whose keys depend upon the selected link - * watcher. Available link watchers are 'ethtool', 'nsna_ping' and - * 'arp_ping' and it is specified in the dictionary with the key 'name'. - * Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; - * nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; - * arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', - * 'validate-inactive', 'send-always'. See teamd.conf man for more details. - * - * Since: 1.12 - **/ - obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS] = - g_param_spec_boxed (NM_SETTING_TEAM_PORT_LINK_WATCHERS, "", "", - G_TYPE_PTR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - _nm_properties_override_gobj (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS], &nm_sett_info_propert_type_team_link_watchers); - - g_object_class_install_properties (object_class, G_N_ELEMENTS (obj_properties), obj_properties); - - _nm_setting_class_commit_full (setting_class, NM_META_SETTING_TYPE_TEAM_PORT, - NULL, properties_override); + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMSettingClass *setting_class = NM_SETTING_CLASS(klass); + GArray * properties_override = _nm_sett_info_property_override_create_array(); + + g_type_class_add_private(klass, sizeof(NMSettingTeamPortPrivate)); + + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + setting_class->compare_property = compare_property; + setting_class->verify = verify; + setting_class->duplicate_copy_properties = duplicate_copy_properties; + setting_class->init_from_dbus = init_from_dbus; + + /** + * NMSettingTeamPort:config: + * + * The JSON configuration for the team port. The property should contain raw + * JSON configuration data suitable for teamd, because the value is passed + * directly to teamd. If not specified, the default configuration is + * used. See man teamd.conf for the format details. + **/ + /* ---ifcfg-rh--- + * property: config + * variable: TEAM_PORT_CONFIG + * description: Team port configuration in JSON. See man teamd.conf for details. + * ---end--- + */ + obj_properties[NM_TEAM_ATTRIBUTE_CONFIG] = g_param_spec_string( + NM_SETTING_TEAM_PORT_CONFIG, + "", + "", + NULL, + G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_CONFIG], + &nm_sett_info_propert_type_team_s); + + /** + * NMSettingTeamPort:queue-id: + * + * Corresponds to the teamd ports.PORTIFNAME.queue_id. + * When set to -1 means the parameter is skipped from the json config. + * + * Since: 1.12 + **/ + obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID] = + g_param_spec_int(NM_SETTING_TEAM_PORT_QUEUE_ID, + "", + "", + G_MININT32, + G_MAXINT32, + -1, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID], + &nm_sett_info_propert_type_team_i); + + /** + * NMSettingTeamPort:prio: + * + * Corresponds to the teamd ports.PORTIFNAME.prio. + * + * Since: 1.12 + **/ + obj_properties[NM_TEAM_ATTRIBUTE_PORT_PRIO] = + g_param_spec_int(NM_SETTING_TEAM_PORT_PRIO, + "", + "", + G_MININT32, + G_MAXINT32, + 0, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_PORT_PRIO], + &nm_sett_info_propert_type_team_i); + + /** + * NMSettingTeamPort:sticky: + * + * Corresponds to the teamd ports.PORTIFNAME.sticky. + * + * Since: 1.12 + **/ + obj_properties[NM_TEAM_ATTRIBUTE_PORT_STICKY] = + g_param_spec_boolean(NM_SETTING_TEAM_PORT_STICKY, + "", + "", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_PORT_STICKY], + &nm_sett_info_propert_type_team_b); + + /** + * NMSettingTeamPort:lacp-prio: + * + * Corresponds to the teamd ports.PORTIFNAME.lacp_prio. + * + * Since: 1.12 + **/ + obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO] = + g_param_spec_int(NM_SETTING_TEAM_PORT_LACP_PRIO, + "", + "", + G_MININT32, + G_MAXINT32, + -1, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO], + &nm_sett_info_propert_type_team_i); + + /** + * NMSettingTeamPort:lacp-key: + * + * Corresponds to the teamd ports.PORTIFNAME.lacp_key. + * + * Since: 1.12 + **/ + obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY] = + g_param_spec_int(NM_SETTING_TEAM_PORT_LACP_KEY, + "", + "", + G_MININT32, + G_MAXINT32, + -1, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY], + &nm_sett_info_propert_type_team_i); + + /** + * NMSettingTeamPort:link-watchers: (type GPtrArray(NMTeamLinkWatcher)) + * + * Link watchers configuration for the connection: each link watcher is + * defined by a dictionary, whose keys depend upon the selected link + * watcher. Available link watchers are 'ethtool', 'nsna_ping' and + * 'arp_ping' and it is specified in the dictionary with the key 'name'. + * Available keys are: ethtool: 'delay-up', 'delay-down', 'init-wait'; + * nsna_ping: 'init-wait', 'interval', 'missed-max', 'target-host'; + * arp_ping: all the ones in nsna_ping and 'source-host', 'validate-active', + * 'validate-inactive', 'send-always'. See teamd.conf man for more details. + * + * Since: 1.12 + **/ + obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS] = + g_param_spec_boxed(NM_SETTING_TEAM_PORT_LINK_WATCHERS, + "", + "", + G_TYPE_PTR_ARRAY, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + _nm_properties_override_gobj(properties_override, + obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS], + &nm_sett_info_propert_type_team_link_watchers); + + g_object_class_install_properties(object_class, G_N_ELEMENTS(obj_properties), obj_properties); + + _nm_setting_class_commit_full(setting_class, + NM_META_SETTING_TYPE_TEAM_PORT, + NULL, + properties_override); } |