Skip to content

Commit 25f1a52

Browse files
committed
Tested vxlanmgr changes with corresponding orchagent changes and evpn pytest.
1 parent 1f394e9 commit 25f1a52

File tree

1 file changed

+66
-62
lines changed

1 file changed

+66
-62
lines changed

cfgmgr/vxlanmgr.cpp

+66-62
Original file line numberDiff line numberDiff line change
@@ -411,48 +411,10 @@ bool VxlanMgr::doVxlanTunnelCreateTask(const KeyOpFieldsValuesTuple & t)
411411
tuncache.vlan_vni_refcnt = 0;
412412
tuncache.m_sourceIp = fvValue(tuncache.fvt.back());
413413

414-
if(tuncache.fvt.size() == 2)
415-
{
416-
// NULL,NULL src_ip,<a.b.c.d>
417-
// This is for the openconfig set src_ip case
418-
std::vector<FieldValueTuple> fvt;
419-
420-
fvt = tuncache.fvt;
421-
fvt.erase(fvt.begin());
422-
SWSS_LOG_NOTICE("openconfig set SIP case. fvt size = %lu field =%s value=%s",
423-
fvt.size(), fvField(tuncache.fvt.back()).c_str(),
424-
fvValue(tuncache.fvt.back()).c_str());
425-
426-
m_appVxlanTunnelTable.set(vxlanTunnelName, fvt);
427-
}
428-
else
429-
{
430-
if(fvField(tuncache.fvt.back()) == "NULL")
431-
{
432-
if(m_vxlanTunnelCache.find(vxlanTunnelName) == m_vxlanTunnelCache.end())
433-
{
434-
// NULL,NULL openconfig interface create
435-
SWSS_LOG_NOTICE("openconfig interface create");
436-
}
437-
else
438-
{
439-
// NULL,NULL openconfig src_ip delete
440-
m_appVxlanTunnelTable.del(vxlanTunnelName);
441-
SWSS_LOG_NOTICE("openconfig sip unset");
442-
}
443-
}
444-
else
445-
{
446-
// src_ip,<a.b.c.d> click create
447-
// openconfig combined interface+sip set
448-
m_appVxlanTunnelTable.set(vxlanTunnelName, kfvFieldsValues(t));
449-
SWSS_LOG_NOTICE("openconfig combined or click set");
450-
}
451-
}
452-
414+
m_appVxlanTunnelTable.set(vxlanTunnelName, kfvFieldsValues(t));
453415
m_vxlanTunnelCache[vxlanTunnelName] = tuncache;;
454416

455-
SWSS_LOG_INFO("Create vxlan tunnel %s", vxlanTunnelName.c_str());
417+
SWSS_LOG_NOTICE("Create vxlan tunnel %s", vxlanTunnelName.c_str());
456418
return true;
457419
}
458420

@@ -467,14 +429,14 @@ bool VxlanMgr::doVxlanTunnelDeleteTask(const KeyOpFieldsValuesTuple & t)
467429

468430
if((it != m_EvpnNvoCache.end()) && (it->second == vxlanTunnelName))
469431
{
470-
SWSS_LOG_INFO("Tunnel %s deletion failed. Need to delete NVO", vxlanTunnelName.c_str());
432+
SWSS_LOG_WARN("Tunnel %s deletion failed. Need to delete NVO", vxlanTunnelName.c_str());
471433
return false;
472434
}
473435

474436
// If there are mappings still against this tunnel then hold on.
475437
if(m_vxlanTunnelCache[vxlanTunnelName].vlan_vni_refcnt)
476438
{
477-
SWSS_LOG_INFO("Tunnel %s deletion failed. Need to delete mapping entries",
439+
SWSS_LOG_WARN("Tunnel %s deletion failed. Need to delete mapping entries",
478440
vxlanTunnelName.c_str());
479441
return false;
480442
}
@@ -490,7 +452,7 @@ bool VxlanMgr::doVxlanTunnelDeleteTask(const KeyOpFieldsValuesTuple & t)
490452
m_vxlanTunnelCache.erase(it1);
491453
}
492454

