team: merge branch 'th/team-fix'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/169
This commit is contained in:
Beniamino Galvani 2019-06-04 15:48:48 +02:00
commit 96fd188c8d
7 changed files with 878 additions and 672 deletions

View file

@ -3672,85 +3672,6 @@ _validate_fcn_team_config (const char *value, char **out_to_free, GError **error
RETURN_STR_TO_FREE (json); RETURN_STR_TO_FREE (json);
} }
static void
_multilist_clear_all_fcn_team_runner_tx_hash (NMSetting *setting)
{
/* Workaround libnm bug (confirmed against version 1.16.0).
* We need to both clear the GObject property and call the libnm API.
*
* This workaround was added in nmcli as [1]. This needs fixing in libnm.
*
* Without this, CI test "team_abs_set_runner_tx_hash" fails.
* Try (without the following workaround): */
#if 0
$ (nmcli connection delete team0 ; :); \
nmcli connection add type team con-name team0 ifname team0 autoconnect no \
team.runner lacp && \
echo ">>> FIRST:" && \
PAGER= nmcli -o connection show team0 && \
nmcli connection modify team0 team.runner-tx-hash l3 && \
echo ">>> AFTER:" && \
PAGER= nmcli -o connection show team0
#endif
/* See also:
*
* - https://github.com/NetworkManager/NetworkManager/pull/318
* - https://bugzilla.redhat.com/show_bug.cgi?id=1691619
*
* [1] https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=350dbb55abf3a80267c398e6f64c2cee4645475a
*/
/* it appears, we don't really need _gobject_property_reset(). Just to be sure
* also call it. */
_gobject_property_reset (setting, NM_SETTING_TEAM_RUNNER_TX_HASH, FALSE);
while (nm_setting_team_get_num_runner_tx_hash (NM_SETTING_TEAM (setting)))
nm_setting_team_remove_runner_tx_hash (NM_SETTING_TEAM (setting), 0);
}
static void
_objlist_clear_all_fcn_team_link_watchers (NMSetting *setting)
{
/* the same workaround as _multilist_clear_all_fcn_team_runner_tx_hash() above.
*
* Reproduce with: */
#if 0
$ (nmcli connection delete team0 ; :); \
nmcli connection add type team con-name team0 ifname team0 autoconnect no \
team.link-watchers 'name=arp_ping source-host=172.16.1.1 target-host=172.16.1.254, name=ethtool delay-up=3' && \
echo ">>> FIRST:" && \
PAGER= nmcli -o connection show team0 && \
nmcli connection modify team0 team.link-watchers 'name=ethtool delay-up=4' && \
echo ">>> AFTER:" && \
PAGER= nmcli -o connection show team0
(nmcli connection delete team0-slave ; :); \
nmcli connection add type ethernet con-name team0-slave master team0 slave-type team ifname eth0 autoconnect no \
team-port.link-watchers 'name=arp_ping source-host=172.16.1.1 target-host=172.16.1.254, name=ethtool delay-up=3' && \
echo ">>> FIRST:" && \
PAGER= nmcli -o connection show team0-slave && \
nmcli connection modify team0-slave team.link-watchers 'name=ethtool delay-up=4' && \
echo ">>> AFTER:" && \
PAGER= nmcli -o connection show team0-slave
#endif
/* See also:
*
* - https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=72bf38cad6ca6033d0117bf67b0e726001922d8f
* - https://github.com/NetworkManager/NetworkManager/pull/318
* - https://bugzilla.redhat.com/show_bug.cgi?id=1691619
*/
/* In this case, it appears both GObject reset and nm_setting_team*_clear_link_watchers()
* work (on their own). So, we might not need the workaround.
* Just to be sure, as something is not right with libnm here. */
if (NM_IS_SETTING_TEAM (setting)) {
_gobject_property_reset (setting, NM_SETTING_TEAM_LINK_WATCHERS, FALSE);
nm_setting_team_clear_link_watchers (NM_SETTING_TEAM (setting));
} else {
_gobject_property_reset (setting, NM_SETTING_TEAM_PORT_LINK_WATCHERS, FALSE);
nm_setting_team_port_clear_link_watchers (NM_SETTING_TEAM_PORT (setting));
}
}
static void static void
_objlist_obj_to_str_fcn_team_link_watchers (NMMetaAccessorGetType get_type, _objlist_obj_to_str_fcn_team_link_watchers (NMMetaAccessorGetType get_type,
NMSetting *setting, NMSetting *setting,
@ -6513,6 +6434,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "disabled", .nick = "disabled",
@ -6524,6 +6449,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "default", .nick = "default",
@ -6535,6 +6464,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "disabled", .nick = "disabled",
@ -6546,6 +6479,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "default", .nick = "default",
@ -6577,7 +6514,6 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_typ_data = DEFINE_PROPERTY_TYP_DATA ( .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
PROPERTY_TYP_DATA_SUBTYPE (multilist, PROPERTY_TYP_DATA_SUBTYPE (multilist,
.get_num_fcn_u = MULTILIST_GET_NUM_FCN_U (NMSettingTeam, nm_setting_team_get_num_runner_tx_hash), .get_num_fcn_u = MULTILIST_GET_NUM_FCN_U (NMSettingTeam, nm_setting_team_get_num_runner_tx_hash),
.clear_all_fcn = _multilist_clear_all_fcn_team_runner_tx_hash,
.add_fcn = MULTILIST_ADD_FCN (NMSettingTeam, nm_setting_team_add_runner_tx_hash), .add_fcn = MULTILIST_ADD_FCN (NMSettingTeam, nm_setting_team_add_runner_tx_hash),
.remove_by_idx_fcn_u = MULTILIST_REMOVE_BY_IDX_FCN_U (NMSettingTeam, nm_setting_team_remove_runner_tx_hash), .remove_by_idx_fcn_u = MULTILIST_REMOVE_BY_IDX_FCN_U (NMSettingTeam, nm_setting_team_remove_runner_tx_hash),
.remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingTeam, nm_setting_team_remove_runner_tx_hash_by_value), .remove_by_value_fcn = MULTILIST_REMOVE_BY_VALUE_FCN (NMSettingTeam, nm_setting_team_remove_runner_tx_hash_by_value),
@ -6597,6 +6533,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT, .value.i64 = NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT,
.nick = "default", .nick = "default",
@ -6614,6 +6554,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT, .value.i64 = NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT,
.nick = "default", .nick = "default",
@ -6625,6 +6569,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "default", .nick = "default",
@ -6648,7 +6596,6 @@ static const NMMetaPropertyInfo *const property_infos_TEAM[] = {
.property_typ_data = DEFINE_PROPERTY_TYP_DATA ( .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
PROPERTY_TYP_DATA_SUBTYPE (objlist, PROPERTY_TYP_DATA_SUBTYPE (objlist,
.get_num_fcn = OBJLIST_GET_NUM_FCN (NMSettingTeam, nm_setting_team_get_num_link_watchers), .get_num_fcn = OBJLIST_GET_NUM_FCN (NMSettingTeam, nm_setting_team_get_num_link_watchers),
.clear_all_fcn = _objlist_clear_all_fcn_team_link_watchers,
.obj_to_str_fcn = _objlist_obj_to_str_fcn_team_link_watchers, .obj_to_str_fcn = _objlist_obj_to_str_fcn_team_link_watchers,
.set_fcn = _objlist_set_fcn_team_link_watchers, .set_fcn = _objlist_set_fcn_team_link_watchers,
.remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingTeam, nm_setting_team_remove_link_watcher), .remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingTeam, nm_setting_team_remove_link_watcher),
@ -6676,7 +6623,11 @@ static const NMMetaPropertyInfo *const property_infos_TEAM_PORT[] = {
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{ {
.value.i64 = NM_SETTING_TEAM_PORT_QUEUE_ID_DEFAULT, .value.i64 = -1,
.nick = "unset",
},
{
.value.i64 = 0,
.nick = "default", .nick = "default",
}, },
), ),
@ -6686,6 +6637,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM_PORT[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = 0,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "default", .nick = "default",
@ -6700,6 +6655,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM_PORT[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT, .value.i64 = NM_SETTING_TEAM_PORT_LACP_PRIO_DEFAULT,
.nick = "default", .nick = "default",
@ -6711,6 +6670,10 @@ static const NMMetaPropertyInfo *const property_infos_TEAM_PORT[] = {
.property_type = &_pt_gobject_int, .property_type = &_pt_gobject_int,
.property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int,
.value_infos = INT_VALUE_INFOS ( .value_infos = INT_VALUE_INFOS (
{
.value.i64 = -1,
.nick = "unset",
},
{ {
.value.i64 = 0, .value.i64 = 0,
.nick = "default", .nick = "default",
@ -6724,7 +6687,6 @@ static const NMMetaPropertyInfo *const property_infos_TEAM_PORT[] = {
.property_typ_data = DEFINE_PROPERTY_TYP_DATA ( .property_typ_data = DEFINE_PROPERTY_TYP_DATA (
PROPERTY_TYP_DATA_SUBTYPE (objlist, PROPERTY_TYP_DATA_SUBTYPE (objlist,
.get_num_fcn = OBJLIST_GET_NUM_FCN (NMSettingTeamPort, nm_setting_team_port_get_num_link_watchers), .get_num_fcn = OBJLIST_GET_NUM_FCN (NMSettingTeamPort, nm_setting_team_port_get_num_link_watchers),
.clear_all_fcn = _objlist_clear_all_fcn_team_link_watchers,
.obj_to_str_fcn = _objlist_obj_to_str_fcn_team_link_watchers, .obj_to_str_fcn = _objlist_obj_to_str_fcn_team_link_watchers,
.set_fcn = _objlist_set_fcn_team_link_watchers, .set_fcn = _objlist_set_fcn_team_link_watchers,
.remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingTeamPort, nm_setting_team_port_remove_link_watcher), .remove_by_idx_fcn_u = OBJLIST_REMOVE_BY_IDX_FCN_U (NMSettingTeamPort, nm_setting_team_port_remove_link_watcher),

View file

@ -54,6 +54,14 @@ G_DEFINE_TYPE (NMSettingTeamPort, nm_setting_team_port, NM_TYPE_SETTING)
/*****************************************************************************/ /*****************************************************************************/
NMTeamSetting *
_nm_setting_team_port_get_team_setting (NMSettingTeamPort *setting)
{
return NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->team_setting;
}
/*****************************************************************************/
#define _maybe_changed(self, changed) \ #define _maybe_changed(self, changed) \
nm_team_setting_maybe_changed (NM_SETTING (_NM_ENSURE_TYPE (NMSettingTeamPort *, self)), (const GParamSpec *const*) obj_properties, (changed)) nm_team_setting_maybe_changed (NM_SETTING (_NM_ENSURE_TYPE (NMSettingTeamPort *, self)), (const GParamSpec *const*) obj_properties, (changed))
@ -289,19 +297,6 @@ nm_setting_team_port_clear_link_watchers (NMSettingTeamPort *setting)
0)); 0));
} }
static GVariant *
team_link_watchers_to_dbus (const GValue *prop_value)
{
return _nm_utils_team_link_watchers_to_variant (g_value_get_boxed (prop_value));
}
static void
team_link_watchers_from_dbus (GVariant *dbus_value,
GValue *prop_value)
{
g_value_take_boxed (prop_value, _nm_utils_team_link_watchers_from_variant (dbus_value, FALSE, NULL));
}
static gboolean static gboolean
verify (NMSetting *setting, NMConnection *connection, GError **error) verify (NMSetting *setting, NMConnection *connection, GError **error)
{ {
@ -556,6 +551,13 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
setting_class->duplicate_copy_properties = duplicate_copy_properties; setting_class->duplicate_copy_properties = duplicate_copy_properties;
setting_class->init_from_dbus = init_from_dbus; setting_class->init_from_dbus = init_from_dbus;
#define _property_override(_properties_override, _param_spec, _variant_type, _is_link_watcher) \
_properties_override_add ((_properties_override), \
.param_spec = (_param_spec), \
.dbus_type = G_VARIANT_TYPE (""_variant_type""), \
.to_dbus_fcn = _nm_team_settings_property_to_dbus, \
.gprop_from_dbus_fcn = ((_is_link_watcher) ? _nm_team_settings_property_from_dbus_link_watchers : NULL))
/** /**
* NMSettingTeamPort:config: * NMSettingTeamPort:config:
* *
@ -576,6 +578,7 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
G_PARAM_READWRITE | G_PARAM_READWRITE |
NM_SETTING_PARAM_INFERRABLE | NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_CONFIG], "s", FALSE);
/** /**
* NMSettingTeamPort:queue-id: * NMSettingTeamPort:queue-id:
@ -587,9 +590,10 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID] = obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID] =
g_param_spec_int (NM_SETTING_TEAM_PORT_QUEUE_ID, "", "", g_param_spec_int (NM_SETTING_TEAM_PORT_QUEUE_ID, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID], "i", FALSE);
/** /**
* NMSettingTeamPort:prio: * NMSettingTeamPort:prio:
@ -603,6 +607,7 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, 0,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_PRIO], "i", FALSE);
/** /**
* NMSettingTeamPort:sticky: * NMSettingTeamPort:sticky:
@ -616,6 +621,7 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
FALSE, FALSE,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_STICKY], "b", FALSE);
/** /**
* NMSettingTeamPort:lacp-prio: * NMSettingTeamPort:lacp-prio:
@ -626,9 +632,10 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO] = obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO] =
g_param_spec_int (NM_SETTING_TEAM_PORT_LACP_PRIO, "", "", g_param_spec_int (NM_SETTING_TEAM_PORT_LACP_PRIO, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_PRIO], "i", FALSE);
/** /**
* NMSettingTeamPort:lacp-key: * NMSettingTeamPort:lacp-key:
@ -639,9 +646,10 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY] = obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY] =
g_param_spec_int (NM_SETTING_TEAM_PORT_LACP_KEY, "", "", g_param_spec_int (NM_SETTING_TEAM_PORT_LACP_KEY, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_PORT_LACP_KEY], "i", FALSE);
/** /**
* NMSettingTeamPort:link-watchers: (type GPtrArray(NMTeamLinkWatcher)) * NMSettingTeamPort:link-watchers: (type GPtrArray(NMTeamLinkWatcher))
@ -662,12 +670,7 @@ nm_setting_team_port_class_init (NMSettingTeamPortClass *klass)
G_TYPE_PTR_ARRAY, G_TYPE_PTR_ARRAY,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS], "aa{sv}", TRUE);
_properties_override_add_transform (properties_override,
obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS],
G_VARIANT_TYPE ("aa{sv}"),
team_link_watchers_to_dbus,
team_link_watchers_from_dbus);
g_object_class_install_properties (object_class, G_N_ELEMENTS (obj_properties), obj_properties); g_object_class_install_properties (object_class, G_N_ELEMENTS (obj_properties), obj_properties);

View file

@ -734,6 +734,14 @@ G_DEFINE_TYPE (NMSettingTeam, nm_setting_team, NM_TYPE_SETTING)
/*****************************************************************************/ /*****************************************************************************/
NMTeamSetting *
_nm_setting_team_get_team_setting (NMSettingTeam *setting)
{
return NM_SETTING_TEAM_GET_PRIVATE (setting)->team_setting;
}
/*****************************************************************************/
#define _maybe_changed(self, changed) \ #define _maybe_changed(self, changed) \
nm_team_setting_maybe_changed (NM_SETTING (_NM_ENSURE_TYPE (NMSettingTeam *, self)), (const GParamSpec *const*) obj_properties, (changed)) nm_team_setting_maybe_changed (NM_SETTING (_NM_ENSURE_TYPE (NMSettingTeam *, self)), (const GParamSpec *const*) obj_properties, (changed))
@ -1223,19 +1231,6 @@ nm_setting_team_clear_link_watchers (NMSettingTeam *setting)
0)); 0));
} }
static GVariant *
team_link_watchers_to_dbus (const GValue *prop_value)
{
return _nm_utils_team_link_watchers_to_variant (g_value_get_boxed (prop_value));
}
static void
team_link_watchers_from_dbus (GVariant *dbus_value,
GValue *prop_value)
{
g_value_take_boxed (prop_value, _nm_utils_team_link_watchers_from_variant (dbus_value, FALSE, NULL));
}
static gboolean static gboolean
verify (NMSetting *setting, NMConnection *connection, GError **error) verify (NMSetting *setting, NMConnection *connection, GError **error)
{ {
@ -1503,6 +1498,13 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
setting_class->duplicate_copy_properties = duplicate_copy_properties; setting_class->duplicate_copy_properties = duplicate_copy_properties;
setting_class->init_from_dbus = init_from_dbus; setting_class->init_from_dbus = init_from_dbus;
#define _property_override(_properties_override, _param_spec, _variant_type, _is_link_watcher) \
_properties_override_add ((_properties_override), \
.param_spec = (_param_spec), \
.dbus_type = G_VARIANT_TYPE (""_variant_type""), \
.to_dbus_fcn = _nm_team_settings_property_to_dbus, \
.gprop_from_dbus_fcn = ((_is_link_watcher) ? _nm_team_settings_property_from_dbus_link_watchers : NULL))
/** /**
* NMSettingTeam:config: * NMSettingTeam:config:
* *
@ -1523,6 +1525,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
G_PARAM_READWRITE | G_PARAM_READWRITE |
NM_SETTING_PARAM_INFERRABLE | NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_CONFIG], "s", FALSE);
/** /**
* NMSettingTeam:notify-peers-count: * NMSettingTeam:notify-peers-count:
@ -1533,9 +1536,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT] =
g_param_spec_int (NM_SETTING_TEAM_NOTIFY_PEERS_COUNT, "", "", g_param_spec_int (NM_SETTING_TEAM_NOTIFY_PEERS_COUNT, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT], "i", FALSE);
/** /**
* NMSettingTeam:notify-peers-interval: * NMSettingTeam:notify-peers-interval:
@ -1546,9 +1550,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL] =
g_param_spec_int (NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL, "", "", g_param_spec_int (NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL], "i", FALSE);
/** /**
* NMSettingTeam:mcast-rejoin-count: * NMSettingTeam:mcast-rejoin-count:
@ -1559,9 +1564,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT] =
g_param_spec_int (NM_SETTING_TEAM_MCAST_REJOIN_COUNT, "", "", g_param_spec_int (NM_SETTING_TEAM_MCAST_REJOIN_COUNT, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT], "i", FALSE);
/** /**
* NMSettingTeam:mcast-rejoin-interval: * NMSettingTeam:mcast-rejoin-interval:
@ -1572,9 +1578,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL] =
g_param_spec_int (NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL, "", "", g_param_spec_int (NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL], "i", FALSE);
/** /**
* NMSettingTeam:runner: * NMSettingTeam:runner:
@ -1590,6 +1597,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
NULL, NULL,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER], "s", FALSE);
/** /**
* NMSettingTeam:runner-hwaddr-policy: * NMSettingTeam:runner-hwaddr-policy:
@ -1603,6 +1611,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
NULL, NULL,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY], "s", FALSE);
/** /**
* NMSettingTeam:runner-tx-hash: * NMSettingTeam:runner-tx-hash:
@ -1617,6 +1626,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
G_PARAM_READWRITE | G_PARAM_READWRITE |
NM_SETTING_PARAM_INFERRABLE | NM_SETTING_PARAM_INFERRABLE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH], "as", FALSE);
/** /**
* NMSettingTeam:runner-tx-balancer: * NMSettingTeam:runner-tx-balancer:
@ -1630,6 +1640,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
NULL, NULL,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER], "s", FALSE);
/** /**
* NMSettingTeam:runner-tx-balancer-interval: * NMSettingTeam:runner-tx-balancer-interval:
@ -1640,9 +1651,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_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_param_spec_int (NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL], "i", FALSE);
/** /**
* NMSettingTeam:runner-active: * NMSettingTeam:runner-active:
@ -1653,9 +1665,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE] =
g_param_spec_boolean (NM_SETTING_TEAM_RUNNER_ACTIVE, "", "", g_param_spec_boolean (NM_SETTING_TEAM_RUNNER_ACTIVE, "", "",
FALSE, TRUE,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE], "b", FALSE);
/** /**
* NMSettingTeam:runner-fast-rate: * NMSettingTeam:runner-fast-rate:
@ -1669,6 +1682,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
FALSE, FALSE,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE], "b", FALSE);
/** /**
* NMSettingTeam:runner-sys-prio: * NMSettingTeam:runner-sys-prio:
@ -1679,9 +1693,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO] =
g_param_spec_int (NM_SETTING_TEAM_RUNNER_SYS_PRIO, "", "", g_param_spec_int (NM_SETTING_TEAM_RUNNER_SYS_PRIO, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO], "i", FALSE);
/** /**
* NMSettingTeam:runner-min-ports: * NMSettingTeam:runner-min-ports:
@ -1692,9 +1707,10 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
**/ **/
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS] = obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS] =
g_param_spec_int (NM_SETTING_TEAM_RUNNER_MIN_PORTS, "", "", g_param_spec_int (NM_SETTING_TEAM_RUNNER_MIN_PORTS, "", "",
G_MININT32, G_MAXINT32, 0, G_MININT32, G_MAXINT32, -1,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS], "i", FALSE);
/** /**
* NMSettingTeam:runner-agg-select-policy: * NMSettingTeam:runner-agg-select-policy:
@ -1708,6 +1724,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
NULL, NULL,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY], "s", FALSE);
/** /**
* NMSettingTeam:link-watchers: (type GPtrArray(NMTeamLinkWatcher)) * NMSettingTeam:link-watchers: (type GPtrArray(NMTeamLinkWatcher))
@ -1728,12 +1745,7 @@ nm_setting_team_class_init (NMSettingTeamClass *klass)
G_TYPE_PTR_ARRAY, G_TYPE_PTR_ARRAY,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
_property_override (properties_override, obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS], "aa{sv}", TRUE);
_properties_override_add_transform (properties_override,
obj_properties[NM_TEAM_ATTRIBUTE_LINK_WATCHERS],
G_VARIANT_TYPE ("aa{sv}"),
team_link_watchers_to_dbus,
team_link_watchers_from_dbus);
/* ---dbus--- /* ---dbus---
* property: interface-name * property: interface-name

File diff suppressed because it is too large Load diff

View file

@ -96,6 +96,8 @@ struct _NMTeamSettingData {
bool is_port:1; bool is_port:1;
guint32 has_fields_mask;
union { union {
struct { struct {
const GPtrArray *runner_tx_hash; const GPtrArray *runner_tx_hash;
@ -185,6 +187,10 @@ nm_team_setting_value_get_string (const NMTeamSetting *self,
/*****************************************************************************/ /*****************************************************************************/
guint32 nm_team_setting_value_reset (NMTeamSetting *self,
NMTeamAttribute team_attr,
gboolean to_default /* or else unset */);
guint32 _nm_team_setting_value_set (NMTeamSetting *self, guint32 _nm_team_setting_value_set (NMTeamSetting *self,
NMTeamAttribute team_attr, NMTeamAttribute team_attr,
NMValueType value_type, NMValueType value_type,
@ -269,7 +275,7 @@ gboolean nm_team_setting_reset_from_dbus (NMTeamSetting *self,
GPtrArray *_nm_utils_team_link_watchers_from_variant (GVariant *value, GPtrArray *_nm_utils_team_link_watchers_from_variant (GVariant *value,
gboolean strict_parsing, gboolean strict_parsing,
GError **error); GError **error);
GVariant *_nm_utils_team_link_watchers_to_variant (GPtrArray *link_watchers); GVariant *_nm_utils_team_link_watchers_to_variant (const GPtrArray *link_watchers);
/*****************************************************************************/ /*****************************************************************************/
@ -277,4 +283,24 @@ gboolean nm_team_setting_maybe_changed (struct _NMSetting *source,
const GParamSpec *const*obj_properties, const GParamSpec *const*obj_properties,
guint32 changed); guint32 changed);
struct _NMSettingTeam;
struct _NMSettingTeamPort;
NMTeamSetting *_nm_setting_team_get_team_setting (struct _NMSettingTeam *setting);
NMTeamSetting *_nm_setting_team_port_get_team_setting (struct _NMSettingTeamPort *setting);
NMTeamSetting *_nm_setting_get_team_setting (struct _NMSetting *setting);
/*****************************************************************************/
#include "nm-connection.h"
#include "nm-core-internal.h"
GVariant *_nm_team_settings_property_to_dbus (const NMSettInfoSetting *sett_info,
guint property_idx,
NMConnection *connection,
NMSetting *setting,
NMConnectionSerializationFlags flags);
void _nm_team_settings_property_from_dbus_link_watchers (GVariant *dbus_value,
GValue *prop_value);
#endif /* __NM_TEAM_UITLS_H__ */ #endif /* __NM_TEAM_UITLS_H__ */

View file

@ -6862,10 +6862,6 @@ test_nm_utils_team_config_equal (void)
TRUE); TRUE);
/* team config */ /* team config */
_team_config_equal_check ("{ }",
"{ \"runner\" : { \"name\" : \"roundrobin\"} }",
FALSE,
TRUE);
_team_config_equal_check ("{ }", _team_config_equal_check ("{ }",
"{ \"runner\" : { \"name\" : \"random\"} }", "{ \"runner\" : { \"name\" : \"random\"} }",
FALSE, FALSE,
@ -6889,7 +6885,7 @@ test_nm_utils_team_config_equal (void)
_team_config_equal_check ("{ \"runner\" : { \"name\" : \"lacp\"} }", _team_config_equal_check ("{ \"runner\" : { \"name\" : \"lacp\"} }",
"{ \"runner\" : { \"name\" : \"lacp\", \"tx_hash\" : [ \"eth\", \"ipv4\", \"ipv6\" ] } }", "{ \"runner\" : { \"name\" : \"lacp\", \"tx_hash\" : [ \"eth\", \"ipv4\", \"ipv6\" ] } }",
FALSE, FALSE,
TRUE); !WITH_JSON_VALIDATION);
_team_config_equal_check ("{ \"runner\" : { \"name\" : \"roundrobin\"} }", _team_config_equal_check ("{ \"runner\" : { \"name\" : \"roundrobin\"} }",
"{ \"runner\" : { \"name\" : \"roundrobin\", \"tx_hash\" : [ \"eth\", \"ipv4\", \"ipv6\" ] } }", "{ \"runner\" : { \"name\" : \"roundrobin\", \"tx_hash\" : [ \"eth\", \"ipv4\", \"ipv6\" ] } }",
FALSE, FALSE,
@ -6903,7 +6899,7 @@ test_nm_utils_team_config_equal (void)
_team_config_equal_check ("{ }", _team_config_equal_check ("{ }",
"{ \"link_watch\" : { \"name\" : \"ethtool\"} }", "{ \"link_watch\" : { \"name\" : \"ethtool\"} }",
TRUE, TRUE,
TRUE); !WITH_JSON_VALIDATION);
_team_config_equal_check ("{ }", _team_config_equal_check ("{ }",
"{ \"link_watch\" : { \"name\" : \"arp_ping\"} }", "{ \"link_watch\" : { \"name\" : \"arp_ping\"} }",
TRUE, TRUE,
@ -6911,7 +6907,7 @@ test_nm_utils_team_config_equal (void)
_team_config_equal_check ("{ \"link_watch\" : { \"name\" : \"ethtool\"} }", _team_config_equal_check ("{ \"link_watch\" : { \"name\" : \"ethtool\"} }",
"{ \"link_watch\" : { \"name\" : \"arp_ping\"} }", "{ \"link_watch\" : { \"name\" : \"arp_ping\"} }",
TRUE, TRUE,
TRUE); !WITH_JSON_VALIDATION);
_team_config_equal_check ("{ \"link_watch\" : { \"name\" : \"arp_ping\"} }", _team_config_equal_check ("{ \"link_watch\" : { \"name\" : \"arp_ping\"} }",
"{ \"link_watch\" : { \"name\" : \"arp_ping\"} }", "{ \"link_watch\" : { \"name\" : \"arp_ping\"} }",
TRUE, TRUE,

View file

@ -1057,11 +1057,11 @@ static void
test_runner_roundrobin_sync_from_config (void) test_runner_roundrobin_sync_from_config (void)
{ {
_test_team_config_sync ("", _test_team_config_sync ("",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_ROUNDROBIN, NULL,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
} }
@ -1069,11 +1069,11 @@ static void
test_runner_broadcast_sync_from_config (void) test_runner_broadcast_sync_from_config (void)
{ {
_test_team_config_sync ("{\"runner\": {\"name\": \"broadcast\"}}", _test_team_config_sync ("{\"runner\": {\"name\": \"broadcast\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_BROADCAST, NM_SETTING_TEAM_RUNNER_BROADCAST,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
} }
@ -1081,11 +1081,11 @@ static void
test_runner_random_sync_from_config (void) test_runner_random_sync_from_config (void)
{ {
_test_team_config_sync ("{\"runner\": {\"name\": \"random\"}}", _test_team_config_sync ("{\"runner\": {\"name\": \"random\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_RANDOM, NM_SETTING_TEAM_RUNNER_RANDOM,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
} }
@ -1093,12 +1093,11 @@ static void
test_runner_activebackup_sync_from_config (void) test_runner_activebackup_sync_from_config (void)
{ {
_test_team_config_sync ("{\"runner\": {\"name\": \"activebackup\"}}", _test_team_config_sync ("{\"runner\": {\"name\": \"activebackup\"}}",
NM_SETTING_TEAM_NOTIFY_PEERS_COUNT_ACTIVEBACKUP_DEFAULT, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_NOTIFY_MCAST_COUNT_ACTIVEBACKUP_DEFAULT, 0,
NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP, NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP,
NM_SETTING_TEAM_RUNNER_HWADDR_POLICY_DEFAULT, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
} }
@ -1113,29 +1112,29 @@ test_runner_loadbalance_sync_from_config (void)
g_ptr_array_add (tx_hash, g_strdup ("ipv6")); g_ptr_array_add (tx_hash, g_strdup ("ipv6"));
_test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\"}}", _test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_LOADBALANCE, NM_SETTING_TEAM_RUNNER_LOADBALANCE,
NULL, NULL,
tx_hash, NULL, NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
_test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\", " _test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\", "
"\"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}", "\"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_LOADBALANCE, NM_SETTING_TEAM_RUNNER_LOADBALANCE,
NULL, NULL,
tx_hash, NULL, NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT, tx_hash, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
_test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], " _test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], "
"\"tx_balancer\": {\"name\": \"basic\", \"balancing_interval\": 30}}}", "\"tx_balancer\": {\"name\": \"basic\", \"balancing_interval\": 30}}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_LOADBALANCE, NM_SETTING_TEAM_RUNNER_LOADBALANCE,
NULL, NULL,
tx_hash, "basic", 30, tx_hash, "basic", 30,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
NULL); NULL);
} }
@ -1150,21 +1149,21 @@ test_runner_lacp_sync_from_config (void)
g_ptr_array_add (tx_hash, g_strdup ("ipv6")); g_ptr_array_add (tx_hash, g_strdup ("ipv6"));
_test_team_config_sync ("{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}", _test_team_config_sync ("{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_LACP, NM_SETTING_TEAM_RUNNER_LACP,
NULL, NULL,
tx_hash, NULL, NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT, tx_hash, NULL, -1,
TRUE, FALSE, NM_SETTING_TEAM_RUNNER_SYS_PRIO_DEFAULT, 0, TRUE, FALSE, -1, -1,
NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY_DEFAULT, NULL,
NULL); NULL);
_test_team_config_sync ("{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], " _test_team_config_sync ("{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], "
"\"active\": false, \"fast_rate\": true, \"sys_prio\": 10, \"min_ports\": 5, " "\"active\": false, \"fast_rate\": true, \"sys_prio\": 10, \"min_ports\": 5, "
"\"agg_select_policy\": \"port_config\"}}", "\"agg_select_policy\": \"port_config\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
NM_SETTING_TEAM_RUNNER_LACP, NM_SETTING_TEAM_RUNNER_LACP,
NULL, NULL,
tx_hash, NULL, NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL_DEFAULT, tx_hash, NULL, -1,
FALSE, TRUE, 10, 5, "port_config", FALSE, TRUE, 10, 5, "port_config",
NULL); NULL);
} }
@ -1177,11 +1176,11 @@ test_watcher_ethtool_sync_from_config (void)
link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref); link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
g_ptr_array_add (link_watchers, nm_team_link_watcher_new_ethtool (0, 0, NULL)); g_ptr_array_add (link_watchers, nm_team_link_watcher_new_ethtool (0, 0, NULL));
_test_team_config_sync ("{\"link_watch\": {\"name\": \"ethtool\"}}", _test_team_config_sync ("{\"link_watch\": {\"name\": \"ethtool\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
"roundrobin", NULL,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
link_watchers); link_watchers);
} }
@ -1193,11 +1192,11 @@ test_watcher_nsna_ping_sync_from_config (void)
link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref); link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
g_ptr_array_add (link_watchers, nm_team_link_watcher_new_nsna_ping (0, 0, 3, "target.host", NULL)); g_ptr_array_add (link_watchers, nm_team_link_watcher_new_nsna_ping (0, 0, 3, "target.host", NULL));
_test_team_config_sync ("{\"link_watch\": {\"name\": \"nsna_ping\", \"target_host\": \"target.host\"}}", _test_team_config_sync ("{\"link_watch\": {\"name\": \"nsna_ping\", \"target_host\": \"target.host\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
"roundrobin", NULL,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
link_watchers); link_watchers);
} }
@ -1211,11 +1210,11 @@ test_watcher_arp_ping_sync_from_config (void)
nm_team_link_watcher_new_arp_ping (0, 0, 3, "target.host", "source.host", 0, NULL)); nm_team_link_watcher_new_arp_ping (0, 0, 3, "target.host", "source.host", 0, NULL));
_test_team_config_sync ("{\"link_watch\": {\"name\": \"arp_ping\", \"target_host\": \"target.host\", " _test_team_config_sync ("{\"link_watch\": {\"name\": \"arp_ping\", \"target_host\": \"target.host\", "
"\"source_host\": \"source.host\"}}", "\"source_host\": \"source.host\"}}",
0, 0, 0, 0, -1, -1, -1, -1,
"roundrobin", NULL,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
link_watchers); link_watchers);
} }
@ -1240,11 +1239,11 @@ test_multiple_watchers_sync_from_config (void)
"\"validate_active\": true, \"validate_inactive\": true, \"send_always\": true}, " "\"validate_active\": true, \"validate_inactive\": true, \"send_always\": true}, "
"{\"name\": \"nsna_ping\", \"init_wait\": 3, \"interval\": 6, \"missed_max\": 9, " "{\"name\": \"nsna_ping\", \"init_wait\": 3, \"interval\": 6, \"missed_max\": 9, "
"\"target_host\": \"target.host\"}]}", "\"target_host\": \"target.host\"}]}",
0, 0, 0, 0, -1, -1, -1, -1,
"roundrobin", NULL,
NULL, NULL,
NULL, NULL, -1, NULL, NULL, -1,
FALSE, FALSE, -1, -1, NULL, TRUE, FALSE, -1, -1, NULL,
link_watchers); link_watchers);
} }
@ -1300,52 +1299,52 @@ _test_team_port_config_sync (const char *team_port_config,
static void static void
test_team_port_default (void) test_team_port_default (void)
{ {
_test_team_port_config_sync ("", -1, 0, FALSE, 255, 0, NULL); _test_team_port_config_sync ("", -1, 0, FALSE, -1, -1, NULL);
} }
static void static void
test_team_port_queue_id (void) test_team_port_queue_id (void)
{ {
_test_team_port_config_sync ("{\"queue_id\": 3}", _test_team_port_config_sync ("{\"queue_id\": 3}",
3, 0, FALSE, 255, 0, NULL); 3, 0, FALSE, -1, -1, NULL);
_test_team_port_config_sync ("{\"queue_id\": 0}", _test_team_port_config_sync ("{\"queue_id\": 0}",
0, 0, FALSE, 255, 0, NULL); 0, 0, FALSE, -1, -1, NULL);
} }
static void static void
test_team_port_prio (void) test_team_port_prio (void)
{ {
_test_team_port_config_sync ("{\"prio\": 6}", _test_team_port_config_sync ("{\"prio\": 6}",
-1, 6, FALSE, 255, 0, NULL); -1, 6, FALSE, -1, -1, NULL);
_test_team_port_config_sync ("{\"prio\": 0}", _test_team_port_config_sync ("{\"prio\": 0}",
-1, 0, FALSE, 255, 0, NULL); -1, 0, FALSE, -1, -1, NULL);
} }
static void static void
test_team_port_sticky (void) test_team_port_sticky (void)
{ {
_test_team_port_config_sync ("{\"sticky\": true}", _test_team_port_config_sync ("{\"sticky\": true}",
-1, 0, TRUE, 255, 0, NULL); -1, 0, TRUE, -1, -1, NULL);
_test_team_port_config_sync ("{\"sticky\": false}", _test_team_port_config_sync ("{\"sticky\": false}",
-1, 0, FALSE, 255, 0, NULL); -1, 0, FALSE, -1, -1, NULL);
} }
static void static void
test_team_port_lacp_prio (void) test_team_port_lacp_prio (void)
{ {
_test_team_port_config_sync ("{\"lacp_prio\": 9}", _test_team_port_config_sync ("{\"lacp_prio\": 9}",
-1, 0, FALSE, 9, 0, NULL); -1, 0, FALSE, 9, -1, NULL);
_test_team_port_config_sync ("{\"lacp_prio\": 0}", _test_team_port_config_sync ("{\"lacp_prio\": 0}",
-1, 0, FALSE, 0, 0, NULL); -1, 0, FALSE, 0, -1, NULL);
} }
static void static void
test_team_port_lacp_key (void) test_team_port_lacp_key (void)
{ {
_test_team_port_config_sync ("{\"lacp_key\": 12}", _test_team_port_config_sync ("{\"lacp_key\": 12}",
-1, 0, FALSE, 255, 12, NULL); -1, 0, FALSE, -1, 12, NULL);
_test_team_port_config_sync ("{\"lacp_key\": 0}", _test_team_port_config_sync ("{\"lacp_key\": 0}",
-1, 0, FALSE, 255, 0, NULL); -1, 0, FALSE, -1, 0, NULL);
} }
static void static void
@ -1386,20 +1385,6 @@ _check_team_setting (NMSetting *setting)
g_assert (NM_IS_SETTING_TEAM (setting) || is_port); g_assert (NM_IS_SETTING_TEAM (setting) || is_port);
setting_clone = nm_setting_duplicate (setting);
if (!is_port) {
if (nm_setting_team_get_runner (NM_SETTING_TEAM (setting)) == NULL) {
/* such a setting is invalid. We must first coerce it so that it becomes
* valid. */
setting = setting_clone;
g_object_set (setting,
NM_SETTING_TEAM_RUNNER,
NM_SETTING_TEAM_RUNNER_DEFAULT,
NULL);
}
}
setting2 = g_object_new (G_OBJECT_TYPE (setting), setting2 = g_object_new (G_OBJECT_TYPE (setting),
is_port is_port
? NM_SETTING_TEAM_PORT_CONFIG ? NM_SETTING_TEAM_PORT_CONFIG
@ -1420,6 +1405,7 @@ _check_team_setting (NMSetting *setting)
* For that, we have to "drop" the JSON and we do that by resetting the property. * For that, we have to "drop" the JSON and we do that by resetting the property.
* This causes JSON to be regenerated and it's in a normalized form that will compare * This causes JSON to be regenerated and it's in a normalized form that will compare
* equal. */ * equal. */
setting_clone = nm_setting_duplicate (setting);
setting = setting_clone; setting = setting_clone;
if (is_port) { if (is_port) {
g_object_set (setting, g_object_set (setting,
@ -1469,7 +1455,7 @@ test_team_setting (void)
_check_team_setting (setting); _check_team_setting (setting);
g_assert_cmpint (nm_setting_team_get_num_link_watchers (NM_SETTING_TEAM (setting)), ==, 1); g_assert_cmpint (nm_setting_team_get_num_link_watchers (NM_SETTING_TEAM (setting)), ==, 1);
g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"ethtool\"} }"); g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"ethtool\" } }");
nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0); nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0);
@ -1479,11 +1465,11 @@ test_team_setting (void)
nm_setting_team_add_link_watcher (NM_SETTING_TEAM (setting), watcher1); nm_setting_team_add_link_watcher (NM_SETTING_TEAM (setting), watcher1);
_check_team_setting (setting); _check_team_setting (setting);
g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"nsna_ping\", \"target_host\": \"bbb\", \"init_wait\": 1, \"interval\": 3, \"missed_max\": 4} }"); g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"nsna_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"target_host\": \"bbb\" } }");
nm_setting_team_add_link_watcher (NM_SETTING_TEAM (setting), watcher2); nm_setting_team_add_link_watcher (NM_SETTING_TEAM (setting), watcher2);
_check_team_setting (setting); _check_team_setting (setting);
g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": [ { \"name\": \"nsna_ping\", \"target_host\": \"bbb\", \"init_wait\": 1, \"interval\": 3, \"missed_max\": 4}, { \"name\": \"arp_ping\", \"target_host\": \"ccc\", \"source_host\": \"ddd\", \"init_wait\": 1, \"interval\": 3, \"missed_max\": 4} ] }"); g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": [ { \"name\": \"nsna_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"target_host\": \"bbb\" }, { \"name\": \"arp_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"source_host\": \"ddd\", \"target_host\": \"ccc\" } ] }");
nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0); nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0);
nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0); nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0);
@ -1499,6 +1485,12 @@ test_team_setting (void)
NULL); NULL);
_check_team_setting (setting); _check_team_setting (setting);
g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"tx_balancer\": { \"balancing_interval\": 5 }, \"sys_prio\": 10 } }"); g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"tx_balancer\": { \"balancing_interval\": 5 }, \"sys_prio\": 10 } }");
g_object_set (setting,
NM_SETTING_TEAM_CONFIG,
"{ \"runner\": { \"tx_hash\": [ \"eth\", \"l3\" ] } }",
NULL);
_check_team_setting (setting);
} }
/*****************************************************************************/ /*****************************************************************************/