SPAN test - improvement of packet check
[csit.git] / resources / libraries / robot / ipv6.robot
1 # Copyright (c) 2016 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 """IPv6 keywords"""
15
16 *** Settings ***
17 | Library | resources.libraries.python.IPv6Util
18 | Library | resources.libraries.python.IPv6Setup
19 | Library | resources.libraries.python.TrafficScriptExecutor
20 | Library | resources.libraries.python.NodePath
21 | Library | resources.libraries.python.Routing
22 | Library | resources.libraries.python.InterfaceUtil
23 | Library | resources.libraries.python.topology.Topology
24 | Resource | resources/libraries/robot/default.robot
25 | Resource | resources/libraries/robot/counters.robot
26 | Documentation | IPv6 keywords
27
28 *** Keywords ***
29 | Ipv6 icmp echo
30 | | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
31 | | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
32 | | Append Nodes | ${tg_node} | ${dut_node}
33 | | Compute Path
34 | | ${src_port} | ${src_node}= | First Interface
35 | | ${dst_port} | ${dst_node}= | Last Interface
36 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
37 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
38 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
39 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
40 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
41 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
42 | |          | ...                    | ${dst_mac} | ${src_ip} | ${dst_ip}
43 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
44 | | Vpp dump stats | ${dst_node}
45 | | ${ipv6_counter}= | Vpp get interface ipv6 counter | ${dst_node} | ${dst_port}
46 | | Should Be Equal | ${ipv6_counter} | ${2} | #ICMPv6 neighbor advertisement + ICMPv6 echo request
47
48 | Ipv6 icmp echo sweep
49 | | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
50 | | [Arguments] | ${src_node} | ${dst_node} | ${start_size} | ${end_size}
51 | | ...         | ${step} | ${nodes_addr}
52 | | Append Nodes | ${src_node} | ${dst_node}
53 | | Compute Path
54 | | ${src_port} | ${src_node}= | First Interface
55 | | ${dst_port} | ${dst_node}= | Last Interface
56 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
57 | | ... | ${nodes_addr}
58 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
59 | | ... | ${nodes_addr}
60 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
61 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
62 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
63 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
64 | |          | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
65 | | ${args}= | Set Variable
66 | | ...      | ${args} --start_size ${start_size} --end_size ${end_size} --step ${step}
67 | | Run Traffic Script On Node | ipv6_sweep_ping.py | ${src_node} | ${args}
68 | | ... | timeout=${180}
69
70 | Ipv6 tg to dut1 egress
71 | | [Documentation] | Send traffic from TG to first DUT egress interface
72 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
73 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
74 | | Compute Path
75 | | ${src_port} | ${src_node}= | First Interface
76 | | ${dst_port} | ${dst_node}= | Last Egress Interface
77 | | ${hop_port} | ${hop_node}= | First Ingress Interface
78 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
79 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
80 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
81 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
82 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
83 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
84 | |          | ...                    | ${dst_mac} | ${src_ip} | ${dst_ip}
85 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
86
87
88 | Ipv6 tg to dut2 via dut1
89 | | [Documentation] | Send traffic from TG to second DUT through first DUT
90 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
91 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
92 | | Compute Path
93 | | ${src_port} | ${src_node}= | First Interface
94 | | ${dst_port} | ${dst_node}= | Last Interface
95 | | ${hop_port} | ${hop_node}= | First Ingress Interface
96 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
97 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
98 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
99 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
100 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
101 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
102 | |          | ...                    | ${dst_mac} | ${src_ip} | ${dst_ip}
103 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
104
105 | Ipv6 tg to dut2 egress via dut1
106 | | [Documentation] | Send traffic from TG to second DUT egress interface through first DUT
107 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
108 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
109 | | Compute Path
110 | | ${src_port} | ${src_node}= | First Interface
111 | | ${dst_port} | ${dst_node}= | Last Egress Interface
112 | | ${hop_port} | ${hop_node}= | First Ingress Interface
113 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
114 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
115 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
116 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
117 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
118 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
119 | |          | ...                    | ${dst_mac} | ${src_ip} | ${dst_ip}
120 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
121
122 | Ipv6 tg to tg routed
123 | | [Documentation] | Send traffic from one TG port to another through DUT nodes
124 | | ...             | and send reply back, also verify hop limit processing
125 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
126 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
127 | | Compute Path
128 | | ${src_port} | ${src_node}= | First Interface
129 | | ${dst_port} | ${dst_node}= | Last Interface
130 | | ${src_nh_port} | ${src_nh_node}= | First Ingress Interface
131 | | ${dst_nh_port} | ${dst_nh_node}= | Last Egress Interface
132 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
133 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
134 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
135 | | ${dst_mac}= | Get Interface Mac | ${src_node} | ${dst_port}
136 | | ${src_nh_mac}= | Get Interface Mac | ${src_nh_node} | ${src_nh_port}
137 | | ${dst_nh_mac}= | Get Interface Mac | ${dst_nh_node} | ${dst_nh_port}
138 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
139 | | ${dst_port_name}= | Get interface name | ${dst_node} | ${dst_port}
140 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${dst_port_name} | ${src_mac}
141 | |          | ...                    | ${dst_mac} | ${src_ip} | ${dst_ip}
142 | | ${args}= | Catenate | ${args} | --src_nh_mac ${src_nh_mac}
143 | |          | ...      | --dst_nh_mac ${dst_nh_mac} | --h_num 2
144 | | Run Traffic Script On Node | icmpv6_echo_req_resp.py | ${tg_node} | ${args}
145
146 | Ipv6 neighbor solicitation
147 | | [Documentation] | Send IPv6 neighbor solicitation from TG to DUT
148 | | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
149 | | Append Nodes | ${tg_node} | ${dut_node}
150 | | Compute Path
151 | | ${src_port} | ${src_node}= | First Interface
152 | | ${dst_port} | ${dst_node}= | Last Interface
153 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
154 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
155 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
156 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
157 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
158 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
159 | |          | ...                    | ${dst_mac} | ${src_ip} | ${dst_ip}
160 | | Run Traffic Script On Node | ipv6_ns.py | ${src_node} | ${args}
161
162 | Setup ipv6 to all dut in topology
163 | | [Documentation] | Setup IPv6 address on all DUTs
164 | | [Arguments] | ${nodes} | ${nodes_addr}
165 | | Setup all DUTs before test
166 | | ${interfaces}= | Nodes Set Ipv6 Addresses | ${nodes} | ${nodes_addr}
167 | | :FOR | ${interface} | IN | @{interfaces}
168 | | | Set Interface State | @{interface} | up | if_type=name
169 | | All Vpp Interfaces Ready Wait | ${nodes}
170
171 | Clear ipv6 on all dut in topology
172 | | [Documentation] | Remove IPv6 address on all DUTs
173 | | [Arguments] | ${nodes} | ${nodes_addr}
174 | | Nodes Clear Ipv6 Addresses | ${nodes} | ${nodes_addr}
175
176 | Vpp nodes ra suppress link layer
177 | | [Documentation] | Suppress ICMPv6 router advertisement message for link scope address
178 | | [Arguments] | ${nodes}
179 | | Vpp All Ra Suppress Link Layer | ${nodes}
180
181 | Vpp nodes setup ipv6 routing
182 | | [Documentation] | Setup routing on all VPP nodes required for IPv6 tests
183 | | [Arguments] | ${nodes} | ${nodes_addr}
184 | | Append Nodes | ${nodes['DUT1']} | ${nodes['DUT2']}
185 | | Compute Path
186 | | ${tg}= | Set Variable | ${nodes['TG']}
187 | | ${dut1_if} | ${dut1}= | First Interface
188 | | ${dut2_if} | ${dut2}= | Last Interface
189 | | ${dut1_if_addr}= | Get Node Port Ipv6 Address | ${dut1} | ${dut1_if} | ${nodes_addr}
190 | | ${dut2_if_addr}= | Get Node Port Ipv6 Address | ${dut2} | ${dut2_if} | ${nodes_addr}
191 | | @{tg_dut1_links}= | Get active links connecting "${tg}" and "${dut1}"
192 | | @{tg_dut2_links}= | Get active links connecting "${tg}" and "${dut2}"
193 | | :FOR | ${link} | IN | @{tg_dut1_links}
194 | | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
195 | | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
196 | | | Vpp Route Add | ${dut2} | ${net} | ${prefix} | ${dut1_if_addr} | ${dut2_if}
197 | | :FOR | ${link} | IN | @{tg_dut2_links}
198 | | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
199 | | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
200 | | | Vpp Route Add | ${dut1} | ${net} | ${prefix} | ${dut2_if_addr} | ${dut1_if}