Skip to content

Commit

Permalink
[teamsyncd]: Add support for lag state in stateDB (sonic-net#344)
Browse files Browse the repository at this point in the history
Create an entry in stateDB for each LAG created, and delete the entry when lag removed

Signed-off-by: Jipan Yang <jipan.yang@alibaba-inc.com>
  • Loading branch information
jipanyang authored and lguohan committed Oct 25, 2017
1 parent 3b7c3e3 commit c44567b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
11 changes: 9 additions & 2 deletions teamsyncd/teamsync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ using namespace swss;
/* Taken from drivers/net/team/team.c */
#define TEAM_DRV_NAME "team"

TeamSync::TeamSync(DBConnector *db, Select *select) :
TeamSync::TeamSync(DBConnector *db, DBConnector *stateDb, Select *select) :
m_select(select),
m_lagTable(db, APP_LAG_TABLE_NAME),
m_lagMemberTable(db, APP_LAG_MEMBER_TABLE_NAME)
m_lagMemberTable(db, APP_LAG_MEMBER_TABLE_NAME),
m_stateLagTable(stateDb, STATE_LAG_TABLE_NAME, CONFIGDB_TABLE_NAME_SEPARATOR)
{
}

Expand Down Expand Up @@ -72,6 +73,11 @@ void TeamSync::addLag(const string &lagName, int ifindex, bool admin_state,
auto sync = make_shared<TeamPortSync>(lagName, ifindex, &m_lagMemberTable);
m_select->addSelectable(sync.get());
m_teamPorts[lagName] = sync;

fvVector.clear();
FieldValueTuple s("state", "ok");
fvVector.push_back(s);
m_stateLagTable.set(lagName, fvVector);
}

void TeamSync::removeLag(const string &lagName)
Expand All @@ -88,6 +94,7 @@ void TeamSync::removeLag(const string &lagName)
/* No longer track the current team instance */
m_select->removeSelectable(m_teamPorts[lagName].get());
m_teamPorts.erase(lagName);
m_stateLagTable.del(lagName);
}

const struct team_change_handler TeamSync::TeamPortSync::gPortChangeHandler = {
Expand Down
3 changes: 2 additions & 1 deletion teamsyncd/teamsync.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace swss {
class TeamSync : public NetMsg
{
public:
TeamSync(DBConnector *db, Select *select);
TeamSync(DBConnector *db, DBConnector *stateDb, Select *select);

/*
* Listens to RTM_NEWLINK and RTM_DELLINK to undestand if there is a new
Expand Down Expand Up @@ -59,6 +59,7 @@ class TeamSync : public NetMsg
Select *m_select;
ProducerStateTable m_lagTable;
ProducerStateTable m_lagMemberTable;
Table m_stateLagTable;
std::map<std::string, std::shared_ptr<TeamPortSync> > m_teamPorts;
};

Expand Down
3 changes: 2 additions & 1 deletion teamsyncd/teamsyncd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ int main(int argc, char **argv)
{
swss::Logger::linkToDbNative("teamsyncd");
DBConnector db(APPL_DB, DBConnector::DEFAULT_UNIXSOCKET, 0);
DBConnector stateDb(STATE_DB, DBConnector::DEFAULT_UNIXSOCKET, 0);
Select s;
TeamSync sync(&db, &s);
TeamSync sync(&db, &stateDb, &s);

NetDispatcher::getInstance().registerMessageHandler(RTM_NEWLINK, &sync);
NetDispatcher::getInstance().registerMessageHandler(RTM_DELLINK, &sync);
Expand Down

0 comments on commit c44567b

Please sign in to comment.