Merge fixes for handling team config team (rh #1035859)

https://bugzilla.redhat.com/show_bug.cgi?id=1035859
This commit is contained in:
Jiří Klimeš 2014-03-12 10:50:28 +01:00
commit a224f26e73
2 changed files with 35 additions and 23 deletions

View file

@ -396,7 +396,7 @@ fi
AM_CONDITIONAL(WITH_WIMAX, test "${enable_wimax}" = "yes")
# Teamd control checks
PKG_CHECK_MODULES(LIBTEAMDCTL, [libteamdctl], [have_teamdctl=yes],[have_teamdctl=no])
PKG_CHECK_MODULES(LIBTEAMDCTL, [libteamdctl >= 1.9], [have_teamdctl=yes],[have_teamdctl=no])
AC_ARG_ENABLE(teamdctl, AS_HELP_STRING([--enable-teamdctl], [enable Teamd control support]),
[enable_teamdctl=${enableval}], [enable_teamdctl=${have_teamdctl}])
if (test "${enable_teamdctl}" = "yes"); then

View file

@ -209,8 +209,9 @@ ensure_teamd_connection (NMDevice *self)
priv->tdc = teamdctl_alloc ();
g_assert (priv->tdc);
err = teamdctl_connect (priv->tdc, nm_device_get_iface (self), NULL, NULL);
if (err) {
nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd", nm_device_get_iface (self));
if (err != 0) {
nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd (err=%d)",
nm_device_get_iface (self), err);
teamdctl_free (priv->tdc);
priv->tdc = NULL;
}
@ -230,17 +231,19 @@ update_connection (NMDevice *device, NMConnection *connection)
nm_connection_add_setting (connection, (NMSetting *) s_team);
g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_INTERFACE_NAME, iface, NULL);
}
g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_CONFIG, NULL, NULL);
#if WITH_TEAMDCTL
if (ensure_teamd_connection (device)) {
char *config;
const char *config = NULL;
int err;
config = teamdctl_config_get_raw (NM_DEVICE_TEAM_GET_PRIVATE (device)->tdc);
if (config)
err = teamdctl_config_get_raw_direct (NM_DEVICE_TEAM_GET_PRIVATE (device)->tdc,
(char **)&config);
if (err == 0)
g_object_set (G_OBJECT (s_team), NM_SETTING_TEAM_CONFIG, config, NULL);
else
nm_log_err (LOGD_TEAM, "(%s): failed to read teamd config", iface);
g_free (config);
nm_log_err (LOGD_TEAM, "(%s): failed to read teamd config (err=%d)", iface, err);
}
#endif
}
@ -253,12 +256,13 @@ nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
NMSettingTeamPort *s_port;
const char *iface = nm_device_get_iface (slave);
char *port_config = NULL;
gboolean success = FALSE;
gboolean with_teamdctl = FALSE;
int err = 0;
#if WITH_TEAMDCTL
const char *master_iface;
int master_ifindex;
struct teamdctl *tdc;
int err;
const char *team_port_config = NULL;
#endif
g_return_val_if_fail (NM_IS_DEVICE (slave), FALSE);
@ -274,14 +278,15 @@ nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
g_assert (tdc);
err = teamdctl_connect (tdc, master_iface, NULL, NULL);
if (err) {
nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd for master %s",
iface, master_iface);
nm_log_err (LOGD_TEAM, "(%s): failed to connect to teamd for master %s (err=%d)",
iface, master_iface, err);
teamdctl_free (tdc);
return FALSE;
}
/* FIXME: wait for libteamd to implement getting port config */
/* port_config = teamdctl_port_config_get_raw (tdc, iface); */
err = teamdctl_port_config_get_raw_direct (tdc, iface, (char **)&team_port_config);
port_config = g_strdup (team_port_config);
teamdctl_free (tdc);
with_teamdctl = TRUE;
#endif
s_port = nm_connection_get_setting_team_port (connection);
@ -290,14 +295,20 @@ nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
nm_connection_add_setting (connection, NM_SETTING (s_port));
}
if (port_config) {
g_object_set (G_OBJECT (s_port), NM_SETTING_TEAM_PORT_CONFIG, port_config, NULL);
free (port_config);
success = TRUE;
} else
nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration", iface);
g_object_set (G_OBJECT (s_port), NM_SETTING_TEAM_PORT_CONFIG, port_config, NULL);
g_free (port_config);
return success;
if (!with_teamdctl || err != 0) {
if (!with_teamdctl)
nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration "
" (compiled without libteamdctl support)", iface);
else
nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration (err=%d)",
iface, err);
return FALSE;
}
return TRUE;
}
/******************************************************************/
@ -670,8 +681,9 @@ enslave_slave (NMDevice *device,
int err;
err = teamdctl_port_config_update_raw (priv->tdc, slave_iface, config);
if (err) {
nm_log_err (LOGD_TEAM, "(%s): failed to update config for port %s", iface, slave_iface);
if (err != 0) {
nm_log_err (LOGD_TEAM, "(%s): failed to update config for port %s (err=%d)",
iface, slave_iface, err);
return FALSE;
}
}