Skip to content

Commit

Permalink
[bitmap_vnet] Fix VNET route priority issue (#1421)
Browse files Browse the repository at this point in the history
Signed-off-by: Volodymyr Samotiy <volodymyrs@mellanox.com>
  • Loading branch information
volodymyrsamotiy committed Sep 3, 2020
1 parent c5d109f commit 1b89185
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
17 changes: 13 additions & 4 deletions orchagent/vnetorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -387,11 +387,20 @@ void VNetBitmapObject::recycleBitmapId(const string& vnet)
}
}

uint32_t VNetBitmapObject::getFreeTunnelRouteTableOffset()
uint32_t VNetBitmapObject::getFreeTunnelRouteTableOffset(IpPrefix ipPfx)
{
SWSS_LOG_ENTER();

for (uint32_t i = 0; i < tunnelOffsets_.size(); i++)
uint32_t offsetStart = VNET_ROUTE_FULL_MASK_OFFSET_MAX + 1;
uint32_t offsetEnd = tunnelOffsets_.size();

if (ipPfx.isFullMask())
{
offsetStart = 0;
offsetEnd = VNET_ROUTE_FULL_MASK_OFFSET_MAX;
}

for (uint32_t i = offsetStart; i < offsetEnd; i++)
{
if (tunnelOffsets_[i] == false)
{
Expand Down Expand Up @@ -1010,7 +1019,7 @@ bool VNetBitmapObject::addTunnelRoute(IpPrefix& ipPrefix, tunnelEndpoint& endp)
attr.value.s32 = SAI_TABLE_BITMAP_ROUTER_ENTRY_ACTION_TO_NEXTHOP;
tr_attrs.push_back(attr);

tunnelRouteInfo.offset = getFreeTunnelRouteTableOffset();
tunnelRouteInfo.offset = getFreeTunnelRouteTableOffset(ipPrefix);
attr.id = SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY;
attr.value.u32 = tunnelRouteInfo.offset;
tr_attrs.push_back(attr);
Expand Down Expand Up @@ -1227,7 +1236,7 @@ bool VNetBitmapObject::addRoute(IpPrefix& ipPrefix, nextHop& nh)
return true;
}

routeInfo.offset = getFreeTunnelRouteTableOffset();
routeInfo.offset = getFreeTunnelRouteTableOffset(ipPrefix);
attr.id = SAI_TABLE_BITMAP_ROUTER_ENTRY_ATTR_PRIORITY;
attr.value.u32 = routeInfo.offset;
attrs.push_back(attr);
Expand Down
3 changes: 2 additions & 1 deletion orchagent/vnetorch.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

#define VNET_BITMAP_SIZE 32
#define VNET_TUNNEL_SIZE 40960
#define VNET_ROUTE_FULL_MASK_OFFSET_MAX 3000
#define VNET_NEIGHBOR_MAX 0xffff
#define VXLAN_ENCAP_TTL 128
#define VNET_BITMAP_RIF_MTU 9100
Expand Down Expand Up @@ -268,7 +269,7 @@ class VNetBitmapObject: public VNetObject
static uint32_t getBitmapId(const string& name);
static void recycleBitmapId(const string& name);

static uint32_t getFreeTunnelRouteTableOffset();
static uint32_t getFreeTunnelRouteTableOffset(IpPrefix ipPfx);
static void recycleTunnelRouteTableOffset(uint32_t offset);

static uint16_t getFreeTunnelId();
Expand Down

0 comments on commit 1b89185

Please sign in to comment.