5e94426486053570a02f0cad16c878b5dd015ee1
[integration/test.git] / csit / suites / netvirt / vnibasedIpv6forwarding / vnibasedIpv6forwarding.robot
1 *** Settings ***
2 Documentation     Test Suite for vni-based-l2-l3-nat:
3 ...               This feature attempts to realize the use of VxLAN VNI
4 ...               (Virtual Network Identifier) for VxLAN tenant traffic
5 ...               flowing on the cloud data-network. This is applicable
6 ...               to L2 switching, L3 forwarding and NATing for all VxLAN
7 ...               based provider networks. In doing so, it eliminates the
8 ...               presence of LPort tags, ELAN tags and MPLS labels on the
9 ...               wire and instead, replaces them with VNIs supplied by the
10 ...               tenant’s OpenStack.
11 Suite Setup       Start Suite
12 Suite Teardown    OpenStackOperations.OpenStack Suite Teardown
13 Test Setup        Run Keywords    OpenStackOperations.Get DumpFlows And Ovsconfig    ${OS_CMP1_CONN_ID}
14 ...               AND    OpenStackOperations.Get DumpFlows And Ovsconfig    ${OS_CMP2_CONN_ID}
15 Test Teardown     OpenStackOperations.Get Test Teardown Debugs
16 Library           OperatingSystem
17 Library           RequestsLibrary
18 Library           String
19 Resource          ../../../libraries/DevstackUtils.robot
20 Resource          ../../../libraries/KarafKeywords.robot
21 Resource          ../../../variables/netvirt/Variables.robot
22 Resource          ../../../libraries/OpenStackOperations.robot
23 Resource          ../../../libraries/OVSDB.robot
24 Resource          ../../../libraries/SetupUtils.robot
25 Resource          ../../../libraries/Utils.robot
26 Resource          ../../../libraries/VpnOperations.robot
27 Resource          ../../../variables/netvirt/Variables.robot
28 Resource          ../../../variables/Variables.robot
29
30 *** Variables ***
31 ${EGRESS}         Egress
32 ${INGRESS}        Ingress
33 ${IP}             ipv6
34 ${VNI6_SECURITY_GROUP}    vni6_sg
35 @{VNI6_NETWORKS}    vni6_net_0    vni6_net_1    vni6_net_2    vni6_net_3
36 @{VNI6_SUBNETS}    vni6_sub_0    vni6_sub_1    vni6_sub_2    vni6_sub_3
37 @{VNI6_SUBNET_CIDRS}    2001:db8:0:4::/64    2001:db8:0:5::/64    2001:db8:0:6::/64    2001:db8:0:7::/64
38 @{VNI6_NET_0_PORTS}    vni6_net_0_port_1    vni6_net_0_port_2
39 @{VNI6_NET_1_PORTS}    vni6_net_1_port_1    vni6_net_1_port_2
40 @{VNI6_NET_2_PORTS}    vni6_net_2_port_1    vni6_net_2_port_2
41 @{VNI6_NET_3_PORTS}    vni6_net_3_port_1    vni6_net_3_port_2
42 @{VNI6_NET_0_VMS}    vni6_net_0_vm_1
43 @{VNI6_NET_1_VMS}    vni6_net_1_vm_1
44 @{VNI6_NET_2_VMS}    vni6_net_2_vm_1
45 @{VNI6_NET_3_VMS}    vni6_net_3_vm_1
46 @{VNI6_ROUTER}    vni6_router1    vni6_router2    vni6_router3
47 @{VNI6_RDS}       ["2600:2"]    ["2700:2"]    ["2800:2"]
48 @{VNI6_VPN_NAMES}    VNI6_vpn_1    VNI6_vpn_2    VNI6_vpn_3
49 @{VNI6_VPN_INSTANCE_IDS}    4ae8cd92-48ca-49b5-94e1-b2921a261551    4ae8cd92-48ca-49b5-94e1-b2921a261552    4ae8cd92-48ca-49b5-94e1-b2921a261553
50 ${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
51 ${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
52 ${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
53 ${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
54
55 *** Test Cases ***
56 VNI Based IPv6 Forwarding
57     [Documentation]    verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
58     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]
59     ...    @{VNI6_NETWORKS}[1]    @{VM_IP_NET0}[0]    @{VM_IP_NET1}[0]    ${IP}
60
61 VNI Based IPv6 Forwarding With BGPVPN Router Association
62     [Documentation]    verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
63     ...    With Router associated to a BGPVPN.
64     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI6_NETWORKS}[0]
65     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
66     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}
67     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
68     BuiltIn.Should Contain    ${resp}    @{VNI6_VPN_INSTANCE_IDS}[0]
69     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI6_ROUTER}[0]
70     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
71     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
72     BuiltIn.Should Contain    ${resp}    ${router_id}
73     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]
74     ...    @{VNI6_NETWORKS}[1]    @{VM_IP_NET0}[0]    @{VM_IP_NET1}[0]    ${IP}
75
76 VNI Based IPv6 Forwarding With Two Routers And BGPVPN With Irt Ert
77     [Documentation]    verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
78     ...    With Two Routers each associated to a BGPVPN and The Two BGPVPN is connected with irt and ert.
79     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[2]
80     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[3]
81     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[2]    @{VNI6_SUBNETS}[2]    @{VNI6_SUBNET_CIDRS}[2]    ${NET2_ADDITIONAL_ARGS}
82     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[3]    @{VNI6_SUBNETS}[3]    @{VNI6_SUBNET_CIDRS}[3]    ${NET3_ADDITIONAL_ARGS}
83     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[2]    @{VNI6_NET_2_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
84     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[3]    @{VNI6_NET_3_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
85     OpenStackOperations.Create Router    @{VNI6_ROUTER}[1]
86     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[1]    @{VNI6_SUBNETS}[2]
87     OpenStackOperations.Create Router    @{VNI6_ROUTER}[2]
88     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[2]    @{VNI6_SUBNETS}[3]
89     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI6_NETWORKS}[2]
90     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
91     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}
92     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
93     BuiltIn.Should Contain    ${resp}    @{VNI6_VPN_INSTANCE_IDS}[1]
94     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI6_ROUTER}[1]
95     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
96     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
97     BuiltIn.Should Contain    ${resp}    ${router_id}
98     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}
99     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
100     BuiltIn.Should Contain    ${resp}    @{VNI6_VPN_INSTANCE_IDS}[2]
101     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI6_ROUTER}[2]
102     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
103     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
104     BuiltIn.Should Contain    ${resp}    ${router_id}
105     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}
106     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}
107     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_2_VMS}[0]
108     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_3_VMS}[0]
109     @{networks} =    BuiltIn.Create List    @{VNI6_NETWORKS}[2]    @{VNI6_NETWORKS}[3]
110     @{subnet_cidrs} =    BuiltIn.Create List    @{VNI6_SUBNET_CIDRS}[2]    @{VNI6_SUBNET_CIDRS}[3]
111     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${networks}    ${subnet_cidrs}
112     ${prefix_net2} =    String.Replace String    @{VNI6_SUBNET_CIDRS}[2]    ::/64    (:[a-f0-9]{,4}){,4}
113     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
114     ...    fail_on_none=true    vm_list=${VNI6_NET_2_VMS}    network=@{VNI6_NETWORKS}[2]    subnet=${prefix_net2}
115     ${prefix_net3} =    String.Replace String    @{VNI6_SUBNET_CIDRS}[3]    ::/64    (:[a-f0-9]{,4}){,4}
116     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
117     ...    fail_on_none=true    vm_list=${VNI6_NET_3_VMS}    network=@{VNI6_NETWORKS}[3]    subnet=${prefix_net3}
118     ${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}
119     ${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}
120     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET2}    None
121     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_2_VMS}[0]    30s
122     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET3}    None
123     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_3_VMS}[0]    30s
124     OpenStackOperations.Copy DHCP Files From Control Node
125     BuiltIn.Should Not Contain    ${VM_IP_NET2}    None
126     BuiltIn.Should Not Contain    ${VM_IP_NET3}    None
127     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]
128     ...    @{VNI6_NETWORKS}[3]    @{VM_IP_NET2}[0]    @{VM_IP_NET3}[0]    ${IP}
129
130 *** Keywords ***
131 Start Suite
132     [Documentation]    Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
133     ...    Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
134     VpnOperations.Basic Suite Setup
135     OpenStackOperations.Create Allow All SecurityGroup    ${VNI6_SECURITY_GROUP}    IPv6
136     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[0]
137     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[1]
138     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[0]    @{VNI6_SUBNETS}[0]    @{VNI6_SUBNET_CIDRS}[0]    ${NET0_ADDITIONAL_ARGS}
139     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[1]    @{VNI6_SUBNETS}[1]    @{VNI6_SUBNET_CIDRS}[1]    ${NET1_ADDITIONAL_ARGS}
140     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[0]    @{VNI6_NET_0_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
141     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[1]    @{VNI6_NET_1_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
142     OpenStackOperations.Create Router    @{VNI6_ROUTER}[0]
143     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[0]    @{VNI6_SUBNETS}[0]
144     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[0]    @{VNI6_SUBNETS}[1]
145     ${interface_output} =    OpenStackOperations.Show Router Interface    @{VNI6_ROUTER}[0]
146     ${GWMAC_ADDRS}    ${GWIP_ADDRS} =    VpnOperations.Get Gateway MAC And IP Address    @{VNI6_ROUTER}[0]
147     BuiltIn.Set Suite Variable    ${GWMAC_ADDRS}
148     BuiltIn.Set Suite Variable    ${GWIP_ADDRS}
149     ${router_list} =    BuiltIn.Create List    @{VNI6_ROUTER}[0]
150     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}
151     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}
152     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_0_VMS}[0]
153     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_1_VMS}[0]
154     @{networks} =    BuiltIn.Create List    @{VNI6_NETWORKS}[0]    @{VNI6_NETWORKS}[1]
155     @{subnet_cidrs} =    BuiltIn.Create List    @{VNI6_SUBNET_CIDRS}[0]    @{VNI6_SUBNET_CIDRS}[1]
156     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${networks}    ${subnet_cidrs}
157     ${prefix_net0} =    Replace String    @{VNI6_SUBNET_CIDRS}[0]    ::/64    (:[a-f0-9]{,4}){,4}
158     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
159     ...    fail_on_none=true    vm_list=${VNI6_NET_0_VMS}    network=@{VNI6_NETWORKS}[0]    subnet=${prefix_net0}
160     ${prefix_net1} =    Replace String    @{VNI6_SUBNET_CIDRS}[1]    ::/64    (:[a-f0-9]{,4}){,4}
161     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
162     ...    fail_on_none=true    vm_list=${VNI6_NET_1_VMS}    network=@{VNI6_NETWORKS}[1]    subnet=${prefix_net1}
163     ${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}
164     ${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}
165     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET0}    None
166     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_0_VMS}[0]    30s
167     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET1}    None
168     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_1_VMS}[0]    30s
169     OpenStackOperations.Copy DHCP Files From Control Node
170     BuiltIn.Set Suite Variable    ${VM_IP_NET0}
171     BuiltIn.Set Suite Variable    ${VM_IP_NET1}
172     BuiltIn.Should Not Contain    ${VM_IP_NET0}    None
173     BuiltIn.Should Not Contain    ${VM_IP_NET1}    None