493-
SWSS_LOG_INFO("Delete vxlan tunnel %s", vxlanTunnelName.c_str());
455+
SWSS_LOG_NOTICE("Delete vxlan tunnel %s", vxlanTunnelName.c_str());
494456
return true;
495457
}
496458

@@ -507,8 +469,7 @@ bool VxlanMgr::doVxlanTunnelMapCreateTask(const KeyOpFieldsValuesTuple & t)
507469
return true;
508470
}
509471

510-
SWSS_LOG_INFO("Create vxlan tunnel map %s", vxlanTunnelMapName.c_str());
511-
/*Create vxlan tunnel in Linux kernel, the foramt is vxlanTunnelName-vni, such as VTTNL0001-1000*/
472+
SWSS_LOG_NOTICE("Create vxlan tunnel map %s", vxlanTunnelMapName.c_str());
512473
std::string vlan, vlan_id, vni_id, src_ip, dst_ip("");
513474
for (auto i : kfvFieldsValues(t))
514475
{
@@ -959,23 +920,26 @@ void VxlanMgr::delAppDBTunnelMapTable(std::string vxlanTunnelMapName)
959920
}
960921

961922
int VxlanMgr::createVxlanNetdevice(std::string vxlanTunnelName, std::string vni_id,
962-
std::string src_ip, std::string dst_ip, std::string vlan_id)
923+
std::string src_ip, std::string dst_ip,
924+
std::string vlan_id)
963925
{
964926
int ret = 0;
965-
966-
//ip link add <vxlan_dev_name> type vxlan id <vni> local <src_ip> remote <dst_ip> dstport 4789
967-
//ip link set <vxlan_dev_name> master DOT1Q_BRIDGE_NAME
968-
//bridge vlan add vid <vlan_id> dev <vxlan_dev_name>
969-
//ip link set <vxlan_dev_name> up
927+
std::string res, chkcmd, cmds;
928+
std::string link_add_cmd, link_set_master_cmd, link_up_cmd;
929+
std::string bridge_add_cmd, bridge_untagged_add_cmd, bridge_del_vid_cmd;
970930
std::string vxlan_dev_name;
971-
vxlan_dev_name = std::string("") + std::string(vxlanTunnelName) + "-" + std::string(vlan_id);
931+
932+
vxlan_dev_name = std::string("") + std::string(vxlanTunnelName) + "-" +
933+
std::string(vlan_id);
972934

973935
SWSS_LOG_NOTICE("Kernel tnl_name: %s vni_id: %s src_ip: %s dst_ip:%s vlan_id: %s",
974-
vxlanTunnelName.c_str(), vni_id.c_str(), src_ip.c_str(), dst_ip.c_str(), vlan_id.c_str());
975-
/* Case 1: Entry exist - Erase from cache & return
976-
* Case 2: Enry does not exist - Create netDevice in Kernel
977-
* Case 3: Entry exist but modified - Not taken care. Will address later
978-
*/
936+
vxlanTunnelName.c_str(), vni_id.c_str(), src_ip.c_str(), dst_ip.c_str(),
937+
vlan_id.c_str());
938+
939+
// Case 1: Entry exist - Erase from cache & return
940+
// Case 2: Enry does not exist - Create netDevice in Kernel
941+
// Case 3: Entry exist but modified - Not taken care. Will address later
942+
979943
if (true == m_in_reconcile)
980944
{
981945
auto it = m_vxlanNetDevices.find(vxlan_dev_name);
@@ -997,29 +961,69 @@ int VxlanMgr::createVxlanNetdevice(std::string vxlanTunnelName, std::string vni_
997961
SWSS_LOG_NOTICE("Creating VxlanNetDevice %s", vxlan_dev_name.c_str());
998962
}
999963

1000-
std::string res, chkcmd, cmds;
964+
// Remove kernel device if it exists
1001965
chkcmd = "ip link show " + vxlan_dev_name;
1002966
ret = swss::exec(chkcmd,res);
1003967
if(ret == 0)
1004968
{
1005969
cmds = "ip link del dev " + vxlan_dev_name ;
1006970
EXEC_WITH_ERROR_THROW(cmds, res);
1007971
}
972+
973+
#if 0
1008974
cmds = std::string("")
1009975
+ BASH_CMD + " -c \""
1010-
+ IP_CMD + " link add " + vxlan_dev_name + " type vxlan id " + std::string(vni_id) + " address " + gMacAddress.to_string()
976+
+ IP_CMD + " link add " + vxlan_dev_name + " type vxlan id " + std::string(vni_id) +
1011977
+ " local " + src_ip + ((dst_ip == "")? "":(" remote " + dst_ip)) + " nolearning " +" dstport 4789 " + " && "
1012978
+ IP_CMD + " link set " + vxlan_dev_name + " master Bridge "
1013979
+ " && "
1014980
+ BRIDGE_CMD + " vlan add vid " + std::string(vlan_id) + " dev " + vxlan_dev_name
1015981
+ " && "
1016982
+ BRIDGE_CMD + " vlan add vid " + std::string(vlan_id) + " untagged pvid dev " + vxlan_dev_name
1017983
+ " && ";
984+
#endif
985+
986+
// ip link add <vxlan_dev_name> type vxlan id <vni> local <src_ip> remote <dst_ip>
987+
// dstport 4789
988+
// ip link set <vxlan_dev_name> master DOT1Q_BRIDGE_NAME
989+
// bridge vlan add vid <vlan_id> dev <vxlan_dev_name>
990+
// bridge vlan add vid <vlan_id> untagged pvid dev <vxlan_dev_name>
991+
// ip link set <vxlan_dev_name> up
992+
993+
link_add_cmd = std::string("") + IP_CMD + " link add " + vxlan_dev_name +
994+
" address " + gMacAddress.to_string() + " type vxlan id " +
995+
std::string(vni_id) + " local " + src_ip +
996+
((dst_ip == "")? "":(" remote " + dst_ip)) +
997+
" nolearning " + " dstport 4789 ";
998+
999+
link_set_master_cmd = std::string("") + IP_CMD + " link set " +
1000+
vxlan_dev_name + " master Bridge ";
1001+
1002+
link_up_cmd = std::string("") + IP_CMD + " link set " + vxlan_dev_name + " up ";
1003+
1004+
bridge_add_cmd = std::string("") + BRIDGE_CMD + " vlan add vid " +
1005+
std::string(vlan_id) + " dev " + vxlan_dev_name;
1006+
1007+
bridge_untagged_add_cmd = std::string("") + BRIDGE_CMD + " vlan add vid " +
1008+
std::string(vlan_id) + " untagged pvid dev " + vxlan_dev_name;
1009+
1010+
bridge_del_vid_cmd = std::string("") + BRIDGE_CMD + " vlan del vid 1 dev " +
1011+
vxlan_dev_name;
1012+
1013+
1014+
cmds = std::string("") + BASH_CMD + " -c \"" +
1015+
link_add_cmd + " && " +
1016+
link_set_master_cmd + " && " +
1017+
bridge_add_cmd + " && " +
1018+
bridge_untagged_add_cmd + " && ";
1019+
10181020
if( vlan_id != "1")
10191021
{
1020-
cmds = cmds + BRIDGE_CMD + " vlan del vid 1 dev " + vxlan_dev_name + " && ";
1022+
cmds += bridge_del_vid_cmd + " && ";
10211023
}
1022-
cmds = cmds + IP_CMD + " link set " + vxlan_dev_name + " up " + "\"";
1024+
1025+
cmds += link_up_cmd + "\"";
1026+
10231027
EXEC_WITH_ERROR_THROW(cmds, res);
10241028
return ret;
10251029
}
@@ -1028,7 +1032,7 @@ int VxlanMgr::deleteVxlanNetdevice(std::string vxlan_dev_name)
10281032
{
10291033
int ret = 0;
10301034
std::string res;
1031-
const std::string cmd = std::string("") + IP_CMD " link del dev " + vxlan_dev_name;
1035+
const std::string cmd = std::string("") + IP_CMD + " link del dev " + vxlan_dev_name;
10321036
EXEC_WITH_ERROR_THROW(cmd, res);
10331037
return ret;
10341038
}

0 commit comments

Comments
 (0)