blob: 518628c938d60eefa9463d9db040eb35ec1cdd06 [file] [log] [blame]
Prashanth Katti8abbb4d2021-01-29 02:17:45 -06001*** Settings ***
2Documentation Network interface IPv6 configuration and verification
3 ... tests.
4
5Resource ../../lib/bmc_redfish_resource.robot
6Resource ../../lib/openbmc_ffdc.robot
7Resource ../../lib/bmc_ipv6_utils.robot
8Library ../../lib/bmc_network_utils.py
9Library Collections
10
11Test Setup Test Setup Execution
12Test Teardown Test Teardown Execution
Prashanth Katti3270fd02021-06-11 08:02:22 -050013Suite Setup Suite Setup Execution
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060014
Matt Fischer6fb70d92023-10-24 19:06:33 -060015Test Tags BMC_IPv6
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060016
17*** Variables ***
Sweta Potthuriafe858e2025-02-25 23:52:51 -060018${test_ipv6_addr} 2001:db8:3333:4444:5555:6666:7777:8888
19${test_ipv6_invalid_addr} 2001:db8:3333:4444:5555:6666:7777:JJKK
20${test_ipv6_addr1} 2001:db8:3333:4444:5555:6666:7777:9999
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060021
George Keishinge16f1582022-12-15 07:32:21 -060022# Valid prefix length is a integer ranges from 1 to 128.
Sweta Potthuriafe858e2025-02-25 23:52:51 -060023${test_prefix_length} 64
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060024
25*** Test Cases ***
26
27Get IPv6 Address And Verify
28 [Documentation] Get IPv6 Address And Verify.
29 [Tags] Get_IPv6_Address_And_Verify
30
31 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
32 Verify IPv6 On BMC ${ipv6_network_configuration['Address']}
33 END
34
35
Prashanth Katti2c73abc2021-03-17 07:42:25 -050036Get PrefixLength And Verify
37 [Documentation] Get IPv6 prefix length and verify.
38 [Tags] Get_PrefixLength_And_Verify
39
40 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
41 Verify IPv6 On BMC ${ipv6_network_configuration['PrefixLength']}
42 END
43
44
45Get IPv6 Default Gateway And Verify
George Keishing96143832021-03-23 07:55:08 -050046 [Documentation] Get IPv6 default gateway and verify.
George Keishingade6ab42022-07-19 11:41:03 -050047 [Tags] Get_IPv6_Default_Gateway_And_Verify
Prashanth Katti2c73abc2021-03-17 07:42:25 -050048
49 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
50 ${ipv6_gateway}= Get From Dictionary ${resp.dict} IPv6DefaultGateway
51 Verify IPv6 Default Gateway On BMC ${ipv6_gateway}
52
53
Prashanth Kattic1d2daa2022-07-26 03:53:06 -050054Verify All Configured IPv6 And PrefixLength On BMC
55 [Documentation] Verify IPv6 address and its prefix length on BMC.
56 [Tags] Verify_All_Configured_IPv6_And_PrefixLength_On_BMC
57
58 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
George Keishingf02ca2b2023-04-05 22:11:03 +053059 Verify IPv6 And PrefixLength ${ipv6_network_configuration['Address']}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -050060 ... ${ipv6_network_configuration['PrefixLength']}
61 END
62
63
64Configure IPv6 Address And Verify
65 [Documentation] Configure IPv6 address and verify.
66 [Tags] Configure_IPv6_Address_And_Verify
67 [Template] Configure IPv6 Address On BMC
68
69
70 # IPv6 address Prefix length
71 ${test_ipv6_addr} ${test_prefix_length}
72
73
Prashanth Katti12ed4b72023-05-16 05:24:00 -050074Delete IPv6 Address And Verify
75 [Documentation] Delete IPv6 address and verify.
76 [Tags] Delete_IPv6_Address_And_Verify
77
78 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
79
80 Delete IPv6 Address ${test_ipv6_addr}
81
82
Prashanth Katti5f7d2e42023-05-22 03:17:25 -050083
George Keishingcc288312024-10-22 10:13:12 +053084Modify IPv6 Address And Verify
Prashanth Katti5f7d2e42023-05-22 03:17:25 -050085 [Documentation] Modify IPv6 address and verify.
86 [Tags] Modify_IPv6_Address_And_Verify
87
88 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
89
90 Modify IPv6 Address ${test_ipv6_addr} ${test_ipv6_addr1} ${test_prefix_length}
91
92
Sweta Potthuriafe858e2025-02-25 23:52:51 -060093Verify Persistency Of IPv6 After BMC Reboot
94 [Documentation] Verify persistency of IPv6 after BMC reboot.
95 [Tags] Verify_Persistency_Of_IPv6_After_BMC_Reboot
96 [Teardown] Run Keywords
97 ... Delete IPv6 Address ${test_ipv6_addr} AND Test Teardown Execution
98
99 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
100
101 Redfish OBMC Reboot (off) stack_mode=skip
102
103 # Verifying persistency of IPv6.
104 Verify IPv6 On BMC ${test_ipv6_addr}
105
106
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600107*** Keywords ***
108
Prashanth Katti3270fd02021-06-11 08:02:22 -0500109Suite Setup Execution
110 [Documentation] Do suite setup execution.
111
112 ${active_channel_config}= Get Active Channel Config
113 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
114
115 Set Suite variable ${ethernet_interface}
116
117
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600118Test Setup Execution
119 [Documentation] Test setup execution.
120
121 Redfish.Login
122
123 @{ipv6_network_configurations}= Get IPv6 Network Configuration
124 Set Test Variable @{ipv6_network_configurations}
125
126 # Get BMC IPv6 address and prefix length.
127 ${ipv6_data}= Get BMC IPv6 Info
128 Set Test Variable ${ipv6_data}
129
130
131Test Teardown Execution
132 [Documentation] Test teardown execution.
133
134 FFDC On Test Case Fail
135 Redfish.Logout
136
137
138Get IPv6 Network Configuration
139 [Documentation] Get Ipv6 network configuration.
140 # Sample output:
141 # {
ganesanb4d430282023-04-27 14:33:23 +0000142 # "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/eth0",
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600143 # "@odata.type": "#EthernetInterface.v1_4_1.EthernetInterface",
144 # "DHCPv4": {
145 # "DHCPEnabled": false,
146 # "UseDNSServers": false,
147 # "UseDomainName": true,
148 # "UseNTPServers": false
149 # },
150 # "DHCPv6": {
151 # "OperatingMode": "Disabled",
152 # "UseDNSServers": false,
153 # "UseDomainName": true,
154 # "UseNTPServers": false
155 # },
156 # "Description": "Management Network Interface",
157 # "FQDN": "localhost",
158 # "HostName": "localhost",
159 # "IPv4Addresses": [
160 # {
161 # "Address": "xx.xx.xx.xx",
162 # "AddressOrigin": "Static",
163 # "Gateway": "xx.xx.xx.1",
164 # "SubnetMask": "xx.xx.xx.0"
165 # },
166 # {
167 # "Address": "169.254.xx.xx",
168 # "AddressOrigin": "IPv4LinkLocal",
169 # "Gateway": "0.0.0.0",
170 # "SubnetMask": "xx.xx.0.0"
171 # },
172 # ],
173 # "IPv4StaticAddresses": [
174 # {
175 # "Address": "xx.xx.xx.xx",
176 # "AddressOrigin": "Static",
177 # "Gateway": "xx.xx.xx.1",
178 # "SubnetMask": "xx.xx.0.0"
179 # }
180 # }
181 # ],
182 # "IPv6AddressPolicyTable": [],
183 # "IPv6Addresses": [
184 # {
185 # "Address": "fe80::xxxx:xxxx:xxxx:xxxx",
186 # "AddressOrigin": "LinkLocal",
187 # "AddressState": null,
188 # "PrefixLength": xx
189 # }
190 # ],
191 # "IPv6DefaultGateway": "",
192 # "IPv6StaticAddresses": [
193 # { "Address": "xxxx:xxxx:xxxx:xxxx::xxxx",
194 # "AddressOrigin": "Static",
195 # "AddressState": null,
196 # "PrefixLength": xxx
197 # }
198 # ],
199 # "Id": "eth0",
200 # "InterfaceEnabled": true,
201 # "LinkStatus": "LinkUp",
202 # "MACAddress": "xx:xx:xx:xx:xx:xx",
203 # "Name": "Manager Ethernet Interface",
204 # "NameServers": [],
205 # "SpeedMbps": 0,
206 # "StaticNameServers": [],
207 # "Status": {
208 # "Health": "OK",
209 # "HealthRollup": "OK",
210 # "State": "Enabled"
211 # },
212 # "VLANs": {
ganesanb4d430282023-04-27 14:33:23 +0000213 # "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/eth0/VLANs"
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600214
215
216 ${active_channel_config}= Get Active Channel Config
217 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${active_channel_config['${CHANNEL_NUMBER}']['name']}
218
219 @{ipv6_network_configurations}= Get From Dictionary ${resp.dict} IPv6StaticAddresses
George Keishing409df052024-01-17 22:36:14 +0530220 RETURN @{ipv6_network_configurations}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500221
222
223Verify IPv6 And PrefixLength
224 [Documentation] Verify IPv6 address and prefix length on BMC.
225 [Arguments] ${ipv6_addr} ${prefix_len}
226
227 # Description of the argument(s):
228 # ipv6_addr IPv6 address to be verified.
229 # prefix_len PrefixLength value to be verified.
230
231 # Catenate IPv6 address and its prefix length.
232 ${ipv6_with_prefix}= Catenate ${ipv6_addr}/${prefix_len}
233
234 # Get IPv6 address details on BMC using IP command.
235 @{ip_data}= Get BMC IPv6 Info
236
237 # Verify if IPv6 and prefix length is configured on BMC.
238
239 Should Contain ${ip_data} ${ipv6_with_prefix}
240 ... msg=IPv6 and prefix length pair does not exist.
241
242
243Configure IPv6 Address On BMC
244 [Documentation] Add IPv6 Address on BMC.
245 [Arguments] ${ipv6_addr} ${prefix_len} ${valid_status_codes}=${HTTP_OK}
246
247 # Description of argument(s):
248 # ipv6_addr IPv6 address to be added (e.g. "2001:EEEE:2222::2022").
249 # prefix_len Prefix length for the IPv6 to be added
250 # (e.g. "64").
251 # valid_status_codes Expected return code from patch operation
252 # (e.g. "200").
253
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500254 ${prefix_length}= Convert To Integer ${prefix_len}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500255 ${empty_dict}= Create Dictionary
256 ${ipv6_data}= Create Dictionary Address=${ipv6_addr}
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500257 ... PrefixLength=${prefix_length}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500258
259 ${patch_list}= Create List
260
261 # Get existing static IPv6 configurations on BMC.
262 ${ipv6_network_configurations}= Get IPv6 Network Configuration
263 ${num_entries}= Get Length ${ipv6_network_configurations}
264
265 FOR ${INDEX} IN RANGE 0 ${num_entries}
266 Append To List ${patch_list} ${empty_dict}
267 END
268
269 ${valid_status_codes}= Run Keyword If '${valid_status_codes}' == '${HTTP_OK}'
270 ... Set Variable ${HTTP_OK},${HTTP_NO_CONTENT}
271 ... ELSE Set Variable ${valid_status_codes}
272
273 # We need not check for existence of IPv6 on BMC while adding.
274 Append To List ${patch_list} ${ipv6_data}
275 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
276
277 ${active_channel_config}= Get Active Channel Config
278 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
279
280 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data}
281 ... valid_status_codes=[${valid_status_codes}]
282
283 Return From Keyword If '${valid_status_codes}' != '${HTTP_OK},${HTTP_NO_CONTENT}'
284
285 # Note: Network restart takes around 15-18s after patch request processing.
286 Sleep ${NETWORK_TIMEOUT}s
287 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
288
289 Verify IPv6 And PrefixLength ${ipv6_addr} ${prefix_len}
290
291 # Verify if existing static IPv6 addresses still exist.
292 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
293 Verify IPv6 On BMC ${ipv6_network_configuration['Address']}
294 END
295
296 Validate IPv6 Network Config On BMC
297
298
299Validate IPv6 Network Config On BMC
300 [Documentation] Check that IPv6 network info obtained via redfish matches info
301 ... obtained via CLI.
Prashanth Katti5f7d2e42023-05-22 03:17:25 -0500302 @{ipv6_network_configurations}= Get IPv6 Network Configuration
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500303 ${ipv6_data}= Get BMC IPv6 Info
304 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
305 Should Contain Match ${ipv6_data} ${ipv6_network_configuration['Address']}/*
306 ... msg=IPv6 address does not exist.
307 END
308
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500309
310Delete IPv6 Address
311 [Documentation] Delete IPv6 address of BMC.
312 [Arguments] ${ipv6_addr} ${valid_status_codes}=${HTTP_OK}
313
314 # Description of argument(s):
315 # ipv6_addr IPv6 address to be deleted (e.g. "2001:1234:1234:1234::1234").
316 # valid_status_codes Expected return code from patch operation
317 # (e.g. "200"). See prolog of rest_request
318 # method in redfish_plus.py for details.
319
320 ${empty_dict}= Create Dictionary
321 ${patch_list}= Create List
322
323 @{ipv6_network_configurations}= Get IPv6 Network Configuration
324 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
325 IF '${ipv6_network_configuration['Address']}' == '${ipv6_addr}'
326 Append To List ${patch_list} ${null}
327 ELSE
328 Append To List ${patch_list} ${empty_dict}
329 END
330 END
331
332 ${ip_found}= Run Keyword And Return Status List Should Contain Value
333 ... ${patch_list} ${null} msg=${ipv6_addr} does not exist on BMC
334 Pass Execution If ${ip_found} == ${False} ${ipv6_addr} does not exist on BMC
335
336 # Run patch command only if given IP is found on BMC
337 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
338
339 ${active_channel_config}= Get Active Channel Config
340 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
341
342 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data}
343 ... valid_status_codes=[${valid_status_codes}]
344
345 # Note: Network restart takes around 15-18s after patch request processing
346 Sleep ${NETWORK_TIMEOUT}s
347 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
348
349 # IPv6 address that is deleted should not be there on BMC.
350 ${delete_status}= Run Keyword And Return Status Verify IPv6 On BMC ${ipv6_addr}
351 IF '${valid_status_codes}' == '${HTTP_OK}'
352 Should Be True '${delete_status}' == '${False}'
353 ELSE
354 Should Be True '${delete_status}' == '${True}'
355 END
356
357 Validate IPv6 Network Config On BMC
Prashanth Katti5f7d2e42023-05-22 03:17:25 -0500358
359
360Modify IPv6 Address
361 [Documentation] Modify and verify IPv6 address of BMC.
362 [Arguments] ${ipv6} ${new_ipv6} ${prefix_len}
363 ... ${valid_status_codes}=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
364
365 # Description of argument(s):
366 # ipv6 IPv6 address to be replaced (e.g. "2001:AABB:CCDD::AAFF").
367 # new_ipv6 New IPv6 address to be configured.
368 # prefix_len Prefix length value (Range 1 to 128).
369 # valid_status_codes Expected return code from patch operation
370 # (e.g. "200", "201").
371
372 ${empty_dict}= Create Dictionary
373 ${patch_list}= Create List
374 ${prefix_length}= Convert To Integer ${prefix_len}
375 ${ipv6_data}= Create Dictionary
376 ... Address=${new_ipv6} PrefixLength=${prefix_length}
377
378 # Sample IPv6 network configurations:
379 # "IPv6AddressPolicyTable": [],
380 # "IPv6Addresses": [
381 # {
382 # "Address": "X002:db8:0:2::XX0",
383 # "AddressOrigin": "DHCPv6",
384 # "PrefixLength": 128
385 # },
386 # {
387 # "Address": “X002:db8:0:2:a94:XXff:fe82:XXXX",
388 # "AddressOrigin": "SLAAC",
389 # "PrefixLength": 64
390 # },
391 # {
392 # "Address": “Y002:db8:0:2:a94:efff:fe82:5000",
393 # "AddressOrigin": "Static",
394 # "PrefixLength": 56
395 # },
396 # {
397 # "Address": “Z002:db8:0:2:a94:efff:fe82:5000",
398 # "AddressOrigin": "Static",
399 # "PrefixLength": 56
400 # },
401 # {
402 # "Address": “Xe80::a94:efff:YYYY:XXXX",
403 # "AddressOrigin": "LinkLocal",
404 # "PrefixLength": 64
405 # },
406 # {
407 # "Address": “X002:db8:1:2:eff:233:fee:546",
408 # "AddressOrigin": "Static",
409 # "PrefixLength": 56
410 # }
411 # ],
412 # "IPv6DefaultGateway": “XXXX::ab2e:80fe:87df:XXXX”,
413 # "IPv6StaticAddresses": [
414 # {
415 # "Address": “X002:db8:0:2:a94:efff:fe82:5000",
416 # "PrefixLength": 56
417 # },
418 # {
419 # "Address": “Y002:db8:0:2:a94:efff:fe82:5000",
420 # "PrefixLength": 56
421 # },
422 # {
423 # "Address": “Z002:db8:1:2:eff:233:fee:546",
424 # "PrefixLength": 56
425 # }
426 # ],
427 # "IPv6StaticDefaultGateways": [],
428
429 # Find the position of IPv6 address to be modified.
430 @{ipv6_network_configurations}= Get IPv6 Network Configuration
431 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
432 Run Keyword If '${ipv6_network_configuration['Address']}' == '${ipv6}'
433 ... Append To List ${patch_list} ${ipv6_data}
434 ... ELSE Append To List ${patch_list} ${empty_dict}
435 END
436
437 # Modify the IPv6 address only if given IPv6 is found
438 ${ip_found}= Run Keyword And Return Status List Should Contain Value
439 ... ${patch_list} ${ipv6_data} msg=${ipv6} does not exist on BMC
440 Pass Execution If ${ip_found} == ${False} ${ipv6} does not exist on BMC
441
442 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
443
444 ${active_channel_config}= Get Active Channel Config
445 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
446
447 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
448 ... body=&{data} valid_status_codes=${valid_status_codes}
449
450 # Note: Network restart takes around 15-18s after patch request processing.
451 Sleep ${NETWORK_TIMEOUT}s
452 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
453
454 # Verify if new IPv6 address is configured on BMC.
455 Verify IPv6 On BMC ${new_ipv6}
456
457 # Verify if old IPv6 address is erased.
458 ${cmd_status}= Run Keyword And Return Status
459 ... Verify IPv6 On BMC ${ipv6}
460 Should Be Equal ${cmd_status} ${False} msg=Old IPv6 address is not deleted.
461
462 Validate IPv6 Network Config On BMC