diff --git a/teamsyncd/Makefile.am b/teamsyncd/Makefile.am index c72498d9e3..594ea1ba94 100644 --- a/teamsyncd/Makefile.am +++ b/teamsyncd/Makefile.am @@ -12,7 +12,7 @@ teamsyncd_SOURCES = teamsyncd.cpp teamsync.cpp teamsyncd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) teamsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN) -teamsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lhiredis -lswsscommon -lteam +teamsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lhiredis -lswsscommon -lteam -lteamdctl if GCOV_ENABLED teamsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp diff --git a/teamsyncd/teamsync.cpp b/teamsyncd/teamsync.cpp index e8dcb1fc55..93c48547ef 100644 --- a/teamsyncd/teamsync.cpp +++ b/teamsyncd/teamsync.cpp @@ -12,6 +12,8 @@ #include "warm_restart.h" #include "teamsync.h" +#include +#include #include using namespace std; @@ -279,19 +281,51 @@ TeamSync::TeamPortSync::TeamPortSync(const string &lagName, int ifindex, "Unable to register port change event"); } + struct teamdctl *m_teamdctl = teamdctl_alloc(); + if (!m_teamdctl) + { + team_free(m_team); + m_team = NULL; + throw system_error(make_error_code(errc::address_not_available), + "Unable to allocate teamdctl socket"); + } + + err = teamdctl_connect(m_teamdctl, lagName.c_str(), nullptr, "usock"); + if (err) + { + team_free(m_team); + m_team = NULL; + teamdctl_free(m_teamdctl); + throw system_error(make_error_code(errc::connection_refused), + "Unable to connect to teamd"); + } + + char *response; + err = teamdctl_config_get_raw_direct(m_teamdctl, &response); + if (err) + { + team_free(m_team); + m_team = NULL; + teamdctl_disconnect(m_teamdctl); + teamdctl_free(m_teamdctl); + throw system_error(make_error_code(errc::io_error), + "Unable to get config from teamd (to prove that it is running and alive)"); + } + + teamdctl_disconnect(m_teamdctl); + teamdctl_free(m_teamdctl); + break; } catch (const system_error& e) { + SWSS_LOG_WARN("Failed to initialize team handler. LAG=%s error=%d:%s, attempt=%d", + lagName.c_str(), e.code().value(), e.what(), count); + if (++count == max_retries) { throw; } - else - { - SWSS_LOG_WARN("Failed to initialize team handler. LAG=%s error=%d:%s, attempt=%d", - lagName.c_str(), e.code().value(), e.what(), count); - } sleep(1); }