Skip to content

Commit 9778374

Browse files
anish-nlguohan
authored andcommitted
[vxlanorch]: Allow ipv6 src ip for Vxlan tunnel creation (sonic-net#896)
* [vxlanorch]: Allow ipv6 src ip for Vxlan tunnel creation Signed-off-by: Anish Narsian [email protected]
1 parent 407d048 commit 9778374

File tree

2 files changed

+124
-10
lines changed

2 files changed

+124
-10
lines changed

orchagent/vxlanorch.cpp

+9-10
Original file line numberDiff line numberDiff line change
@@ -656,26 +656,25 @@ bool VxlanTunnelOrch::addOperation(const Request& request)
656656
SWSS_LOG_ENTER();
657657

658658
auto src_ip = request.getAttrIP("src_ip");
659-
if (!src_ip.isV4())
660-
{
661-
SWSS_LOG_ERROR("Wrong format of the attribute: 'src_ip'. Currently only IPv4 address is supported");
662-
return true;
663-
}
664659

665660
IpAddress dst_ip;
666661
auto attr_names = request.getAttrFieldNames();
667662
if (attr_names.count("dst_ip") == 0)
668663
{
669-
dst_ip = IpAddress("0.0.0.0");
664+
if(src_ip.isV4()) {
665+
dst_ip = IpAddress("0.0.0.0");
666+
} else {
667+
dst_ip = IpAddress("::");
668+
}
670669
}
671670
else
672671
{
673672
dst_ip = request.getAttrIP("dst_ip");
674-
if (!dst_ip.isV4())
675-
{
676-
SWSS_LOG_ERROR("Wrong format of the attribute: 'dst_ip'. Currently only IPv4 address is supported");
673+
if((src_ip.isV4() && !dst_ip.isV4()) ||
674+
(!src_ip.isV4() && dst_ip.isV4())) {
675+
SWSS_LOG_ERROR("Format mismatch: 'src_ip' and 'dst_ip' must be of the same family");
677676
return true;
678-
}
677+
}
679678
}
680679

681680
const auto& tunnel_name = request.getKeyString(0);

tests/test_vnet.py

+115
Original file line numberDiff line numberDiff line change
@@ -1169,3 +1169,118 @@ def test_vnet_orch_3(self, dvs, testlog):
11691169
delete_vnet_entry(dvs, 'Vnet_20')
11701170
vnet_obj.check_del_vnet_entry(dvs, 'Vnet_20')
11711171

1172+
'''
1173+
Test 4 - IPv6 Vxlan tunnel test
1174+
'''
1175+
@pytest.mark.skip(reason="Failing. Under investigation")
1176+
def test_vnet_orch_4(self, dvs, testlog):
1177+
vnet_obj = self.get_vnet_obj()
1178+
1179+
tunnel_name = 'tunnel_v6'
1180+
1181+
vnet_obj.fetch_exist_entries(dvs)
1182+
1183+
create_vxlan_tunnel(dvs, tunnel_name, 'fd:2::32')
1184+
create_vnet_entry(dvs, 'Vnet3001', tunnel_name, '3001', "")
1185+
1186+
vnet_obj.check_vnet_entry(dvs, 'Vnet3001')
1187+
vnet_obj.check_vxlan_tunnel_entry(dvs, tunnel_name, 'Vnet3001', '3001')
1188+
vnet_obj.check_vxlan_tunnel(dvs, tunnel_name, 'fd:2::32')
1189+
1190+
vid = create_vlan_interface(dvs, "Vlan300", "Ethernet24", 'Vnet3001', "100.100.3.1/24")
1191+
vnet_obj.check_router_interface(dvs, 'Vnet3001', vid)
1192+
1193+
vid = create_vlan_interface(dvs, "Vlan301", "Ethernet28", 'Vnet3001', "100.100.4.1/24")
1194+
vnet_obj.check_router_interface(dvs, 'Vnet3001', vid)
1195+
1196+
create_vnet_routes(dvs, "100.100.1.1/32", 'Vnet3001', '2000:1000:2000:3000:4000:5000:6000:7000')
1197+
vnet_obj.check_vnet_routes(dvs, 'Vnet3001', '2000:1000:2000:3000:4000:5000:6000:7000', tunnel_name)
1198+
1199+
create_vnet_routes(dvs, "100.100.1.2/32", 'Vnet3001', '2000:1000:2000:3000:4000:5000:6000:7000')
1200+
vnet_obj.check_vnet_routes(dvs, 'Vnet3001', '2000:1000:2000:3000:4000:5000:6000:7000', tunnel_name)
1201+
1202+
create_vnet_local_routes(dvs, "100.100.3.0/24", 'Vnet3001', 'Vlan300')
1203+
vnet_obj.check_vnet_local_routes(dvs, 'Vnet3001')
1204+
1205+
create_vnet_local_routes(dvs, "100.100.4.0/24", 'Vnet3001', 'Vlan301')
1206+
vnet_obj.check_vnet_local_routes(dvs, 'Vnet3001')
1207+
1208+
#Create Physical Interface in another Vnet
1209+
1210+
create_vnet_entry(dvs, 'Vnet3002', tunnel_name, '3002', "")
1211+
1212+
vnet_obj.check_vnet_entry(dvs, 'Vnet3002')
1213+
vnet_obj.check_vxlan_tunnel_entry(dvs, tunnel_name, 'Vnet3002', '3002')
1214+
1215+
create_phy_interface(dvs, "Ethernet60", 'Vnet3002', "100.102.1.1/24")
1216+
vnet_obj.check_router_interface(dvs, 'Vnet3002')
1217+
1218+
create_vnet_routes(dvs, "100.100.2.1/32", 'Vnet3002', 'fd:2::34', "00:12:34:56:78:9A")
1219+
vnet_obj.check_vnet_routes(dvs, 'Vnet3002', 'fd:2::34', tunnel_name, "00:12:34:56:78:9A")
1220+
1221+
create_vnet_local_routes(dvs, "100.102.1.0/24", 'Vnet3002', 'Ethernet60')
1222+
vnet_obj.check_vnet_local_routes(dvs, 'Vnet3002')
1223+
1224+
# Test peering
1225+
create_vnet_entry(dvs, 'Vnet3003', tunnel_name, '3003', 'Vnet3004')
1226+
1227+
vnet_obj.check_vnet_entry(dvs, 'Vnet3003', ['Vnet3004'])
1228+
vnet_obj.check_vxlan_tunnel_entry(dvs, tunnel_name, 'Vnet3003', '3003')
1229+
1230+
create_vnet_entry(dvs, 'Vnet3004', tunnel_name, '3004', 'Vnet3003')
1231+
1232+
vnet_obj.check_vnet_entry(dvs, 'Vnet3004', ['Vnet3003'])
1233+
vnet_obj.check_vxlan_tunnel_entry(dvs, tunnel_name, 'Vnet3004', '3004')
1234+
1235+
create_vnet_routes(dvs, "5.5.5.10/32", 'Vnet3003', 'fd:2::35')
1236+
vnet_obj.check_vnet_routes(dvs, 'Vnet3004', 'fd:2::35', tunnel_name)
1237+
1238+
create_vnet_routes(dvs, "8.8.8.10/32", 'Vnet3004', 'fd:2::36')
1239+
vnet_obj.check_vnet_routes(dvs, 'Vnet3003', 'fd:2::36', tunnel_name)
1240+
1241+
# Clean-up and verify remove flows
1242+
1243+
delete_vnet_routes(dvs, "5.5.5.10/32", 'Vnet3003')
1244+
vnet_obj.check_del_vnet_routes(dvs, 'Vnet3003')
1245+
1246+
delete_vnet_routes(dvs, "8.8.8.10/32", 'Vnet3004')
1247+
vnet_obj.check_del_vnet_routes(dvs, 'Vnet3004')
1248+
1249+
delete_vnet_entry(dvs, 'Vnet3003')
1250+
vnet_obj.check_del_vnet_entry(dvs, 'Vnet3003')
1251+
1252+
delete_vnet_entry(dvs, 'Vnet3004')
1253+
vnet_obj.check_del_vnet_entry(dvs, 'Vnet3004')
1254+
1255+
delete_vnet_routes(dvs, "100.100.2.1/24", 'Vnet3002')
1256+
vnet_obj.check_del_vnet_routes(dvs, 'Vnet3002')
1257+
1258+
delete_vnet_local_routes(dvs, "100.102.1.0/24", 'Vnet3002')
1259+
vnet_obj.check_del_vnet_local_routes(dvs, 'Vnet3002')
1260+
1261+
delete_phy_interface(dvs, "Ethernet60", "100.102.1.1/24")
1262+
vnet_obj.check_del_router_interface(dvs, "Ethernet60")
1263+
1264+
delete_vnet_entry(dvs, 'Vnet3002')
1265+
vnet_obj.check_del_vnet_entry(dvs, 'Vnet3002')
1266+
1267+
delete_vnet_local_routes(dvs, "100.100.3.0/24", 'Vnet3001')
1268+
vnet_obj.check_del_vnet_local_routes(dvs, 'Vnet3001')
1269+
1270+
delete_vnet_local_routes(dvs, "100.100.4.0/24", 'Vnet3001')
1271+
vnet_obj.check_del_vnet_local_routes(dvs, 'Vnet3001')
1272+
1273+
delete_vnet_routes(dvs, "100.100.1.1/32", 'Vnet3001')
1274+
vnet_obj.check_del_vnet_routes(dvs, 'Vnet3001')
1275+
1276+
delete_vnet_routes(dvs, "100.100.1.2/32", 'Vnet3001')
1277+
vnet_obj.check_del_vnet_routes(dvs, 'Vnet3001')
1278+
1279+
delete_vlan_interface(dvs, "Vlan300", "100.100.3.1/24")
1280+
vnet_obj.check_del_router_interface(dvs, "Vlan300")
1281+
1282+
delete_vlan_interface(dvs, "Vlan301", "100.100.4.1/24")
1283+
vnet_obj.check_del_router_interface(dvs, "Vlan301")
1284+
1285+
delete_vnet_entry(dvs, 'Vnet3001')
1286+
vnet_obj.check_del_vnet_entry(dvs, 'Vnet3001')

0 commit comments

Comments
 (0)