Skip to content

Commit

Permalink
Add best candidate search for router interface using tunnel term tabl… (
Browse files Browse the repository at this point in the history
sonic-net#370)

* Add best candidate search for router interface using tunnel term table entry

* Add unittests for rif loopback

* Add test for lag with no members
  • Loading branch information
kcudnik authored and lguohan committed Nov 5, 2018
1 parent 8ae173b commit e8df347
Show file tree
Hide file tree
Showing 4 changed files with 312 additions and 0 deletions.
89 changes: 89 additions & 0 deletions syncd/syncd_applyview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2779,6 +2779,95 @@ std::shared_ptr<SaiObj> findCurrentBestMatchForRouterInterface(
}
}

// try find tunnel by TUNNEL_TERM_TABLE_ENTRY using SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP

for (auto tmpTunnel: tmpTunnels)
{
const auto curTunnels = currentView.getNotProcessedObjectsByObjectType(SAI_OBJECT_TYPE_TUNNEL);

for (auto curTunnel: curTunnels)
{
const auto tmpTunnelTermTableEtnries = temporaryView.getNotProcessedObjectsByObjectType(SAI_OBJECT_TYPE_TUNNEL_TERM_TABLE_ENTRY);

for (auto tmpTunnelTermTableEntry: tmpTunnelTermTableEtnries)
{
auto tmpTunnelId = tmpTunnelTermTableEntry->tryGetSaiAttr(SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_ACTION_TUNNEL_ID);

if (tmpTunnelId == nullptr)
continue;

auto tmpDstIp = tmpTunnelTermTableEntry->tryGetSaiAttr(SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP);

if (tmpDstIp == nullptr)
continue;

if (tmpTunnelId->getOid() != tmpTunnel->getVid()) // not this tunnel
continue;

const auto curTunnelTermTableEtnries = currentView.getNotProcessedObjectsByObjectType(SAI_OBJECT_TYPE_TUNNEL_TERM_TABLE_ENTRY);

for (auto curTunnelTermTableEntry: curTunnelTermTableEtnries)
{
auto curTunnelId = curTunnelTermTableEntry->tryGetSaiAttr(SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_ACTION_TUNNEL_ID);

if (curTunnelId == nullptr)
continue;

auto curDstIp = curTunnelTermTableEntry->tryGetSaiAttr(SAI_TUNNEL_TERM_TABLE_ENTRY_ATTR_DST_IP);

if (curDstIp == nullptr)
continue;

if (curTunnelId->getOid() != curTunnel->getVid()) // not this tunnel
continue;

if (curDstIp->getStrAttrValue() != tmpDstIp->getStrAttrValue())
continue;

if (tmpTunnel->hasAttr(SAI_TUNNEL_ATTR_UNDERLAY_INTERFACE) &&
curTunnel->hasAttr(SAI_TUNNEL_ATTR_UNDERLAY_INTERFACE))
{
auto tmpRif = tmpTunnel->getSaiAttr(SAI_TUNNEL_ATTR_UNDERLAY_INTERFACE);
auto curRif = curTunnel->getSaiAttr(SAI_TUNNEL_ATTR_UNDERLAY_INTERFACE);

if (tmpRif->getSaiAttr()->value.oid == temporaryObj->getVid())
{
for (auto c: candidateObjects)
{
if (c.obj->getVid() != curRif->getSaiAttr()->value.oid)
continue;

SWSS_LOG_INFO("found best ROUTER_INTERFACE based on TUNNEL underlay interface %s", c.obj->str_object_id.c_str());

return c.obj;
}
}
}

if (tmpTunnel->hasAttr(SAI_TUNNEL_ATTR_OVERLAY_INTERFACE) &&
curTunnel->hasAttr(SAI_TUNNEL_ATTR_OVERLAY_INTERFACE))
{
auto tmpRif = tmpTunnel->getSaiAttr(SAI_TUNNEL_ATTR_OVERLAY_INTERFACE);
auto curRif = curTunnel->getSaiAttr(SAI_TUNNEL_ATTR_OVERLAY_INTERFACE);

if (tmpRif->getSaiAttr()->value.oid == temporaryObj->getVid())
{
for (auto c: candidateObjects)
{
if (c.obj->getVid() != curRif->getSaiAttr()->value.oid)
continue;

SWSS_LOG_INFO("found best ROUTER_INTERFACE based on TUNNEL overlay interface %s", c.obj->str_object_id.c_str());

return c.obj;
}
}
}
}
}
}
}

SWSS_LOG_NOTICE("failed to find best candidate for LOOPBACK ROUTER_INTERFACE using TUNNEL");

