@@ -411,48 +411,10 @@ bool VxlanMgr::doVxlanTunnelCreateTask(const KeyOpFieldsValuesTuple & t)
411
411
tuncache.vlan_vni_refcnt = 0 ;
412
412
tuncache.m_sourceIp = fvValue (tuncache.fvt .back ());
413
413
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));
453
415
m_vxlanTunnelCache[vxlanTunnelName] = tuncache;;
454
416
455
- SWSS_LOG_INFO (" Create vxlan tunnel %s" , vxlanTunnelName.c_str ());
417
+ SWSS_LOG_NOTICE (" Create vxlan tunnel %s" , vxlanTunnelName.c_str ());
456
418
return true ;
457
419
}
458
420
@@ -467,14 +429,14 @@ bool VxlanMgr::doVxlanTunnelDeleteTask(const KeyOpFieldsValuesTuple & t)
467
429
468
430
if ((it != m_EvpnNvoCache.end ()) && (it->second == vxlanTunnelName))
469
431
{
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 ());
471
433
return false ;
472
434
}
473
435
474
436
// If there are mappings still against this tunnel then hold on.
475
437
if (m_vxlanTunnelCache[vxlanTunnelName].vlan_vni_refcnt )
476
438
{
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" ,
478
440
vxlanTunnelName.c_str ());
479
441
return false ;
480
442
}
@@ -490,7 +452,7 @@ bool VxlanMgr::doVxlanTunnelDeleteTask(const KeyOpFieldsValuesTuple & t)
490
452
m_vxlanTunnelCache.erase (it1);
491
453
}
492
454
493
- SWSS_LOG_INFO (" Delete vxlan tunnel %s" , vxlanTunnelName.c_str ());
455
+ SWSS_LOG_NOTICE (" Delete vxlan tunnel %s" , vxlanTunnelName.c_str ());
494
456
return true ;
495
457
}
496
458
@@ -507,8 +469,7 @@ bool VxlanMgr::doVxlanTunnelMapCreateTask(const KeyOpFieldsValuesTuple & t)
507
469
return true ;
508
470
}
509
471
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 ());
512
473
std::string vlan, vlan_id, vni_id, src_ip, dst_ip (" " );
513
474
for (auto i : kfvFieldsValues (t))
514
475
{
@@ -959,23 +920,26 @@ void VxlanMgr::delAppDBTunnelMapTable(std::string vxlanTunnelMapName)
959
920
}
960
921
961
922
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)
963
925
{
964
926
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;
970
930
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);
972
934
973
935
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
+
979
943
if (true == m_in_reconcile)
980
944
{
981
945
auto it = m_vxlanNetDevices.find (vxlan_dev_name);
@@ -997,29 +961,69 @@ int VxlanMgr::createVxlanNetdevice(std::string vxlanTunnelName, std::string vni_
997
961
SWSS_LOG_NOTICE (" Creating VxlanNetDevice %s" , vxlan_dev_name.c_str ());
998
962
}
999
963
1000
- std::string res, chkcmd, cmds;
964
+ // Remove kernel device if it exists
1001
965
chkcmd = " ip link show " + vxlan_dev_name;
1002
966
ret = swss::exec (chkcmd,res);
1003
967
if (ret == 0 )
1004
968
{
1005
969
cmds = " ip link del dev " + vxlan_dev_name ;
1006
970
EXEC_WITH_ERROR_THROW (cmds, res);
1007
971
}
972
+
973
+ #if 0
1008
974
cmds = std::string("")
1009
975
+ 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) +
1011
977
+ " local " + src_ip + ((dst_ip == "")? "":(" remote " + dst_ip)) + " nolearning " +" dstport 4789 " + " && "
1012
978
+ IP_CMD + " link set " + vxlan_dev_name + " master Bridge "
1013
979
+ " && "
1014
980
+ BRIDGE_CMD + " vlan add vid " + std::string(vlan_id) + " dev " + vxlan_dev_name
1015
981
+ " && "
1016
982
+ BRIDGE_CMD + " vlan add vid " + std::string(vlan_id) + " untagged pvid dev " + vxlan_dev_name
1017
983
+ " && ";
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
+
1018
1020
if ( vlan_id != " 1" )
1019
1021
{
1020
- cmds = cmds + BRIDGE_CMD + " vlan del vid 1 dev " + vxlan_dev_name + " && " ;
1022
+ cmds += bridge_del_vid_cmd + " && " ;
1021
1023
}
1022
- cmds = cmds + IP_CMD + " link set " + vxlan_dev_name + " up " + " \" " ;
1024
+
1025
+ cmds += link_up_cmd + " \" " ;
1026
+
1023
1027
EXEC_WITH_ERROR_THROW (cmds, res);
1024
1028
return ret;
1025
1029
}
@@ -1028,7 +1032,7 @@ int VxlanMgr::deleteVxlanNetdevice(std::string vxlan_dev_name)
1028
1032
{
1029
1033
int ret = 0 ;
1030
1034
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;
1032
1036
EXEC_WITH_ERROR_THROW (cmd, res);
1033
1037
return ret;
1034
1038
}
0 commit comments