From b7eee99f23efc4085f4f6287b79da4a319129020 Mon Sep 17 00:00:00 2001 From: Srinivas Rachakonda Date: Mon, 2 Jul 2018 14:27:43 +0530 Subject: [PATCH] Vni Based L3 Forwarding - Ipv6 Change-Id: I9262a9b09e43e59ac3b52fc63aede8a099451cfc Signed-off-by: Srinivas Rachakonda --- .../vnibasedIpv6forwarding.robot | 173 ++++++++++++++++++ csit/testplans/netvirt-1node-openstack.txt | 1 + 2 files changed, 174 insertions(+) create mode 100644 csit/suites/netvirt/vnibasedIpv6forwarding/vnibasedIpv6forwarding.robot diff --git a/csit/suites/netvirt/vnibasedIpv6forwarding/vnibasedIpv6forwarding.robot b/csit/suites/netvirt/vnibasedIpv6forwarding/vnibasedIpv6forwarding.robot new file mode 100644 index 0000000000..5e94426486 --- /dev/null +++ b/csit/suites/netvirt/vnibasedIpv6forwarding/vnibasedIpv6forwarding.robot @@ -0,0 +1,173 @@ +*** Settings *** +Documentation Test Suite for vni-based-l2-l3-nat: +... This feature attempts to realize the use of VxLAN VNI +... (Virtual Network Identifier) for VxLAN tenant traffic +... flowing on the cloud data-network. This is applicable +... to L2 switching, L3 forwarding and NATing for all VxLAN +... based provider networks. In doing so, it eliminates the +... presence of LPort tags, ELAN tags and MPLS labels on the +... wire and instead, replaces them with VNIs supplied by the +... tenant’s OpenStack. +Suite Setup Start Suite +Suite Teardown OpenStackOperations.OpenStack Suite Teardown +Test Setup Run Keywords OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP1_CONN_ID} +... AND OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP2_CONN_ID} +Test Teardown OpenStackOperations.Get Test Teardown Debugs +Library OperatingSystem +Library RequestsLibrary +Library String +Resource ../../../libraries/DevstackUtils.robot +Resource ../../../libraries/KarafKeywords.robot +Resource ../../../variables/netvirt/Variables.robot +Resource ../../../libraries/OpenStackOperations.robot +Resource ../../../libraries/OVSDB.robot +Resource ../../../libraries/SetupUtils.robot +Resource ../../../libraries/Utils.robot +Resource ../../../libraries/VpnOperations.robot +Resource ../../../variables/netvirt/Variables.robot +Resource ../../../variables/Variables.robot + +*** Variables *** +${EGRESS} Egress +${INGRESS} Ingress +${IP} ipv6 +${VNI6_SECURITY_GROUP} vni6_sg +@{VNI6_NETWORKS} vni6_net_0 vni6_net_1 vni6_net_2 vni6_net_3 +@{VNI6_SUBNETS} vni6_sub_0 vni6_sub_1 vni6_sub_2 vni6_sub_3 +@{VNI6_SUBNET_CIDRS} 2001:db8:0:4::/64 2001:db8:0:5::/64 2001:db8:0:6::/64 2001:db8:0:7::/64 +@{VNI6_NET_0_PORTS} vni6_net_0_port_1 vni6_net_0_port_2 +@{VNI6_NET_1_PORTS} vni6_net_1_port_1 vni6_net_1_port_2 +@{VNI6_NET_2_PORTS} vni6_net_2_port_1 vni6_net_2_port_2 +@{VNI6_NET_3_PORTS} vni6_net_3_port_1 vni6_net_3_port_2 +@{VNI6_NET_0_VMS} vni6_net_0_vm_1 +@{VNI6_NET_1_VMS} vni6_net_1_vm_1 +@{VNI6_NET_2_VMS} vni6_net_2_vm_1 +@{VNI6_NET_3_VMS} vni6_net_3_vm_1 +@{VNI6_ROUTER} vni6_router1 vni6_router2 vni6_router3 +@{VNI6_RDS} ["2600:2"] ["2700:2"] ["2800:2"] +@{VNI6_VPN_NAMES} VNI6_vpn_1 VNI6_vpn_2 VNI6_vpn_3 +@{VNI6_VPN_INSTANCE_IDS} 4ae8cd92-48ca-49b5-94e1-b2921a261551 4ae8cd92-48ca-49b5-94e1-b2921a261552 4ae8cd92-48ca-49b5-94e1-b2921a261553 +${NET0_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:4::2,end=2001:db8:0:4:ffff:ffff:ffff:fffe +${NET1_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:5::2,end=2001:db8:0:5:ffff:ffff:ffff:fffe +${NET2_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:6::2,end=2001:db8:0:6:ffff:ffff:ffff:fffe +${NET3_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:7::2,end=2001:db8:0:7:ffff:ffff:ffff:fffe + +*** Test Cases *** +VNI Based IPv6 Forwarding + [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors + BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Segmentation Id and Tunnel Id @{VNI6_NET_0_PORTS}[0] @{VNI6_NET_1_PORTS}[0] @{VNI6_NETWORKS}[0] + ... @{VNI6_NETWORKS}[1] @{VM_IP_NET0}[0] @{VM_IP_NET1}[0] ${IP} + +VNI Based IPv6 Forwarding With BGPVPN Router Association + [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors + ... With Router associated to a BGPVPN. + ${net_id} = OpenStackOperations.Get Net Id @{VNI6_NETWORKS}[0] + ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id} + VpnOperations.VPN Create L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0] name=@{VNI6_VPN_NAMES}[0] rd=@{VNI6_RDS}[0] exportrt=@{VNI6_RDS}[0] importrt=@{VNI6_RDS}[0] tenantid=${tenant_id} + ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0] + BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[0] + ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[0] + VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[0] + ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[0] + BuiltIn.Should Contain ${resp} ${router_id} + BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Segmentation Id and Tunnel Id @{VNI6_NET_0_PORTS}[0] @{VNI6_NET_1_PORTS}[0] @{VNI6_NETWORKS}[0] + ... @{VNI6_NETWORKS}[1] @{VM_IP_NET0}[0] @{VM_IP_NET1}[0] ${IP} + +VNI Based IPv6 Forwarding With Two Routers And BGPVPN With Irt Ert + [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors + ... With Two Routers each associated to a BGPVPN and The Two BGPVPN is connected with irt and ert. + OpenStackOperations.Create Network @{VNI6_NETWORKS}[2] + OpenStackOperations.Create Network @{VNI6_NETWORKS}[3] + OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[2] @{VNI6_SUBNETS}[2] @{VNI6_SUBNET_CIDRS}[2] ${NET2_ADDITIONAL_ARGS} + OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[3] @{VNI6_SUBNETS}[3] @{VNI6_SUBNET_CIDRS}[3] ${NET3_ADDITIONAL_ARGS} + OpenStackOperations.Create Port @{VNI6_NETWORKS}[2] @{VNI6_NET_2_PORTS}[0] sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Create Port @{VNI6_NETWORKS}[3] @{VNI6_NET_3_PORTS}[0] sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Create Router @{VNI6_ROUTER}[1] + OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[1] @{VNI6_SUBNETS}[2] + OpenStackOperations.Create Router @{VNI6_ROUTER}[2] + OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[2] @{VNI6_SUBNETS}[3] + ${net_id} = OpenStackOperations.Get Net Id @{VNI6_NETWORKS}[2] + ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id} + VpnOperations.VPN Create L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1] name=@{VNI6_VPN_NAMES}[1] rd=@{VNI6_RDS}[1] exportrt=@{VNI6_RDS}[1] importrt=@{VNI6_RDS}[2] tenantid=${tenant_id} + ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1] + BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[1] + ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[1] + VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[1] + ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[1] + BuiltIn.Should Contain ${resp} ${router_id} + VpnOperations.VPN Create L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2] name=@{VNI6_VPN_NAMES}[2] rd=@{VNI6_RDS}[2] exportrt=@{VNI6_RDS}[2] importrt=@{VNI6_RDS}[1] tenantid=${tenant_id} + ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2] + BuiltIn.Should Contain ${resp} @{VNI6_VPN_INSTANCE_IDS}[2] + ${router_id} = OpenStackOperations.Get Router Id @{VNI6_ROUTER}[2] + VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=@{VNI6_VPN_INSTANCE_IDS}[2] + ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VNI6_VPN_INSTANCE_IDS}[2] + BuiltIn.Should Contain ${resp} ${router_id} + OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_2_PORTS}[0] @{VNI6_NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_3_PORTS}[0] @{VNI6_NET_3_VMS}[0] ${OS_CMP2_HOSTNAME} sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_2_VMS}[0] + OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_3_VMS}[0] + @{networks} = BuiltIn.Create List @{VNI6_NETWORKS}[2] @{VNI6_NETWORKS}[3] + @{subnet_cidrs} = BuiltIn.Create List @{VNI6_SUBNET_CIDRS}[2] @{VNI6_SUBNET_CIDRS}[3] + BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${networks} ${subnet_cidrs} + ${prefix_net2} = String.Replace String @{VNI6_SUBNET_CIDRS}[2] ::/64 (:[a-f0-9]{,4}){,4} + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses + ... fail_on_none=true vm_list=${VNI6_NET_2_VMS} network=@{VNI6_NETWORKS}[2] subnet=${prefix_net2} + ${prefix_net3} = String.Replace String @{VNI6_SUBNET_CIDRS}[3] ::/64 (:[a-f0-9]{,4}){,4} + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses + ... fail_on_none=true vm_list=${VNI6_NET_3_VMS} network=@{VNI6_NETWORKS}[3] subnet=${prefix_net3} + ${VM_IP_NET2} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_2_VMS} network=@{VNI6_NETWORKS}[2] subnet=${prefix_net2} + ${VM_IP_NET3} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_3_VMS} network=@{VNI6_NETWORKS}[3] subnet=${prefix_net3} + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET2} None + Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_2_VMS}[0] 30s + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET3} None + Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_3_VMS}[0] 30s + OpenStackOperations.Copy DHCP Files From Control Node + BuiltIn.Should Not Contain ${VM_IP_NET2} None + BuiltIn.Should Not Contain ${VM_IP_NET3} None + BuiltIn.Wait Until Keyword Succeeds 60s 5s OVSDB.Verify Vni Segmentation Id and Tunnel Id @{VNI6_NET_2_PORTS}[0] @{VNI6_NET_3_PORTS}[0] @{VNI6_NETWORKS}[2] + ... @{VNI6_NETWORKS}[3] @{VM_IP_NET2}[0] @{VM_IP_NET3}[0] ${IP} + +*** Keywords *** +Start Suite + [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs. + ... Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1 + VpnOperations.Basic Suite Setup + OpenStackOperations.Create Allow All SecurityGroup ${VNI6_SECURITY_GROUP} IPv6 + OpenStackOperations.Create Network @{VNI6_NETWORKS}[0] + OpenStackOperations.Create Network @{VNI6_NETWORKS}[1] + OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[0] @{VNI6_SUBNETS}[0] @{VNI6_SUBNET_CIDRS}[0] ${NET0_ADDITIONAL_ARGS} + OpenStackOperations.Create SubNet @{VNI6_NETWORKS}[1] @{VNI6_SUBNETS}[1] @{VNI6_SUBNET_CIDRS}[1] ${NET1_ADDITIONAL_ARGS} + OpenStackOperations.Create Port @{VNI6_NETWORKS}[0] @{VNI6_NET_0_PORTS}[0] sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Create Port @{VNI6_NETWORKS}[1] @{VNI6_NET_1_PORTS}[0] sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Create Router @{VNI6_ROUTER}[0] + OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[0] @{VNI6_SUBNETS}[0] + OpenStackOperations.Add Router Interface @{VNI6_ROUTER}[0] @{VNI6_SUBNETS}[1] + ${interface_output} = OpenStackOperations.Show Router Interface @{VNI6_ROUTER}[0] + ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address @{VNI6_ROUTER}[0] + BuiltIn.Set Suite Variable ${GWMAC_ADDRS} + BuiltIn.Set Suite Variable ${GWIP_ADDRS} + ${router_list} = BuiltIn.Create List @{VNI6_ROUTER}[0] + OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_0_PORTS}[0] @{VNI6_NET_0_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Create Vm Instance With Port On Compute Node @{VNI6_NET_1_PORTS}[0] @{VNI6_NET_1_VMS}[0] ${OS_CMP2_HOSTNAME} sg=${VNI6_SECURITY_GROUP} + OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_0_VMS}[0] + OpenStackOperations.Poll VM Is ACTIVE @{VNI6_NET_1_VMS}[0] + @{networks} = BuiltIn.Create List @{VNI6_NETWORKS}[0] @{VNI6_NETWORKS}[1] + @{subnet_cidrs} = BuiltIn.Create List @{VNI6_SUBNET_CIDRS}[0] @{VNI6_SUBNET_CIDRS}[1] + BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${networks} ${subnet_cidrs} + ${prefix_net0} = Replace String @{VNI6_SUBNET_CIDRS}[0] ::/64 (:[a-f0-9]{,4}){,4} + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses + ... fail_on_none=true vm_list=${VNI6_NET_0_VMS} network=@{VNI6_NETWORKS}[0] subnet=${prefix_net0} + ${prefix_net1} = Replace String @{VNI6_SUBNET_CIDRS}[1] ::/64 (:[a-f0-9]{,4}){,4} + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses + ... fail_on_none=true vm_list=${VNI6_NET_1_VMS} network=@{VNI6_NETWORKS}[1] subnet=${prefix_net1} + ${VM_IP_NET0} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_0_VMS} network=@{VNI6_NETWORKS}[0] subnet=${prefix_net0} + ${VM_IP_NET1} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses fail_on_none=false vm_list=${VNI6_NET_1_VMS} network=@{VNI6_NETWORKS}[1] subnet=${prefix_net1} + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET0} None + Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_0_VMS}[0] 30s + ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET1} None + Run Keyword If '${status}' == 'FAIL' OpenStack CLI openstack console log show @{VNI6_NET_1_VMS}[0] 30s + OpenStackOperations.Copy DHCP Files From Control Node + BuiltIn.Set Suite Variable ${VM_IP_NET0} + BuiltIn.Set Suite Variable ${VM_IP_NET1} + BuiltIn.Should Not Contain ${VM_IP_NET0} None + BuiltIn.Should Not Contain ${VM_IP_NET1} None diff --git a/csit/testplans/netvirt-1node-openstack.txt b/csit/testplans/netvirt-1node-openstack.txt index 35e691bfed..0783bde9e9 100644 --- a/csit/testplans/netvirt-1node-openstack.txt +++ b/csit/testplans/netvirt-1node-openstack.txt @@ -12,4 +12,5 @@ integration/test/csit/suites/netvirt/vpnservice/arp_learning.robot integration/test/csit/suites/netvirt/l2l3_gatewaymac_arp.robot integration/test/csit/suites/netvirt/vnibasedl2switching/vnibasedl2switching.robot integration/test/csit/suites/netvirt/vnibasedl3forwarding/vnibasedl3forwarding.robot +integration/test/csit/suites/netvirt/vnibasedIpv6forwarding/vnibasedIpv6forwarding.robot integration/test/csit/suites/integration/Create_JVM_Plots.robot -- 2.36.6