From 8988ee5c6296ce687285817368c957ba2e48c6d9 Mon Sep 17 00:00:00 2001 From: Pavel Shirshov Date: Wed, 22 Jan 2020 17:38:13 -0800 Subject: [PATCH] Define lacp key to make possible create two or more lacp channels between 1 switch --- cfgmgr/teammgr.cpp | 8 +++++++- cfgmgr/teammgr.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/cfgmgr/teammgr.cpp b/cfgmgr/teammgr.cpp index 6121c30f0c..1f21a3ce0b 100644 --- a/cfgmgr/teammgr.cpp +++ b/cfgmgr/teammgr.cpp @@ -134,7 +134,7 @@ pid_t TeamMgr::getTeamPid(const string &alias) { SWSS_LOG_WARN("The LAG PID file: %s is empty", file.c_str()); } - else + else { /*Store the PID value */ pid = stoi(line, nullptr, 10); @@ -541,6 +541,8 @@ task_process_status TeamMgr::addLag(const string &alias, int min_links, bool fal return task_need_retry; } + m_lagKeys[alias] = m_lacp_key++; + SWSS_LOG_NOTICE("Start port channel %s with teamd", alias.c_str()); return task_success; @@ -556,6 +558,8 @@ bool TeamMgr::removeLag(const string &alias) cmd << TEAMD_CMD << " -k -t " << shellquote(alias); EXEC_WITH_ERROR_THROW(cmd.str(), res); + m_lagKeys.erase(alias); + SWSS_LOG_NOTICE("Stop port channel %s", alias.c_str()); return true; @@ -582,6 +586,8 @@ task_process_status TeamMgr::addLagMember(const string &lag, const string &membe // ip link set dev down; // teamdctl port add ; cmd << IP_CMD << " link set dev " << shellquote(member) << " down; "; + cmd << TEAMDCTL_CMD << " " << shellquote(lag) << " port config update " << shellquote(member) << " "; + cmd << "'{\"prio\": 255, \"link_watch\": { \"name\": \"ethtool\" }, \"lacp_key\": "<< m_lagKeys[lag] <<"}';"; cmd << TEAMDCTL_CMD << " " << shellquote(lag) << " port add " << shellquote(member); if (exec(cmd.str(), res) != 0) diff --git a/cfgmgr/teammgr.h b/cfgmgr/teammgr.h index 9003d25d54..130263842b 100644 --- a/cfgmgr/teammgr.h +++ b/cfgmgr/teammgr.h @@ -36,6 +36,9 @@ class TeamMgr : public Orch MacAddress m_mac; + unsigned short m_lacp_key = 0; + std::map m_lagKeys; + void doTask(Consumer &consumer); void doLagTask(Consumer &consumer); void doLagMemberTask(Consumer &consumer);