Skip to content

Commit 1b89185

Browse files
[bitmap_vnet] Fix VNET route priority issue (#1421)
Signed-off-by: Volodymyr Samotiy <[email protected]>
1 parent c5d109f commit 1b89185

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

orchagent/vnetorch.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -387,11 +387,20 @@ void VNetBitmapObject::recycleBitmapId(const string& vnet)
387387
}
388388
}
389389

390-
uint32_t VNetBitmapObject::getFreeTunnelRouteTableOffset()
390+
uint32_t VNetBitmapObject::getFreeTunnelRouteTableOffset(IpPrefix ipPfx)
391391
{
392392
SWSS_LOG_ENTER();
393393

394-
for (uint32_t i = 0; i < tunnelOffsets_.size(); i++)
394+
uint32_t offsetStart = VNET_ROUTE_FULL_MASK_OFFSET_MAX + 1;
395+
uint32_t offsetEnd = tunnelOffsets_.size();
396+
397+
if (ipPfx.isFullMask())
398+
{
399+
offsetStart = 0;
400+
offsetEnd = VNET_ROUTE_FULL_MASK_OFFSET_MAX;
401+
}
402+
403+
for (uint32_t i = offsetStart; i < offsetEnd; i++)
395404
{
396405
if (tunnelOffsets_[i] == false)
397406
{
@@ -1010,7 +1019,7 @@ bool VNetBitmapObject::addTunnelRoute(IpPrefix& ipPrefix, tunnelEndpoint& endp)
10101019
attr.value.s32 = SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP;
10111020
tr_attrs.push_back(attr);
10121021

1013-
tunnelRouteInfo.offset = getFreeTunnelRouteTableOffset();
1022+
tunnelRouteInfo.offset = getFreeTunnelRouteTableOffset(ipPrefix);
10141023
attr.id = SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY;
10151024
attr.value.u32 = tunnelRouteInfo.offset;
10161025
tr_attrs.push_back(attr);
@@ -1227,7 +1236,7 @@ bool VNetBitmapObject::addRoute(IpPrefix& ipPrefix, nextHop& nh)
12271236
return true;
12281237
}
12291238

1230-
routeInfo.offset = getFreeTunnelRouteTableOffset();
1239+
routeInfo.offset = getFreeTunnelRouteTableOffset(ipPrefix);
12311240
attr.id = SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY;
12321241
attr.value.u32 = routeInfo.offset;
12331242
attrs.push_back(attr);

orchagent/vnetorch.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#define VNET_BITMAP_SIZE 32
1717
#define VNET_TUNNEL_SIZE 40960
18+
#define VNET_ROUTE_FULL_MASK_OFFSET_MAX 3000
1819
#define VNET_NEIGHBOR_MAX 0xffff
1920
#define VXLAN_ENCAP_TTL 128
2021
#define VNET_BITMAP_RIF_MTU 9100
@@ -268,7 +269,7 @@ class VNetBitmapObject: public VNetObject
268269
static uint32_t getBitmapId(const string& name);
269270
static void recycleBitmapId(const string& name);
270271

271-
static uint32_t getFreeTunnelRouteTableOffset();
272+
static uint32_t getFreeTunnelRouteTableOffset(IpPrefix ipPfx);
272273
static void recycleTunnelRouteTableOffset(uint32_t offset);
273274

274275
static uint16_t getFreeTunnelId();

0 commit comments

Comments
 (0)