Skip to content

Commit 8857f92

Browse files
authored
Added new attributes for Vnet and Vxlan ecmp configurations. (sonic-net#2584)
* added support for monitoring, primary and adv_prefix and overlay_dmac. Signed-off-by: siqbal1486 <[email protected]> Signed-off-by: siqbal1486 <[email protected]>
1 parent b6bbc3e commit 8857f92

File tree

3 files changed

+53
-9
lines changed

3 files changed

+53
-9
lines changed

orchagent/vnetorch.cpp

+21-2
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ bool VNetOrch::addOperation(const Request& request)
429429
uint32_t vni=0;
430430
string tunnel;
431431
string scope;
432+
swss::MacAddress overlay_dmac;
432433

433434
for (const auto& name: request.getAttrFieldNames())
434435
{
@@ -460,6 +461,10 @@ bool VNetOrch::addOperation(const Request& request)
460461
{
461462
advertise_prefix = request.getAttrBool("advertise_prefix");
462463
}
464+
else if (name == "overlay_dmac")
465+
{
466+
overlay_dmac = request.getAttrMacAddress("overlay_dmac");
467+
}
463468
else
464469
{
465470
SWSS_LOG_INFO("Unknown attribute: %s", name.c_str());
@@ -486,7 +491,7 @@ bool VNetOrch::addOperation(const Request& request)
486491

487492
if (it == std::end(vnet_table_))
488493
{
489-
VNetInfo vnet_info = { tunnel, vni, peer_list, scope, advertise_prefix };
494+
VNetInfo vnet_info = { tunnel, vni, peer_list, scope, advertise_prefix, overlay_dmac };
490495
obj = createObject<VNetVrfObject>(vnet_name, vnet_info, attrs);
491496
create = true;
492497

@@ -1917,7 +1922,9 @@ bool VNetRouteOrch::handleTunnel(const Request& request)
19171922
vector<string> vni_list;
19181923
vector<IpAddress> monitor_list;
19191924
string profile = "";
1920-
1925+
vector<IpAddress> primary_list;
1926+
string monitoring;
1927+
swss::IpPrefix adv_prefix;
19211928
for (const auto& name: request.getAttrFieldNames())
19221929
{
19231930
if (name == "endpoint")
@@ -1942,6 +1949,18 @@ bool VNetRouteOrch::handleTunnel(const Request& request)
19421949
{
19431950
profile = request.getAttrString(name);
19441951
}
1952+
else if (name == "primary")
1953+
{
1954+
primary_list = request.getAttrIPList(name);
1955+
}
1956+
else if (name == "monitoring")
1957+
{
1958+
monitoring = request.getAttrString(name);
1959+
}
1960+
else if (name == "adv_prefix")
1961+
{
1962+
adv_prefix = request.getAttrIpPrefix(name);
1963+
}
19451964
else
19461965
{
19471966
SWSS_LOG_INFO("Unknown attribute: %s", name.c_str());

orchagent/vnetorch.h

+14-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ const request_description_t vnet_request_description = {
3434
{ "guid", REQ_T_STRING },
3535
{ "scope", REQ_T_STRING },
3636
{ "advertise_prefix", REQ_T_BOOL},
37+
{ "overlay_dmac", REQ_T_MAC_ADDRESS},
38+
3739
},
3840
{ "vxlan_tunnel", "vni" } // mandatory attributes
3941
};
@@ -59,6 +61,7 @@ struct VNetInfo
5961
set<string> peers;
6062
string scope;
6163
bool advertise_prefix;
64+
swss::MacAddress overlay_dmac;
6265
};
6366

6467
typedef map<VR_TYPE, sai_object_id_t> vrid_list_t;
@@ -86,7 +89,8 @@ class VNetObject
8689
peer_list_(vnetInfo.peers),
8790
vni_(vnetInfo.vni),
8891
scope_(vnetInfo.scope),
89-
advertise_prefix_(vnetInfo.advertise_prefix)
92+
advertise_prefix_(vnetInfo.advertise_prefix),
93+
overlay_dmac_(vnetInfo.overlay_dmac)
9094
{ }
9195

9296
virtual bool updateObj(vector<sai_attribute_t>&) = 0;
@@ -121,6 +125,11 @@ class VNetObject
121125
return advertise_prefix_;
122126
}
123127

128+
swss::MacAddress getOverlayDMac() const
129+
{
130+
return overlay_dmac_;
131+
}
132+
124133
virtual ~VNetObject() noexcept(false) {};
125134

126135
private:
@@ -129,6 +138,7 @@ class VNetObject
129138
uint32_t vni_;
130139
string scope_;
131140
bool advertise_prefix_;
141+
swss::MacAddress overlay_dmac_;
132142
};
133143

134144
struct nextHop
@@ -282,6 +292,9 @@ const request_description_t vnet_route_description = {
282292
{ "mac_address", REQ_T_STRING },
283293
{ "endpoint_monitor", REQ_T_IP_LIST },
284294
{ "profile", REQ_T_STRING },
295+
{ "primary", REQ_T_IP_LIST },
296+
{ "monitoring", REQ_T_STRING },
297+
{ "adv_prefix", REQ_T_IP_PREFIX },
285298
},
286299
{ }
287300
};

tests/test_vnet.py

+18-6
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,11 @@ def delete_vnet_local_routes(dvs, prefix, vnet_name):
140140
time.sleep(2)
141141

142142

143-
def create_vnet_routes(dvs, prefix, vnet_name, endpoint, mac="", vni=0, ep_monitor="", profile=""):
144-
set_vnet_routes(dvs, prefix, vnet_name, endpoint, mac=mac, vni=vni, ep_monitor=ep_monitor, profile=profile)
143+
def create_vnet_routes(dvs, prefix, vnet_name, endpoint, mac="", vni=0, ep_monitor="", profile="", primary="", monitoring="", adv_prefix=""):
144+
set_vnet_routes(dvs, prefix, vnet_name, endpoint, mac=mac, vni=vni, ep_monitor=ep_monitor, profile=profile, primary=primary, monitoring=monitoring, adv_prefix=adv_prefix)
145145

146146

147-
def set_vnet_routes(dvs, prefix, vnet_name, endpoint, mac="", vni=0, ep_monitor="", profile=""):
147+
def set_vnet_routes(dvs, prefix, vnet_name, endpoint, mac="", vni=0, ep_monitor="", profile="", primary="", monitoring="", adv_prefix=""):
148148
conf_db = swsscommon.DBConnector(swsscommon.CONFIG_DB, dvs.redis_sock, 0)
149149

150150
attrs = [
@@ -163,6 +163,15 @@ def set_vnet_routes(dvs, prefix, vnet_name, endpoint, mac="", vni=0, ep_monitor=
163163
if profile:
164164
attrs.append(('profile', profile))
165165

166+
if primary:
167+
attrs.append(('primary', primary))
168+
169+
if monitoring:
170+
attrs.append(('monitoring', monitoring))
171+
172+
if adv_prefix:
173+
attrs.append(('adv_prefix', adv_prefix))
174+
166175
tbl = swsscommon.Table(conf_db, "VNET_ROUTE_TUNNEL")
167176
fvs = swsscommon.FieldValuePairs(attrs)
168177
tbl.set("%s|%s" % (vnet_name, prefix), fvs)
@@ -317,7 +326,7 @@ def delete_phy_interface(dvs, ifname, ipaddr):
317326
time.sleep(2)
318327

319328

320-
def create_vnet_entry(dvs, name, tunnel, vni, peer_list, scope="", advertise_prefix=False):
329+
def create_vnet_entry(dvs, name, tunnel, vni, peer_list, scope="", advertise_prefix=False, overlay_dmac=""):
321330
conf_db = swsscommon.DBConnector(swsscommon.CONFIG_DB, dvs.redis_sock, 0)
322331
asic_db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0)
323332

@@ -333,6 +342,9 @@ def create_vnet_entry(dvs, name, tunnel, vni, peer_list, scope="", advertise_pre
333342
if advertise_prefix:
334343
attrs.append(('advertise_prefix', 'true'))
335344

345+
if overlay_dmac:
346+
attrs.append(('overlay_dmac', overlay_dmac))
347+
336348
# create the VXLAN tunnel Term entry in Config DB
337349
create_entry_tbl(
338350
conf_db,
@@ -2364,15 +2376,15 @@ def test_vnet_orch_17(self, dvs, testlog):
23642376
vnet_obj.fetch_exist_entries(dvs)
23652377

23662378
create_vxlan_tunnel(dvs, tunnel_name, '9.9.9.9')
2367-
create_vnet_entry(dvs, 'Vnet17', tunnel_name, '10009', "")
2379+
create_vnet_entry(dvs, 'Vnet17', tunnel_name, '10009', "", overlay_dmac="22:33:33:44:44:66")
23682380

23692381
vnet_obj.check_vnet_entry(dvs, 'Vnet17')
23702382
vnet_obj.check_vxlan_tunnel_entry(dvs, tunnel_name, 'Vnet17', '10009')
23712383

23722384
vnet_obj.check_vxlan_tunnel(dvs, tunnel_name, '9.9.9.9')
23732385

23742386
vnet_obj.fetch_exist_entries(dvs)
2375-
create_vnet_routes(dvs, "100.100.1.1/32", 'Vnet17', '9.0.0.1,9.0.0.2,9.0.0.3', ep_monitor='9.1.0.1,9.1.0.2,9.1.0.3')
2387+
create_vnet_routes(dvs, "100.100.1.1/32", 'Vnet17', '9.0.0.1,9.0.0.2,9.0.0.3', ep_monitor='9.1.0.1,9.1.0.2,9.1.0.3', primary ='9.0.0.1',monitoring='custom', adv_prefix='100.100.1.1/27')
23762388

23772389
# default bfd status is down, route should not be programmed in this status
23782390
vnet_obj.check_del_vnet_routes(dvs, 'Vnet17', ["100.100.1.1/32"])

0 commit comments

Comments
 (0)