Skip to content

Commit 48dc60e

Browse files
[nbrmgrd] added function to parse IP address from APP_DB (#1672)
* [nbrmgrd] added function to parse IP address from APP_DB Signed-off-by: Vadym Hlushko <[email protected]>
1 parent e6d9790 commit 48dc60e

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

cfgmgr/nbrmgr.cpp

+23-1
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,27 @@ bool NbrMgr::setNeighbor(const string& alias, const IpAddress& ip, const MacAddr
205205
return send_message(m_nl_sock, msg);
206206
}
207207

208+
/**
209+
* Parse APPL_DB neighbors resolve table.
210+
*
211+
* @param [app_db_nbr_tbl_key], key from APPL_DB - APP_NEIGH_RESOLVE_TABLE_NAME
212+
* @param [delimiter], APPL_DB delimiter ":"
213+
*
214+
* @return the string vector which contain the VLAN alias and IP address
215+
*/
216+
vector<string> NbrMgr::parseAliasIp(const string &app_db_nbr_tbl_key, const char *delimiter)
217+
{
218+
vector<string> ret;
219+
size_t found = app_db_nbr_tbl_key.find(delimiter);
220+
string alias = app_db_nbr_tbl_key.substr(0, found);
221+
string ip_address = app_db_nbr_tbl_key.substr(found + 1, app_db_nbr_tbl_key.size() - 1);
222+
223+
ret.push_back(alias);
224+
ret.push_back(ip_address);
225+
226+
return ret;
227+
}
228+
208229
void NbrMgr::doResolveNeighTask(Consumer &consumer)
209230
{
210231
SWSS_LOG_ENTER();
@@ -213,7 +234,8 @@ void NbrMgr::doResolveNeighTask(Consumer &consumer)
213234
while (it != consumer.m_toSync.end())
214235
{
215236
KeyOpFieldsValuesTuple t = it->second;
216-
vector<string> keys = tokenize(kfvKey(t),delimiter);
237+
vector<string> keys = parseAliasIp(kfvKey(t), consumer.getConsumerTable()->getTableNameSeparator().c_str());
238+
217239
MacAddress mac;
218240
IpAddress ip(keys[1]);
219241
string alias(keys[0]);

cfgmgr/nbrmgr.h

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class NbrMgr : public Orch
2626
bool isIntfStateOk(const std::string &alias);
2727
bool setNeighbor(const std::string& alias, const IpAddress& ip, const MacAddress& mac);
2828

29+
vector<string> parseAliasIp(const string &app_db_nbr_tbl_key, const char *delimiter);
30+
2931
void doResolveNeighTask(Consumer &consumer);
3032
void doSetNeighTask(Consumer &consumer);
3133
void doTask(Consumer &consumer);

tests/test_neighbor.py

+29-7
Original file line numberDiff line numberDiff line change
@@ -389,10 +389,32 @@ def test_NeighborAddRemoveIpv4WithVrf(self, dvs, testlog):
389389
tbl = swsscommon.Table(self.adb, "ASIC_STATE:SAI_OBJECT_TYPE_NEIGHBOR_ENTRY")
390390
current_neigh_entries_cnt = len(tbl.getKeys())
391391
dec_neigh_entries_cnt = (old_neigh_entries_cnt - current_neigh_entries_cnt)
392-
assert dec_neigh_entries_cnt == 1
393-
394-
395-
# Add Dummy always-pass test at end as workaroud
396-
# for issue when Flaky fail on final test it invokes module tear-down before retrying
397-
def test_nonflaky_dummy():
398-
pass
392+
assert dec_neigh_entries_cnt == 1
393+
394+
def test_FlushResolveNeighborIpv6(self, dvs, testlog):
395+
appl_db = swsscommon.DBConnector(swsscommon.APPL_DB, dvs.redis_sock, 0)
396+
prod_state_tbl = swsscommon.ProducerStateTable(appl_db, swsscommon.APP_NEIGH_RESOLVE_TABLE_NAME)
397+
fvs = swsscommon.FieldValuePairs([("mac", "52:54:00:25:06:E9")])
398+
399+
prod_state_tbl.set("Vlan2:2000:1::1", fvs)
400+
time.sleep(2)
401+
402+
(exitcode, output) = dvs.runcmd(['sh', '-c', "supervisorctl status nbrmgrd | awk '{print $2}'"])
403+
assert output == "RUNNING\n"
404+
405+
def test_FlushResolveNeighborIpv4(self, dvs, testlog):
406+
appl_db = swsscommon.DBConnector(swsscommon.APPL_DB, dvs.redis_sock, 0)
407+
prod_state_tbl = swsscommon.ProducerStateTable(appl_db, swsscommon.APP_NEIGH_RESOLVE_TABLE_NAME)
408+
fvs = swsscommon.FieldValuePairs([("mac", "52:54:00:25:06:E9")])
409+
410+
prod_state_tbl.set("Vlan2:192.168.10.1", fvs)
411+
time.sleep(2)
412+
413+
(exitcode, output) = dvs.runcmd(['sh', '-c', "supervisorctl status nbrmgrd | awk '{print $2}'"])
414+
assert output == "RUNNING\n"
415+
416+
417+
# Add Dummy always-pass test at end as workaroud
418+
# for issue when Flaky fail on final test it invokes module tear-down before retrying
419+
def test_nonflaky_dummy():
420+
pass

0 commit comments

Comments
 (0)