f80d98f177dd937045d194d6b677929a97d59d0e
[csit.git] / resources / libraries / robot / ip / ip6.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/shared/default.robot
25 | Resource | resources/libraries/robot/shared/counters.robot
26 | Documentation | IPv6 keywords
27
28 *** Keywords ***
29 | Send IPv6 icmp echo request to DUT1 ingress inteface and verify answer
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 Table | ${dst_node}
45 | | ${ipv6_counter}= | Vpp Get Ipv6 Interface Counter | ${dst_node}
46 | | ... | ${dst_port}
47 | | Should Be Equal | ${ipv6_counter} | ${2}
48 | | ... | #ICMPv6 neighbor advertisement + ICMPv6 echo request
49
50 | Execute IPv6 ICMP echo sweep
51 | | [Documentation] | Type of the src_node must be TG and dst_node must be DUT
52 | | [Arguments] | ${src_node} | ${dst_node} | ${start_size} | ${end_size}
53 | | ... | ${step} | ${nodes_addr}
54 | | Append Nodes | ${src_node} | ${dst_node}
55 | | Compute Path
56 | | ${src_port} | ${src_node}= | First Interface
57 | | ${dst_port} | ${dst_node}= | Last Interface
58 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port}
59 | | ... | ${nodes_addr}
60 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port}
61 | | ... | ${nodes_addr}
62 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
63 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
64 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
65 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name}
66 | | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
67 | | ${args}= | Set Variable
68 | | ... | ${args} --start_size ${start_size} --end_size ${end_size} --step ${step}
69 | | Run Traffic Script On Node | ipv6_sweep_ping.py | ${src_node} | ${args}
70 | | ... | timeout=${180}
71
72 | Send IPv6 ICMP echo request to DUT1 egress interface and verify answer
73 | | [Documentation] | Send traffic from TG to first DUT egress interface
74 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
75 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
76 | | Compute Path
77 | | ${src_port} | ${src_node}= | First Interface
78 | | ${dst_port} | ${dst_node}= | Last Egress Interface
79 | | ${hop_port} | ${hop_node}= | First Ingress Interface
80 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
81 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
82 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
83 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
84 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
85 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
86 | | ... | ${dst_mac} | ${src_ip} | ${dst_ip}
87 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
88
89
90 | Send IPv6 ICMP echo request to DUT2 via DUT1 and verify answer
91 | | [Documentation] | Send traffic from TG to second DUT through first DUT
92 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
93 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut}
94 | | Compute Path
95 | | ${src_port} | ${src_node}= | First Interface
96 | | ${dst_port} | ${dst_node}= | Last Interface
97 | | ${hop_port} | ${hop_node}= | First Ingress Interface
98 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
99 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
100 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
101 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
102 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
103 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
104 | | ... | ${dst_mac} | ${src_ip} | ${dst_ip}
105 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
106
107 | Send IPv6 ICMP echo request to DUT2 egress interface via DUT1 and verify answer
108 | | [Documentation] | Send traffic from TG to second DUT egress interface through first DUT
109 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
110 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
111 | | Compute Path
112 | | ${src_port} | ${src_node}= | First Interface
113 | | ${dst_port} | ${dst_node}= | Last Egress Interface
114 | | ${hop_port} | ${hop_node}= | First Ingress Interface
115 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
116 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
117 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
118 | | ${dst_mac}= | Get Interface Mac | ${hop_node} | ${hop_port}
119 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
120 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
121 | | ... | ${dst_mac} | ${src_ip} | ${dst_ip}
122 | | Run Traffic Script On Node | icmpv6_echo.py | ${tg_node} | ${args}
123
124 | Ipv6 tg to tg routed
125 | | [Documentation] | Send traffic from one TG port to another through DUT nodes
126 | | ... | and send reply back, also verify hop limit processing
127 | | [Arguments] | ${tg_node} | ${first_dut} | ${second_dut} | ${nodes_addr}
128 | | Append Nodes | ${tg_node} | ${first_dut} | ${second_dut} | ${tg_node}
129 | | Compute Path
130 | | ${src_port} | ${src_node}= | First Interface
131 | | ${dst_port} | ${dst_node}= | Last Interface
132 | | ${src_nh_port} | ${src_nh_node}= | First Ingress Interface
133 | | ${dst_nh_port} | ${dst_nh_node}= | Last Egress Interface
134 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
135 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
136 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
137 | | ${dst_mac}= | Get Interface Mac | ${src_node} | ${dst_port}
138 | | ${src_nh_mac}= | Get Interface Mac | ${src_nh_node} | ${src_nh_port}
139 | | ${dst_nh_mac}= | Get Interface Mac | ${dst_nh_node} | ${dst_nh_port}
140 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
141 | | ${dst_port_name}= | Get interface name | ${dst_node} | ${dst_port}
142 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${dst_port_name} | ${src_mac}
143 | | ... | ${dst_mac} | ${src_ip} | ${dst_ip}
144 | | ${args}= | Catenate | ${args} | --src_nh_mac ${src_nh_mac}
145 | | ... | --dst_nh_mac ${dst_nh_mac} | --h_num 2
146 | | Run Traffic Script On Node | icmpv6_echo_req_resp.py | ${tg_node} | ${args}
147
148 | Send IPv6 neighbor solicitation and verify answer
149 | | [Documentation] | Send IPv6 neighbor solicitation from TG to DUT
150 | | [Arguments] | ${tg_node} | ${dut_node} | ${nodes_addr}
151 | | Append Nodes | ${tg_node} | ${dut_node}
152 | | Compute Path
153 | | ${src_port} | ${src_node}= | First Interface
154 | | ${dst_port} | ${dst_node}= | Last Interface
155 | | ${src_ip}= | Get Node Port Ipv6 Address | ${src_node} | ${src_port} | ${nodes_addr}
156 | | ${dst_ip}= | Get Node Port Ipv6 Address | ${dst_node} | ${dst_port} | ${nodes_addr}
157 | | ${src_mac}= | Get Interface Mac | ${src_node} | ${src_port}
158 | | ${dst_mac}= | Get Interface Mac | ${dst_node} | ${dst_port}
159 | | ${src_port_name}= | Get interface name | ${src_node} | ${src_port}
160 | | ${args}= | Traffic Script Gen Arg | ${src_port_name} | ${src_port_name} | ${src_mac}
161 | | ... | ${dst_mac} | ${src_ip} | ${dst_ip}
162 | | Run Traffic Script On Node | ipv6_ns.py | ${src_node} | ${args}
163
164 | Configure IPv6 on all DUTs in topology
165 | | [Documentation] | Setup IPv6 address on all DUTs
166 | | [Arguments] | ${nodes} | ${nodes_addr}
167 | | Configure all DUTs before test
168 | | ${interfaces}= | Nodes Set Ipv6 Addresses | ${nodes} | ${nodes_addr}
169 | | :FOR | ${interface} | IN | @{interfaces}
170 | | | Set Interface State | @{interface} | up | if_type=name
171 | | All Vpp Interfaces Ready Wait | ${nodes}
172
173 | Suppress ICMPv6 router advertisement message
174 | | [Documentation] | Suppress ICMPv6 router advertisement message for link scope address
175 | | [Arguments] | ${nodes}
176 | | Vpp All Ra Suppress Link Layer | ${nodes}
177
178 | Configure IPv6 routing on all DUTs
179 | | [Documentation] | Setup routing on all VPP nodes required for IPv6 tests
180 | | [Arguments] | ${nodes} | ${nodes_addr}
181 | | Append Nodes | ${nodes['DUT1']} | ${nodes['DUT2']}
182 | | Compute Path
183 | | ${tg}= | Set Variable | ${nodes['TG']}
184 | | ${dut1_if} | ${dut1}= | First Interface
185 | | ${dut2_if} | ${dut2}= | Last Interface
186 | | ${dut1_if_addr}= | Get Node Port Ipv6 Address | ${dut1} | ${dut1_if} | ${nodes_addr}
187 | | ${dut2_if_addr}= | Get Node Port Ipv6 Address | ${dut2} | ${dut2_if} | ${nodes_addr}
188 | | @{tg_dut1_links}= | Get active links connecting "${tg}" and "${dut1}"
189 | | @{tg_dut2_links}= | Get active links connecting "${tg}" and "${dut2}"
190 | | :FOR | ${link} | IN | @{tg_dut1_links}
191 | | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
192 | | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
193 | | | Vpp Route Add | ${dut2} | ${net} | ${prefix} | ${dut1_if_addr} | ${dut2_if}
194 | | :FOR | ${link} | IN | @{tg_dut2_links}
195 | | | ${net}= | Get Link Address | ${link} | ${nodes_addr}
196 | | | ${prefix}= | Get Link Prefix | ${link} | ${nodes_addr}
197 | | | Vpp Route Add | ${dut1} | ${net} | ${prefix} | ${dut2_if_addr} | ${dut1_if}