CSIT-1468: InterfaceUtil migration from VAT to PAPI
[csit.git] / resources / libraries / robot / ip / ip6.robot
1 # Copyright (c) 2019 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 *** Settings ***
15 | Library | resources.libraries.python.InterfaceUtil
16 | Library | resources.libraries.python.IPv6Util
17 | Library | resources.libraries.python.IPv6Setup
18 | Library | resources.libraries.python.NodePath
19 | Library | resources.libraries.python.Routing
20 | Library | resources.libraries.python.topology.Topology
21 | Library | resources.libraries.python.TrafficScriptExecutor
22 | Resource | resources/libraries/robot/shared/counters.robot
23 | Resource | resources/libraries/robot/shared/default.robot
24 | Resource | resources/libraries/robot/shared/testing_path.robot
25 | ...
26 | Documentation | IPv6 keywords
27
28 *** Keywords ***
29 | Get interface Ipv6 addresses
30 | | [Documentation] | Get IPv6 address for the given interface of the node.
31 | | ...
32 | | ... | *Arguments:*
33 | | ... | - node - DUT node data. Type: dictionary
34 | | ... | - interface - Name of the interface on the VPP node. Type: string
35 | | ...
36 | | [Arguments] | ${node} | ${interface}
37 | | ...
38 | | [Return] | ${ip_data}
39 | | ...
40 | | ${ip_data}= | VPP get interface ip addresses
41 | | ... | ${node} | ${interface} | ipv6
42
43 | Send IPv6 icmp echo request to DUT1 ingress inteface and verify answer
44 | | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
45 | | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
46 | | Append Nodes | ${tg_node} | ${dut_node}
47 | | Compute Path
48 | | ${src_port} | ${src_node}= | First Interface
49 | | ${dst_port} | ${dst_node}= | Last Interface
50 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
51 | | ... | ${nodes_addr}
52 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
53 | | ... | ${nodes_addr}
54 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
55 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
56 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
57 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
58 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
59 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
60
61 | Execute IPv6 ICMP echo sweep
62 | | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
63 | | [Arguments] | ${src_node} | ${dst_node} | ${start_size} | ${end_size}
64 | | ... | ${step} | ${nodes_addr}
65 | | Append Nodes | ${src_node} | ${dst_node}
66 | | Compute Path
67 | | ${src_port} | ${src_node}= | First Interface
68 | | ${dst_port} | ${dst_node}= | Last Interface
69 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
70 | | ... | ${nodes_addr}
71 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
72 | | ... | ${nodes_addr}
73 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
74 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
75 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
76 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
77 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
78 | | ${args}= | Catenate | ${args} | --start_size ${start_size}
79 | | ... | --end_size ${end_size} | --step ${step}
80 | | Run Traffic Script On Node | ipv6_sweep_ping.py | ${src_node} | ${args}
81 | | ... | timeout=${180}
82
83 | Send IPv6 ICMP echo request to DUT1 egress interface and verify answer
84 | | [Documentation] | Send traffic from TG to first DUT egress interface
85 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
86 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
87 | | Compute Path
88 | | ${src_port} | ${src_node}= | First Interface
89 | | ${dst_port} | ${dst_node}= | Last Egress Interface
90 | | ${hop_port} | ${hop_node}= | First Ingress Interface
91 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
92 | | ... | ${nodes_addr}
93 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
94 | | ... | ${nodes_addr}
95 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
96 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
97 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
98 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
99 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
100 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
101
102
103 | Send IPv6 ICMP echo request to DUT2 via DUT1 and verify answer
104 | | [Documentation] | Send traffic from TG to second DUT through first DUT
105 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
106 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
107 | | Compute Path
108 | | ${src_port} | ${src_node}= | First Interface
109 | | ${dst_port} | ${dst_node}= | Last Interface
110 | | ${hop_port} | ${hop_node}= | First Ingress Interface
111 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
112 | | ... | ${nodes_addr}
113 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
114 | | ... | ${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}
119 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
120 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
121
122 | Send IPv6 ICMP echo request to DUT2 egress interface via DUT1 and verify answer
123 | | [Documentation] | Send traffic from TG to second DUT egress interface
124 | | ... | through first DUT
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 Egress Interface
130 | | ${hop_port} | ${hop_node}= | First Ingress Interface
131 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
132 | | ... | ${nodes_addr}
133 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
134 | | ... | ${nodes_addr}
135 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
136 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
137 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
138 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
139 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
140 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
141
142 | Ipv6 tg to tg routed
143 | | [Documentation] | Send traffic from one TG port to another through DUT nodes
144 | | ... | and send reply back, also verify hop limit processing
145 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
146 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
147 | | Compute Path
148 | | ${src_port} | ${src_node}= | First Interface
149 | | ${dst_port} | ${dst_node}= | Last Interface
150 | | ${src_nh_port} | ${src_nh_node}= | First Ingress Interface
151 | | ${dst_nh_port} | ${dst_nh_node}= | Last Egress Interface
152 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
153 | | ... | ${nodes_addr}
154 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
155 | | ... | ${nodes_addr}
156 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
157 | | ${dst_mac}= | Get Interface Mac | ${src_node} | ${dst_port}
158 | | ${src_nh_mac}= | Get Interface Mac | ${src_nh_node} | ${src_nh_port}
159 | | ${dst_nh_mac}= | Get Interface Mac | ${dst_nh_node} | ${dst_nh_port}
160 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
161 | | ${dst_port_name}= | Get interface name | ${dst_node} | ${dst_port}
162 | | ${args}= | Traffic Script Gen Arg | ${dst_port_name} | ${src_port_name}
163 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
164 | | ${args}= | Catenate | ${args} | --src_nh_mac ${src_nh_mac}
165 | | ... | --dst_nh_mac ${dst_nh_mac} | --h_num 2
166 | | Run Traffic Script On Node | icmpv6_echo_req_resp.py | ${tg_node} | ${args}
167
168 | Send IPv6 neighbor solicitation and verify answer
169 | | [Documentation] | Send IPv6 neighbor solicitation from TG to DUT
170 | | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
171 | | Append Nodes | ${tg_node} | ${dut_node}
172 | | Compute Path
173 | | ${src_port} | ${src_node}= | First Interface
174 | | ${dst_port} | ${dst_node}= | Last Interface
175 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
176 | | ... | ${nodes_addr}
177 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
178 | | ... | ${nodes_addr}
179 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
180 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
181 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
182 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
183 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
184 | | Run Traffic Script On Node | ipv6_ns.py | ${src_node} | ${args}
185
186 | Configure IPv6 on all DUTs in topology
187 | | [Documentation] | Setup IPv6 address on all DUTs
188 | | [Arguments] | ${nodes} | ${nodes_addr}
189 | | Restart Vpp Service On All Duts | ${nodes}
190 | | Verify Vpp On All Duts | ${nodes}
191 | | VPP Enable Traces On All Duts | ${nodes}
192 | | ${interfaces}= | Nodes Set Ipv6 Addresses | ${nodes} | ${nodes_addr}
193 | | :FOR | ${interface} | IN | @{interfaces}
194 | | | Set Interface State | @{interface} | up | if_type=name
195 | | All Vpp Interfaces Ready Wait | ${nodes}
196
197 | Suppress ICMPv6 router advertisement message
198 | | [Documentation] | Suppress ICMPv6 router advertisement message for link
199 | | ... | scope address
200 | | [Arguments] | ${nodes}
201 | | Vpp All Ra Suppress Link Layer | ${nodes}
202
203 | Configure IPv6 routing on all DUTs
204 | | [Documentation] | Setup routing on all VPP nodes required for IPv6 tests
205 | | [Arguments] | ${nodes} | ${nodes_addr}
206 | | Append Nodes | ${nodes['DUT1']} | ${nodes['DUT2']}
207 | | Compute Path
208 | | ${tg}= | Set Variable | ${nodes['TG']}
209 | | ${dut1_if} | ${dut1}= | First Interface
210 | | ${dut2_if} | ${dut2}= | Last Interface
211 | | ${dut1_if_addr}= | Get Node Port Ipv6 Address | ${dut1} | ${dut1_if}
212 | | ... | ${nodes_addr}
213 | | ${dut2_if_addr}= | Get Node Port Ipv6 Address | ${dut2} | ${dut2_if}
214 | | ... | ${nodes_addr}
215 | | @{tg_dut1_links}= | Get active links connecting "${tg}" and "${dut1}"
216 | | @{tg_dut2_links}= | Get active links connecting "${tg}" and "${dut2}"
217 | | :FOR | ${link} | IN | @{tg_dut1_links}
218 | | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
219 | | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
220 | | | Vpp Route Add | ${dut2} | ${net} | ${prefix} | gateway=${dut1_if_addr}
221 | | | ... | interface=${dut2_if}
222 | | :FOR | ${link} | IN | @{tg_dut2_links}
223 | | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
224 | | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
225 | | | Vpp Route Add | ${dut1} | ${net} | ${prefix} | gateway=${dut2_if_addr}
226 | | | ... | interface=${dut1_if}
227
228 | Configure IPv6 forwarding in circular topology
229 | | [Documentation]
230 | | ... | Set UP state on VPP interfaces in path on nodes in 2-node / 3-node
231 | | ... | circular topology. Get the interface MAC addresses and setup ARP on
232 | | ... | all VPP interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG
233 | | ... | links. In case of 3-node topology setup IPv6 adresses with /96 prefix
234 | | ... | on DUT1-DUT2 link and set routing on both DUT nodes with prefix /64
235 | | ... | and next hop of neighbour DUT interface IPv6 address. Configure route
236 | | ... | entries for remote hosts IPv6 addresses if required.
237 | | ...
238 | | ... | *Arguments:*
239 | | ... | - tg_if1_ip6 - IPv6 address of TG interface1. Type: string
240 | | ... | - tg_if2_ip6 - IPv6 address of TG interface2. Type: string
241 | | ... | - dut1_if1_ip6 - IPv6 address of DUT1 interface1. Type: string
242 | | ... | - dut1_if2_ip6 - IPv6 address of DUT1 interface1. Type: string
243 | | ... | - dut2_if1_ip6 - IPv6 address of DUT2 interface1 (Optional).
244 | | ... | Type: string
245 | | ... | - dut2_if2_ip6 - IPv6 address of DUT2 interface2 (Optional).
246 | | ... | Type: string
247 | | ... | - remote_host1_ip6 - IPv6 address of remote host1 (Optional).
248 | | ... | Type: string
249 | | ... | - remote_host2_ip6 - IPv6 address of remote host2 (Optional).
250 | | ... | Type: string
251 | | ... | - remote_host_ip6_prefix - IPv6 address prefix for host IPv6 addresses
252 | | ... | (Optional). Type: string or integer
253 | | ...
254 | | ... | *Example:*
255 | | ...
256 | | ... | \| Configure IPv6 forwarding in circular topology \
257 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2001:2::1 \|
258 | | ... | \| Configure IPv6 forwarding in circular topology \
259 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2001:2::1 \
260 | | ... | \| remote_host1_ip6=3ffe:5f::1 \| remote_host2_ip6=3ffe:5f::2 \
261 | | ... | \| remote_host_ip6_prefix=128 \|
262 | | ... | \| Configure IPv6 forwarding in circular topology \
263 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2003:3::1 \| 2003:3::2 \
264 | | ... | \| 2001:2::1 \|
265 | | ... | \| Configure IPv6 forwarding in circular topology \
266 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2003:3::1 \| 2003:3::2 \
267 | | ... | \| 2001:2::1 \| remote_host1_ip4=3ffe:5f::1 \
268 | | ... | \| remote_host2_ip4=3ffe:5f::2 \| remote_host_ip4_prefix=128 \|
269 | | ...
270 | | [Arguments] | ${tg_if1_ip6} | ${tg_if2_ip6} | ${dut1_if1_ip6}
271 | | ... | ${dut1_if2_ip6} | ${dut2_if1_ip6}=${NONE} | ${dut2_if2_ip6}=${NONE}
272 | | ... | ${remote_host1_ip6}=${NONE} | ${remote_host2_ip6}=${NONE}
273 | | ... | ${remote_host_ip6_prefix}=${NONE}
274 | | ...
275 | | ...
276 | | Configure interfaces in path up
277 | | ...
278 | | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
279 | | ... | Variable Should Exist | ${dut2_node}
280 | | ...
281 | | Run Keyword If | '${dut2_status}' == 'PASS'
282 | | ... | Configure IPv6 forwarding in 3-node circular topology
283 | | ... | ${tg_if1_ip6} | ${tg_if2_ip6} | ${dut1_if1_ip6} | ${dut1_if2_ip6}
284 | | ... | ${dut2_if1_ip6} | ${dut2_if2_ip6} | ${remote_host1_ip6}
285 | | ... | ${remote_host2_ip6} | ${remote_host_ip6_prefix}
286 | | ... | ELSE
287 | | ... | Configure IPv6 forwarding in 2-node circular topology
288 | | ... | ${tg_if1_ip6} | ${tg_if2_ip6} | ${dut1_if1_ip6} | ${dut1_if2_ip6}
289 | | ... | remote_host1_ip6=${remote_host1_ip6}
290 | | ... | remote_host2_ip6=${remote_host2_ip6}
291 | | ... | remote_host_ip6_prefix=${remote_host_ip6_prefix}
292
293 | Configure IPv6 forwarding in 2-node circular topology
294 | | [Documentation]
295 | | ... | Set UP state on VPP interfaces on DUT node in 2-node circular
296 | | ... | topology. Get the interface MAC addresses and setup ARP on
297 | | ... | all VPP interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG
298 | | ... | links. Configure route entries for remote hosts IPv6 addresses
299 | | ... | if required.
300 | | ...
301 | | ... | *Arguments:*
302 | | ... | - tg_if1_ip6 - IPv6 address of TG interface1. Type: string
303 | | ... | - tg_if2_ip6 - IPv6 address of TG interface2. Type: string
304 | | ... | - dut1_if1_ip6 - IPv6 address of DUT1 interface1. Type: string
305 | | ... | - dut1_if2_ip6 - IPv6 address of DUT1 interface1. Type: string
306 | | ... | - remote_host1_ip6 - IPv6 address of remote host1 (Optional).
307 | | ... | Type: string
308 | | ... | - remote_host2_ip6 - IPv6 address of remote host2 (Optional).
309 | | ... | Type: string
310 | | ... | - remote_host_ip6_prefix - IPv6 address prefix for host IPv6 addresses
311 | | ... | (Optional). Type: string or integer
312 | | ...
313 | | ... | *Example:*
314 | | ...
315 | | ... | \| Configure IPv6 forwarding in circular topology \
316 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2001:2::1 \|
317 | | ... | \| Configure IPv6 forwarding in circular topology \
318 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2001:2::1 \
319 | | ... | \| remote_host1_ip6=3ffe:5f::1 \| remote_host2_ip6=3ffe:5f::2 \
320 | | ... | \| remote_host_ip6_prefix=128 \|
321 | | ...
322 | | [Arguments] | ${tg_if1_ip6} | ${tg_if2_ip6} | ${dut1_if1_ip6}
323 | | ... | ${dut1_if2_ip6} | ${remote_host1_ip6}=${NONE}
324 | | ... | ${remote_host2_ip6}=${NONE} | ${remote_host_ip6_prefix}=${NONE}
325 | | ...
326 | | ${dut_tg_ip6_prefix}= | Set Variable | 64
327 | | ...
328 | | Add IP neighbor | ${dut_node} | ${dut_to_tg_if1} | ${tg_if1_ip6}
329 | | ... | ${tg_to_dut_if1_mac}
330 | | Add IP neighbor | ${dut_node} | ${dut_to_tg_if2} | ${tg_if2_ip6}
331 | | ... | ${tg_to_dut_if2_mac}
332 | | ...
333 | | VPP set If IPv6 addr | ${dut_node} | ${dut_to_tg_if1} | ${dut1_if1_ip6}
334 | | ... | ${dut_tg_ip6_prefix}
335 | | VPP set If IPv6 addr | ${dut_node} | ${dut_to_tg_if2} | ${dut1_if2_ip6}
336 | | ... | ${dut_tg_ip6_prefix}
337 | | ...
338 | | Run Keyword Unless | '${remote_host1_ip6}' == '${NONE}'
339 | | ... | Vpp Route Add | ${dut_node} | ${remote_host1_ip6}
340 | | ... | ${remote_host_ip6_prefix} | gateway=${tg_if1_ip6}
341 | | ... | interface=${dut_to_tg_if1}
342 | | Run Keyword Unless | '${remote_host2_ip6}' == '${NONE}'
343 | | ... | Vpp Route Add | ${dut_node} | ${remote_host2_ip6}
344 | | ... | ${remote_host_ip6_prefix} | gateway=${tg_if2_ip6}
345 | | ... | interface=${dut_to_tg_if2}
346
347 | Configure IPv6 forwarding in 3-node circular topology
348 | | [Documentation]
349 | | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
350 | | ... | topology. Get the interface MAC addresses and setup ARP on all VPP
351 | | ... | interfaces. Setup IPv6 addresses with /64 prefix on DUT-TG links.
352 | | ... | Configure IPv6 adresses with /96 prefix on DUT1-DUT2 link and set
353 | | ... | routing on both DUT nodes with prefix /64 and next hop of neighbour
354 | | ... | DUT interface IPv6 address. Configure route entries for remote hosts
355 | | ... | IPv6 addresses if required.
356 | | ...
357 | | ... | *Arguments:*
358 | | ... | - tg_if1_ip6 - IPv6 address of TG interface1. Type: string
359 | | ... | - tg_if2_ip6 - IPv6 address of TG interface2. Type: string
360 | | ... | - dut1_if1_ip6 - IPv6 address of DUT1 interface1. Type: string
361 | | ... | - dut1_if2_ip6 - IPv6 address of DUT1 interface1. Type: string
362 | | ... | - dut2_if1_ip6 - IPv6 address of DUT2 interface1 Type: string
363 | | ... | - dut2_if2_ip6 - IPv6 address of DUT2 interface2 Type: string
364 | | ... | - remote_host1_ip6 - IPv6 address of remote host1 (Optional).
365 | | ... | Type: string
366 | | ... | - remote_host2_ip6 - IPv6 address of remote host2 (Optional).
367 | | ... | Type: string
368 | | ... | - remote_host_ip6_prefix - IPv6 address prefix for host IPv6 addresses
369 | | ... | (Optional). Type: string or integer
370 | | ...
371 | | ... | *Example:*
372 | | ...
373 | | ... | \| Configure IPv6 forwarding in circular topology \
374 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2003:3::1 \| 2003:3::2 \
375 | | ... | \| 2001:2::1 \|
376 | | ... | \| Configure IPv6 forwarding in circular topology \
377 | | ... | \| 2001:1::2 \| 2001:2::2 \| 2001:1::1 \| 2003:3::1 \| 2003:3::2 \
378 | | ... | \| 2001:2::1 \| remote_host1_ip4=3ffe:5f::1 \
379 | | ... | \| remote_host2_ip4=3ffe:5f::2 \| remote_host_ip4_prefix=128 \|
380 | | ...
381 | | [Arguments] | ${tg_if1_ip6} | ${tg_if2_ip6} | ${dut1_if1_ip6}
382 | | ... | ${dut1_if2_ip6} | ${dut2_if1_ip6} | ${dut2_if2_ip6}
383 | | ... | ${remote_host1_ip6}=${NONE} | ${remote_host2_ip6}=${NONE}
384 | | ... | ${remote_host_ip6_prefix}=${NONE}
385 | | ...
386 | | ${dut_tg_ip6_prefix}= | Set Variable | 64
387 | | ${dut_link_ip6_prefix}= | Set Variable | 96
388 | | ...
389 | | Add IP neighbor | ${dut1_node} | ${dut1_to_tg} | ${tg_if1_ip6}
390 | | ... | ${tg_to_dut1_mac}
391 | | Add IP neighbor | ${dut1_node} | ${dut1_to_dut2} | ${dut2_if1_ip6}
392 | | ... | ${dut2_to_dut1_mac}
393 | | Add IP neighbor | ${dut2_node} | ${dut2_to_dut1} | ${dut1_if2_ip6}
394 | | ... | ${dut1_to_dut2_mac}
395 | | Add IP neighbor | ${dut2_node} | ${dut2_to_tg} | ${tg_if2_ip6}
396 | | ... | ${tg_to_dut2_mac}
397 | | ...
398 | | VPP set If IPv6 addr | ${dut1_node} | ${dut1_to_tg} | ${dut1_if1_ip6}
399 | | ... | ${dut_tg_ip6_prefix}
400 | | VPP set If IPv6 addr | ${dut1_node} | ${dut1_to_dut2} | ${dut1_if2_ip6}
401 | | ... | ${dut_link_ip6_prefix}
402 | | VPP set If IPv6 addr | ${dut2_node} | ${dut2_to_dut1} | ${dut2_if1_ip6}
403 | | ... | ${dut_link_ip6_prefix}
404 | | VPP set If IPv6 addr | ${dut2_node} | ${dut2_to_tg} | ${dut2_if2_ip6}
405 | | ... | ${dut_tg_ip6_prefix}
406 | | ...
407 | | Vpp Route Add | ${dut1_node} | ${tg_if2_ip6} | ${dut_tg_ip6_prefix}
408 | | ... | gateway=${dut2_if1_ip6} | interface=${dut1_to_dut2}
409 | | Vpp Route Add | ${dut2_node} | ${tg_if1_ip6} | ${dut_tg_ip6_prefix}
410 | | ... | gateway=${dut1_if2_ip6} | interface=${dut2_to_dut1}
411 | | ...
412 | | Run Keyword Unless | '${remote_host1_ip6}' == '${NONE}'
413 | | ... | Vpp Route Add | ${dut1_node} | ${remote_host1_ip6}
414 | | ... | ${remote_host_ip6_prefix} | gateway=${tg_if1_ip6}
415 | | ... | interface=${dut1_to_tg}
416 | | Run Keyword Unless | '${remote_host2_ip6}' == '${NONE}'
417 | | ... | Vpp Route Add | ${dut1_node} | ${remote_host2_ip6}
418 | | ... | ${remote_host_ip6_prefix} | gateway=${dut2_if1_ip6}
419 | | ... | interface=${dut1_to_dut2}
420 | | Run Keyword Unless | '${remote_host1_ip6}' == '${NONE}'
421 | | ... | Vpp Route Add | ${dut2_node} | ${remote_host1_ip6}
422 | | ... | ${remote_host_ip6_prefix} | gateway=${dut1_if2_ip6}
423 | | ... | interface=${dut2_to_dut1}
424 | | Run Keyword Unless | '${remote_host2_ip6}' == '${NONE}'
425 | | ... | Vpp Route Add | ${dut2_node} | ${remote_host2_ip6}
426 | | ... | ${remote_host_ip6_prefix} | gateway=${tg_if2_ip6}
427 | | ... | interface=${dut2_to_tg}