Skip to content

Commit dd6bdd9

Browse files
marian-pritsakprsunny
authored andcommitted
[vnetorch]: Bitmap VNet implementation (sonic-net#773)
* [vnetorch]: Bitmap VNet implementation * Adress review comments Signed-off-by: Marian Pritsak <[email protected]>
1 parent 920c3a4 commit dd6bdd9

File tree

8 files changed

+693
-18
lines changed

8 files changed

+693
-18
lines changed

orchagent/intfsorch.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,11 @@ void IntfsOrch::doTask(Consumer &consumer)
314314
continue;
315315
}
316316

317+
if (m_vnetInfses.find(alias) != m_vnetInfses.end())
318+
{
319+
vnet_name = m_vnetInfses.at(alias);
320+
}
321+
317322
if (!vnet_name.empty())
318323
{
319324
VNetOrch* vnet_orch = gDirectory.get<VNetOrch*>();
@@ -327,6 +332,11 @@ void IntfsOrch::doTask(Consumer &consumer)
327332
it++;
328333
continue;
329334
}
335+
336+
if (m_vnetInfses.find(alias) == m_vnetInfses.end())
337+
{
338+
m_vnetInfses.emplace(alias, vnet_name);
339+
}
330340
}
331341
else
332342
{

orchagent/intfsorch.h

+10-3
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,23 @@ class IntfsOrch : public Orch
4444
void removeRifFromFlexCounter(const string&, const string&);
4545

4646
bool setIntf(const string& alias, sai_object_id_t vrf_id = gVirtualRouterId, const IpPrefix *ip_prefix = nullptr);
47+
48+
void addIp2MeRoute(sai_object_id_t vrf_id, const IpPrefix &ip_prefix);
49+
void removeIp2MeRoute(sai_object_id_t vrf_id, const IpPrefix &ip_prefix);
50+
51+
const IntfsTable& getSyncdIntfses(void)
52+
{
53+
return m_syncdIntfses;
54+
}
55+
4756
private:
4857

4958
SelectableTimer* m_updateMapsTimer = nullptr;
5059
std::vector<Port> m_rifsToAdd;
5160

5261
VRFOrch *m_vrfOrch;
5362
IntfsTable m_syncdIntfses;
63+
map<string, string> m_vnetInfses;
5464
void doTask(Consumer &consumer);
5565
void doTask(SelectableTimer &timer);
5666

@@ -73,9 +83,6 @@ class IntfsOrch : public Orch
7383
void addSubnetRoute(const Port &port, const IpPrefix &ip_prefix);
7484
void removeSubnetRoute(const Port &port, const IpPrefix &ip_prefix);
7585

76-
void addIp2MeRoute(sai_object_id_t vrf_id, const IpPrefix &ip_prefix);
77-
void removeIp2MeRoute(sai_object_id_t vrf_id, const IpPrefix &ip_prefix);
78-
7986
void addDirectedBroadcast(const Port &port, const IpPrefix &ip_prefix);
8087
void removeDirectedBroadcast(const Port &port, const IpPrefix &ip_prefix);
8188
};

orchagent/main.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ sai_object_id_t gVirtualRouterId;
3838
sai_object_id_t gUnderlayIfId;
3939
sai_object_id_t gSwitchId = SAI_NULL_OBJECT_ID;
4040
MacAddress gMacAddress;
41+
MacAddress gVxlanMacAddress;
4142

4243
#define DEFAULT_BATCH_SIZE 128
4344
int gBatchSize = DEFAULT_BATCH_SIZE;

orchagent/orchdaemon.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,15 @@ bool OrchDaemon::init()
7777
APP_VNET_RT_TABLE_NAME,
7878
APP_VNET_RT_TUNNEL_TABLE_NAME
7979
};
80-
VNetOrch *vnet_orch = new VNetOrch(m_applDb, APP_VNET_TABLE_NAME);
80+
VNetOrch *vnet_orch;
81+
if (platform == MLNX_PLATFORM_SUBSTRING)
82+
{
83+
vnet_orch = new VNetOrch(m_applDb, APP_VNET_TABLE_NAME, VNET_EXEC::VNET_EXEC_BRIDGE);
84+
}
85+
else
86+
{
87+
vnet_orch = new VNetOrch(m_applDb, APP_VNET_TABLE_NAME);
88+
}
8189
gDirectory.set(vnet_orch);
8290
VNetRouteOrch *vnet_rt_orch = new VNetRouteOrch(m_applDb, vnet_tables, vnet_orch);
8391
gDirectory.set(vnet_rt_orch);

orchagent/saihelper.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ extern "C" {
22

33
#include "sai.h"
44
#include "saistatus.h"
5+
#include "saiextensions.h"
56
}
67

78
#include <fstream>
@@ -39,6 +40,7 @@ sai_acl_api_t* sai_acl_api;
3940
sai_mirror_api_t* sai_mirror_api;
4041
sai_fdb_api_t* sai_fdb_api;
4142
sai_dtel_api_t* sai_dtel_api;
43+
sai_bmtor_api_t* sai_bmtor_api;
4244

4345
extern sai_object_id_t gSwitchId;
4446
extern bool gSairedisRecord;
@@ -127,6 +129,7 @@ void initSaiApi()
127129
sai_api_query(SAI_API_SCHEDULER_GROUP, (void **)&sai_scheduler_group_api);
128130
sai_api_query(SAI_API_ACL, (void **)&sai_acl_api);
129131
sai_api_query(SAI_API_DTEL, (void **)&sai_dtel_api);
132+
sai_api_query((sai_api_t)SAI_API_BMTOR, (void **)&sai_bmtor_api);
130133

131134
sai_log_set(SAI_API_SWITCH, SAI_LOG_LEVEL_NOTICE);
132135
sai_log_set(SAI_API_BRIDGE, SAI_LOG_LEVEL_NOTICE);
@@ -152,6 +155,7 @@ void initSaiApi()
152155
sai_log_set(SAI_API_SCHEDULER_GROUP, SAI_LOG_LEVEL_NOTICE);
153156
sai_log_set(SAI_API_ACL, SAI_LOG_LEVEL_NOTICE);
154157
sai_log_set(SAI_API_DTEL, SAI_LOG_LEVEL_NOTICE);
158+
sai_log_set((sai_api_t)SAI_API_BMTOR, SAI_LOG_LEVEL_NOTICE);
155159
}
156160

157161
void initSaiRedis(const string &record_location)

orchagent/switchorch.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ using namespace swss;
1111

1212
extern sai_object_id_t gSwitchId;
1313
extern sai_switch_api_t *sai_switch_api;
14+
extern MacAddress gVxlanMacAddress;
1415

1516
const map<string, sai_switch_attr_t> switch_attribute_map =
1617
{
@@ -100,6 +101,7 @@ void SwitchOrch::doTask(Consumer &consumer)
100101

101102
case SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC:
102103
mac_addr = value;
104+
gVxlanMacAddress = mac_addr;
103105
memcpy(attr.value.mac, mac_addr.getMac(), sizeof(sai_mac_t));
104106
break;
105107

0 commit comments

Comments
 (0)