diff options
Diffstat (limited to 'libnm-core/nm-setting-team.c')
-rw-r--r-- | libnm-core/nm-setting-team.c | 694 |
1 files changed, 218 insertions, 476 deletions
diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c index 663d7d819c..01a1a12232 100644 --- a/libnm-core/nm-setting-team.c +++ b/libnm-core/nm-setting-team.c @@ -27,6 +27,7 @@ #include "nm-utils.h" #include "nm-utils-private.h" +#include "nm-team-utils.h" #include "nm-connection-private.h" /** @@ -721,61 +722,10 @@ nm_team_link_watcher_get_flags (const NMTeamLinkWatcher *watcher) /*****************************************************************************/ -NM_GOBJECT_PROPERTIES_DEFINE (NMSettingTeam, - PROP_CONFIG, - PROP_NOTIFY_PEERS_COUNT, - PROP_NOTIFY_PEERS_INTERVAL, - PROP_MCAST_REJOIN_COUNT, - PROP_MCAST_REJOIN_INTERVAL, - PROP_RUNNER, - PROP_RUNNER_HWADDR_POLICY, - PROP_RUNNER_TX_HASH, - PROP_RUNNER_TX_BALANCER, - PROP_RUNNER_TX_BALANCER_INTERVAL, - PROP_RUNNER_ACTIVE, - PROP_RUNNER_FAST_RATE, - PROP_RUNNER_SYS_PRIO, - PROP_RUNNER_MIN_PORTS, - PROP_RUNNER_AGG_SELECT_POLICY, - PROP_LINK_WATCHERS, -); - -static const _NMUtilsTeamPropertyKeys _prop_to_keys[_PROPERTY_ENUMS_LAST] = { - [PROP_CONFIG] = { }, - [PROP_NOTIFY_PEERS_COUNT] = { .key1 = "notify_peers", .key2 = "count", }, - [PROP_NOTIFY_PEERS_INTERVAL] = { .key1 = "notify_peers", .key2 = "interval", }, - [PROP_MCAST_REJOIN_COUNT] = { .key1 = "mcast_rejoin", .key2 = "count", }, - [PROP_MCAST_REJOIN_INTERVAL] = { .key1 = "mcast_rejoin", .key2 = "interval", }, - [PROP_RUNNER] = { .key1 = "runner", .key2 = "name", .default_str = NM_SETTING_TEAM_RUNNER_DEFAULT, }, - [PROP_RUNNER_HWADDR_POLICY] = { .key1 = "runner", .key2 = "hwaddr_policy", }, - [PROP_RUNNER_TX_HASH] = { .key1 = "runner", .key2 = "tx_hash", }, - [PROP_RUNNER_TX_BALANCER] = { .key1 = "runner", .key2 = "tx_balancer", .key3 = "name", }, - [PROP_RUNNER_TX_BALANCER_INTERVAL] = { .key1 = "runner", .key2 = "tx_balancer", .key3 = "balancing_interval", .default_int = -1 }, - [PROP_RUNNER_ACTIVE] = { .key1 = "runner", .key2 = "active", }, - [PROP_RUNNER_FAST_RATE] = { .key1 = "runner", .key2 = "fast_rate", }, - [PROP_RUNNER_SYS_PRIO] = { .key1 = "runner", .key2 = "sys_prio", .default_int = -1, }, - [PROP_RUNNER_MIN_PORTS] = { .key1 = "runner", .key2 = "min_ports", .default_int = -1, }, - [PROP_RUNNER_AGG_SELECT_POLICY] = { .key1 = "runner", .key2 = "agg_select_policy", }, - [PROP_LINK_WATCHERS] = { .key1 = "link_watch", }, -}; +static GParamSpec *obj_properties[_NM_TEAM_ATTRIBUTE_MASTER_NUM] = { NULL, }; typedef struct { - char *config; - int notify_peers_count; - int notify_peers_interval; - int mcast_rejoin_count; - int mcast_rejoin_interval; - char *runner; - char *runner_hwaddr_policy; - GPtrArray *runner_tx_hash; - char *runner_tx_balancer; - int runner_tx_balancer_interval; - gboolean runner_active; - gboolean runner_fast_rate; - int runner_sys_prio; - int runner_min_ports; - char *runner_agg_select_policy; - GPtrArray *link_watchers; /* Array of NMTeamLinkWatcher */ + NMTeamSetting *team_setting; } NMSettingTeamPrivate; G_DEFINE_TYPE (NMSettingTeam, nm_setting_team, NM_TYPE_SETTING) @@ -784,6 +734,15 @@ G_DEFINE_TYPE (NMSettingTeam, nm_setting_team, NM_TYPE_SETTING) /*****************************************************************************/ +#define _maybe_changed(self, changed) \ + nm_team_setting_maybe_changed (NM_SETTING (_NM_ENSURE_TYPE (NMSettingTeam *, 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 + /** * nm_setting_team_get_config: * @setting: the #NMSettingTeam @@ -795,7 +754,7 @@ nm_setting_team_get_config (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->config; + return nm_team_setting_config_get (NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting); } /** @@ -811,7 +770,7 @@ nm_setting_team_get_notify_peers_count (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->notify_peers_count; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.notify_peers_count; } /** @@ -827,7 +786,7 @@ nm_setting_team_get_notify_peers_interval (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->notify_peers_interval; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.notify_peers_interval; } /** @@ -843,7 +802,7 @@ nm_setting_team_get_mcast_rejoin_count (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->mcast_rejoin_count; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.mcast_rejoin_count; } /** @@ -859,7 +818,7 @@ nm_setting_team_get_mcast_rejoin_interval (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->mcast_rejoin_interval; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.mcast_rejoin_interval; } /** @@ -875,7 +834,7 @@ nm_setting_team_get_runner (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner; } /** @@ -891,7 +850,7 @@ nm_setting_team_get_runner_hwaddr_policy (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_hwaddr_policy; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_hwaddr_policy; } /** @@ -907,7 +866,7 @@ nm_setting_team_get_runner_tx_balancer (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_tx_balancer; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_tx_balancer; } /** @@ -923,7 +882,7 @@ nm_setting_team_get_runner_tx_balancer_interval (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_tx_balancer_interval; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_tx_balancer_interval; } /** @@ -939,7 +898,7 @@ nm_setting_team_get_runner_active (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), FALSE); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_active; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_active; } /** @@ -955,7 +914,7 @@ nm_setting_team_get_runner_fast_rate (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), FALSE); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_fast_rate; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_fast_rate; } /** @@ -971,7 +930,7 @@ nm_setting_team_get_runner_sys_prio (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_sys_prio; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_sys_prio; } /** @@ -987,7 +946,7 @@ nm_setting_team_get_runner_min_ports (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_min_ports; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_min_ports; } /** @@ -1003,7 +962,7 @@ nm_setting_team_get_runner_agg_select_policy (NMSettingTeam *setting) { g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - return NM_SETTING_TEAM_GET_PRIVATE (setting)->runner_agg_select_policy; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_agg_select_policy; } /** @@ -1019,19 +978,22 @@ nm_setting_team_get_runner_agg_select_policy (NMSettingTeam *setting) **/ gboolean nm_setting_team_remove_runner_tx_hash_by_value (NMSettingTeam *setting, - const char *txhash) + const char *txhash) { NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + const GPtrArray *arr; guint i; g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), FALSE); g_return_val_if_fail (txhash != NULL, FALSE); - if (priv->runner_tx_hash) { - for (i = 0; i < priv->runner_tx_hash->len; i++) { - if (nm_streq (txhash, priv->runner_tx_hash->pdata[i])) { - g_ptr_array_remove_index (priv->runner_tx_hash, i); - _notify (setting, PROP_RUNNER_TX_HASH); + arr = priv->team_setting->d.master.runner_tx_hash; + if (arr) { + for (i = 0; i < arr->len; i++) { + if (nm_streq (txhash, arr->pdata[i])) { + _maybe_changed_with_assert (setting, + nm_team_setting_value_master_runner_tx_hash_remove (priv->team_setting, + i)); return TRUE; } } @@ -1050,11 +1012,12 @@ nm_setting_team_remove_runner_tx_hash_by_value (NMSettingTeam *setting, guint nm_setting_team_get_num_runner_tx_hash (NMSettingTeam *setting) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + const GPtrArray *arr; g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return priv->runner_tx_hash ? priv->runner_tx_hash->len : 0; + arr = NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_tx_hash; + return arr ? arr->len : 0u; } /** @@ -1069,13 +1032,16 @@ nm_setting_team_get_num_runner_tx_hash (NMSettingTeam *setting) const char * nm_setting_team_get_runner_tx_hash (NMSettingTeam *setting, guint idx) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + const GPtrArray *arr; g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - g_return_val_if_fail (priv->runner_tx_hash, NULL); - g_return_val_if_fail (idx < priv->runner_tx_hash->len, NULL); - return priv->runner_tx_hash->pdata[idx]; + arr = NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.master.runner_tx_hash; + + g_return_val_if_fail (arr, NULL); + g_return_val_if_fail (idx < arr->len, NULL); + + return arr->pdata[idx]; } /** @@ -1090,14 +1056,18 @@ nm_setting_team_get_runner_tx_hash (NMSettingTeam *setting, guint idx) void nm_setting_team_remove_runner_tx_hash (NMSettingTeam *setting, guint idx) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + NMSettingTeamPrivate *priv; g_return_if_fail (NM_IS_SETTING_TEAM (setting)); - g_return_if_fail (priv->runner_tx_hash); - g_return_if_fail (idx < priv->runner_tx_hash->len); - g_ptr_array_remove_index (priv->runner_tx_hash, idx); - _notify (setting, PROP_RUNNER_TX_HASH); + priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + + g_return_if_fail (priv->team_setting->d.master.runner_tx_hash); + g_return_if_fail (idx < priv->team_setting->d.master.runner_tx_hash->len); + + _maybe_changed_with_assert (setting, + nm_team_setting_value_master_runner_tx_hash_remove (priv->team_setting, + idx)); } /** @@ -1115,23 +1085,12 @@ nm_setting_team_remove_runner_tx_hash (NMSettingTeam *setting, guint idx) gboolean nm_setting_team_add_runner_tx_hash (NMSettingTeam *setting, const char *txhash) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - guint i; - g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), FALSE); - g_return_val_if_fail (txhash != NULL, FALSE); - g_return_val_if_fail (txhash[0] != '\0', FALSE); + g_return_val_if_fail (txhash, FALSE); - if (!priv->runner_tx_hash) - priv->runner_tx_hash = g_ptr_array_new_with_free_func (g_free); - for (i = 0; i < priv->runner_tx_hash->len; i++) { - if (nm_streq (txhash, priv->runner_tx_hash->pdata[i])) - return FALSE; - } - - g_ptr_array_add (priv->runner_tx_hash, g_strdup (txhash)); - _notify (setting, PROP_RUNNER_TX_HASH); - return TRUE; + return _maybe_changed (setting, + nm_team_setting_value_master_runner_tx_hash_add (NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting, + txhash)); } /** @@ -1145,11 +1104,9 @@ nm_setting_team_add_runner_tx_hash (NMSettingTeam *setting, const char *txhash) guint nm_setting_team_get_num_link_watchers (NMSettingTeam *setting) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), 0); - return priv->link_watchers->len; + return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.link_watchers->len; } /** @@ -1164,12 +1121,15 @@ nm_setting_team_get_num_link_watchers (NMSettingTeam *setting) NMTeamLinkWatcher * nm_setting_team_get_link_watcher (NMSettingTeam *setting, guint idx) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + const GPtrArray *arr; g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), NULL); - g_return_val_if_fail (idx < priv->link_watchers->len, NULL); - return priv->link_watchers->pdata[idx]; + arr = NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting->d.link_watchers; + + g_return_val_if_fail (idx < arr->len, NULL); + + return arr->pdata[idx]; } /** @@ -1188,20 +1148,12 @@ gboolean nm_setting_team_add_link_watcher (NMSettingTeam *setting, NMTeamLinkWatcher *link_watcher) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - guint i; - g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), FALSE); g_return_val_if_fail (link_watcher != NULL, FALSE); - for (i = 0; i < priv->link_watchers->len; i++) { - if (nm_team_link_watcher_equal (priv->link_watchers->pdata[i], link_watcher)) - return FALSE; - } - - g_ptr_array_add (priv->link_watchers, _nm_team_link_watcher_ref (link_watcher)); - _notify (setting, PROP_LINK_WATCHERS); - return TRUE; + return _maybe_changed (setting, + nm_team_setting_value_link_watchers_add (NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting, + link_watcher)); } /** @@ -1216,13 +1168,17 @@ nm_setting_team_add_link_watcher (NMSettingTeam *setting, void nm_setting_team_remove_link_watcher (NMSettingTeam *setting, guint idx) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + NMSettingTeamPrivate *priv; g_return_if_fail (NM_IS_SETTING_TEAM (setting)); - g_return_if_fail (idx < priv->link_watchers->len); - g_ptr_array_remove_index (priv->link_watchers, idx); - _notify (setting, PROP_LINK_WATCHERS); + priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + + 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)); } /** @@ -1240,19 +1196,12 @@ gboolean nm_setting_team_remove_link_watcher_by_value (NMSettingTeam *setting, NMTeamLinkWatcher *link_watcher) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - guint i; - g_return_val_if_fail (NM_IS_SETTING_TEAM (setting), FALSE); + g_return_val_if_fail (link_watcher, FALSE); - for (i = 0; i < priv->link_watchers->len; i++) { - if (nm_team_link_watcher_equal (priv->link_watchers->pdata[i], link_watcher)) { - g_ptr_array_remove_index (priv->link_watchers, i); - _notify (setting, PROP_LINK_WATCHERS); - return TRUE; - } - } - return FALSE; + return _maybe_changed (setting, + nm_team_setting_value_link_watchers_remove_by_value (NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting, + link_watcher)); } /** @@ -1264,15 +1213,14 @@ nm_setting_team_remove_link_watcher_by_value (NMSettingTeam *setting, * Since: 1.12 **/ void -nm_setting_team_clear_link_watchers (NMSettingTeam *setting) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - +nm_setting_team_clear_link_watchers (NMSettingTeam *setting) +{ g_return_if_fail (NM_IS_SETTING_TEAM (setting)); - if (priv->link_watchers->len != 0) { - g_ptr_array_set_size (priv->link_watchers, 0); - _notify (setting, PROP_LINK_WATCHERS); - } + _maybe_changed (setting, + nm_team_setting_value_link_watchers_set_list (NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting, + NULL, + 0)); } static GVariant * @@ -1292,90 +1240,12 @@ static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - guint i; if (!_nm_connection_verify_required_interface_name (connection, error)) return FALSE; - if (priv->config) { - if (strlen (priv->config) > 1*1024*1024) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("team config exceeds size limit")); - g_prefix_error (error, - "%s.%s: ", - NM_SETTING_TEAM_SETTING_NAME, - NM_SETTING_TEAM_CONFIG); - return FALSE; - } - - if (!nm_utils_is_json_object (priv->config, error)) { - g_prefix_error (error, - "%s.%s: ", - NM_SETTING_TEAM_SETTING_NAME, - NM_SETTING_TEAM_CONFIG); - /* We treat an empty string as no config for compatibility. */ - return *priv->config ? FALSE : NM_SETTING_VERIFY_NORMALIZABLE; - } - } - - if ( priv->runner - && g_ascii_strcasecmp (priv->runner, NM_SETTING_TEAM_RUNNER_BROADCAST) - && g_ascii_strcasecmp (priv->runner, NM_SETTING_TEAM_RUNNER_ROUNDROBIN) - && g_ascii_strcasecmp (priv->runner, NM_SETTING_TEAM_RUNNER_RANDOM) - && g_ascii_strcasecmp (priv->runner, NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP) - && g_ascii_strcasecmp (priv->runner, NM_SETTING_TEAM_RUNNER_LOADBALANCE) - && g_ascii_strcasecmp (priv->runner, NM_SETTING_TEAM_RUNNER_LACP)) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING, - _("invalid runner \"%s\""), priv->runner); - - g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_TEAM_RUNNER); + if (!nm_team_setting_verify (priv->team_setting, error)) return FALSE; - } - - /* Validate link watchers */ - for (i = 0; i < priv->link_watchers->len; i++) { - NMTeamLinkWatcher *link_watcher = priv->link_watchers->pdata[i]; - const char *name = nm_team_link_watcher_get_name (link_watcher); - - if (!name) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING, - _("missing link watcher name")); - g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), - NM_SETTING_TEAM_LINK_WATCHERS); - return FALSE; - } - if (!NM_IN_STRSET (name, - NM_TEAM_LINK_WATCHER_ETHTOOL, - NM_TEAM_LINK_WATCHER_ARP_PING, - NM_TEAM_LINK_WATCHER_NSNA_PING)) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING, - _("unknown link watcher \"%s\""), name); - g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), - NM_SETTING_TEAM_LINK_WATCHERS); - return FALSE; - } - - if (NM_IN_STRSET (name, - NM_TEAM_LINK_WATCHER_ARP_PING, - NM_TEAM_LINK_WATCHER_NSNA_PING) - && !nm_team_link_watcher_get_target_host (link_watcher)) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING, - _("missing target host")); - g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), - NM_SETTING_TEAM_LINK_WATCHERS); - return FALSE; - } - if (nm_streq (name, NM_TEAM_LINK_WATCHER_ARP_PING) - && !nm_team_link_watcher_get_source_host (link_watcher)) { - g_set_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING, - _("missing source address")); - g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), - NM_SETTING_TEAM_LINK_WATCHERS); - return FALSE; - } - } - /* NOTE: normalizable/normalizable-errors must appear at the end with decreasing severity. - * Take care to properly order statements with priv->config above. */ return TRUE; } @@ -1398,27 +1268,26 @@ compare_property (const NMSettInfoSetting *sett_info, return TRUE; a_priv = NM_SETTING_TEAM_GET_PRIVATE (set_a); b_priv = NM_SETTING_TEAM_GET_PRIVATE (set_b); - return nm_team_link_watchers_equal (a_priv->link_watchers, - b_priv->link_watchers, + 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_CONFIG)) { if (set_b) { - a_priv = NM_SETTING_TEAM_GET_PRIVATE (set_a); - b_priv = NM_SETTING_TEAM_GET_PRIVATE (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 _nm_utils_team_config_equal (a_priv->config, - b_priv->config, - TRUE); + return TRUE; } - return nm_streq0 (a_priv->config, b_priv->config); + a_priv = NM_SETTING_TEAM_GET_PRIVATE (set_a); + b_priv = NM_SETTING_TEAM_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; @@ -1433,56 +1302,38 @@ compare_property (const NMSettInfoSetting *sett_info, flags); } -#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) +duplicate_copy_properties (const NMSettInfoSetting *sett_info, + NMSetting *src, + NMSetting *dst) { - NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); - char **strv; - gsize i; - - priv->notify_peers_count = JSON_TO_VAL (int, PROP_NOTIFY_PEERS_COUNT); - priv->notify_peers_interval = JSON_TO_VAL (int, PROP_NOTIFY_PEERS_INTERVAL); - priv->mcast_rejoin_count = JSON_TO_VAL (int, PROP_MCAST_REJOIN_COUNT); - priv->mcast_rejoin_interval = JSON_TO_VAL (int, PROP_MCAST_REJOIN_INTERVAL); - priv->runner_tx_balancer_interval = JSON_TO_VAL (int, PROP_RUNNER_TX_BALANCER_INTERVAL); - priv->runner_sys_prio = JSON_TO_VAL (int, PROP_RUNNER_SYS_PRIO); - priv->runner_min_ports = JSON_TO_VAL (int, PROP_RUNNER_MIN_PORTS); - - priv->runner_active = JSON_TO_VAL (boolean, PROP_RUNNER_ACTIVE); - priv->runner_fast_rate = JSON_TO_VAL (boolean, PROP_RUNNER_FAST_RATE); - - g_free (priv->runner); - g_free (priv->runner_hwaddr_policy); - g_free (priv->runner_tx_balancer); - g_free (priv->runner_agg_select_policy); - priv->runner = JSON_TO_VAL (string, PROP_RUNNER); - priv->runner_hwaddr_policy = JSON_TO_VAL (string, PROP_RUNNER_HWADDR_POLICY); - priv->runner_tx_balancer = JSON_TO_VAL (string, PROP_RUNNER_TX_BALANCER); - priv->runner_agg_select_policy = JSON_TO_VAL (string, PROP_RUNNER_AGG_SELECT_POLICY); - - strv = JSON_TO_VAL (strv, PROP_RUNNER_TX_HASH); - if (_nm_utils_strv_cmp_n (( priv->runner_tx_hash - ? (const char *const*) priv->runner_tx_hash->pdata - : NULL), - ( priv->runner_tx_hash - ? (gssize) priv->runner_tx_hash->len - : (gssize) -1), - NM_CAST_STRV_CC (strv), - -1) != 0) { - nm_clear_pointer (&priv->runner_tx_hash, g_ptr_array_unref); - if (strv) { - priv->runner_tx_hash = g_ptr_array_new_full (NM_PTRARRAY_LEN (strv), g_free); - for (i = 0; strv[i]; i++) - g_ptr_array_add (priv->runner_tx_hash, strv[i]); - nm_clear_g_free (&strv); - } - } - nm_clear_pointer (&strv, g_strfreev); + _maybe_changed (NM_SETTING_TEAM (dst), + nm_team_setting_reset (NM_SETTING_TEAM_GET_PRIVATE (dst)->team_setting, + NM_SETTING_TEAM_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) +{ + guint32 changed = 0; + gboolean success; - g_ptr_array_unref (priv->link_watchers); - priv->link_watchers = JSON_TO_VAL (ptr_array, PROP_LINK_WATCHERS); + if (keys) + g_hash_table_remove (keys, "interface-name"); + + success = nm_team_setting_reset_from_dbus (NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting, + setting_dict, + keys, + &changed, + parse_flags, + error); + _maybe_changed (NM_SETTING_TEAM (setting), changed); + return success; } /*****************************************************************************/ @@ -1493,58 +1344,47 @@ get_property (GObject *object, guint prop_id, { NMSettingTeam *setting = NM_SETTING_TEAM (object); NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (setting); + const GPtrArray *v_ptrarr; switch (prop_id) { - case PROP_CONFIG: - g_value_set_string (value, nm_setting_team_get_config (setting)); - break; - case PROP_NOTIFY_PEERS_COUNT: - g_value_set_int (value, priv->notify_peers_count); + case NM_TEAM_ATTRIBUTE_CONFIG: + g_value_set_string (value, + nm_team_setting_config_get (priv->team_setting)); break; - case PROP_NOTIFY_PEERS_INTERVAL: - g_value_set_int (value, priv->notify_peers_interval); + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE: + g_value_set_boolean (value, + nm_team_setting_value_get_bool (priv->team_setting, + prop_id)); break; - case PROP_MCAST_REJOIN_COUNT: - g_value_set_int (value, priv->mcast_rejoin_count); + case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT: + case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL: + case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT: + case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS: + g_value_set_int (value, + nm_team_setting_value_get_int32 (priv->team_setting, + prop_id)); break; - case PROP_MCAST_REJOIN_INTERVAL: - g_value_set_int (value, priv->mcast_rejoin_interval); + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY: + g_value_set_string (value, + nm_team_setting_value_get_string (priv->team_setting, + prop_id)); break; - case PROP_RUNNER: - g_value_set_string (value, nm_setting_team_get_runner (setting)); - break; - case PROP_RUNNER_HWADDR_POLICY: - g_value_set_string (value, nm_setting_team_get_runner_hwaddr_policy (setting)); - break; - case PROP_RUNNER_TX_HASH: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH: + v_ptrarr = priv->team_setting->d.master.runner_tx_hash; g_value_take_boxed (value, - priv->runner_tx_hash - ? _nm_utils_ptrarray_to_strv (priv->runner_tx_hash) + v_ptrarr + ? _nm_utils_ptrarray_to_strv ((GPtrArray *) v_ptrarr) : NULL); break; - case PROP_RUNNER_TX_BALANCER: - g_value_set_string (value, nm_setting_team_get_runner_tx_balancer (setting)); - break; - case PROP_RUNNER_TX_BALANCER_INTERVAL: - g_value_set_int (value, priv->runner_tx_balancer_interval); - break; - case PROP_RUNNER_ACTIVE: - g_value_set_boolean (value, nm_setting_team_get_runner_active (setting)); - break; - case PROP_RUNNER_FAST_RATE: - g_value_set_boolean (value, nm_setting_team_get_runner_fast_rate (setting)); - break; - case PROP_RUNNER_SYS_PRIO: - g_value_set_int (value, priv->runner_sys_prio); - break; - case PROP_RUNNER_MIN_PORTS: - g_value_set_int (value, priv->runner_min_ports); - break; - case PROP_RUNNER_AGG_SELECT_POLICY: - g_value_set_string (value, nm_setting_team_get_runner_agg_select_policy (setting)); - break; - case PROP_LINK_WATCHERS: - g_value_take_boxed (value, _nm_utils_copy_array (priv->link_watchers, + 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; @@ -1560,141 +1400,56 @@ set_property (GObject *object, guint prop_id, { NMSettingTeam *setting = NM_SETTING_TEAM (object); NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (object); - const GValue *align_value = NULL; - gboolean align_config = FALSE; - char **strv; + guint32 changed; + const GPtrArray *v_ptrarr; switch (prop_id) { - case PROP_CONFIG: - g_free (priv->config); - priv->config = g_value_dup_string (value); - _align_team_properties (setting); + case NM_TEAM_ATTRIBUTE_CONFIG: + changed = nm_team_setting_config_set (priv->team_setting, g_value_get_string (value)); break; - case PROP_NOTIFY_PEERS_COUNT: - if (priv->notify_peers_count == g_value_get_int (value)) - break; - priv->notify_peers_count = g_value_get_int (value); - align_value = value; - align_config = TRUE; + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE: + changed = nm_team_setting_value_set_bool (priv->team_setting, + prop_id, + g_value_get_boolean (value)); break; - case PROP_NOTIFY_PEERS_INTERVAL: - if (priv->notify_peers_interval == g_value_get_int (value)) - break; - priv->notify_peers_interval = g_value_get_int (value); - align_value = value; - align_config = TRUE; + case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT: + case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL: + case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT: + case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS: + changed = nm_team_setting_value_set_int32 (priv->team_setting, + prop_id, + g_value_get_int (value)); break; - case PROP_MCAST_REJOIN_COUNT: - if (priv->mcast_rejoin_count == g_value_get_int (value)) - break; - priv->mcast_rejoin_count = g_value_get_int (value); - align_value = value; - align_config = TRUE; + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY: + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY: + changed = nm_team_setting_value_set_string (priv->team_setting, + prop_id, + g_value_get_string (value)); break; - case PROP_MCAST_REJOIN_INTERVAL: - if (priv->mcast_rejoin_interval == g_value_get_int (value)) - break; - priv->mcast_rejoin_interval = g_value_get_int (value); - align_value = value; - align_config = TRUE; + case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH: + v_ptrarr = g_value_get_boxed (value); + changed = nm_team_setting_value_master_runner_tx_hash_set_list (priv->team_setting, + v_ptrarr ? (const char *const*) v_ptrarr->pdata : NULL, + v_ptrarr ? v_ptrarr->len : 0u); break; - case PROP_RUNNER: - if ( !g_value_get_string (value) - || nm_streq (priv->runner, g_value_get_string (value))) - break; - g_free (priv->runner); - priv->runner = g_value_dup_string (value); - _nm_utils_json_append_gvalue (&priv->config, _prop_to_keys[prop_id], value); - _align_team_properties (setting); - break; - case PROP_RUNNER_HWADDR_POLICY: - if (nm_streq0 (priv->runner_hwaddr_policy, g_value_get_string (value))) - break; - g_free (priv->runner_hwaddr_policy); - priv->runner_hwaddr_policy = g_value_dup_string (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_TX_HASH: - if (priv->runner_tx_hash) - g_ptr_array_unref (priv->runner_tx_hash); - strv = g_value_get_boxed (value); - if (strv && strv[0]) { - priv->runner_tx_hash = _nm_utils_strv_to_ptrarray (strv); - align_value = value; - } else - priv->runner_tx_hash = NULL; - align_config = TRUE; - break; - case PROP_RUNNER_TX_BALANCER: - if (nm_streq0 (priv->runner_tx_balancer, g_value_get_string (value))) - break; - g_free (priv->runner_tx_balancer); - priv->runner_tx_balancer = g_value_dup_string (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_TX_BALANCER_INTERVAL: - if (priv->runner_tx_balancer_interval == g_value_get_int (value)) - break; - priv->runner_tx_balancer_interval = g_value_get_int (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_ACTIVE: - if (priv->runner_active == g_value_get_boolean (value)) - break; - priv->runner_active = g_value_get_boolean (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_FAST_RATE: - if (priv->runner_fast_rate == g_value_get_boolean (value)) - break; - priv->runner_fast_rate = g_value_get_boolean (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_SYS_PRIO: - if (priv->runner_sys_prio == g_value_get_int (value)) - break; - priv->runner_sys_prio = g_value_get_int (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_MIN_PORTS: - if (priv->runner_min_ports == g_value_get_int (value)) - break; - priv->runner_min_ports = g_value_get_int (value); - align_value = value; - align_config = TRUE; - break; - case PROP_RUNNER_AGG_SELECT_POLICY: - if (nm_streq0 (priv->runner_agg_select_policy, g_value_get_string (value))) - break; - g_free (priv->runner_agg_select_policy); - priv->runner_agg_select_policy = g_value_dup_string (value); - align_value = value; - align_config = TRUE; - break; - case PROP_LINK_WATCHERS: - g_ptr_array_unref (priv->link_watchers); - priv->link_watchers = _nm_utils_copy_array (g_value_get_boxed (value), - (NMUtilsCopyFunc) _nm_team_link_watcher_ref, - (GDestroyNotify) nm_team_link_watcher_unref); - if (priv->link_watchers->len) - align_value = value; - align_config = TRUE; + 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); - break; + return; } - if (align_config) { - _nm_utils_json_append_gvalue (&priv->config, _prop_to_keys[prop_id], align_value); - _align_team_properties (setting); - } + _maybe_changed (setting, changed & ~(((guint32) 1) << prop_id)); } /*****************************************************************************/ @@ -1704,11 +1459,7 @@ 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_tx_balancer_interval = -1; - priv->runner_sys_prio = -1; - priv->runner_min_ports = -1; - priv->link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref); + priv->team_setting = nm_team_setting_new (FALSE, NULL); } /** @@ -1729,14 +1480,7 @@ finalize (GObject *object) { NMSettingTeamPrivate *priv = NM_SETTING_TEAM_GET_PRIVATE (object); - g_free (priv->config); - g_free (priv->runner); - g_free (priv->runner_hwaddr_policy); - g_free (priv->runner_tx_balancer); - g_free (priv->runner_agg_select_policy); - if (priv->runner_tx_hash) - g_ptr_array_unref (priv->runner_tx_hash); - g_ptr_array_unref (priv->link_watchers); + nm_team_setting_free (priv->team_setting); G_OBJECT_CLASS (nm_setting_team_parent_class)->finalize (object); } @@ -1754,8 +1498,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) object_class->set_property = set_property; object_class->finalize = finalize; - setting_class->compare_property = compare_property; - setting_class->verify = verify; + 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; /** * NMSettingTeam:config: @@ -1771,7 +1517,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * description: Team configuration in JSON. See man teamd.conf for details. * ---end--- */ - obj_properties[PROP_CONFIG] = + obj_properties[NM_TEAM_ATTRIBUTE_CONFIG] = g_param_spec_string (NM_SETTING_TEAM_CONFIG, "", "", NULL, G_PARAM_READWRITE | @@ -1785,7 +1531,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_NOTIFY_PEERS_COUNT] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT] = g_param_spec_int (NM_SETTING_TEAM_NOTIFY_PEERS_COUNT, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1798,7 +1544,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_NOTIFY_PEERS_INTERVAL] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL] = g_param_spec_int (NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1811,7 +1557,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_MCAST_REJOIN_COUNT] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT] = g_param_spec_int (NM_SETTING_TEAM_MCAST_REJOIN_COUNT, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1824,7 +1570,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_MCAST_REJOIN_INTERVAL] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL] = g_param_spec_int (NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1836,14 +1582,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * Corresponds to the teamd runner.name. * Permitted values are: "roundrobin", "broadcast", "activebackup", * "loadbalance", "lacp", "random". - * When setting the runner, all the properties specific to the runner - * will be reset to the default value; all the properties specific to - * other runners will be set to an empty value (or if not possible to - * a default value). * * Since: 1.12 **/ - obj_properties[PROP_RUNNER] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER] = g_param_spec_string (NM_SETTING_TEAM_RUNNER, "", "", NULL, G_PARAM_READWRITE | @@ -1856,7 +1598,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_HWADDR_POLICY] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY] = g_param_spec_string (NM_SETTING_TEAM_RUNNER_HWADDR_POLICY, "", "", NULL, G_PARAM_READWRITE | @@ -1869,7 +1611,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_TX_HASH] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH] = g_param_spec_boxed (NM_SETTING_TEAM_RUNNER_TX_HASH, "", "", G_TYPE_STRV, G_PARAM_READWRITE | @@ -1883,7 +1625,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_TX_BALANCER] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER] = g_param_spec_string (NM_SETTING_TEAM_RUNNER_TX_BALANCER, "", "", NULL, G_PARAM_READWRITE | @@ -1896,7 +1638,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_TX_BALANCER_INTERVAL] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL] = g_param_spec_int (NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1909,7 +1651,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_ACTIVE] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE] = g_param_spec_boolean (NM_SETTING_TEAM_RUNNER_ACTIVE, "", "", FALSE, G_PARAM_READWRITE | @@ -1922,7 +1664,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_FAST_RATE] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE] = g_param_spec_boolean (NM_SETTING_TEAM_RUNNER_FAST_RATE, "", "", FALSE, G_PARAM_READWRITE | @@ -1935,7 +1677,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_SYS_PRIO] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO] = g_param_spec_int (NM_SETTING_TEAM_RUNNER_SYS_PRIO, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1948,7 +1690,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_MIN_PORTS] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS] = g_param_spec_int (NM_SETTING_TEAM_RUNNER_MIN_PORTS, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | @@ -1961,7 +1703,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_RUNNER_AGG_SELECT_POLICY] = + obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY] = g_param_spec_string (NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY, "", "", NULL, G_PARAM_READWRITE | @@ -1981,14 +1723,14 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) * * Since: 1.12 **/ - obj_properties[PROP_LINK_WATCHERS] = + obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS] = g_param_spec_boxed (NM_SETTING_TEAM_LINK_WATCHERS, "", "", G_TYPE_PTR_ARRAY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); _properties_override_add_transform (properties_override, - obj_properties[PROP_LINK_WATCHERS], + obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS], G_VARIANT_TYPE ("aa{sv}"), team_link_watchers_to_dbus, team_link_watchers_from_dbus); @@ -2007,7 +1749,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass) _nm_setting_get_deprecated_virtual_interface_name, NULL); - g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties); + 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, NULL, properties_override); |