return nullptr;
Expand Down
31 changes: 31 additions & 0 deletions tests/brcm.pl
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,39 @@ sub test_brcm_full_testbed_config
play "full_testbed_config.rec", 0;
}

sub test_brcm_rif_loopback
{
fresh_start;

# we expect no asic operation on router interface

play "rif_loopback.rec";
play "rif_loopback.rec", 0;
play "rif_loopback.rec", 0;
play "rif_loopback.rec", 0;
play "rif_loopback.rec", 0;
play "rif_loopback.rec", 0;
}

sub test_brcm_lag_no_members
{
fresh_start;

# we expect no asic operation on lag's that has no members

play "lag_no_members.rec";
play "lag_no_members.rec", 0;
play "lag_no_members.rec", 0;
play "lag_no_members.rec", 0;
play "lag_no_members.rec", 0;
play "lag_no_members.rec", 0;
}


# RUN TESTS

test_brcm_lag_no_members;
test_brcm_rif_loopback;
test_brcm_hostif;
test_brcm_full_testbed_config;
test_brcm_remove_next_hop;
Expand Down
23 changes: 23 additions & 0 deletions tests/brcm/lag_no_members.rec
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
2018-11-02.17:07:42.110069|#|logrotate on: /var/log/swss/sairedis.rec
2018-11-02.17:07:42.110708|a|INIT_VIEW
2018-11-02.17:07:43.906345|A|SAI_STATUS_SUCCESS
2018-11-02.17:07:43.908679|c|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_INIT_SWITCH=true|SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY=0x429e60|SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY=0x429e70|SAI_SWITCH_ATTR_SWITCH_SHUTDOWN_REQUEST_NOTIFY=0x429e80|SAI_SWITCH_ATTR_SRC_MAC_ADDRESS=00:E0:EC:7B:C2:EB
2018-11-02.17:07:43.909322|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID=oid:0x0
2018-11-02.17:07:55.625825|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID=oid:0x3000000000022
2018-11-02.17:07:55.634285|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_CPU_PORT=oid:0x0
2018-11-02.17:07:55.635311|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_CPU_PORT=oid:0x1000000000001
2018-11-02.17:07:55.635438|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS=1
2018-11-02.17:07:55.636297|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS=32
2018-11-02.17:07:55.636493|g|SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0,oid:0x0
2018-11-02.17:07:55.642176|G|SAI_STATUS_SUCCESS|SAI_SWITCH_ATTR_PORT_LIST=32:oid:0x1000000000002,oid:0x1000000000003,oid:0x1000000000004,oid:0x1000000000005,oid:0x1000000000006,oid:0x1000000000007,oid:0x1000000000008,oid:0x1000000000009,oid:0x100000000000a,oid:0x100000000000b,oid:0x100000000000c,oid:0x100000000000d,oid:0x100000000000e,oid:0x100000000000f,oid:0x1000000000010,oid:0x1000000000011,oid:0x1000000000012,oid:0x1000000000013,oid:0x1000000000014,oid:0x1000000000015,oid:0x1000000000016,oid:0x1000000000017,oid:0x1000000000018,oid:0x1000000000019,oid:0x100000000001a,oid:0x100000000001b,oid:0x100000000001c,oid:0x100000000001d,oid:0x100000000001e,oid:0x100000000001f,oid:0x1000000000020,oid:0x1000000000021
2018-11-02.17:07:55.767612|c|SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY:oid:0x2300000000058b|SAI_HOSTIF_TABLE_ENTRY_ATTR_TYPE=SAI_HOSTIF_TABLE_ENTRY_TYPE_WILDCARD|SAI_HOSTIF_TABLE_ENTRY_ATTR_CHANNEL_TYPE=SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_NETDEV_PHYSICAL_PORT
2018-11-02.17:07:56.623928|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005b8|NULL=NULL
2018-11-02.17:07:56.626495|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005b9|NULL=NULL
2018-11-02.17:07:56.627043|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005ba|NULL=NULL
2018-11-02.17:07:56.627595|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005bb|NULL=NULL
2018-11-02.17:07:56.628160|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005bc|NULL=NULL
2018-11-02.17:07:56.628693|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005bd|NULL=NULL
2018-11-02.17:07:56.629536|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005be|NULL=NULL
2018-11-02.17:07:56.630662|c|SAI_OBJECT_TYPE_LAG:oid:0x20000000005bf|NULL=NULL
2018-11-02.17:07:55.798092|a|APPLY_VIEW
2018-11-02.17:07:55.799394|A|SAI_STATUS_SUCCESS
Loading

0 comments on commit e8df347

Please sign in to comment.