blob: 36a79f87ffae61ec0573d16b4782dd13b6939f76 [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
Sweta Potthuri8ba74322025-03-19 12:29:06 -05008Resource ../../lib/external_intf/vmi_utils.robot
Sweta Potthuri2f3fbb52025-09-19 00:50:47 -05009Resource ../../lib/bmc_network_utils.robot
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060010Library ../../lib/bmc_network_utils.py
11Library Collections
Sweta Potthuri35c503b2025-07-27 23:36:20 -050012Library Process
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060013
Anvesh-Kumar_Rayankula019d9362025-09-03 22:55:12 -050014Test Setup Test Setup Execution
15Test Teardown Test Teardown Execution
16Suite Setup Suite Setup Execution
17Suite Teardown Redfish.Logout
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060018
Matt Fischer6fb70d92023-10-24 19:06:33 -060019Test Tags BMC_IPv6
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060020
21*** Variables ***
Sweta Potthuri2edacd32025-07-02 01:04:43 -050022${test_ipv6_addr} 2001:db8:3333:4444:5555:6666:7777:8888
23${test_ipv6_invalid_addr} 2001:db8:3333:4444:5555:6666:7777:JJKK
24${test_ipv6_addr1} 2001:db8:3333:4444:5555:6666:7777:9999
kvishal9c6774c2025-09-10 02:14:07 -050025${invalid_hexadec_ipv6} x:x:x:x:x:x:10.5.5.6
26${ipv6_multi_short} 2001::33::111
George Keishinge16f1582022-12-15 07:32:21 -060027# Valid prefix length is a integer ranges from 1 to 128.
Sweta Potthuri2edacd32025-07-02 01:04:43 -050028${test_prefix_length} 64
29${ipv6_gw_addr} 2002:903:15F:32:9:3:32:1
30${prefix_length_def} None
31${invalid_staticv6_gateway} 9.41.164.1
Sweta Potthuri2f3fbb52025-09-19 00:50:47 -050032${new_mac_addr} AA:E2:84:14:28:79
abhijith-1219e190dd2025-10-15 03:35:06 -050033${linklocal_addr_format} fe80::[0-9a-f:]+$
34${link_local_addr} fe80::
35${link_local_prefix_len} 10
abhijith-121b9fc2742025-10-14 09:46:43 -050036${ipv6_leading_zero} 2001:0022:0033::0111
abhijith-1215f0aa202025-10-24 02:53:53 -050037${ipv6_firsthextet_zero} 2001:0022:1133::1111
abhijith-121b9fc2742025-10-14 09:46:43 -050038${ipv6_eliminate_zero} 2001:22:33::111
abhijith-1215f0aa202025-10-24 02:53:53 -050039${ipv6_eliminate_zero1} 2001:22:1133::1111
40${ipv6_contigeous_zero} 2001:0022:0000:0000:1:2:3:8
41${ipv6_zero_compression} 2001:22::1:2:3:8
Prashanth Katti8abbb4d2021-01-29 02:17:45 -060042
43*** Test Cases ***
44
45Get IPv6 Address And Verify
46 [Documentation] Get IPv6 Address And Verify.
47 [Tags] Get_IPv6_Address_And_Verify
48
49 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
50 Verify IPv6 On BMC ${ipv6_network_configuration['Address']}
51 END
52
53
Prashanth Katti2c73abc2021-03-17 07:42:25 -050054Get PrefixLength And Verify
55 [Documentation] Get IPv6 prefix length and verify.
56 [Tags] Get_PrefixLength_And_Verify
57
58 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
59 Verify IPv6 On BMC ${ipv6_network_configuration['PrefixLength']}
60 END
61
62
63Get IPv6 Default Gateway And Verify
George Keishing96143832021-03-23 07:55:08 -050064 [Documentation] Get IPv6 default gateway and verify.
George Keishingade6ab42022-07-19 11:41:03 -050065 [Tags] Get_IPv6_Default_Gateway_And_Verify
Prashanth Katti2c73abc2021-03-17 07:42:25 -050066
67 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
68 ${ipv6_gateway}= Get From Dictionary ${resp.dict} IPv6DefaultGateway
69 Verify IPv6 Default Gateway On BMC ${ipv6_gateway}
70
71
Prashanth Kattic1d2daa2022-07-26 03:53:06 -050072Verify All Configured IPv6 And PrefixLength On BMC
73 [Documentation] Verify IPv6 address and its prefix length on BMC.
74 [Tags] Verify_All_Configured_IPv6_And_PrefixLength_On_BMC
75
76 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
George Keishingf02ca2b2023-04-05 22:11:03 +053077 Verify IPv6 And PrefixLength ${ipv6_network_configuration['Address']}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -050078 ... ${ipv6_network_configuration['PrefixLength']}
79 END
80
81
82Configure IPv6 Address And Verify
83 [Documentation] Configure IPv6 address and verify.
84 [Tags] Configure_IPv6_Address_And_Verify
Anvesh-Kumar_Rayankula3a26c662025-04-16 01:19:26 -050085 [Teardown] Run Keywords
86 ... Delete IPv6 Address ${test_ipv6_addr} AND Test Teardown Execution
Prashanth Kattic1d2daa2022-07-26 03:53:06 -050087 [Template] Configure IPv6 Address On BMC
88
89
90 # IPv6 address Prefix length
91 ${test_ipv6_addr} ${test_prefix_length}
92
93
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -050094Configure IPv6 Address On BMC And Verify On Both Interfaces
95 [Documentation] Configure IPv6 address on both interfaces and verify.
96 [Tags] Configure_IPv6_Address_On_BMC_And_Verify_On_Both_Interfaces
97 [Teardown] Run Keywords
98 ... Delete IPv6 Address ${test_ipv6_addr} ${1}
99 ... AND Delete IPv6 Address ${test_ipv6_addr1} ${2}
100 ... AND Test Teardown Execution
101
102 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} ${None} ${1}
103 Configure IPv6 Address On BMC ${test_ipv6_addr1} ${test_prefix_length} ${None} ${2}
104
105 Verify All The Addresses Are Intact ${1}
106 Verify All The Addresses Are Intact ${2}
107 ... ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}
108
109 # Verify Static IPv6 on eth0
110 @{ipv6_addressorigin_list} ${ipv6_static_addr}=
111 ... Get Address Origin List And Address For Type Static ${1}
112 Should Contain ${ipv6_addressorigin_list} Static
113 Should Not Be Empty ${ipv6_static_addr} msg=${ipv6_static_addr} address is not present
114
115 # Verify Static IPv6 on eth1
116 @{ipv6_addressorigin_list} ${ipv6_static_addr}=
117 ... Get Address Origin List And Address For Type Static ${2}
118 Should Contain ${ipv6_addressorigin_list} Static
119 Should Not Be Empty ${ipv6_static_addr} msg=${ipv6_static_addr} address is not present
120
121
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500122Delete IPv6 Address And Verify
123 [Documentation] Delete IPv6 address and verify.
124 [Tags] Delete_IPv6_Address_And_Verify
125
126 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
127
128 Delete IPv6 Address ${test_ipv6_addr}
129
130
George Keishingcc288312024-10-22 10:13:12 +0530131Modify IPv6 Address And Verify
Prashanth Katti5f7d2e42023-05-22 03:17:25 -0500132 [Documentation] Modify IPv6 address and verify.
133 [Tags] Modify_IPv6_Address_And_Verify
kvishal88de8c42025-03-04 01:45:10 -0600134 [Teardown] Run Keywords
George Keishingcfdd0992025-03-17 11:59:20 +0530135 ... Delete IPv6 Address ${test_ipv6_addr1} AND Test Teardown Execution
Prashanth Katti5f7d2e42023-05-22 03:17:25 -0500136
137 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
138
139 Modify IPv6 Address ${test_ipv6_addr} ${test_ipv6_addr1} ${test_prefix_length}
140
141
Sweta Potthuriafe858e2025-02-25 23:52:51 -0600142Verify Persistency Of IPv6 After BMC Reboot
143 [Documentation] Verify persistency of IPv6 after BMC reboot.
144 [Tags] Verify_Persistency_Of_IPv6_After_BMC_Reboot
145 [Teardown] Run Keywords
146 ... Delete IPv6 Address ${test_ipv6_addr} AND Test Teardown Execution
147
148 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
149
150 Redfish OBMC Reboot (off) stack_mode=skip
151
152 # Verifying persistency of IPv6.
153 Verify IPv6 On BMC ${test_ipv6_addr}
154
155
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500156Enable SLAAC On BMC And Verify
157 [Documentation] Enable SLAAC on BMC and verify.
158 [Tags] Enable_SLAAC_On_BMC_And_Verify
Sweta Potthuri8ba74322025-03-19 12:29:06 -0500159
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500160 Set SLAAC Configuration State And Verify ${True}
Sweta Potthuri8ba74322025-03-19 12:29:06 -0500161
162
Sweta Potthuri0df4a862025-03-24 12:05:09 -0500163Enable DHCPv6 Property On BMC And Verify
164 [Documentation] Enable DHCPv6 property on BMC and verify.
165 [Tags] Enable_DHCPv6_Property_On_BMC_And_Verify
166
Sweta Potthuridb4a6d62025-08-18 11:29:16 -0500167 Set And Verify DHCPv6 Property Enabled
Sweta Potthuri0df4a862025-03-24 12:05:09 -0500168
Sweta Potthuri4b0083f2025-07-09 11:34:40 -0500169
kvishal0d199a92025-05-29 02:35:18 -0500170Disable DHCPv6 Property On BMC And Verify
171 [Documentation] Disable DHCPv6 property on BMC and verify.
172 [Tags] Disable_DHCPv6_Property_On_BMC_And_Verify
173
Sweta Potthuridb4a6d62025-08-18 11:29:16 -0500174 Set And Verify DHCPv6 Property Disabled
kvishalbd04bd62025-08-05 03:57:53 -0500175
176
177Verify Persistency Of DHCPv6 On Reboot
178 [Documentation] Verify persistency of DHCPv6 property on reboot.
179 [Tags] Verify_Persistency_Of_DHCPv6_On_Reboot
180
Sweta Potthuridb4a6d62025-08-18 11:29:16 -0500181 Set And Verify DHCPv6 Property Enabled
182 Redfish OBMC Reboot (off) stack_mode=skip
183 Verify DHCPv6 Property Enabled
Sweta Potthuri0df4a862025-03-24 12:05:09 -0500184
Sweta Potthuri4b0083f2025-07-09 11:34:40 -0500185
abhijith-12159fed682025-10-31 00:36:15 -0500186Verify Persistency Of DHCPv6 On BMC Reboot On Eth1
187 [Documentation] Verify persistency of DHCPv6 property and
188 ... all existing n/w configurations on BMC reboot on eth1.
189 [Tags] Verify_Persistency_Of_DHCPv6_On_BMC_Reboot_On_Eth1
190 [Setup] Set And Verify DHCPv6 Property Enabled ${2}
191
192 Redfish OBMC Reboot (off) stack_mode=skip
193
194 Verify DHCPv6 Property Enabled ${2}
195
196 Verify All The Addresses Are Intact ${1}
197 Verify All The Addresses Are Intact ${2}
198 ... ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}
199
200
Sweta Potthurie05a8dd2025-10-29 08:32:32 -0500201Verify Persistency Of SLAAC On BMC Reboot On Eth0
202 [Documentation] Verify persistency of SLAAC property on reboot on eth0.
203 [Tags] Verify_Persistency_Of_SLAAC_On_BMC_Reboot_On_Eth0
204
205 Set SLAAC Configuration State And Verify ${True} [${HTTP_OK}] ${1} ${False}
206 Redfish OBMC Reboot (off) stack_mode=skip
207 Verify SLAAC Property ${True}
208
209
210Verify Persistency Of SLAAC On BMC Reboot On Eth1
211 [Documentation] Verify persistency of SLAAC property on reboot on eth1.
212 [Tags] Verify_Persistency_Of_SLAAC_On_BMC_Reboot_On_Eth1
213
214 Set SLAAC Configuration State And Verify ${True} [${HTTP_OK}] ${2} ${False}
215 Redfish OBMC Reboot (off) stack_mode=skip
216 Verify SLAAC Property ${True} ${2}
217
218
Sweta Potthuricb61ff02025-04-09 05:16:09 -0500219Configure Invalid Static IPv6 And Verify
220 [Documentation] Configure invalid static IPv6 and verify.
221 [Tags] Configure_Invalid_Static_IPv6_And_Verify
222 [Template] Configure IPv6 Address On BMC
223
kvishal9c6774c2025-09-10 02:14:07 -0500224 #invalid_ipv6 prefix length valid_status_code
225 ${ipv4_hexword_addr} ${test_prefix_length} ${HTTP_BAD_REQUEST}
226 ${invalid_hexadec_ipv6} ${test_prefix_length} ${HTTP_BAD_REQUEST}
227 ${ipv6_multi_short} ${test_prefix_length} ${HTTP_BAD_REQUEST}
228
Sweta Potthuricb61ff02025-04-09 05:16:09 -0500229
Sweta Potthuri2edacd32025-07-02 01:04:43 -0500230Configure IPv6 Static Default Gateway And Verify
231 [Documentation] Configure IPv6 static default gateway and verify.
232 [Tags] Configure_IPv6_Static_Default_Gateway_And_Verify
233 [Template] Configure IPv6 Static Default Gateway On BMC
Sweta Potthuri565318d2025-06-09 06:13:46 -0500234
Sweta Potthuri2edacd32025-07-02 01:04:43 -0500235 # static_def_gw prefix length valid_status_code
236 ${ipv6_gw_addr} ${prefix_length_def} ${HTTP_OK}
237 ${invalid_staticv6_gateway} ${test_prefix_length} ${HTTP_BAD_REQUEST}
Sweta Potthuri565318d2025-06-09 06:13:46 -0500238
Sweta Potthuricb61ff02025-04-09 05:16:09 -0500239
Sweta Potthuri4b0083f2025-07-09 11:34:40 -0500240Modify Static Default Gateway And Verify
241 [Documentation] Modify static default gateway and verify.
242 [Tags] Modify_Static_Default_Gateway_And_Verify
243 [Setup] Configure IPv6 Static Default Gateway On BMC ${ipv6_gw_addr} ${prefix_length_def}
244
245 Modify IPv6 Static Default Gateway On BMC ${test_ipv6_addr1} ${prefix_length_def} ${HTTP_OK} ${ipv6_gw_addr}
246
247
Sweta Potthuri2d085732025-07-16 09:10:08 -0500248Delete IPv6 Static Default Gateway And Verify
249 [Documentation] Delete IPv6 static default gateway and verify.
250 [Tags] Delete_IPv6_Static_Default_Gateway_And_Verify
251 [Setup] Configure IPv6 Static Default Gateway On BMC ${ipv6_gw_addr} ${prefix_length_def}
252
253 Delete IPv6 Static Default Gateway ${ipv6_gw_addr}
254
255
Sweta Potthuri35c503b2025-07-27 23:36:20 -0500256Verify Coexistence Of Linklocalv6 And Static IPv6 On BMC
257 [Documentation] Verify linklocalv6 And static IPv6 both exist.
258 [Tags] Verify_Coexistence_Of_Linklocalv6_And_Static_IPv6_On_BMC
Anvesh-Kumar_Rayankula019d9362025-09-03 22:55:12 -0500259 [Setup] Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
260 [Teardown] Delete IPv6 Address ${test_ipv6_addr}
Sweta Potthuri35c503b2025-07-27 23:36:20 -0500261
262 Check Coexistence Of Linklocalv6 And Static IPv6
263
264
George Keishingbadb4c62025-09-18 16:14:12 +0530265Verify IPv6 Linklocal Address Is In Correct Format
266 [Documentation] Verify linklocal address has network part as fe80 and
267 ... host part as EUI64.
Sweta Potthuri3c6f97d2025-08-06 00:30:19 -0500268 [Tags] Verify_IPv6_Linklocal_Address_Is_In_Correct_Format
269
270 Check If Linklocal Address Is In Correct Format
271
272
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -0500273Verify BMC Gets SLAAC Address On Enabling SLAAC
274 [Documentation] On enabling SLAAC verify SLAAC address comes up.
275 [Tags] Verify_BMC_Gets_SLAAC_Address_On_Enabling_SLAAC
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500276 [Setup] Set SLAAC Configuration State And Verify ${False}
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -0500277
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500278 Set SLAAC Configuration State And Verify ${True}
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -0500279 Sleep ${NETWORK_TIMEOUT}
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500280 Check BMC Gets SLAAC Address
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -0500281
282
Sweta Potthuri6370afd2025-10-08 00:07:46 -0500283Verify Enable And Disable SLAAC On Both Interfaces
284 [Documentation] Verify enable and disable SLAAC on both the interfaces.
285 [Tags] Verify_Enable_And_Disable_SLAAC_On_Both_Interfaces
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500286 [Setup] Get The Initial SLAAC Settings
Sweta Potthuri6370afd2025-10-08 00:07:46 -0500287 [Template] Set And Verify SLAAC Property On Both Interfaces
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500288 [Teardown] Run Keywords Set SLAAC Configuration State And Verify ${slaac_channel_1} [${HTTP_OK}] ${1}
289 ... AND Set SLAAC Configuration State And Verify ${slaac_channel_2} [${HTTP_OK}] ${2}
290
Sweta Potthuri6370afd2025-10-08 00:07:46 -0500291 # slaac_eth0 slaac_eth1
292 ${True} ${True}
293 ${True} ${False}
294 ${False} ${True}
295 ${False} ${False}
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500296
297
Sweta Potthuri425713a2025-10-16 00:28:20 -0500298Configure And Validate DHCPv6 Settings On Both Network Interfaces
299 [Documentation] Configure and validate the DHCPv6 enable/disable settings
300 ... on both network interfaces.
301 [Tags] Configure_And_Validate_DHCPv6_Settings_On_Both_Network_Interfaces
302 [Setup] Get The Initial DHCPv6 Settings
303 [Template] Set And Verify DHCPv6 Property On Both Interfaces
304 [Teardown] Run Keywords Set And Verify DHCPv6 Property ${dhcpv6_channel_1} ${1} AND
305 ... Set And Verify DHCPv6 Property ${dhcpv6_channel_2} ${2}
306
307 # DHCPv6_eth0 DHCPv6_eth1
308 Enabled Enabled
309 Enabled Disabled
310 Disabled Enabled
311 Disabled Disabled
312
313
abhijith-1213a645902025-09-08 01:12:34 -0500314Verify Autoconfig Is Present On Ethernet Interface
315 [Documentation] Verify autoconfig is present on ethernet interface.
316 [Tags] Verify_Autoconfig_Is_Present_On_Ethernet_Interface
317
318 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
319 Should Contain ${resp.dict} StatelessAddressAutoConfig
320
321
Sweta Potthurif3d188f2025-09-08 07:17:31 -0500322Verify Interface ID Of SLAAC And LinkLocal Addresses Are Same
323 [Documentation] Validate interface id of SLAAC and link-local addresses are same.
324 [Tags] Verify_Interface_ID_Of_SLAAC_And_LinkLocal_Addresses_Are_Same
325
326 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal
327 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= Get Address Origin List And Address For Type SLAAC
328
329 ${linklocal_interface_id}= Get Interface ID Of IPv6 ${ipv6_linklocal_addr}
330 ${slaac_interface_id}= Get Interface ID Of IPv6 ${ipv6_slaac_addr}
331
332 Should Be Equal ${linklocal_interface_id} ${slaac_interface_id}
333
334
abhijith-121c3e96d72025-09-09 11:35:09 -0500335Verify Persistency Of Link Local IPv6 On BMC Reboot
336 [Documentation] Verify persistency of link local on BMC reboot.
337 [Tags] Verify_Persistency_Of_Link_Local_IPv6_On_BMC_Reboot
338
339 # Capturing the linklocal before reboot.
340 @{ipv6_address_origin_list} ${linklocal_addr_before_reboot}=
341 ... Get Address Origin List And Address For Type LinkLocal
342
343 # Rebooting BMC.
344 Redfish OBMC Reboot (off) stack_mode=skip
345
346 @{ipv6_address_origin_list} ${linklocal_addr_after_reboot}=
347 ... Get Address Origin List And Address For Type LinkLocal
348
349 # Verifying the linklocal must be the same before and after reboot.
350 Should Be Equal ${linklocal_addr_before_reboot} ${linklocal_addr_after_reboot}
351 ... msg=IPv6 Linklocal address has changed after reboot.
352
353
Sweta Potthuri2f3fbb52025-09-19 00:50:47 -0500354Modify MAC and Verify BMC Reinitializing Linklocal
355 [Documentation] Modify MAC and verify BMC reinitializing linklocal.
356 [Tags] Modify_MAC_and_Verify_BMC_Reinitializing_Linklocal
357 [Teardown] Configure MAC Settings ${original_address}
358
359 ${original_address}= Get BMC MAC Address
360 @{ipv6_addressorigin_list} ${ipv6_before_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal
361
362 # Modify MAC Address Of Ethernet Interface.
363 Configure MAC Settings ${new_mac_addr}
364 Sleep 30s
365 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
366 @{ipv6_addressorigin_list} ${ipv6_linklocal_after_addr}= Get Address Origin List And Address For Type LinkLocal
367
368 # Verify whether the linklocal has changed and is in the the correct format.
369 Check If Linklocal Address Is In Correct Format
370 Should Not Be Equal ${ipv6_before_linklocal_addr} ${ipv6_linklocal_after_addr}
371
372
abhijith-121bfbd03a2025-09-15 01:40:35 -0500373Add Multiple IPv6 Address And Verify
374 [Documentation] Add multiple IPv6 address and verify.
375 [Tags] Add_Multiple_IPv6_Address_And_Verify
376 [Teardown] Run Keywords
377 ... Delete IPv6 Address ${test_ipv6_addr} AND Delete IPv6 Address ${test_ipv6_addr1}
378 ... AND Test Teardown Execution
379
380 Configure Multiple IPv6 Address on BMC ${test_prefix_length}
381
382
abhijith-12197078c52025-09-25 01:13:00 -0500383Verify Coexistence Of Static IPv6 And SLAAC On BMC
abhijith-1214dc01a02025-09-24 11:29:55 -0500384 [Documentation] Verify static IPv6 And SLAAC both coexist.
abhijith-12197078c52025-09-25 01:13:00 -0500385 [Tags] Verify_Coexistence_Of_Static_IPv6_And_SLAAC_On_BMC
386 [Setup] Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
387 Set SLAAC Configuration State And Verify ${True}
388 [Teardown] Delete IPv6 Address ${test_ipv6_addr}
389
390 Sleep ${NETWORK_TIMEOUT}s
391
392 Check Coexistence Of Static IPv6 And SLAAC
393
394
abhijith-1218ff5db42025-09-24 06:24:03 -0500395Verify Coexistence Of Link Local And DHCPv6 On BMC
396 [Documentation] Verify link local And dhcpv6 both coexist.
397 [Tags] Verify_Coexistence_Of_Link_Local_And_DHCPv6_On_BMC
398 [Setup] Set DHCPv6 Property Enabled ${2}
399
400 Sleep ${NETWORK_TIMEOUT}s
401
402 Check Coexistence Of Link Local And DHCPv6
403
404
abhijith-1214dc01a02025-09-24 11:29:55 -0500405Verify Coexistence Of Link Local And SLAAC On BMC
406 [Documentation] Verify link local And SLAAC both coexist.
407 [Tags] Verify_Coexistence_Of_Link_Local_And_SLAAC_On_BMC
408 [Setup] Set SLAAC Configuration State And Verify ${True}
409
410 Sleep ${NETWORK_TIMEOUT}s
411
412 Check Coexistence Of Link Local And SLAAC
413
414
abhijith-121ffea1912025-10-06 02:39:22 -0500415Verify Coexistence Of All IPv6 Type Addresses On BMC
416 [Documentation] Verify coexistence of link local, static, DHCPv6 and SLAAC ipv6 addresses.
417 [Tags] Verify_Coexistence_Of_All_IPv6_Type_Addresses_On_BMC
418 [Setup] Run Keywords Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
419 ... AND Get The Initial DHCPv6 Setting On Each Interface ${1}
420 ... AND Set And Verify DHCPv6 Property Enabled
421 ... AND Get The Initial SLAAC Setting On Each Interface ${1}
422 ... AND Set SLAAC Configuration State And Verify ${True}
423 [Teardown] Run Keywords Delete IPv6 Address ${test_ipv6_addr}
424 ... AND Set And Verify DHCPv6 Property ${dhcpv6_channel_1} ${1}
425 ... AND Set SLAAC Configuration State And Verify ${slaac_channel_1} [${HTTP_OK}] ${1}
426
427 Sleep ${NETWORK_TIMEOUT}s
428
429 # Verify link local, static, DHCPv6 and SLAAC ipv6 addresses coexist.
430 Verify The Coexistence Of The Address Type LinkLocal Static DHCPv6 SLAAC
431
432
abhijith-1219e190dd2025-10-15 03:35:06 -0500433Configure Link Local IPv6 Address And Verify
434 [Documentation] Configure link local IPv6 address and verify.
435 [Tags] Configure_Link_Local_IPv6_Address_And_Verify
436
437 Configure IPv6 Address On BMC ${link_local_addr} ${link_local_prefix_len}
438
439 # Verify the address origin contains link local.
440 @{ipv6_address_origin_list} ${ipv6_link_local_addr}=
441 ... Get Address Origin List And Address For Type LinkLocal
442
443 ${count}= Evaluate ${ipv6_address_origin_list}.count("LinkLocal")
444
445 Should Be Equal As Integers ${count} 2
446
447
abhijith-1215f0aa202025-10-24 02:53:53 -0500448Configure Valid IPv6 Address And Verify
449 [Documentation] Configure valid IPv6 address and verify it is getting added as expected format.
450 [Tags] Configure_Valid_IPv6_Address_And_Verify
abhijith-121b9fc2742025-10-14 09:46:43 -0500451 [Teardown] Run Keywords
abhijith-1215f0aa202025-10-24 02:53:53 -0500452 ... Delete IPv6 Address ${ipv6_zero_compression}
453 ... AND Delete IPv6 Address ${ipv6_eliminate_zero}
454 ... AND Delete IPv6 Address ${ipv6_eliminate_zero1}
455 ... AND Test Teardown Execution
456 [Template] Configure IPv6 Address On BMC
abhijith-121b9fc2742025-10-14 09:46:43 -0500457
abhijith-1215f0aa202025-10-24 02:53:53 -0500458 # IPv6 address prefix length IPv6 address verified.
459 ${ipv6_contigeous_zero} ${test_prefix_length} ${ipv6_zero_compression}
460 ${ipv6_firsthextet_zero} ${test_prefix_length} ${ipv6_eliminate_zero1}
461 ${ipv6_leading_zero} ${test_prefix_length} ${ipv6_eliminate_zero}
abhijith-121b9fc2742025-10-14 09:46:43 -0500462
463
abhijith-121d8322b72025-10-13 02:23:48 -0500464Verify Coexistence Of IPv6 Addresses Type Combination On BMC
465 [Documentation] Verify coexistence of IPv6 addresses type combination on BMC.
466 [Tags] Verify_Coexistence_Of_IPv6_Addresses_Type_Combination_On_BMC
467 [Setup] Run Keywords
468 ... Get The Initial DHCPv6 Setting On Each Interface ${1}
469 ... AND Get The Initial SLAAC Setting On Each Interface ${1}
470 [Teardown] Run Keywords
471 ... Set And Verify DHCPv6 Property ${dhcpv6_channel_1} ${1}
472 ... AND Set SLAAC Configuration State And Verify ${slaac_channel_1} [${HTTP_OK}] ${1}
473 [Template] Verify IPv6 Addresses Coexist
474
475 # type1 type2.
476 Static DHCPv6
477 DHCPv6 SLAAC
478 SLAAC Static
479 Static Static
480
481
abhijith-121cd9edf62025-11-03 02:25:25 -0600482Verify Eth0 Static IPv4 Functions Properly In The Presence Of DHCPv6
483 [Documentation] Verify eth0 static IPv4 functions properly in the presence of DHCPv6.
484 [Tags] Verify_Eth0_Static_IPv4_Functions_Properly_In_The_Presence_Of_DHCPv6
485 [Setup] Set And Verify DHCPv6 Property Enabled
486
487 # Verify that on enabling DHCPv6 other configurations are not impacted.
488 Sleep ${NETWORK_TIMEOUT}
489 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
490
491 Verify All The Addresses Are Intact ${1}
492 Verify All The Addresses Are Intact ${2}
493 ... ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}
494
495
abhijith-121f037d8b2025-10-31 05:13:42 -0500496Disable And Verify AutoConfig On Both Interfaces When AutoConfig Enabled
497 [Documentation] Enable and then disable both eth0 & eth1 with auto-config and
498 ... check both interfaces gets disabled with SLAAC.
499 [Tags] Disable_And_Verify_AutoConfig_On_Both_Interfaces_When_AutoConfig_Enabled
500 [Setup] Set And Verify SLAAC Property On Both Interfaces ${True} ${True}
501 [Template] Set And Verify SLAAC Property On Both Interfaces
502
503 # slaac_eth0 slaac_eth1.
504 ${False} ${False}
505
506
abhijith-1215b556452025-11-19 03:44:21 -0600507Verify Eth1 DHCPv4 Functionality In The Presence Of Static IPv6
508 [Documentation] Verify eth1 dhcpv4 functionality in the presence of Static IPv6
509 ... and verify link local IPv6 and SLAAC.
510 ... Run on setup with DHCPv4 available on eth1.
511 [Tags] Verify_Eth1_DHCPv4_Functionality_In_The_Presence_Of_Static_IPv6
abhijith-121dc17d422025-11-14 04:19:28 -0600512 [Setup] Run Keywords
513 ... Set DHCPEnabled To Enable Or Disable True eth1
514 ... AND Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} ${None} ${2}
abhijith-1215b556452025-11-19 03:44:21 -0600515 ... AND Set SLAAC Configuration State And Verify ${True} [${HTTP_OK}] ${2}
abhijith-121dc17d422025-11-14 04:19:28 -0600516
517 # Verify presence of static IPv6 address and origin.
518 @{ipv6_address_origin_list} ${static_ipv6_addr}=
519 ... Get Address Origin List And Address For Type Static ${2}
520 Should Contain ${ipv6_address_origin_list} Static
521 Should Not Be Empty ${static_ipv6_addr} msg=${test_ipv6_addr} address is not present
522
abhijith-1215b556452025-11-19 03:44:21 -0600523 # Verify presence of link local IPv6 address and origin.
524 @{ipv6_address_origin_list} ${link_local_ipv6_addr}=
525 ... Get Address Origin List And Address For Type LinkLocal ${2}
526 Should Contain ${ipv6_address_origin_list} LinkLocal
527 Should Match Regexp ${link_local_ipv6_addr} ${linklocal_addr_format}
528 Should Not Be Empty ${link_local_ipv6_addr} msg=link local IPv6 address is not present
abhijith-121dc17d422025-11-14 04:19:28 -0600529
abhijith-1215b556452025-11-19 03:44:21 -0600530 # Verify presence of SLAAC address and origin.
531 Sleep ${NETWORK_TIMEOUT}s
532 @{ipv6_address_origin_list} ${slaac_addr}=
533 ... Get Address Origin List And Address For Type SLAAC ${2}
534 Should Contain ${ipv6_address_origin_list} SLAAC
535 Should Not Be Empty ${slaac_addr} msg=SLAAC address is not present
abhijith-121dc17d422025-11-14 04:19:28 -0600536
abhijith-1215b556452025-11-19 03:44:21 -0600537 Verify DHCPv4 Functionality On Eth1
538
539
540Verify Eth1 DHCPv4 Functionality In The Presence Of DHCPv6
541 [Documentation] Verify eth1 dhcpv4 functionality in the presence of dhcpv6.
542 ... Run on setup with DHCPv4 available on eth1.
543 [Tags] Verify_Eth1_DHCPv4_Functionality_In_The_Presence_Of_DHCPv6
544 [Setup] Run Keywords
545 ... Set DHCPEnabled To Enable Or Disable True eth1
546 ... AND Set And Verify DHCPv6 Property Enabled ${2}
547
548 # Verify presence of DHCPv6 address and origin.
549 @{ipv6_address_origin_list} ${dhcpv6_addr}=
550 ... Get Address Origin List And Address For Type DHCPv6 ${2}
551 Should Contain ${ipv6_address_origin_list} DHCPv6
552 Should Not Be Empty ${dhcpv6_addr} msg=dhcpv6 address is not present
553
554 Verify DHCPv4 Functionality On Eth1
abhijith-121dc17d422025-11-14 04:19:28 -0600555
556
abhijith-1213af608c2025-11-26 02:59:26 -0600557Verify Static IPv4 Functionality In Presence Of Static IPv6
558 [Documentation] Verify static IPv4 functionality in presence of static IPv6.
559 [Tags] Verify_Static_IPv4_Functionality_In_Presence_Of_Static_IPv6
560 [Setup] Run Keywords
561 ... Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} ${None} ${1}
562 ... AND Configure IPv6 Address On BMC ${test_ipv6_addr1} ${test_prefix_length} ${None} ${2}
563 [Template] Verify Static IPv4 Functionality
564
565 # Channel_number
566 ${1}
567 ${2}
568
569
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600570*** Keywords ***
571
Prashanth Katti3270fd02021-06-11 08:02:22 -0500572Suite Setup Execution
573 [Documentation] Do suite setup execution.
574
Anvesh-Kumar_Rayankula019d9362025-09-03 22:55:12 -0500575 Redfish.Login
Prashanth Katti3270fd02021-06-11 08:02:22 -0500576 ${active_channel_config}= Get Active Channel Config
Sweta Potthuri3c6f97d2025-08-06 00:30:19 -0500577 Set Suite Variable ${active_channel_config}
578
Prashanth Katti3270fd02021-06-11 08:02:22 -0500579 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
580
581 Set Suite variable ${ethernet_interface}
582
Sweta Potthuri6370afd2025-10-08 00:07:46 -0500583 # Get initial IPv4 and IPv6 addresses and address origins for eth0.
Sweta Potthuriabbbeae2025-08-21 00:06:26 -0500584 ${initial_ipv4_addressorigin_list} ${initial_ipv4_addr_list}= Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses
585 ${initial_ipv6_addressorigin_list} ${initial_ipv6_addr_list}= Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses
586
587 Set Suite Variable ${initial_ipv4_addressorigin_list}
588 Set Suite Variable ${initial_ipv4_addr_list}
589 Set Suite Variable ${initial_ipv6_addressorigin_list}
590 Set Suite Variable ${initial_ipv6_addr_list}
591
Sweta Potthuri6370afd2025-10-08 00:07:46 -0500592 # Get initial IPv4 and IPv6 addresses and address origins for eth1.
593 ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}=
594 ... Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses ${2}
595 ${eth1_initial_ipv6_addressorigin_list} ${eth1_initial_ipv6_addr_list}=
596 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${2}
597 Set Suite Variable ${eth1_initial_ipv4_addressorigin_list}
598 Set Suite Variable ${eth1_initial_ipv4_addr_list}
599 Set Suite Variable ${eth1_initial_ipv6_addressorigin_list}
600 Set Suite Variable ${eth1_initial_ipv6_addr_list}
601
Prashanth Katti3270fd02021-06-11 08:02:22 -0500602
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600603Test Setup Execution
604 [Documentation] Test setup execution.
605
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600606 @{ipv6_network_configurations}= Get IPv6 Network Configuration
607 Set Test Variable @{ipv6_network_configurations}
608
609 # Get BMC IPv6 address and prefix length.
610 ${ipv6_data}= Get BMC IPv6 Info
611 Set Test Variable ${ipv6_data}
612
613
614Test Teardown Execution
615 [Documentation] Test teardown execution.
616
617 FFDC On Test Case Fail
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600618
619
620Get IPv6 Network Configuration
621 [Documentation] Get Ipv6 network configuration.
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500622 [Arguments] ${channel_number}=${CHANNEL_NUMBER}
623
624 # Description of argument(s):
625 # channel_number Channel number (1 - eth0 and 2 - eth1).
626
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600627 # Sample output:
628 # {
ganesanb4d430282023-04-27 14:33:23 +0000629 # "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/eth0",
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600630 # "@odata.type": "#EthernetInterface.v1_4_1.EthernetInterface",
631 # "DHCPv4": {
632 # "DHCPEnabled": false,
633 # "UseDNSServers": false,
634 # "UseDomainName": true,
635 # "UseNTPServers": false
636 # },
637 # "DHCPv6": {
638 # "OperatingMode": "Disabled",
639 # "UseDNSServers": false,
640 # "UseDomainName": true,
641 # "UseNTPServers": false
642 # },
643 # "Description": "Management Network Interface",
644 # "FQDN": "localhost",
645 # "HostName": "localhost",
646 # "IPv4Addresses": [
647 # {
648 # "Address": "xx.xx.xx.xx",
649 # "AddressOrigin": "Static",
650 # "Gateway": "xx.xx.xx.1",
651 # "SubnetMask": "xx.xx.xx.0"
652 # },
653 # {
654 # "Address": "169.254.xx.xx",
655 # "AddressOrigin": "IPv4LinkLocal",
656 # "Gateway": "0.0.0.0",
657 # "SubnetMask": "xx.xx.0.0"
658 # },
659 # ],
660 # "IPv4StaticAddresses": [
661 # {
662 # "Address": "xx.xx.xx.xx",
663 # "AddressOrigin": "Static",
664 # "Gateway": "xx.xx.xx.1",
665 # "SubnetMask": "xx.xx.0.0"
666 # }
667 # }
668 # ],
669 # "IPv6AddressPolicyTable": [],
670 # "IPv6Addresses": [
671 # {
672 # "Address": "fe80::xxxx:xxxx:xxxx:xxxx",
673 # "AddressOrigin": "LinkLocal",
674 # "AddressState": null,
675 # "PrefixLength": xx
676 # }
677 # ],
678 # "IPv6DefaultGateway": "",
679 # "IPv6StaticAddresses": [
680 # { "Address": "xxxx:xxxx:xxxx:xxxx::xxxx",
681 # "AddressOrigin": "Static",
682 # "AddressState": null,
683 # "PrefixLength": xxx
684 # }
685 # ],
686 # "Id": "eth0",
687 # "InterfaceEnabled": true,
688 # "LinkStatus": "LinkUp",
689 # "MACAddress": "xx:xx:xx:xx:xx:xx",
690 # "Name": "Manager Ethernet Interface",
691 # "NameServers": [],
692 # "SpeedMbps": 0,
693 # "StaticNameServers": [],
694 # "Status": {
695 # "Health": "OK",
696 # "HealthRollup": "OK",
697 # "State": "Enabled"
698 # },
699 # "VLANs": {
ganesanb4d430282023-04-27 14:33:23 +0000700 # "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/eth0/VLANs"
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600701
702
703 ${active_channel_config}= Get Active Channel Config
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500704 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${active_channel_config['${channel_number}']['name']}
Prashanth Katti8abbb4d2021-01-29 02:17:45 -0600705
706 @{ipv6_network_configurations}= Get From Dictionary ${resp.dict} IPv6StaticAddresses
George Keishing409df052024-01-17 22:36:14 +0530707 RETURN @{ipv6_network_configurations}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500708
709
710Verify IPv6 And PrefixLength
711 [Documentation] Verify IPv6 address and prefix length on BMC.
712 [Arguments] ${ipv6_addr} ${prefix_len}
713
714 # Description of the argument(s):
715 # ipv6_addr IPv6 address to be verified.
716 # prefix_len PrefixLength value to be verified.
717
718 # Catenate IPv6 address and its prefix length.
719 ${ipv6_with_prefix}= Catenate ${ipv6_addr}/${prefix_len}
720
721 # Get IPv6 address details on BMC using IP command.
722 @{ip_data}= Get BMC IPv6 Info
723
724 # Verify if IPv6 and prefix length is configured on BMC.
725
726 Should Contain ${ip_data} ${ipv6_with_prefix}
727 ... msg=IPv6 and prefix length pair does not exist.
728
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500729Configure IPv6 Address On BMC
730 [Documentation] Add IPv6 Address on BMC.
abhijith-121b9fc2742025-10-14 09:46:43 -0500731 [Arguments] ${ipv6_addr1} ${prefix_len} ${ipv6_addr2}=${None}
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500732 ... ${channel_number}=${CHANNEL_NUMBER}
733 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_NO_CONTENT}]
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500734
735 # Description of argument(s):
abhijith-121b9fc2742025-10-14 09:46:43 -0500736 # ipv6_addr1 IPv6 address to be added (e.g. "2001:0022:0033::0111").
737 # ipv6_addr2 IPv6 address to be Verified (e.g. "2001:22:33::111").
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500738 # prefix_len Prefix length for the IPv6 to be added
739 # (e.g. "64").
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500740 # channel_number Channel number (1 - eth0 and 2 - eth1).
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500741 # valid_status_codes Expected return code from patch operation
742 # (e.g. "200").
743
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500744 ${prefix_length}= Convert To Integer ${prefix_len}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500745 ${empty_dict}= Create Dictionary
abhijith-121b9fc2742025-10-14 09:46:43 -0500746 ${ipv6_data}= Create Dictionary Address=${ipv6_addr1}
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500747 ... PrefixLength=${prefix_length}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500748
749 ${patch_list}= Create List
750
751 # Get existing static IPv6 configurations on BMC.
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500752 ${ipv6_network_configurations}= Get IPv6 Network Configuration ${channel_number}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500753 ${num_entries}= Get Length ${ipv6_network_configurations}
754
755 FOR ${INDEX} IN RANGE 0 ${num_entries}
756 Append To List ${patch_list} ${empty_dict}
757 END
758
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500759 # We need not check for existence of IPv6 on BMC while adding.
760 Append To List ${patch_list} ${ipv6_data}
761 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
762
763 ${active_channel_config}= Get Active Channel Config
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500764 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500765
766 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data}
abhijith-121b9fc2742025-10-14 09:46:43 -0500767 ... valid_status_codes=${valid_status_codes}
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500768
abhijith-121b9fc2742025-10-14 09:46:43 -0500769 IF ${valid_status_codes} != [${HTTP_OK}, ${HTTP_NO_CONTENT}]
770 Fail msg=Static address not added correctly
771 END
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500772
773 # Note: Network restart takes around 15-18s after patch request processing.
774 Sleep ${NETWORK_TIMEOUT}s
775 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
776
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500777 # Verify ip address on CLI.
abhijith-121b9fc2742025-10-14 09:46:43 -0500778 IF '${ipv6_addr2}' != '${None}'
779 Verify IPv6 And PrefixLength ${ipv6_addr2} ${prefix_len}
780 ELSE
781 Verify IPv6 And PrefixLength ${ipv6_addr1} ${prefix_len}
782 END
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500783
784 # Verify if existing static IPv6 addresses still exist.
785 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
786 Verify IPv6 On BMC ${ipv6_network_configuration['Address']}
787 END
788
abhijith-121b9fc2742025-10-14 09:46:43 -0500789 #Verify redfish and CLI data matches.
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500790 Validate IPv6 Network Config On BMC
791
792
abhijith-121bfbd03a2025-09-15 01:40:35 -0500793Configure Multiple IPv6 Address on BMC
794 [Documentation] Add multiple IPv6 address on BMC.
795 [Arguments] ${prefix_len}
796 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_NO_CONTENT}]
797
798 # Description of argument(s):
799 # prefix_len Prefix length for the IPv6 to be added
800 # (e.g. "64").
801 # valid_status_codes Expected return code from patch operation
802 # (e.g. "200").
803
804 ${ipv6_list}= Create List ${test_ipv6_addr} ${test_ipv6_addr1}
805 ${prefix_length}= Convert To Integer ${prefix_len}
806 ${empty_dict}= Create Dictionary
807 ${patch_list}= Create List
808
809 # Get existing static IPv6 configurations on BMC.
810 ${ipv6_network_configurations}= Get IPv6 Network Configuration
811 ${num_entries}= Get Length ${ipv6_network_configurations}
812
813 FOR ${INDEX} IN RANGE 0 ${num_entries}
814 Append To List ${patch_list} ${empty_dict}
815 END
816
817 # We need not check for existence of IPv6 on BMC while adding.
818 FOR ${ipv6_addr} IN @{ipv6_list}
819 ${ipv6_data}= Create Dictionary Address=${ipv6_addr} PrefixLength=${prefix_length}
820 Append To List ${patch_list} ${ipv6_data}
821 END
822 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
823
824 ${active_channel_config}= Get Active Channel Config
825 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
826
827 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data}
828 ... valid_status_codes=${valid_status_codes}
829
830 IF ${valid_status_codes} != [${HTTP_OK}, ${HTTP_NO_CONTENT}]
831 Fail msg=Static address not added correctly
832 END
833
834 # Note: Network restart takes around 15-18s after patch request processing.
835 Sleep ${NETWORK_TIMEOUT}s
836 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
837
838 # Verify newly added ip address on CLI.
839 FOR ${ipv6_addr} IN @{ipv6_list}
840 Verify IPv6 And PrefixLength ${ipv6_addr} ${prefix_len}
841 END
842
843 # Verify if existing static IPv6 addresses still exist.
844 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
845 Verify IPv6 On BMC ${ipv6_network_configuration['Address']}
846 END
847
848 # Get the latest ipv6 network configurations.
849 @{ipv6_network_configurations}= Get IPv6 Network Configuration
850
851 # Verify newly added ip address on BMC.
852 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
853 Should Contain Match ${ipv6_list} ${ipv6_network_configuration['Address']}
854 END
855
856 Validate IPv6 Network Config On BMC
857
858
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500859Validate IPv6 Network Config On BMC
860 [Documentation] Check that IPv6 network info obtained via redfish matches info
861 ... obtained via CLI.
Sridevi Rameshed94c692025-09-07 23:41:10 -0500862
Prashanth Katti5f7d2e42023-05-22 03:17:25 -0500863 @{ipv6_network_configurations}= Get IPv6 Network Configuration
Prashanth Kattic1d2daa2022-07-26 03:53:06 -0500864 ${ipv6_data}= Get BMC IPv6 Info
865 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
866 Should Contain Match ${ipv6_data} ${ipv6_network_configuration['Address']}/*
867 ... msg=IPv6 address does not exist.
868 END
869
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500870
871Delete IPv6 Address
872 [Documentation] Delete IPv6 address of BMC.
Prashanth Kattibcb9dab2025-04-01 12:58:37 -0500873 [Arguments] ${ipv6_addr}
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500874 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}]
875 ... ${channel_number}=${CHANNEL_NUMBER}
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500876
877 # Description of argument(s):
878 # ipv6_addr IPv6 address to be deleted (e.g. "2001:1234:1234:1234::1234").
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500879 # channel_number Channel number (1 - eth0 and 2 - eth1).
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500880 # valid_status_codes Expected return code from patch operation
881 # (e.g. "200"). See prolog of rest_request
882 # method in redfish_plus.py for details.
883
884 ${empty_dict}= Create Dictionary
885 ${patch_list}= Create List
886
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500887 @{ipv6_network_configurations}= Get IPv6 Network Configuration ${channel_number}
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500888 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
889 IF '${ipv6_network_configuration['Address']}' == '${ipv6_addr}'
890 Append To List ${patch_list} ${null}
891 ELSE
892 Append To List ${patch_list} ${empty_dict}
893 END
894 END
895
896 ${ip_found}= Run Keyword And Return Status List Should Contain Value
897 ... ${patch_list} ${null} msg=${ipv6_addr} does not exist on BMC
898 Pass Execution If ${ip_found} == ${False} ${ipv6_addr} does not exist on BMC
899
900 # Run patch command only if given IP is found on BMC
901 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
902
903 ${active_channel_config}= Get Active Channel Config
Sweta Potthuri3b2b9cd2025-10-22 06:41:54 -0500904 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']}
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500905
906 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data}
Sweta Potthuria1981612025-05-09 05:41:10 -0500907 ... valid_status_codes=${valid_status_codes}
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500908
909 # Note: Network restart takes around 15-18s after patch request processing
910 Sleep ${NETWORK_TIMEOUT}s
911 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
912
913 # IPv6 address that is deleted should not be there on BMC.
914 ${delete_status}= Run Keyword And Return Status Verify IPv6 On BMC ${ipv6_addr}
Anvesh-Kumar_Rayankula3a26c662025-04-16 01:19:26 -0500915 IF '${valid_status_codes}' == '[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}]'
Prashanth Katti12ed4b72023-05-16 05:24:00 -0500916 Should Be True '${delete_status}' == '${False}'
917 ELSE
918 Should Be True '${delete_status}' == '${True}'
919 END
920
921 Validate IPv6 Network Config On BMC
Prashanth Katti5f7d2e42023-05-22 03:17:25 -0500922
923
924Modify IPv6 Address
925 [Documentation] Modify and verify IPv6 address of BMC.
926 [Arguments] ${ipv6} ${new_ipv6} ${prefix_len}
927 ... ${valid_status_codes}=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
928
929 # Description of argument(s):
930 # ipv6 IPv6 address to be replaced (e.g. "2001:AABB:CCDD::AAFF").
931 # new_ipv6 New IPv6 address to be configured.
932 # prefix_len Prefix length value (Range 1 to 128).
933 # valid_status_codes Expected return code from patch operation
934 # (e.g. "200", "201").
935
936 ${empty_dict}= Create Dictionary
937 ${patch_list}= Create List
938 ${prefix_length}= Convert To Integer ${prefix_len}
939 ${ipv6_data}= Create Dictionary
940 ... Address=${new_ipv6} PrefixLength=${prefix_length}
941
942 # Sample IPv6 network configurations:
943 # "IPv6AddressPolicyTable": [],
944 # "IPv6Addresses": [
945 # {
946 # "Address": "X002:db8:0:2::XX0",
947 # "AddressOrigin": "DHCPv6",
948 # "PrefixLength": 128
949 # },
950 # {
951 # "Address": “X002:db8:0:2:a94:XXff:fe82:XXXX",
952 # "AddressOrigin": "SLAAC",
953 # "PrefixLength": 64
954 # },
955 # {
956 # "Address": “Y002:db8:0:2:a94:efff:fe82:5000",
957 # "AddressOrigin": "Static",
958 # "PrefixLength": 56
959 # },
960 # {
961 # "Address": “Z002:db8:0:2:a94:efff:fe82:5000",
962 # "AddressOrigin": "Static",
963 # "PrefixLength": 56
964 # },
965 # {
966 # "Address": “Xe80::a94:efff:YYYY:XXXX",
967 # "AddressOrigin": "LinkLocal",
968 # "PrefixLength": 64
969 # },
970 # {
971 # "Address": “X002:db8:1:2:eff:233:fee:546",
972 # "AddressOrigin": "Static",
973 # "PrefixLength": 56
974 # }
975 # ],
976 # "IPv6DefaultGateway": “XXXX::ab2e:80fe:87df:XXXX”,
977 # "IPv6StaticAddresses": [
978 # {
979 # "Address": “X002:db8:0:2:a94:efff:fe82:5000",
980 # "PrefixLength": 56
981 # },
982 # {
983 # "Address": “Y002:db8:0:2:a94:efff:fe82:5000",
984 # "PrefixLength": 56
985 # },
986 # {
987 # "Address": “Z002:db8:1:2:eff:233:fee:546",
988 # "PrefixLength": 56
989 # }
990 # ],
991 # "IPv6StaticDefaultGateways": [],
992
993 # Find the position of IPv6 address to be modified.
994 @{ipv6_network_configurations}= Get IPv6 Network Configuration
995 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations}
George Keishinge6e161e2025-05-08 10:18:30 +0530996 IF '${ipv6_network_configuration['Address']}' == '${ipv6}'
997 Append To List ${patch_list} ${ipv6_data}
998 ELSE
999 Append To List ${patch_list} ${empty_dict}
1000 END
Prashanth Katti5f7d2e42023-05-22 03:17:25 -05001001 END
1002
1003 # Modify the IPv6 address only if given IPv6 is found
1004 ${ip_found}= Run Keyword And Return Status List Should Contain Value
1005 ... ${patch_list} ${ipv6_data} msg=${ipv6} does not exist on BMC
1006 Pass Execution If ${ip_found} == ${False} ${ipv6} does not exist on BMC
1007
1008 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list}
1009
1010 ${active_channel_config}= Get Active Channel Config
1011 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
1012
1013 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1014 ... body=&{data} valid_status_codes=${valid_status_codes}
1015
1016 # Note: Network restart takes around 15-18s after patch request processing.
1017 Sleep ${NETWORK_TIMEOUT}s
1018 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
1019
1020 # Verify if new IPv6 address is configured on BMC.
1021 Verify IPv6 On BMC ${new_ipv6}
1022
1023 # Verify if old IPv6 address is erased.
1024 ${cmd_status}= Run Keyword And Return Status
1025 ... Verify IPv6 On BMC ${ipv6}
1026 Should Be Equal ${cmd_status} ${False} msg=Old IPv6 address is not deleted.
1027
1028 Validate IPv6 Network Config On BMC
Sweta Potthuri8ba74322025-03-19 12:29:06 -05001029
1030
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001031Set SLAAC Configuration State And Verify
Sweta Potthurie05a8dd2025-10-29 08:32:32 -05001032 [Documentation] Set SLAAC configuration state.
Sridevi Rameshed94c692025-09-07 23:41:10 -05001033 [Arguments] ${slaac_state} ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}]
Sweta Potthurie05a8dd2025-10-29 08:32:32 -05001034 ... ${channel_number}=${CHANNEL_NUMBER} ${is_slaac_verify_state}=${True}
Sweta Potthuri8ba74322025-03-19 12:29:06 -05001035
1036 # Description of argument(s):
Sweta Potthurie05a8dd2025-10-29 08:32:32 -05001037 # slaac_state SLAAC state('True' or 'False').
1038 # valid_status_code Expected valid status codes.
1039 # channel_number Channel number 1(eth0) or 2(eth1).
1040 # is_slaac_verify_state Flag to check verification is required.
Sweta Potthuri8ba74322025-03-19 12:29:06 -05001041
1042 ${active_channel_config}= Get Active Channel Config
1043 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
1044
1045 ${data}= Set Variable If ${slaac_state} == ${False} ${DISABLE_SLAAC} ${ENABLE_SLAAC}
1046 ${resp}= Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
Sweta Potthuri610f86f2025-05-30 00:47:23 -05001047 ... body=${data} valid_status_codes=${valid_status_codes}
Sweta Potthurie05a8dd2025-10-29 08:32:32 -05001048 IF ${is_slaac_verify_state}
1049 Verify SLAAC Property ${slaac_state} ${channel_number}
1050 END
1051
1052
1053Verify SLAAC Property
1054 [Documentation] Verify SLAAC property.
1055 [Arguments] ${slaac_state} ${channel_number}=${CHANNEL_NUMBER}
1056
1057 # Description of argument(s):
1058 # slaac_state SLAAC state('True' or 'False').
1059 # channel_number Channel number 1(eth0) or 2(eth1).
Sweta Potthuri8ba74322025-03-19 12:29:06 -05001060
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001061 # Verify SLAAC is set correctly.
Sweta Potthuri8ba74322025-03-19 12:29:06 -05001062 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1063 ${slaac_verify}= Get From Dictionary ${resp.dict} StatelessAddressAutoConfig
1064
George Keishinge6e161e2025-05-08 10:18:30 +05301065 IF '${slaac_verify['IPv6AutoConfigEnabled']}' != '${slaac_state}'
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001066 Fail msg=SLAAC not set properly.
George Keishinge6e161e2025-05-08 10:18:30 +05301067 END
Sweta Potthuri0df4a862025-03-24 12:05:09 -05001068
Sweta Potthurie05a8dd2025-10-29 08:32:32 -05001069
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001070Set And Verify DHCPv6 Property
1071 [Documentation] Set DHCPv6 property and verify.
1072 [Arguments] ${dhcpv6_operating_mode}=${Disabled} ${channel_number}=${CHANNEL_NUMBER}
Sweta Potthuri0df4a862025-03-24 12:05:09 -05001073
1074 # Description of argument(s):
1075 # dhcpv6_operating_mode Enabled if user wants to enable DHCPv6('Enabled' or 'Disabled').
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001076 # channel_number Channel number 1 or 2.
1077
1078 Set DHCPv6 Property ${dhcpv6_operating_mode} ${channel_number}
1079 Verify DHCPv6 Property ${dhcpv6_operating_mode} ${channel_number}
1080
1081
1082Set DHCPv6 Property
1083 [Documentation] Set DHCPv6 attribute is enables or disabled.
1084 [Arguments] ${dhcpv6_operating_mode}=${Disabled} ${channel_number}=${CHANNEL_NUMBER}
1085
1086 # Description of argument(s):
1087 # dhcpv6_operating_mode Enabled if user wants to enable DHCPv6('Enabled' or 'Disabled').
1088 # channel_number Channel number 1 or 2.
Sweta Potthuri0df4a862025-03-24 12:05:09 -05001089
1090 ${data}= Set Variable If '${dhcpv6_operating_mode}' == 'Disabled' ${DISABLE_DHCPv6} ${ENABLE_DHCPv6}
Sweta Potthuri0df4a862025-03-24 12:05:09 -05001091 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']}
1092
1093 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1094 ... body=${data} valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}]
1095
kvishalbd04bd62025-08-05 03:57:53 -05001096
1097Verify DHCPv6 Property
1098 [Documentation] Verify DHCPv6 settings is enabled or disabled.
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001099 [Arguments] ${dhcpv6_operating_mode} ${channel_number}=${CHANNEL_NUMBER}
kvishalbd04bd62025-08-05 03:57:53 -05001100
1101 # Description of Argument(s):
1102 # dhcpv6_operating_mode Enable/ Disable DHCPv6.
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001103 # channel_number Channel number 1 or 2.
1104
Sweta Potthuri425713a2025-10-16 00:28:20 -05001105 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']}
kvishalbd04bd62025-08-05 03:57:53 -05001106
Sweta Potthuri0df4a862025-03-24 12:05:09 -05001107 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1108 ${dhcpv6_verify}= Get From Dictionary ${resp.dict} DHCPv6
1109
1110 Should Be Equal '${dhcpv6_verify['OperatingMode']}' '${dhcpv6_operating_mode}'
Sweta Potthuricb61ff02025-04-09 05:16:09 -05001111
Sweta Potthuri425713a2025-10-16 00:28:20 -05001112 Sleep 30s
1113
1114 @{ipv6_addressorigin_list} ${ipv6_dhcpv6_addr}=
1115 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${channel_number}
1116
1117 IF "${dhcpv6_operating_mode}" == "Enabled"
1118 @{ipv6_addressorigin_list} ${ipv6_dhcpv6_addr}=
1119 ... Get Address Origin List And Address For Type DHCPv6 ${channel_number}
1120 Should Not Be Empty ${ipv6_dhcpv6_addr} msg=DHCPv6 must be present.
1121 ELSE
1122 Should Not Contain ${ipv6_addressorigin_list} DHCPv6
1123 END
1124
1125
Sweta Potthuri2edacd32025-07-02 01:04:43 -05001126
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001127Get IPv6 Static Default Gateway
1128 [Documentation] Get IPv6 static default gateway.
1129
1130 ${active_channel_config}= Get Active Channel Config
1131 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${active_channel_config['${CHANNEL_NUMBER}']['name']}
1132
1133 @{ipv6_static_defgw_configurations}= Get From Dictionary ${resp.dict} IPv6StaticDefaultGateways
1134 RETURN @{ipv6_static_defgw_configurations}
1135
Sweta Potthuri2d085732025-07-16 09:10:08 -05001136
Sweta Potthuri2edacd32025-07-02 01:04:43 -05001137Configure IPv6 Static Default Gateway On BMC
1138 [Documentation] Configure IPv6 static default gateway on BMC.
1139 [Arguments] ${ipv6_gw_addr} ${prefix_length_def}
1140 ... ${valid_status_codes}=${HTTP_OK}
Sridevi Rameshed94c692025-09-07 23:41:10 -05001141
Sweta Potthuri2edacd32025-07-02 01:04:43 -05001142 # Description of argument(s):
1143 # ipv6_gw_addr IPv6 Static Default Gateway address to be configured.
1144 # prefix_len_def Prefix length value (Range 1 to 128).
1145 # valid_status_codes Expected return code from patch operation
1146 # (e.g. "200", "204".)
1147
1148 # Prefix Length is passed as None.
1149 IF '${prefix_length_def}' == '${None}'
1150 ${ipv6_gw}= Create Dictionary Address=${ipv6_gw_addr}
1151 ELSE
1152 ${ipv6_gw}= Create Dictionary Address=${ipv6_gw_addr} Prefix Length=${prefix_length_def}
1153 END
1154
1155 ${ipv6_static_def_gw}= Get IPv6 Static Default Gateway
1156
1157 ${num_entries}= Get Length ${ipv6_static_def_gw}
1158
1159 ${patch_list}= Create List
1160 ${empty_dict}= Create Dictionary
1161
1162 FOR ${INDEX} IN RANGE 0 ${num_entries}
1163 Append To List ${patch_list} ${empty_dict}
1164 END
1165
1166 ${valid_status_codes}= Set Variable If '${valid_status_codes}' == '${HTTP_OK}'
1167 ... ${HTTP_OK},${HTTP_NO_CONTENT}
1168 ... ${valid_status_codes}
1169
1170 Append To List ${patch_list} ${ipv6_gw}
1171 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list}
1172
1173 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1174 ... body=${data} valid_status_codes=[${valid_status_codes}]
1175
1176 # Verify the added static default gateway is present in Redfish Get Output.
1177 ${ipv6_staticdef_gateway}= Get IPv6 Static Default Gateway
1178
1179 ${ipv6_static_def_gw_list}= Create List
1180 FOR ${ipv6_staticdef_gateway} IN @{ipv6_staticdef_gateway}
1181 ${value}= Get From Dictionary ${ipv6_staticdef_gateway} Address
1182 Append To List ${ipv6_static_def_gw_list} ${value}
1183 END
1184
1185 IF '${valid_status_codes}' != '${HTTP_OK},${HTTP_NO_CONTENT}'
1186 Should Not Contain ${ipv6_static_def_gw_list} ${ipv6_gw_addr}
1187 ELSE
1188 Should Contain ${ipv6_static_def_gw_list} ${ipv6_gw_addr}
1189 END
1190
Sweta Potthuri2d085732025-07-16 09:10:08 -05001191
Anvesh-Kumar_Rayankula019d9362025-09-03 22:55:12 -05001192Modify IPv6 Static Default Gateway On BMC
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001193 [Documentation] Modify and verify IPv6 address of BMC.
1194 [Arguments] ${ipv6_gw_addr} ${new_static_def_gw} ${prefix_length}
1195 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED}]
Sweta Potthuri2edacd32025-07-02 01:04:43 -05001196
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001197 # Description of argument(s):
1198 # ipv6_gw_addr IPv6 static default gateway address to be replaced (e.g. "2001:AABB:CCDD::AAFF").
1199 # new_static_def_gw New static default gateway address to be configured.
Sridevi Rameshed94c692025-09-07 23:41:10 -05001200 # prefix_length Prefix length value (Range 1 to 128).
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001201 # valid_status_codes Expected return code from patch operation
1202 # (e.g. "200", "204").
Sweta Potthuri2edacd32025-07-02 01:04:43 -05001203
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001204 ${empty_dict}= Create Dictionary
1205 ${patch_list}= Create List
1206 # Prefix Length is passed as None.
1207 IF '${prefix_length_def}' == '${None}'
1208 ${modified_ipv6_gw_addripv6_data}= Create Dictionary Address=${new_static_def_gw}
1209 ELSE
1210 ${modified_ipv6_gw_addripv6_data}= Create Dictionary Address=${new_static_def_gw} Prefix Length=${prefix_length_def}
1211 END
Sweta Potthuri2edacd32025-07-02 01:04:43 -05001212
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001213 @{ipv6_static_def_gw_list}= Get IPv6 Static Default Gateway
1214
1215 FOR ${ipv6_static_def_gw} IN @{ipv6_static_def_gw_list}
1216 IF '${ipv6_static_def_gw['Address']}' == '${ipv6_gw_addr}'
1217 Append To List ${patch_list} ${modified_ipv6_gw_addripv6_data}
1218 ELSE
1219 Append To List ${patch_list} ${empty_dict}
1220 END
1221 END
1222
1223 # Modify the IPv6 address only if given IPv6 static default gateway is found.
1224 ${ip_static_def_gw_found}= Run Keyword And Return Status List Should Contain Value
1225 ... ${patch_list} ${modified_ipv6_gw_addripv6_data} msg=${ipv6_gw_addr} does not exist on BMC
1226 Pass Execution If ${ip_static_def_gw_found} == ${False} ${ipv6_gw_addr} does not exist on BMC
1227
1228 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list}
1229
1230 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1231 ... body=&{data} valid_status_codes=${valid_status_codes}
1232
1233 ${ipv6_staticdef_gateway}= Get IPv6 Static Default Gateway
1234
1235 ${ipv6_static_def_gw_list}= Create List
1236 FOR ${ipv6_staticdef_gateway} IN @{ipv6_staticdef_gateway}
Sweta Potthuri2d085732025-07-16 09:10:08 -05001237 ${value}= Get From Dictionary ${ipv6_staticdef_gateway} Address
Sweta Potthuri4b0083f2025-07-09 11:34:40 -05001238 Append To List ${ipv6_static_def_gw_list} ${value}
1239 END
1240
1241 Should Contain ${ipv6_static_def_gw_list} ${new_static_def_gw}
1242 # Verify if old static default gateway address is erased.
1243 Should Not Contain ${ipv6_static_def_gw_list} ${ipv6_gw_addr}
1244
Sweta Potthuri2d085732025-07-16 09:10:08 -05001245
1246Delete IPv6 Static Default Gateway
1247 [Documentation] Delete IPv6 static default gateway on BMC.
1248 [Arguments] ${ipv6_gw_addr}
1249 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}]
1250
1251 # Description of argument(s):
1252 # ipv6_gw_addr IPv6 Static Default Gateway address to be deleted.
1253 # valid_status_codes Expected return code from patch operation
1254 # (e.g. "200").
1255
1256 ${patch_list}= Create List
1257 ${empty_dict}= Create Dictionary
1258
1259 ${ipv6_static_def_gw_list}= Create List
1260 @{ipv6_static_defgw_configurations}= Get IPv6 Static Default Gateway
1261
1262 FOR ${ipv6_staticdef_gateway} IN @{ipv6_static_defgw_configurations}
1263 ${value}= Get From Dictionary ${ipv6_staticdef_gateway} Address
1264 Append To List ${ipv6_static_def_gw_list} ${value}
1265 END
1266
1267 ${defgw_found}= Run Keyword And Return Status List Should Contain Value
1268 ... ${ipv6_static_def_gw_list} ${ipv6_gw_addr} msg=${ipv6_gw_addr} does not exist on BMC
1269 Skip If ${defgw_found} == ${False} ${ipv6_gw_addr} does not exist on BMC
1270
1271 FOR ${ipv6_static_def_gw} IN @{ipv6_static_defgw_configurations}
1272 IF '${ipv6_static_def_gw['Address']}' == '${ipv6_gw_addr}'
1273 Append To List ${patch_list} ${null}
1274 ELSE
1275 Append To List ${patch_list} ${empty_dict}
1276 END
1277 END
1278
1279 # Run patch command only if given IP is found on BMC.
1280 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list}
1281
1282 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data}
1283 ... valid_status_codes=${valid_status_codes}
1284
1285 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list}
1286
1287 @{ipv6_static_defgw_configurations}= Get IPv6 Static Default Gateway
1288 Should Not Contain Match ${ipv6_static_defgw_configurations} ${ipv6_gw_addr}
1289 ... msg=IPv6 Static default gateway does not exist.
Sweta Potthuri35c503b2025-07-27 23:36:20 -05001290
1291
1292Check Coexistence Of Linklocalv6 And Static IPv6
1293 [Documentation] Verify both linklocalv6 and static IPv6 exist.
1294
Sweta Potthuri35c503b2025-07-27 23:36:20 -05001295 # Verify the address origin contains static and linklocal.
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -05001296 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal
Sweta Potthuri35c503b2025-07-27 23:36:20 -05001297
Sweta Potthuri35c503b2025-07-27 23:36:20 -05001298 Should Match Regexp ${ipv6_linklocal_addr} ${linklocal_addr_format}
Sweta Potthuri35c503b2025-07-27 23:36:20 -05001299 Should Contain ${ipv6_addressorigin_list} Static
Sweta Potthuri3c6f97d2025-08-06 00:30:19 -05001300
1301
abhijith-12197078c52025-09-25 01:13:00 -05001302Check Coexistence Of Static IPv6 And SLAAC
abhijith-1214dc01a02025-09-24 11:29:55 -05001303 [Documentation] Verify both static IPv6 and SLAAC coexist.
abhijith-12197078c52025-09-25 01:13:00 -05001304
1305 # Verify the address origin contains static and slaac.
1306 @{ipv6_addressorigin_list} ${ipv6_static_addr}=
1307 ... Get Address Origin List And Address For Type Static
1308
1309 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}=
1310 ... Get Address Origin List And Address For Type SLAAC
1311
1312
abhijith-1214dc01a02025-09-24 11:29:55 -05001313Check Coexistence Of Link Local And SLAAC
1314 [Documentation] Verify both link local and SLAAC coexist.
1315
1316 # Verify the address origin contains SLAAC and link local.
1317 @{ipv6_addressorigin_list} ${ipv6_link_local_addr}=
1318 ... Get Address Origin List And Address For Type LinkLocal
1319
1320 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}=
1321 ... Get Address Origin List And Address For Type SLAAC
1322
1323 Should Match Regexp ${ipv6_link_local_addr} ${linklocal_addr_format}
1324
1325
abhijith-1218ff5db42025-09-24 06:24:03 -05001326Check Coexistence Of Link Local And DHCPv6
1327 [Documentation] Verify both link local and dhcpv6 coexist.
1328
1329 # Verify the address origin contains dhcpv6 and link local.
1330 @{ipv6_address_origin_list} ${ipv6_link_local_addr}=
1331 ... Get Address Origin List And Address For Type LinkLocal
1332
1333 @{ipv6_address_origin_list} ${ipv6_dhcpv6_addr}=
1334 ... Get Address Origin List And Address For Type DHCPv6
1335
1336 Should Match Regexp ${ipv6_link_local_addr} ${linklocal_addr_format}
1337
1338
Sweta Potthuri3c6f97d2025-08-06 00:30:19 -05001339Check If Linklocal Address Is In Correct Format
1340 [Documentation] Linklocal address has network part fe80 and host part EUI64.
1341
1342 # Fetch the linklocal address.
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -05001343 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal
Sweta Potthuri3c6f97d2025-08-06 00:30:19 -05001344
1345 # Follow EUI64 from MAC.
1346 ${system_mac}= Get BMC MAC Address
1347 ${split_octets}= Split String ${system_mac} :
1348 ${first_octet}= Evaluate int('${split_octets[0]}', 16)
1349 ${flipped_hex}= Evaluate format(${first_octet} ^ 2, '02x')
1350 ${grp1}= Evaluate re.sub(r'^0+', '', '${flipped_hex}${split_octets[1]}') modules=re
1351 ${grp2}= Evaluate re.sub(r'^0+', '', '${split_octets[2]}ff') modules=re
1352 ${grp3}= Evaluate re.sub(r'^0+', '', '${split_octets[4]}${split_octets[5]}') modules=re
1353 ${linklocal}= Set Variable fe80::${grp1}:${grp2}:fe${split_octets[3]}:${grp3}
1354
1355 # Verify the linklocal obtained is the same as on the machine.
1356 Should Be Equal ${linklocal} ${ipv6_linklocal_addr}
1357
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -05001358
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001359Check BMC Gets SLAAC Address
1360 [Documentation] Check BMC gets slaac address.
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -05001361
1362 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= Get Address Origin List And Address For Type SLAAC
1363
Sweta Potthuri71f7bdc2025-08-10 03:08:10 -05001364
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001365Get The Initial DHCPv6 Setting On Each Interface
1366 [Documentation] Get the initial DHCPv6 setting of each interface.
1367 [Arguments] ${channel_number}
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001368
1369 # Description of the argument(s):
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001370 # channel_number Channel number 1 or 2.
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001371
1372 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']}
1373 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1374 ${initial_dhcpv6_iface}= Get From Dictionary ${resp.dict} DHCPv6
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001375 IF ${channel_number}==${1}
1376 Set Test Variable ${dhcpv6_channel_1} ${initial_dhcpv6_iface['OperatingMode']}
1377 ELSE
1378 Set Test Variable ${dhcpv6_channel_2} ${initial_dhcpv6_iface['OperatingMode']}
1379 END
1380
1381
1382Get The Initial DHCPv6 Settings
1383 [Documentation] Get the initial DHCPv6 settings of both the interfaces.
1384
1385 Get The Initial DHCPv6 Setting On Each Interface ${1}
1386 Get The Initial DHCPv6 Setting On Each Interface ${2}
1387
1388
1389Get The Initial SLAAC Settings
1390 [Documentation] Get the initial SLAAC settings of both the interfaces.
1391
Sweta Potthuri6370afd2025-10-08 00:07:46 -05001392 Get The Initial SLAAC Setting On Each Interface ${1}
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001393 Get The Initial SLAAC Setting On Each Interface ${2}
1394
1395
1396Get The Initial SLAAC Setting On Each Interface
1397 [Documentation] Get the initial SLAAC setting of the interface.
1398 [Arguments] ${channel_number}
1399
1400 # Description of the argument(s):
1401 # channel_number Channel number 1 or 2.
1402
1403 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']}
1404 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
1405 ${initial_slaac_iface}= Get From Dictionary ${resp.dict} StatelessAddressAutoConfig
1406 IF ${channel_number}==${1}
1407 Set Test Variable ${slaac_channel_1} ${initial_slaac_iface['IPv6AutoConfigEnabled']}
1408 ELSE
1409 Set Test Variable ${slaac_channel_2} ${initial_slaac_iface['IPv6AutoConfigEnabled']}
1410 END
Sweta Potthuridb4a6d62025-08-18 11:29:16 -05001411
1412
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001413Verify All The Addresses Are Intact
1414 [Documentation] Verify all the addresses and address origins remain intact.
Sweta Potthuri6370afd2025-10-08 00:07:46 -05001415 [Arguments] ${channel_number}=${CHANNEL_NUMBER}
1416 ... ${initial_ipv4_addressorigin_list}=${initial_ipv4_addressorigin_list}
1417 ... ${initial_ipv4_addr_list}=${initial_ipv4_addr_list}
1418
1419 # Description of argument(s):
1420 # channel_number Channel number 1(eth0) or 2(eth1).
1421 # initial_ipv4_addressorigin_list Initial IPv4 address origin list.
1422 # initial_ipv4_addr_list Initial IPv4 address list.
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001423
1424 # Verify that it will not impact the IPv4 configuration.
1425 Sleep ${NETWORK_TIMEOUT}
1426 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT}
1427
Sweta Potthuri6370afd2025-10-08 00:07:46 -05001428 # IPv6 Linklocal address must be present.
1429 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}=
1430 ... Get Address Origin List And Address For Type LinkLocal ${channel_number}
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001431
Sweta Potthuri6370afd2025-10-08 00:07:46 -05001432 # IPv4 addresses must remain intact.
1433 ${ipv4_addressorigin_list} ${ipv4_addr_list}=
1434 ... Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses ${channel_number}
Sweta Potthuriabbbeae2025-08-21 00:06:26 -05001435
1436 Should be Equal ${initial_ipv4_addressorigin_list} ${ipv4_addressorigin_list}
1437 Should be Equal ${initial_ipv4_addr_list} ${ipv4_addr_list}
Sweta Potthurif3d188f2025-09-08 07:17:31 -05001438
1439
1440Get Interface ID Of IPv6
1441 [Documentation] Get interface id of IPv6 address.
1442 [Arguments] ${ipv6_address}
1443
1444 # Description of the argument(s):
1445 # ${ipv6_address} IPv6 Address to extract the last 4 hextets.
1446
1447 # Last 64 bits of SLAAC and Linklocal must be the same.
1448 # Sample IPv6 network configurations.
1449 #"IPv6AddressPolicyTable": [],
1450 # "IPv6Addresses": [
1451 # {
1452 # "Address": "fe80::xxxx:xxxx:xxxx:xxxx",
1453 # "AddressOrigin": "LinkLocal",
1454 # "AddressState": null,
1455 # "PrefixLength": xx
1456 # }
1457 # ],
1458 # {
1459 # "Address": "2002:xxxx:xxxx:xxxx:xxxx",
1460 # "AddressOrigin": "SLAAC",
1461 # "PrefixLength": 64
1462 # }
1463 # ],
1464
1465 ${split_ip_address}= Split String ${ipv6_address} :
1466 ${missing_ip}= Evaluate 8 - len(${split_ip_address}) + 1
1467 ${expanded_ip}= Create List
1468
1469 FOR ${hextet} IN @{split_ip_address}
1470 IF '${hextet}' == ''
1471 FOR ${i} IN RANGE ${missing_ip}
1472 Append To List ${expanded_ip} 0000
1473 END
1474 ELSE
1475 Append To List ${expanded_ip} ${hextet}
1476 END
1477 END
1478 ${interface_id}= Evaluate ':'.join(${expanded_ip}[-4:])
1479 RETURN ${interface_id}
Sweta Potthuri6370afd2025-10-08 00:07:46 -05001480
1481
1482Set And Verify SLAAC Property On Both Interfaces
1483 [Documentation] Set and verify SLAAC property on both interfaces.
1484 [Arguments] ${slaac_value_1} ${slaac_value_2}
1485
1486 # Description of the argument(s):
1487 # slaac_value_1 SLAAC value for channel 1.
1488 # slaac_value_2 SLAAC value for channel 2.
1489
1490 Set SLAAC Configuration State And Verify ${slaac_value_1} [${HTTP_OK}] ${1}
1491 Set SLAAC Configuration State And Verify ${slaac_value_2} [${HTTP_OK}] ${2}
1492
1493 Sleep 30s
1494
1495 # Check SLAAC Settings for eth0.
1496 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}=
1497 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${1}
1498 IF "${slaac_value_1}" == "${True}"
1499 Should Not Be Empty ${ipv6_slaac_addr} SLAAC
1500 ELSE
1501 Should Not Contain ${ipv6_addressorigin_list} SLAAC
1502 END
1503
1504 # Check SLAAC Settings for eth1.
1505 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}=
1506 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${2}
1507 IF "${slaac_value_2}" == "${True}"
1508 Should Not Be Empty ${ipv6_slaac_addr} SLAAC
1509 ELSE
1510 Should Not Contain ${ipv6_addressorigin_list} SLAAC
1511 END
1512
1513 Verify All The Addresses Are Intact ${1}
1514 Verify All The Addresses Are Intact ${2}
1515 ... ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}
1516
Sweta Potthuri425713a2025-10-16 00:28:20 -05001517
1518Set And Verify DHCPv6 Property On Both Interfaces
1519 [Documentation] Set and verify DHCPv6 property on both interfaces.
1520 [Arguments] ${dhcpv6_value_1} ${dhcpv6_value_2}
1521
1522 # Description of the argument(s):
1523 # dhcpv6_value_1 DHCPv6 value for channel 1.
1524 # dhcpv6_value_2 DHCPv6 value for channel 2.
1525
1526 Set And Verify DHCPv6 Property ${dhcpv6_value_1} ${1}
1527 Set And Verify DHCPv6 Property ${dhcpv6_value_2} ${2}
1528
1529 Verify All The Addresses Are Intact ${1}
1530 Verify All The Addresses Are Intact ${2}
1531 ... ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}
abhijith-121d8322b72025-10-13 02:23:48 -05001532
1533
1534Verify IPv6 Addresses Coexist
1535 [Documentation] Verify IPv6 address type coexist.
1536 [Arguments] ${ipv6_address_type1} ${ipv6_address_type2}
1537
1538 # Description of the argument(s):
1539 # ipv6_address_type1 IPv6 address type.
1540 # ipv6_address_type2 IPv6 address type.
1541 # Valid IPv6 address type (Static, DHCPv6, SLAAC).
1542
1543 IF '${ipv6_address_type1}' == 'Static' and '${ipv6_address_type2}' == 'DHCPv6'
1544 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
1545 Set And Verify DHCPv6 Property Enabled
1546 ELSE IF '${ipv6_address_type1}' == 'DHCPv6' and '${ipv6_address_type2}' == 'SLAAC'
1547 Set And Verify DHCPv6 Property Enabled
1548 Set SLAAC Configuration State And Verify ${True}
1549 ELSE IF '${ipv6_address_type1}' == 'SLAAC' and '${ipv6_address_type2}' == 'Static'
1550 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
1551 Set SLAAC Configuration State And Verify ${True}
1552 ELSE IF '${ipv6_address_type1}' == 'Static' and '${ipv6_address_type2}' == 'Static'
1553 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length}
1554 Configure IPv6 Address On BMC ${test_ipv6_addr1} ${test_prefix_length}
1555 END
1556
1557 Sleep ${NETWORK_TIMEOUT}s
1558
1559 # Verify coexistence.
1560 Verify The Coexistence Of The Address Type ${ipv6_address_type1} ${ipv6_address_type2}
1561
1562 IF '${ipv6_address_type1}' == 'Static' or '${ipv6_address_type2}' == 'Static'
1563 Delete IPv6 Address ${test_ipv6_addr}
1564 END
1565 IF '${ipv6_address_type1}' == 'Static' and '${ipv6_address_type2}' == 'Static'
1566 Delete IPv6 Address ${test_ipv6_addr1}
1567 END
1568
1569 Set And Verify DHCPv6 Property Disabled
1570 Set SLAAC Configuration State And Verify ${False}
abhijith-1215b556452025-11-19 03:44:21 -06001571
1572
1573Verify DHCPv4 Functionality On Eth1
1574 [Documentation] Verify DHCPv4 functions are present as expected on eth1.
1575
1576 # Verify eth1 DHCPv4 is enabled.
1577 ${DHCPEnabled}= Get IPv4 DHCP Enabled Status ${2}
1578 Should Be Equal ${DHCPEnabled} ${True}
1579
1580 # Verify presence of DHCPv4 address origin.
1581 @{ipv4_addressorigin_list} ${ipv4_addr_list}=
1582 ... Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses ${2}
1583 ${ipv4_addressorigin_list}= Combine Lists @{ipv4_addressorigin_list}
1584 Should Contain ${ipv4_addressorigin_list} DHCP
1585
1586 # Verify static is not present in address origin when DHPCv4 enabled.
abhijith-1213af608c2025-11-26 02:59:26 -06001587 List Should Not Contain Value ${ipv4_addressorigin_list} Static
1588
1589
1590Verify Static IPv4 Functionality
1591 [Documentation] Verify static IPv4 functionality.
1592 [Arguments] ${channel_number}=${CHANNEL_NUMBER}
1593
1594 # Description of argument(s):
1595 # channel_number Channel number 1(eth0) or 2(eth1).
1596
1597 # Verify presence of Static IPv4 address origin.
1598 @{ipv4_addressorigin_list} ${ipv4_addr_list}=
1599 ... Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses ${channel_number}
1600 ${ipv4_addressorigin_list}= Combine Lists @{ipv4_addressorigin_list}
1601 Should Contain ${ipv4_addressorigin_list} Static
1602
1603 # Verify dhcpv4 is not present in address origin when static IPv4 enabled.
1604 List Should Not Contain Value ${ipv4_addressorigin_list} DHCP
1605
1606 # Verify Static IPv4 address is pingable.
1607 FOR ${ip} IN @{ipv4_addr_list}
1608 Wait For Host To Ping ${ip} ${NETWORK_TIMEOUT}
1609 END