Skip to content

Commit 63afbd5

Browse files
Volodymyr Samotiyliat-grozovik
Volodymyr Samotiy
authored andcommitted
[vnetorch]: Set default VxLAN encap TTL value (#980)
Signed-off-by: Volodymyr Samotiy <[email protected]>
1 parent 7db25f7 commit 63afbd5

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

orchagent/vnetorch.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -465,9 +465,10 @@ VnetBridgeInfo VNetBitmapObject::getBridgeInfoByVni(uint32_t vni, string tunnelN
465465
vector<sai_attribute_t> bpt_attrs;
466466
auto* vxlan_orch = gDirectory.get<VxlanTunnelOrch*>();
467467
auto *tunnel = vxlan_orch->getVxlanTunnel(tunnelName);
468+
468469
if (!tunnel->isActive())
469470
{
470-
tunnel->createTunnel(MAP_T::BRIDGE_TO_VNI, MAP_T::VNI_TO_BRIDGE);
471+
tunnel->createTunnel(MAP_T::BRIDGE_TO_VNI, MAP_T::VNI_TO_BRIDGE, VXLAN_ENCAP_TTL);
471472
}
472473

473474
attr.id = SAI_BRIDGE_PORT_ATTR_TYPE;
@@ -1448,7 +1449,7 @@ bool VNetOrch::addOperation(const Request& request)
14481449

14491450
VNetVrfObject *vrf_obj = dynamic_cast<VNetVrfObject*>(obj.get());
14501451
if (!vxlan_orch->createVxlanTunnelMap(tunnel, TUNNEL_MAP_T_VIRTUAL_ROUTER, vni,
1451-
vrf_obj->getEncapMapId(), vrf_obj->getDecapMapId()))
1452+
vrf_obj->getEncapMapId(), vrf_obj->getDecapMapId(), VXLAN_ENCAP_TTL))
14521453
{
14531454
SWSS_LOG_ERROR("VNET '%s', tunnel '%s', map create failed",
14541455
vnet_name.c_str(), tunnel.c_str());

orchagent/vnetorch.h

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#define VNET_BITMAP_SIZE 32
1515
#define VNET_TUNNEL_SIZE 512
1616
#define VNET_NEIGHBOR_MAX 0xffff
17+
#define VXLAN_ENCAP_TTL 128
1718

1819
extern sai_object_id_t gVirtualRouterId;
1920

orchagent/vxlanorch.cpp

+18-6
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,8 @@ create_tunnel(
228228
sai_object_id_t tunnel_encap_id,
229229
sai_object_id_t tunnel_decap_id,
230230
sai_ip_address_t *src_ip,
231-
sai_object_id_t underlay_rif)
231+
sai_object_id_t underlay_rif,
232+
sai_uint8_t encap_ttl=0)
232233
{
233234
sai_attribute_t attr;
234235
std::vector<sai_attribute_t> tunnel_attrs;
@@ -264,6 +265,17 @@ create_tunnel(
264265
tunnel_attrs.push_back(attr);
265266
}
266267

268+
if (encap_ttl != 0)
269+
{
270+
attr.id = SAI_TUNNEL_ATTR_ENCAP_TTL_MODE;
271+
attr.value.s32 = SAI_TUNNEL_TTL_MODE_PIPE_MODEL;
272+
tunnel_attrs.push_back(attr);
273+
274+
attr.id = SAI_TUNNEL_ATTR_ENCAP_TTL_VAL;
275+
attr.value.u8 = encap_ttl;
276+
tunnel_attrs.push_back(attr);
277+
}
278+
267279
sai_object_id_t tunnel_id;
268280
sai_status_t status = sai_tunnel_api->create_tunnel(
269281
&tunnel_id,
@@ -358,7 +370,7 @@ remove_tunnel_termination(sai_object_id_t term_table_id)
358370
}
359371
}
360372

361-
bool VxlanTunnel::createTunnel(MAP_T encap, MAP_T decap)
373+
bool VxlanTunnel::createTunnel(MAP_T encap, MAP_T decap, uint8_t encap_ttl)
362374
{
363375
try
364376
{
@@ -378,7 +390,7 @@ bool VxlanTunnel::createTunnel(MAP_T encap, MAP_T decap)
378390
ip = &ips;
379391
}
380392

381-
ids_.tunnel_id = create_tunnel(ids_.tunnel_encap_id, ids_.tunnel_decap_id, ip, gUnderlayIfId);
393+
ids_.tunnel_id = create_tunnel(ids_.tunnel_encap_id, ids_.tunnel_decap_id, ip, gUnderlayIfId, encap_ttl);
382394

383395
ip = nullptr;
384396
if (!dst_ip_.isZero())
@@ -562,7 +574,7 @@ VxlanTunnelOrch::removeNextHopTunnel(string tunnelName, IpAddress& ipAddr, MacAd
562574
}
563575

564576
bool VxlanTunnelOrch::createVxlanTunnelMap(string tunnelName, tunnel_map_type_t map, uint32_t vni,
565-
sai_object_id_t encap, sai_object_id_t decap)
577+
sai_object_id_t encap, sai_object_id_t decap, uint8_t encap_ttl)
566578
{
567579
SWSS_LOG_ENTER();
568580

@@ -578,11 +590,11 @@ bool VxlanTunnelOrch::createVxlanTunnelMap(string tunnelName, tunnel_map_type_t
578590
{
579591
if (map == TUNNEL_MAP_T_VIRTUAL_ROUTER)
580592
{
581-
tunnel_obj->createTunnel(MAP_T::VRID_TO_VNI, MAP_T::VNI_TO_VRID);
593+
tunnel_obj->createTunnel(MAP_T::VRID_TO_VNI, MAP_T::VNI_TO_VRID, encap_ttl);
582594
}
583595
else if (map == TUNNEL_MAP_T_BRIDGE)
584596
{
585-
tunnel_obj->createTunnel(MAP_T::BRIDGE_TO_VNI, MAP_T::VNI_TO_BRIDGE);
597+
tunnel_obj->createTunnel(MAP_T::BRIDGE_TO_VNI, MAP_T::VNI_TO_BRIDGE, encap_ttl);
586598
}
587599
}
588600

orchagent/vxlanorch.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class VxlanTunnel
8282
return active_;
8383
}
8484

85-
bool createTunnel(MAP_T encap, MAP_T decap);
85+
bool createTunnel(MAP_T encap, MAP_T decap, uint8_t encap_ttl=0);
8686
sai_object_id_t addEncapMapperEntry(sai_object_id_t obj, uint32_t vni);
8787
sai_object_id_t addDecapMapperEntry(sai_object_id_t obj, uint32_t vni);
8888

@@ -172,7 +172,7 @@ class VxlanTunnelOrch : public Orch2
172172
}
173173

174174
bool createVxlanTunnelMap(string tunnelName, tunnel_map_type_t mapType, uint32_t vni,
175-
sai_object_id_t encap, sai_object_id_t decap);
175+
sai_object_id_t encap, sai_object_id_t decap, uint8_t encap_ttl=0);
176176

177177
bool removeVxlanTunnelMap(string tunnelName, uint32_t vni);
178178

0 commit comments

Comments
 (0)