Skip to content

Commit a1bd364

Browse files
vadymhlushko-mlnxdaall
authored andcommitted
[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 ec97e8e commit a1bd364

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
@@ -190,6 +190,27 @@ bool NbrMgr::setNeighbor(const string& alias, const IpAddress& ip, const MacAddr
190190
return send_message(m_nl_sock, msg);
191191
}
192192

193+
/**
194+
* Parse APPL_DB neighbors resolve table.
195+
*
196+
* @param [app_db_nbr_tbl_key], key from APPL_DB - APP_NEIGH_RESOLVE_TABLE_NAME
197+
* @param [delimiter], APPL_DB delimiter ":"
198+
*
199+
* @return the string vector which contain the VLAN alias and IP address
200+
*/
201+
vector<string> NbrMgr::parseAliasIp(const string &app_db_nbr_tbl_key, const char *delimiter)
202+
{
203+
vector<string> ret;
204+
size_t found = app_db_nbr_tbl_key.find(delimiter);
205+
string alias = app_db_nbr_tbl_key.substr(0, found);
206+
string ip_address = app_db_nbr_tbl_key.substr(found + 1, app_db_nbr_tbl_key.size() - 1);
207+
208+
ret.push_back(alias);
209+
ret.push_back(ip_address);
210+
211+
return ret;
212+
}
213+
193214
void NbrMgr::doResolveNeighTask(Consumer &consumer)
194215
{
195216
SWSS_LOG_ENTER();
@@ -198,7 +219,8 @@ void NbrMgr::doResolveNeighTask(Consumer &consumer)
198219
while (it != consumer.m_toSync.end())
199220
{
200221
KeyOpFieldsValuesTuple t = it->second;
201-
vector<string> keys = tokenize(kfvKey(t),delimiter);
222+
vector<string> keys = parseAliasIp(kfvKey(t), consumer.getConsumerTable()->getTableNameSeparator().c_str());
223+
202224
MacAddress mac;
203225
IpAddress ip(keys[1]);
204226
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)