From 5de50546e71f286e78f2c2ed2e3892c549d4c5c2 Mon Sep 17 00:00:00 2001 From: Marian Pritsak Date: Wed, 7 Nov 2018 20:45:57 +0200 Subject: [PATCH] [vrfmgrd]: Support VNET setting (#657) * [vrfmgrd]: Support VNET setting Signed-off-by: Marian Pritsak * Use VRF/VNET as a tunnel map name Signed-off-by: Marian Pritsak * Handle VNET and VRF the same way Signed-off-by: Marian Pritsak --- cfgmgr/vrfmgr.cpp | 19 +++++++++++++++++++ cfgmgr/vrfmgr.h | 2 ++ cfgmgr/vrfmgrd.cpp | 1 + 3 files changed, 22 insertions(+) diff --git a/cfgmgr/vrfmgr.cpp b/cfgmgr/vrfmgr.cpp index 5c3563f511ee..43957f3b8558 100644 --- a/cfgmgr/vrfmgr.cpp +++ b/cfgmgr/vrfmgr.cpp @@ -15,6 +15,8 @@ using namespace swss; VrfMgr::VrfMgr(DBConnector *cfgDb, DBConnector *appDb, DBConnector *stateDb, const vector &tableNames) : Orch(cfgDb, tableNames), + m_appVrfTableProducer(appDb, APP_VRF_TABLE_NAME), + m_appVnetTableProducer(appDb, APP_VNET_TABLE_NAME), m_stateVrfTable(stateDb, STATE_VRF_TABLE_NAME) { for (uint32_t i = VRF_TABLE_START; i < VRF_TABLE_END; i++) @@ -160,6 +162,14 @@ void VrfMgr::doTask(Consumer &consumer) m_stateVrfTable.set(vrfName, fvVector); SWSS_LOG_NOTICE("Created vrf netdev %s", vrfName.c_str()); + if (consumer.getTableName() == APP_VRF_TABLE_NAME) + { + m_appVrfTableProducer.set(vrfName, kfvFieldsValues(t)); + } + else + { + m_appVnetTableProducer.set(vrfName, kfvFieldsValues(t)); + } } else if (op == DEL_COMMAND) { @@ -170,6 +180,15 @@ void VrfMgr::doTask(Consumer &consumer) m_stateVrfTable.del(vrfName); + if (consumer.getTableName() == APP_VRF_TABLE_NAME) + { + m_appVrfTableProducer.del(vrfName); + } + else + { + m_appVnetTableProducer.del(vrfName); + } + SWSS_LOG_NOTICE("Removed vrf netdev %s", vrfName.c_str()); } else diff --git a/cfgmgr/vrfmgr.h b/cfgmgr/vrfmgr.h index 8520f9526cc8..ab20b7ffd34a 100644 --- a/cfgmgr/vrfmgr.h +++ b/cfgmgr/vrfmgr.h @@ -23,12 +23,14 @@ class VrfMgr : public Orch bool setLink(const string& vrfName); void recycleTable(uint32_t table); uint32_t getFreeTable(void); + void handleVnetConfigSet(KeyOpFieldsValuesTuple &t); void doTask(Consumer &consumer); map m_vrfTableMap; set m_freeTables; Table m_stateVrfTable; + ProducerStateTable m_appVrfTableProducer, m_appVnetTableProducer; }; } diff --git a/cfgmgr/vrfmgrd.cpp b/cfgmgr/vrfmgrd.cpp index 9d76d93402c6..dc01641002be 100644 --- a/cfgmgr/vrfmgrd.cpp +++ b/cfgmgr/vrfmgrd.cpp @@ -42,6 +42,7 @@ int main(int argc, char **argv) { vector cfg_vrf_tables = { CFG_VRF_TABLE_NAME, + CFG_VNET_TABLE_NAME, }; DBConnector cfgDb(CONFIG_DB, DBConnector::DEFAULT_UNIXSOCKET, 0);