[PATCH] team: read team port configuration when generating connections



Now that libteam 1.9 can return port configuration, use it.  This
bumps the requirement to libteam 1.9.
---
 configure.ac                 |  2 +-
 src/devices/nm-device-team.c | 25 ++++++++++++++++++-------
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/configure.ac b/configure.ac
index be15f79..e59b8c2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -363,15 +363,15 @@ if (test "${enable_wimax}" = "yes"); then
        AC_DEFINE(WITH_WIMAX, 1, [Define if you have WiMAX support])
 else
        AC_DEFINE(WITH_WIMAX, 0, [Define if you have WiMAX support])
 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
        if test x"$have_teamdctl" = x"no"; then
                AC_MSG_ERROR(Teamd control is required)
        fi
 
diff --git a/src/devices/nm-device-team.c b/src/devices/nm-device-team.c
index 8f119dd..b918a7f 100644
--- a/src/devices/nm-device-team.c
+++ b/src/devices/nm-device-team.c
@@ -272,35 +272,46 @@ nm_team_update_slave_connection (NMDevice *slave, NMConnection *connection)
 
        tdc = teamdctl_alloc ();
        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);
-               teamdctl_free (tdc);
-               return FALSE;
+               goto done;
        }
-       /* FIXME: wait for libteamd to implement getting port config */
-/*     port_config = teamdctl_port_config_get_raw (tdc, iface); */
-       teamdctl_free (tdc);
+
+       /* Read port configuration from master teamd instance */
+       err = teamdctl_port_config_get_raw_direct (tdc, iface, &port_config);
+       if (err) {
+               g_assert (port_config == NULL);
+               nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration (%d)",
+                           iface, err);
+               goto done;
+       }
+       g_warn_if_fail (port_config != NULL);
+#else
+       nm_log_err (LOGD_TEAM, "(%s): failed to read teamd port configuration", iface);
 #endif
 
        s_port = nm_connection_get_setting_team_port (connection);
        if (!s_port) {
                s_port = (NMSettingTeamPort *) nm_setting_team_port_new ();
                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);
+       }
 
+#if WITH_TEAMDCTL
+done:
+       teamdctl_free (tdc);
+#endif
        return success;
 }
 
 /******************************************************************/
 
 static gboolean
 ensure_killed (gpointer data)
-- 
1.8.3.1




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]