1*** 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 8Resource ../../lib/external_intf/vmi_utils.robot 9Resource ../../lib/bmc_network_utils.robot 10Library ../../lib/bmc_network_utils.py 11Library Collections 12Library Process 13 14Test Setup Test Setup Execution 15Test Teardown Test Teardown Execution 16Suite Setup Suite Setup Execution 17Suite Teardown Redfish.Logout 18 19Test Tags BMC_IPv6 20 21*** Variables *** 22${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 25${invalid_hexadec_ipv6} x:x:x:x:x:x:10.5.5.6 26${ipv6_multi_short} 2001::33::111 27# Valid prefix length is a integer ranges from 1 to 128. 28${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 32${linklocal_addr_format} fe80::[0-9a-f:]+$ 33${new_mac_addr} AA:E2:84:14:28:79 34 35*** Test Cases *** 36 37Get IPv6 Address And Verify 38 [Documentation] Get IPv6 Address And Verify. 39 [Tags] Get_IPv6_Address_And_Verify 40 41 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 42 Verify IPv6 On BMC ${ipv6_network_configuration['Address']} 43 END 44 45 46Get PrefixLength And Verify 47 [Documentation] Get IPv6 prefix length and verify. 48 [Tags] Get_PrefixLength_And_Verify 49 50 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 51 Verify IPv6 On BMC ${ipv6_network_configuration['PrefixLength']} 52 END 53 54 55Get IPv6 Default Gateway And Verify 56 [Documentation] Get IPv6 default gateway and verify. 57 [Tags] Get_IPv6_Default_Gateway_And_Verify 58 59 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 60 ${ipv6_gateway}= Get From Dictionary ${resp.dict} IPv6DefaultGateway 61 Verify IPv6 Default Gateway On BMC ${ipv6_gateway} 62 63 64Verify All Configured IPv6 And PrefixLength On BMC 65 [Documentation] Verify IPv6 address and its prefix length on BMC. 66 [Tags] Verify_All_Configured_IPv6_And_PrefixLength_On_BMC 67 68 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 69 Verify IPv6 And PrefixLength ${ipv6_network_configuration['Address']} 70 ... ${ipv6_network_configuration['PrefixLength']} 71 END 72 73 74Configure IPv6 Address And Verify 75 [Documentation] Configure IPv6 address and verify. 76 [Tags] Configure_IPv6_Address_And_Verify 77 [Teardown] Run Keywords 78 ... Delete IPv6 Address ${test_ipv6_addr} AND Test Teardown Execution 79 [Template] Configure IPv6 Address On BMC 80 81 82 # IPv6 address Prefix length 83 ${test_ipv6_addr} ${test_prefix_length} 84 85 86Delete IPv6 Address And Verify 87 [Documentation] Delete IPv6 address and verify. 88 [Tags] Delete_IPv6_Address_And_Verify 89 90 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} 91 92 Delete IPv6 Address ${test_ipv6_addr} 93 94 95Modify IPv6 Address And Verify 96 [Documentation] Modify IPv6 address and verify. 97 [Tags] Modify_IPv6_Address_And_Verify 98 [Teardown] Run Keywords 99 ... Delete IPv6 Address ${test_ipv6_addr1} AND Test Teardown Execution 100 101 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} 102 103 Modify IPv6 Address ${test_ipv6_addr} ${test_ipv6_addr1} ${test_prefix_length} 104 105 106Verify Persistency Of IPv6 After BMC Reboot 107 [Documentation] Verify persistency of IPv6 after BMC reboot. 108 [Tags] Verify_Persistency_Of_IPv6_After_BMC_Reboot 109 [Teardown] Run Keywords 110 ... Delete IPv6 Address ${test_ipv6_addr} AND Test Teardown Execution 111 112 Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} 113 114 Redfish OBMC Reboot (off) stack_mode=skip 115 116 # Verifying persistency of IPv6. 117 Verify IPv6 On BMC ${test_ipv6_addr} 118 119 120Enable SLAAC On BMC And Verify 121 [Documentation] Enable SLAAC on BMC and verify. 122 [Tags] Enable_SLAAC_On_BMC_And_Verify 123 124 Set SLAAC Configuration State And Verify ${True} 125 126 127Enable DHCPv6 Property On BMC And Verify 128 [Documentation] Enable DHCPv6 property on BMC and verify. 129 [Tags] Enable_DHCPv6_Property_On_BMC_And_Verify 130 131 Set And Verify DHCPv6 Property Enabled 132 133 134Disable DHCPv6 Property On BMC And Verify 135 [Documentation] Disable DHCPv6 property on BMC and verify. 136 [Tags] Disable_DHCPv6_Property_On_BMC_And_Verify 137 138 Set And Verify DHCPv6 Property Disabled 139 140 141Verify Persistency Of DHCPv6 On Reboot 142 [Documentation] Verify persistency of DHCPv6 property on reboot. 143 [Tags] Verify_Persistency_Of_DHCPv6_On_Reboot 144 145 Set And Verify DHCPv6 Property Enabled 146 Redfish OBMC Reboot (off) stack_mode=skip 147 Verify DHCPv6 Property Enabled 148 149 150Configure Invalid Static IPv6 And Verify 151 [Documentation] Configure invalid static IPv6 and verify. 152 [Tags] Configure_Invalid_Static_IPv6_And_Verify 153 [Template] Configure IPv6 Address On BMC 154 155 #invalid_ipv6 prefix length valid_status_code 156 ${ipv4_hexword_addr} ${test_prefix_length} ${HTTP_BAD_REQUEST} 157 ${invalid_hexadec_ipv6} ${test_prefix_length} ${HTTP_BAD_REQUEST} 158 ${ipv6_multi_short} ${test_prefix_length} ${HTTP_BAD_REQUEST} 159 160 161 162Configure IPv6 Static Default Gateway And Verify 163 [Documentation] Configure IPv6 static default gateway and verify. 164 [Tags] Configure_IPv6_Static_Default_Gateway_And_Verify 165 [Template] Configure IPv6 Static Default Gateway On BMC 166 167 # static_def_gw prefix length valid_status_code 168 ${ipv6_gw_addr} ${prefix_length_def} ${HTTP_OK} 169 ${invalid_staticv6_gateway} ${test_prefix_length} ${HTTP_BAD_REQUEST} 170 171 172Modify Static Default Gateway And Verify 173 [Documentation] Modify static default gateway and verify. 174 [Tags] Modify_Static_Default_Gateway_And_Verify 175 [Setup] Configure IPv6 Static Default Gateway On BMC ${ipv6_gw_addr} ${prefix_length_def} 176 177 Modify IPv6 Static Default Gateway On BMC ${test_ipv6_addr1} ${prefix_length_def} ${HTTP_OK} ${ipv6_gw_addr} 178 179 180Delete IPv6 Static Default Gateway And Verify 181 [Documentation] Delete IPv6 static default gateway and verify. 182 [Tags] Delete_IPv6_Static_Default_Gateway_And_Verify 183 [Setup] Configure IPv6 Static Default Gateway On BMC ${ipv6_gw_addr} ${prefix_length_def} 184 185 Delete IPv6 Static Default Gateway ${ipv6_gw_addr} 186 187 188Verify Coexistence Of Linklocalv6 And Static IPv6 On BMC 189 [Documentation] Verify linklocalv6 And static IPv6 both exist. 190 [Tags] Verify_Coexistence_Of_Linklocalv6_And_Static_IPv6_On_BMC 191 [Setup] Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} 192 [Teardown] Delete IPv6 Address ${test_ipv6_addr} 193 194 Check Coexistence Of Linklocalv6 And Static IPv6 195 196 197Verify IPv6 Linklocal Address Is In Correct Format 198 [Documentation] Verify linklocal address has network part as fe80 and 199 ... host part as EUI64. 200 [Tags] Verify_IPv6_Linklocal_Address_Is_In_Correct_Format 201 202 Check If Linklocal Address Is In Correct Format 203 204 205Verify BMC Gets SLAAC Address On Enabling SLAAC 206 [Documentation] On enabling SLAAC verify SLAAC address comes up. 207 [Tags] Verify_BMC_Gets_SLAAC_Address_On_Enabling_SLAAC 208 [Setup] Set SLAAC Configuration State And Verify ${False} 209 210 Set SLAAC Configuration State And Verify ${True} 211 Sleep ${NETWORK_TIMEOUT} 212 Check BMC Gets SLAAC Address 213 214 215Enable And Verify DHCPv6 Property On Eth1 When DHCPv6 Property Enabled On Eth0 216 [Documentation] Verify DHCPv6 on eth1 when DHCPv6 property is enabled on eth0. 217 [Tags] Enable_And_Verify_DHCPv6_Property_On_Eth1_When_DHCPv6_Property_Enabled_On_Eth0 218 [Setup] Get The Initial DHCPv6 Settings 219 [Teardown] Run Keywords Set And Verify DHCPv6 Property ${dhcpv6_channel_1} ${1} 220 ... AND Set And Verify DHCPv6 Property ${dhcpv6_channel_2} ${2} 221 222 Set And Verify DHCPv6 Property Enabled ${1} 223 Set And Verify DHCPv6 Property Enabled ${2} 224 225 226Verify Enable And Disable SLAAC On Both Interfaces 227 [Documentation] Verify enable and disable SLAAC on both the interfaces. 228 [Tags] Verify_Enable_And_Disable_SLAAC_On_Both_Interfaces 229 [Setup] Get The Initial SLAAC Settings 230 [Template] Set And Verify SLAAC Property On Both Interfaces 231 [Teardown] Run Keywords Set SLAAC Configuration State And Verify ${slaac_channel_1} [${HTTP_OK}] ${1} 232 ... AND Set SLAAC Configuration State And Verify ${slaac_channel_2} [${HTTP_OK}] ${2} 233 234 # slaac_eth0 slaac_eth1 235 ${True} ${True} 236 ${True} ${False} 237 ${False} ${True} 238 ${False} ${False} 239 240 241Verify Autoconfig Is Present On Ethernet Interface 242 [Documentation] Verify autoconfig is present on ethernet interface. 243 [Tags] Verify_Autoconfig_Is_Present_On_Ethernet_Interface 244 245 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 246 Should Contain ${resp.dict} StatelessAddressAutoConfig 247 248 249Verify Interface ID Of SLAAC And LinkLocal Addresses Are Same 250 [Documentation] Validate interface id of SLAAC and link-local addresses are same. 251 [Tags] Verify_Interface_ID_Of_SLAAC_And_LinkLocal_Addresses_Are_Same 252 253 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal 254 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= Get Address Origin List And Address For Type SLAAC 255 256 ${linklocal_interface_id}= Get Interface ID Of IPv6 ${ipv6_linklocal_addr} 257 ${slaac_interface_id}= Get Interface ID Of IPv6 ${ipv6_slaac_addr} 258 259 Should Be Equal ${linklocal_interface_id} ${slaac_interface_id} 260 261 262Verify Persistency Of Link Local IPv6 On BMC Reboot 263 [Documentation] Verify persistency of link local on BMC reboot. 264 [Tags] Verify_Persistency_Of_Link_Local_IPv6_On_BMC_Reboot 265 266 # Capturing the linklocal before reboot. 267 @{ipv6_address_origin_list} ${linklocal_addr_before_reboot}= 268 ... Get Address Origin List And Address For Type LinkLocal 269 270 # Rebooting BMC. 271 Redfish OBMC Reboot (off) stack_mode=skip 272 273 @{ipv6_address_origin_list} ${linklocal_addr_after_reboot}= 274 ... Get Address Origin List And Address For Type LinkLocal 275 276 # Verifying the linklocal must be the same before and after reboot. 277 Should Be Equal ${linklocal_addr_before_reboot} ${linklocal_addr_after_reboot} 278 ... msg=IPv6 Linklocal address has changed after reboot. 279 280 281Modify MAC and Verify BMC Reinitializing Linklocal 282 [Documentation] Modify MAC and verify BMC reinitializing linklocal. 283 [Tags] Modify_MAC_and_Verify_BMC_Reinitializing_Linklocal 284 [Teardown] Configure MAC Settings ${original_address} 285 286 ${original_address}= Get BMC MAC Address 287 @{ipv6_addressorigin_list} ${ipv6_before_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal 288 289 # Modify MAC Address Of Ethernet Interface. 290 Configure MAC Settings ${new_mac_addr} 291 Sleep 30s 292 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 293 @{ipv6_addressorigin_list} ${ipv6_linklocal_after_addr}= Get Address Origin List And Address For Type LinkLocal 294 295 # Verify whether the linklocal has changed and is in the the correct format. 296 Check If Linklocal Address Is In Correct Format 297 Should Not Be Equal ${ipv6_before_linklocal_addr} ${ipv6_linklocal_after_addr} 298 299 300Add Multiple IPv6 Address And Verify 301 [Documentation] Add multiple IPv6 address and verify. 302 [Tags] Add_Multiple_IPv6_Address_And_Verify 303 [Teardown] Run Keywords 304 ... Delete IPv6 Address ${test_ipv6_addr} AND Delete IPv6 Address ${test_ipv6_addr1} 305 ... AND Test Teardown Execution 306 307 Configure Multiple IPv6 Address on BMC ${test_prefix_length} 308 309 310Verify Coexistence Of Static IPv6 And SLAAC On BMC 311 [Documentation] Verify static IPv6 And SLAAC both coexist. 312 [Tags] Verify_Coexistence_Of_Static_IPv6_And_SLAAC_On_BMC 313 [Setup] Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} 314 Set SLAAC Configuration State And Verify ${True} 315 [Teardown] Delete IPv6 Address ${test_ipv6_addr} 316 317 Sleep ${NETWORK_TIMEOUT}s 318 319 Check Coexistence Of Static IPv6 And SLAAC 320 321 322Verify Coexistence Of Link Local And DHCPv6 On BMC 323 [Documentation] Verify link local And dhcpv6 both coexist. 324 [Tags] Verify_Coexistence_Of_Link_Local_And_DHCPv6_On_BMC 325 [Setup] Set DHCPv6 Property Enabled ${2} 326 327 Sleep ${NETWORK_TIMEOUT}s 328 329 Check Coexistence Of Link Local And DHCPv6 330 331 332Verify Coexistence Of Link Local And SLAAC On BMC 333 [Documentation] Verify link local And SLAAC both coexist. 334 [Tags] Verify_Coexistence_Of_Link_Local_And_SLAAC_On_BMC 335 [Setup] Set SLAAC Configuration State And Verify ${True} 336 337 Sleep ${NETWORK_TIMEOUT}s 338 339 Check Coexistence Of Link Local And SLAAC 340 341 342Verify Coexistence Of All IPv6 Type Addresses On BMC 343 [Documentation] Verify coexistence of link local, static, DHCPv6 and SLAAC ipv6 addresses. 344 [Tags] Verify_Coexistence_Of_All_IPv6_Type_Addresses_On_BMC 345 [Setup] Run Keywords Configure IPv6 Address On BMC ${test_ipv6_addr} ${test_prefix_length} 346 ... AND Get The Initial DHCPv6 Setting On Each Interface ${1} 347 ... AND Set And Verify DHCPv6 Property Enabled 348 ... AND Get The Initial SLAAC Setting On Each Interface ${1} 349 ... AND Set SLAAC Configuration State And Verify ${True} 350 [Teardown] Run Keywords Delete IPv6 Address ${test_ipv6_addr} 351 ... AND Set And Verify DHCPv6 Property ${dhcpv6_channel_1} ${1} 352 ... AND Set SLAAC Configuration State And Verify ${slaac_channel_1} [${HTTP_OK}] ${1} 353 354 Sleep ${NETWORK_TIMEOUT}s 355 356 # Verify link local, static, DHCPv6 and SLAAC ipv6 addresses coexist. 357 Verify The Coexistence Of The Address Type LinkLocal Static DHCPv6 SLAAC 358 359 360*** Keywords *** 361 362Suite Setup Execution 363 [Documentation] Do suite setup execution. 364 365 Redfish.Login 366 ${active_channel_config}= Get Active Channel Config 367 Set Suite Variable ${active_channel_config} 368 369 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 370 371 Set Suite variable ${ethernet_interface} 372 373 # Get initial IPv4 and IPv6 addresses and address origins for eth0. 374 ${initial_ipv4_addressorigin_list} ${initial_ipv4_addr_list}= Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses 375 ${initial_ipv6_addressorigin_list} ${initial_ipv6_addr_list}= Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses 376 377 Set Suite Variable ${initial_ipv4_addressorigin_list} 378 Set Suite Variable ${initial_ipv4_addr_list} 379 Set Suite Variable ${initial_ipv6_addressorigin_list} 380 Set Suite Variable ${initial_ipv6_addr_list} 381 382 # Get initial IPv4 and IPv6 addresses and address origins for eth1. 383 ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list}= 384 ... Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses ${2} 385 ${eth1_initial_ipv6_addressorigin_list} ${eth1_initial_ipv6_addr_list}= 386 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${2} 387 Set Suite Variable ${eth1_initial_ipv4_addressorigin_list} 388 Set Suite Variable ${eth1_initial_ipv4_addr_list} 389 Set Suite Variable ${eth1_initial_ipv6_addressorigin_list} 390 Set Suite Variable ${eth1_initial_ipv6_addr_list} 391 392 393Test Setup Execution 394 [Documentation] Test setup execution. 395 396 @{ipv6_network_configurations}= Get IPv6 Network Configuration 397 Set Test Variable @{ipv6_network_configurations} 398 399 # Get BMC IPv6 address and prefix length. 400 ${ipv6_data}= Get BMC IPv6 Info 401 Set Test Variable ${ipv6_data} 402 403 404Test Teardown Execution 405 [Documentation] Test teardown execution. 406 407 FFDC On Test Case Fail 408 409 410Get IPv6 Network Configuration 411 [Documentation] Get Ipv6 network configuration. 412 # Sample output: 413 # { 414 # "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/eth0", 415 # "@odata.type": "#EthernetInterface.v1_4_1.EthernetInterface", 416 # "DHCPv4": { 417 # "DHCPEnabled": false, 418 # "UseDNSServers": false, 419 # "UseDomainName": true, 420 # "UseNTPServers": false 421 # }, 422 # "DHCPv6": { 423 # "OperatingMode": "Disabled", 424 # "UseDNSServers": false, 425 # "UseDomainName": true, 426 # "UseNTPServers": false 427 # }, 428 # "Description": "Management Network Interface", 429 # "FQDN": "localhost", 430 # "HostName": "localhost", 431 # "IPv4Addresses": [ 432 # { 433 # "Address": "xx.xx.xx.xx", 434 # "AddressOrigin": "Static", 435 # "Gateway": "xx.xx.xx.1", 436 # "SubnetMask": "xx.xx.xx.0" 437 # }, 438 # { 439 # "Address": "169.254.xx.xx", 440 # "AddressOrigin": "IPv4LinkLocal", 441 # "Gateway": "0.0.0.0", 442 # "SubnetMask": "xx.xx.0.0" 443 # }, 444 # ], 445 # "IPv4StaticAddresses": [ 446 # { 447 # "Address": "xx.xx.xx.xx", 448 # "AddressOrigin": "Static", 449 # "Gateway": "xx.xx.xx.1", 450 # "SubnetMask": "xx.xx.0.0" 451 # } 452 # } 453 # ], 454 # "IPv6AddressPolicyTable": [], 455 # "IPv6Addresses": [ 456 # { 457 # "Address": "fe80::xxxx:xxxx:xxxx:xxxx", 458 # "AddressOrigin": "LinkLocal", 459 # "AddressState": null, 460 # "PrefixLength": xx 461 # } 462 # ], 463 # "IPv6DefaultGateway": "", 464 # "IPv6StaticAddresses": [ 465 # { "Address": "xxxx:xxxx:xxxx:xxxx::xxxx", 466 # "AddressOrigin": "Static", 467 # "AddressState": null, 468 # "PrefixLength": xxx 469 # } 470 # ], 471 # "Id": "eth0", 472 # "InterfaceEnabled": true, 473 # "LinkStatus": "LinkUp", 474 # "MACAddress": "xx:xx:xx:xx:xx:xx", 475 # "Name": "Manager Ethernet Interface", 476 # "NameServers": [], 477 # "SpeedMbps": 0, 478 # "StaticNameServers": [], 479 # "Status": { 480 # "Health": "OK", 481 # "HealthRollup": "OK", 482 # "State": "Enabled" 483 # }, 484 # "VLANs": { 485 # "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/eth0/VLANs" 486 487 488 ${active_channel_config}= Get Active Channel Config 489 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${active_channel_config['${CHANNEL_NUMBER}']['name']} 490 491 @{ipv6_network_configurations}= Get From Dictionary ${resp.dict} IPv6StaticAddresses 492 RETURN @{ipv6_network_configurations} 493 494 495Verify IPv6 And PrefixLength 496 [Documentation] Verify IPv6 address and prefix length on BMC. 497 [Arguments] ${ipv6_addr} ${prefix_len} 498 499 # Description of the argument(s): 500 # ipv6_addr IPv6 address to be verified. 501 # prefix_len PrefixLength value to be verified. 502 503 # Catenate IPv6 address and its prefix length. 504 ${ipv6_with_prefix}= Catenate ${ipv6_addr}/${prefix_len} 505 506 # Get IPv6 address details on BMC using IP command. 507 @{ip_data}= Get BMC IPv6 Info 508 509 # Verify if IPv6 and prefix length is configured on BMC. 510 511 Should Contain ${ip_data} ${ipv6_with_prefix} 512 ... msg=IPv6 and prefix length pair does not exist. 513 514 515Configure IPv6 Address On BMC 516 [Documentation] Add IPv6 Address on BMC. 517 [Arguments] ${ipv6_addr} ${prefix_len} ${valid_status_codes}=${HTTP_OK} 518 519 # Description of argument(s): 520 # ipv6_addr IPv6 address to be added (e.g. "2001:EEEE:2222::2022"). 521 # prefix_len Prefix length for the IPv6 to be added 522 # (e.g. "64"). 523 # valid_status_codes Expected return code from patch operation 524 # (e.g. "200"). 525 526 ${prefix_length}= Convert To Integer ${prefix_len} 527 ${empty_dict}= Create Dictionary 528 ${ipv6_data}= Create Dictionary Address=${ipv6_addr} 529 ... PrefixLength=${prefix_length} 530 531 ${patch_list}= Create List 532 533 # Get existing static IPv6 configurations on BMC. 534 ${ipv6_network_configurations}= Get IPv6 Network Configuration 535 ${num_entries}= Get Length ${ipv6_network_configurations} 536 537 FOR ${INDEX} IN RANGE 0 ${num_entries} 538 Append To List ${patch_list} ${empty_dict} 539 END 540 541 ${valid_status_codes}= Set Variable If '${valid_status_codes}' == '${HTTP_OK}' 542 ... ${HTTP_OK},${HTTP_NO_CONTENT} 543 ... ${valid_status_codes} 544 545 # We need not check for existence of IPv6 on BMC while adding. 546 Append To List ${patch_list} ${ipv6_data} 547 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list} 548 549 ${active_channel_config}= Get Active Channel Config 550 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 551 552 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data} 553 ... valid_status_codes=[${valid_status_codes}] 554 555 Return From Keyword If '${valid_status_codes}' != '${HTTP_OK},${HTTP_NO_CONTENT}' 556 557 # Note: Network restart takes around 15-18s after patch request processing. 558 Sleep ${NETWORK_TIMEOUT}s 559 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 560 561 Verify IPv6 And PrefixLength ${ipv6_addr} ${prefix_len} 562 563 # Verify if existing static IPv6 addresses still exist. 564 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 565 Verify IPv6 On BMC ${ipv6_network_configuration['Address']} 566 END 567 568 Validate IPv6 Network Config On BMC 569 570 571Configure Multiple IPv6 Address on BMC 572 [Documentation] Add multiple IPv6 address on BMC. 573 [Arguments] ${prefix_len} 574 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_NO_CONTENT}] 575 576 # Description of argument(s): 577 # prefix_len Prefix length for the IPv6 to be added 578 # (e.g. "64"). 579 # valid_status_codes Expected return code from patch operation 580 # (e.g. "200"). 581 582 ${ipv6_list}= Create List ${test_ipv6_addr} ${test_ipv6_addr1} 583 ${prefix_length}= Convert To Integer ${prefix_len} 584 ${empty_dict}= Create Dictionary 585 ${patch_list}= Create List 586 587 # Get existing static IPv6 configurations on BMC. 588 ${ipv6_network_configurations}= Get IPv6 Network Configuration 589 ${num_entries}= Get Length ${ipv6_network_configurations} 590 591 FOR ${INDEX} IN RANGE 0 ${num_entries} 592 Append To List ${patch_list} ${empty_dict} 593 END 594 595 # We need not check for existence of IPv6 on BMC while adding. 596 FOR ${ipv6_addr} IN @{ipv6_list} 597 ${ipv6_data}= Create Dictionary Address=${ipv6_addr} PrefixLength=${prefix_length} 598 Append To List ${patch_list} ${ipv6_data} 599 END 600 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list} 601 602 ${active_channel_config}= Get Active Channel Config 603 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 604 605 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data} 606 ... valid_status_codes=${valid_status_codes} 607 608 IF ${valid_status_codes} != [${HTTP_OK}, ${HTTP_NO_CONTENT}] 609 Fail msg=Static address not added correctly 610 END 611 612 # Note: Network restart takes around 15-18s after patch request processing. 613 Sleep ${NETWORK_TIMEOUT}s 614 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 615 616 # Verify newly added ip address on CLI. 617 FOR ${ipv6_addr} IN @{ipv6_list} 618 Verify IPv6 And PrefixLength ${ipv6_addr} ${prefix_len} 619 END 620 621 # Verify if existing static IPv6 addresses still exist. 622 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 623 Verify IPv6 On BMC ${ipv6_network_configuration['Address']} 624 END 625 626 # Get the latest ipv6 network configurations. 627 @{ipv6_network_configurations}= Get IPv6 Network Configuration 628 629 # Verify newly added ip address on BMC. 630 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 631 Should Contain Match ${ipv6_list} ${ipv6_network_configuration['Address']} 632 END 633 634 Validate IPv6 Network Config On BMC 635 636 637Validate IPv6 Network Config On BMC 638 [Documentation] Check that IPv6 network info obtained via redfish matches info 639 ... obtained via CLI. 640 641 @{ipv6_network_configurations}= Get IPv6 Network Configuration 642 ${ipv6_data}= Get BMC IPv6 Info 643 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 644 Should Contain Match ${ipv6_data} ${ipv6_network_configuration['Address']}/* 645 ... msg=IPv6 address does not exist. 646 END 647 648 649Delete IPv6 Address 650 [Documentation] Delete IPv6 address of BMC. 651 [Arguments] ${ipv6_addr} 652 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}] 653 654 # Description of argument(s): 655 # ipv6_addr IPv6 address to be deleted (e.g. "2001:1234:1234:1234::1234"). 656 # valid_status_codes Expected return code from patch operation 657 # (e.g. "200"). See prolog of rest_request 658 # method in redfish_plus.py for details. 659 660 ${empty_dict}= Create Dictionary 661 ${patch_list}= Create List 662 663 @{ipv6_network_configurations}= Get IPv6 Network Configuration 664 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 665 IF '${ipv6_network_configuration['Address']}' == '${ipv6_addr}' 666 Append To List ${patch_list} ${null} 667 ELSE 668 Append To List ${patch_list} ${empty_dict} 669 END 670 END 671 672 ${ip_found}= Run Keyword And Return Status List Should Contain Value 673 ... ${patch_list} ${null} msg=${ipv6_addr} does not exist on BMC 674 Pass Execution If ${ip_found} == ${False} ${ipv6_addr} does not exist on BMC 675 676 # Run patch command only if given IP is found on BMC 677 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list} 678 679 ${active_channel_config}= Get Active Channel Config 680 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 681 682 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data} 683 ... valid_status_codes=${valid_status_codes} 684 685 # Note: Network restart takes around 15-18s after patch request processing 686 Sleep ${NETWORK_TIMEOUT}s 687 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 688 689 # IPv6 address that is deleted should not be there on BMC. 690 ${delete_status}= Run Keyword And Return Status Verify IPv6 On BMC ${ipv6_addr} 691 IF '${valid_status_codes}' == '[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}]' 692 Should Be True '${delete_status}' == '${False}' 693 ELSE 694 Should Be True '${delete_status}' == '${True}' 695 END 696 697 Validate IPv6 Network Config On BMC 698 699 700Modify IPv6 Address 701 [Documentation] Modify and verify IPv6 address of BMC. 702 [Arguments] ${ipv6} ${new_ipv6} ${prefix_len} 703 ... ${valid_status_codes}=[${HTTP_OK}, ${HTTP_NO_CONTENT}] 704 705 # Description of argument(s): 706 # ipv6 IPv6 address to be replaced (e.g. "2001:AABB:CCDD::AAFF"). 707 # new_ipv6 New IPv6 address to be configured. 708 # prefix_len Prefix length value (Range 1 to 128). 709 # valid_status_codes Expected return code from patch operation 710 # (e.g. "200", "201"). 711 712 ${empty_dict}= Create Dictionary 713 ${patch_list}= Create List 714 ${prefix_length}= Convert To Integer ${prefix_len} 715 ${ipv6_data}= Create Dictionary 716 ... Address=${new_ipv6} PrefixLength=${prefix_length} 717 718 # Sample IPv6 network configurations: 719 # "IPv6AddressPolicyTable": [], 720 # "IPv6Addresses": [ 721 # { 722 # "Address": "X002:db8:0:2::XX0", 723 # "AddressOrigin": "DHCPv6", 724 # "PrefixLength": 128 725 # }, 726 # { 727 # "Address": “X002:db8:0:2:a94:XXff:fe82:XXXX", 728 # "AddressOrigin": "SLAAC", 729 # "PrefixLength": 64 730 # }, 731 # { 732 # "Address": “Y002:db8:0:2:a94:efff:fe82:5000", 733 # "AddressOrigin": "Static", 734 # "PrefixLength": 56 735 # }, 736 # { 737 # "Address": “Z002:db8:0:2:a94:efff:fe82:5000", 738 # "AddressOrigin": "Static", 739 # "PrefixLength": 56 740 # }, 741 # { 742 # "Address": “Xe80::a94:efff:YYYY:XXXX", 743 # "AddressOrigin": "LinkLocal", 744 # "PrefixLength": 64 745 # }, 746 # { 747 # "Address": “X002:db8:1:2:eff:233:fee:546", 748 # "AddressOrigin": "Static", 749 # "PrefixLength": 56 750 # } 751 # ], 752 # "IPv6DefaultGateway": “XXXX::ab2e:80fe:87df:XXXX”, 753 # "IPv6StaticAddresses": [ 754 # { 755 # "Address": “X002:db8:0:2:a94:efff:fe82:5000", 756 # "PrefixLength": 56 757 # }, 758 # { 759 # "Address": “Y002:db8:0:2:a94:efff:fe82:5000", 760 # "PrefixLength": 56 761 # }, 762 # { 763 # "Address": “Z002:db8:1:2:eff:233:fee:546", 764 # "PrefixLength": 56 765 # } 766 # ], 767 # "IPv6StaticDefaultGateways": [], 768 769 # Find the position of IPv6 address to be modified. 770 @{ipv6_network_configurations}= Get IPv6 Network Configuration 771 FOR ${ipv6_network_configuration} IN @{ipv6_network_configurations} 772 IF '${ipv6_network_configuration['Address']}' == '${ipv6}' 773 Append To List ${patch_list} ${ipv6_data} 774 ELSE 775 Append To List ${patch_list} ${empty_dict} 776 END 777 END 778 779 # Modify the IPv6 address only if given IPv6 is found 780 ${ip_found}= Run Keyword And Return Status List Should Contain Value 781 ... ${patch_list} ${ipv6_data} msg=${ipv6} does not exist on BMC 782 Pass Execution If ${ip_found} == ${False} ${ipv6} does not exist on BMC 783 784 ${data}= Create Dictionary IPv6StaticAddresses=${patch_list} 785 786 ${active_channel_config}= Get Active Channel Config 787 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 788 789 Redfish.patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 790 ... body=&{data} valid_status_codes=${valid_status_codes} 791 792 # Note: Network restart takes around 15-18s after patch request processing. 793 Sleep ${NETWORK_TIMEOUT}s 794 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 795 796 # Verify if new IPv6 address is configured on BMC. 797 Verify IPv6 On BMC ${new_ipv6} 798 799 # Verify if old IPv6 address is erased. 800 ${cmd_status}= Run Keyword And Return Status 801 ... Verify IPv6 On BMC ${ipv6} 802 Should Be Equal ${cmd_status} ${False} msg=Old IPv6 address is not deleted. 803 804 Validate IPv6 Network Config On BMC 805 806 807Set SLAAC Configuration State And Verify 808 [Documentation] Set SLAAC configuration state and verify. 809 [Arguments] ${slaac_state} ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}] 810 ... ${channel_number}=${CHANNEL_NUMBER} 811 812 # Description of argument(s): 813 # slaac_state SLAAC state('True' or 'False'). 814 # valid_status_code Expected valid status codes. 815 # channel_number Channel number 1(eth0) or 2(eth1). 816 817 ${active_channel_config}= Get Active Channel Config 818 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 819 820 ${data}= Set Variable If ${slaac_state} == ${False} ${DISABLE_SLAAC} ${ENABLE_SLAAC} 821 ${resp}= Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 822 ... body=${data} valid_status_codes=${valid_status_codes} 823 824 # Verify SLAAC is set correctly. 825 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 826 ${slaac_verify}= Get From Dictionary ${resp.dict} StatelessAddressAutoConfig 827 828 IF '${slaac_verify['IPv6AutoConfigEnabled']}' != '${slaac_state}' 829 Fail msg=SLAAC not set properly. 830 END 831 832Set And Verify DHCPv6 Property 833 [Documentation] Set DHCPv6 property and verify. 834 [Arguments] ${dhcpv6_operating_mode}=${Disabled} ${channel_number}=${CHANNEL_NUMBER} 835 836 # Description of argument(s): 837 # dhcpv6_operating_mode Enabled if user wants to enable DHCPv6('Enabled' or 'Disabled'). 838 # channel_number Channel number 1 or 2. 839 840 Set DHCPv6 Property ${dhcpv6_operating_mode} ${channel_number} 841 Verify DHCPv6 Property ${dhcpv6_operating_mode} ${channel_number} 842 843 844Set DHCPv6 Property 845 [Documentation] Set DHCPv6 attribute is enables or disabled. 846 [Arguments] ${dhcpv6_operating_mode}=${Disabled} ${channel_number}=${CHANNEL_NUMBER} 847 848 # Description of argument(s): 849 # dhcpv6_operating_mode Enabled if user wants to enable DHCPv6('Enabled' or 'Disabled'). 850 # channel_number Channel number 1 or 2. 851 852 ${data}= Set Variable If '${dhcpv6_operating_mode}' == 'Disabled' ${DISABLE_DHCPv6} ${ENABLE_DHCPv6} 853 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 854 855 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 856 ... body=${data} valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}] 857 858 859Verify DHCPv6 Property 860 [Documentation] Verify DHCPv6 settings is enabled or disabled. 861 [Arguments] ${dhcpv6_operating_mode} ${channel_number}=${CHANNEL_NUMBER} 862 863 # Description of Argument(s): 864 # dhcpv6_operating_mode Enable/ Disable DHCPv6. 865 # channel_number Channel number 1 or 2. 866 867 ${ethernet_interface}= Set Variable ${active_channel_config['${CHANNEL_NUMBER}']['name']} 868 869 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 870 ${dhcpv6_verify}= Get From Dictionary ${resp.dict} DHCPv6 871 872 Should Be Equal '${dhcpv6_verify['OperatingMode']}' '${dhcpv6_operating_mode}' 873 874 875Get IPv6 Static Default Gateway 876 [Documentation] Get IPv6 static default gateway. 877 878 ${active_channel_config}= Get Active Channel Config 879 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${active_channel_config['${CHANNEL_NUMBER}']['name']} 880 881 @{ipv6_static_defgw_configurations}= Get From Dictionary ${resp.dict} IPv6StaticDefaultGateways 882 RETURN @{ipv6_static_defgw_configurations} 883 884 885Configure IPv6 Static Default Gateway On BMC 886 [Documentation] Configure IPv6 static default gateway on BMC. 887 [Arguments] ${ipv6_gw_addr} ${prefix_length_def} 888 ... ${valid_status_codes}=${HTTP_OK} 889 890 # Description of argument(s): 891 # ipv6_gw_addr IPv6 Static Default Gateway address to be configured. 892 # prefix_len_def Prefix length value (Range 1 to 128). 893 # valid_status_codes Expected return code from patch operation 894 # (e.g. "200", "204".) 895 896 # Prefix Length is passed as None. 897 IF '${prefix_length_def}' == '${None}' 898 ${ipv6_gw}= Create Dictionary Address=${ipv6_gw_addr} 899 ELSE 900 ${ipv6_gw}= Create Dictionary Address=${ipv6_gw_addr} Prefix Length=${prefix_length_def} 901 END 902 903 ${ipv6_static_def_gw}= Get IPv6 Static Default Gateway 904 905 ${num_entries}= Get Length ${ipv6_static_def_gw} 906 907 ${patch_list}= Create List 908 ${empty_dict}= Create Dictionary 909 910 FOR ${INDEX} IN RANGE 0 ${num_entries} 911 Append To List ${patch_list} ${empty_dict} 912 END 913 914 ${valid_status_codes}= Set Variable If '${valid_status_codes}' == '${HTTP_OK}' 915 ... ${HTTP_OK},${HTTP_NO_CONTENT} 916 ... ${valid_status_codes} 917 918 Append To List ${patch_list} ${ipv6_gw} 919 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list} 920 921 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 922 ... body=${data} valid_status_codes=[${valid_status_codes}] 923 924 # Verify the added static default gateway is present in Redfish Get Output. 925 ${ipv6_staticdef_gateway}= Get IPv6 Static Default Gateway 926 927 ${ipv6_static_def_gw_list}= Create List 928 FOR ${ipv6_staticdef_gateway} IN @{ipv6_staticdef_gateway} 929 ${value}= Get From Dictionary ${ipv6_staticdef_gateway} Address 930 Append To List ${ipv6_static_def_gw_list} ${value} 931 END 932 933 IF '${valid_status_codes}' != '${HTTP_OK},${HTTP_NO_CONTENT}' 934 Should Not Contain ${ipv6_static_def_gw_list} ${ipv6_gw_addr} 935 ELSE 936 Should Contain ${ipv6_static_def_gw_list} ${ipv6_gw_addr} 937 END 938 939 940Modify IPv6 Static Default Gateway On BMC 941 [Documentation] Modify and verify IPv6 address of BMC. 942 [Arguments] ${ipv6_gw_addr} ${new_static_def_gw} ${prefix_length} 943 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED}] 944 945 # Description of argument(s): 946 # ipv6_gw_addr IPv6 static default gateway address to be replaced (e.g. "2001:AABB:CCDD::AAFF"). 947 # new_static_def_gw New static default gateway address to be configured. 948 # prefix_length Prefix length value (Range 1 to 128). 949 # valid_status_codes Expected return code from patch operation 950 # (e.g. "200", "204"). 951 952 ${empty_dict}= Create Dictionary 953 ${patch_list}= Create List 954 # Prefix Length is passed as None. 955 IF '${prefix_length_def}' == '${None}' 956 ${modified_ipv6_gw_addripv6_data}= Create Dictionary Address=${new_static_def_gw} 957 ELSE 958 ${modified_ipv6_gw_addripv6_data}= Create Dictionary Address=${new_static_def_gw} Prefix Length=${prefix_length_def} 959 END 960 961 @{ipv6_static_def_gw_list}= Get IPv6 Static Default Gateway 962 963 FOR ${ipv6_static_def_gw} IN @{ipv6_static_def_gw_list} 964 IF '${ipv6_static_def_gw['Address']}' == '${ipv6_gw_addr}' 965 Append To List ${patch_list} ${modified_ipv6_gw_addripv6_data} 966 ELSE 967 Append To List ${patch_list} ${empty_dict} 968 END 969 END 970 971 # Modify the IPv6 address only if given IPv6 static default gateway is found. 972 ${ip_static_def_gw_found}= Run Keyword And Return Status List Should Contain Value 973 ... ${patch_list} ${modified_ipv6_gw_addripv6_data} msg=${ipv6_gw_addr} does not exist on BMC 974 Pass Execution If ${ip_static_def_gw_found} == ${False} ${ipv6_gw_addr} does not exist on BMC 975 976 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list} 977 978 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 979 ... body=&{data} valid_status_codes=${valid_status_codes} 980 981 ${ipv6_staticdef_gateway}= Get IPv6 Static Default Gateway 982 983 ${ipv6_static_def_gw_list}= Create List 984 FOR ${ipv6_staticdef_gateway} IN @{ipv6_staticdef_gateway} 985 ${value}= Get From Dictionary ${ipv6_staticdef_gateway} Address 986 Append To List ${ipv6_static_def_gw_list} ${value} 987 END 988 989 Should Contain ${ipv6_static_def_gw_list} ${new_static_def_gw} 990 # Verify if old static default gateway address is erased. 991 Should Not Contain ${ipv6_static_def_gw_list} ${ipv6_gw_addr} 992 993 994Delete IPv6 Static Default Gateway 995 [Documentation] Delete IPv6 static default gateway on BMC. 996 [Arguments] ${ipv6_gw_addr} 997 ... ${valid_status_codes}=[${HTTP_OK},${HTTP_ACCEPTED},${HTTP_NO_CONTENT}] 998 999 # Description of argument(s): 1000 # ipv6_gw_addr IPv6 Static Default Gateway address to be deleted. 1001 # valid_status_codes Expected return code from patch operation 1002 # (e.g. "200"). 1003 1004 ${patch_list}= Create List 1005 ${empty_dict}= Create Dictionary 1006 1007 ${ipv6_static_def_gw_list}= Create List 1008 @{ipv6_static_defgw_configurations}= Get IPv6 Static Default Gateway 1009 1010 FOR ${ipv6_staticdef_gateway} IN @{ipv6_static_defgw_configurations} 1011 ${value}= Get From Dictionary ${ipv6_staticdef_gateway} Address 1012 Append To List ${ipv6_static_def_gw_list} ${value} 1013 END 1014 1015 ${defgw_found}= Run Keyword And Return Status List Should Contain Value 1016 ... ${ipv6_static_def_gw_list} ${ipv6_gw_addr} msg=${ipv6_gw_addr} does not exist on BMC 1017 Skip If ${defgw_found} == ${False} ${ipv6_gw_addr} does not exist on BMC 1018 1019 FOR ${ipv6_static_def_gw} IN @{ipv6_static_defgw_configurations} 1020 IF '${ipv6_static_def_gw['Address']}' == '${ipv6_gw_addr}' 1021 Append To List ${patch_list} ${null} 1022 ELSE 1023 Append To List ${patch_list} ${empty_dict} 1024 END 1025 END 1026 1027 # Run patch command only if given IP is found on BMC. 1028 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list} 1029 1030 Redfish.Patch ${REDFISH_NW_ETH_IFACE}${ethernet_interface} body=&{data} 1031 ... valid_status_codes=${valid_status_codes} 1032 1033 ${data}= Create Dictionary IPv6StaticDefaultGateways=${patch_list} 1034 1035 @{ipv6_static_defgw_configurations}= Get IPv6 Static Default Gateway 1036 Should Not Contain Match ${ipv6_static_defgw_configurations} ${ipv6_gw_addr} 1037 ... msg=IPv6 Static default gateway does not exist. 1038 1039 1040Check Coexistence Of Linklocalv6 And Static IPv6 1041 [Documentation] Verify both linklocalv6 and static IPv6 exist. 1042 1043 # Verify the address origin contains static and linklocal. 1044 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal 1045 1046 Should Match Regexp ${ipv6_linklocal_addr} ${linklocal_addr_format} 1047 Should Contain ${ipv6_addressorigin_list} Static 1048 1049 1050Check Coexistence Of Static IPv6 And SLAAC 1051 [Documentation] Verify both static IPv6 and SLAAC coexist. 1052 1053 # Verify the address origin contains static and slaac. 1054 @{ipv6_addressorigin_list} ${ipv6_static_addr}= 1055 ... Get Address Origin List And Address For Type Static 1056 1057 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= 1058 ... Get Address Origin List And Address For Type SLAAC 1059 1060 1061Check Coexistence Of Link Local And SLAAC 1062 [Documentation] Verify both link local and SLAAC coexist. 1063 1064 # Verify the address origin contains SLAAC and link local. 1065 @{ipv6_addressorigin_list} ${ipv6_link_local_addr}= 1066 ... Get Address Origin List And Address For Type LinkLocal 1067 1068 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= 1069 ... Get Address Origin List And Address For Type SLAAC 1070 1071 Should Match Regexp ${ipv6_link_local_addr} ${linklocal_addr_format} 1072 1073 1074Check Coexistence Of Link Local And DHCPv6 1075 [Documentation] Verify both link local and dhcpv6 coexist. 1076 1077 # Verify the address origin contains dhcpv6 and link local. 1078 @{ipv6_address_origin_list} ${ipv6_link_local_addr}= 1079 ... Get Address Origin List And Address For Type LinkLocal 1080 1081 @{ipv6_address_origin_list} ${ipv6_dhcpv6_addr}= 1082 ... Get Address Origin List And Address For Type DHCPv6 1083 1084 Should Match Regexp ${ipv6_link_local_addr} ${linklocal_addr_format} 1085 1086 1087Check If Linklocal Address Is In Correct Format 1088 [Documentation] Linklocal address has network part fe80 and host part EUI64. 1089 1090 # Fetch the linklocal address. 1091 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= Get Address Origin List And Address For Type LinkLocal 1092 1093 # Follow EUI64 from MAC. 1094 ${system_mac}= Get BMC MAC Address 1095 ${split_octets}= Split String ${system_mac} : 1096 ${first_octet}= Evaluate int('${split_octets[0]}', 16) 1097 ${flipped_hex}= Evaluate format(${first_octet} ^ 2, '02x') 1098 ${grp1}= Evaluate re.sub(r'^0+', '', '${flipped_hex}${split_octets[1]}') modules=re 1099 ${grp2}= Evaluate re.sub(r'^0+', '', '${split_octets[2]}ff') modules=re 1100 ${grp3}= Evaluate re.sub(r'^0+', '', '${split_octets[4]}${split_octets[5]}') modules=re 1101 ${linklocal}= Set Variable fe80::${grp1}:${grp2}:fe${split_octets[3]}:${grp3} 1102 1103 # Verify the linklocal obtained is the same as on the machine. 1104 Should Be Equal ${linklocal} ${ipv6_linklocal_addr} 1105 1106 1107Check BMC Gets SLAAC Address 1108 [Documentation] Check BMC gets slaac address. 1109 1110 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= Get Address Origin List And Address For Type SLAAC 1111 1112 1113Get The Initial DHCPv6 Setting On Each Interface 1114 [Documentation] Get the initial DHCPv6 setting of each interface. 1115 [Arguments] ${channel_number} 1116 1117 # Description of the argument(s): 1118 # channel_number Channel number 1 or 2. 1119 1120 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']} 1121 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 1122 ${initial_dhcpv6_iface}= Get From Dictionary ${resp.dict} DHCPv6 1123 IF ${channel_number}==${1} 1124 Set Test Variable ${dhcpv6_channel_1} ${initial_dhcpv6_iface['OperatingMode']} 1125 ELSE 1126 Set Test Variable ${dhcpv6_channel_2} ${initial_dhcpv6_iface['OperatingMode']} 1127 END 1128 1129 1130Get The Initial DHCPv6 Settings 1131 [Documentation] Get the initial DHCPv6 settings of both the interfaces. 1132 1133 Get The Initial DHCPv6 Setting On Each Interface ${1} 1134 Get The Initial DHCPv6 Setting On Each Interface ${2} 1135 1136 1137Get The Initial SLAAC Settings 1138 [Documentation] Get the initial SLAAC settings of both the interfaces. 1139 1140 Get The Initial SLAAC Setting On Each Interface ${1} 1141 Get The Initial SLAAC Setting On Each Interface ${2} 1142 1143 1144Get The Initial SLAAC Setting On Each Interface 1145 [Documentation] Get the initial SLAAC setting of the interface. 1146 [Arguments] ${channel_number} 1147 1148 # Description of the argument(s): 1149 # channel_number Channel number 1 or 2. 1150 1151 ${ethernet_interface}= Set Variable ${active_channel_config['${channel_number}']['name']} 1152 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${ethernet_interface} 1153 ${initial_slaac_iface}= Get From Dictionary ${resp.dict} StatelessAddressAutoConfig 1154 IF ${channel_number}==${1} 1155 Set Test Variable ${slaac_channel_1} ${initial_slaac_iface['IPv6AutoConfigEnabled']} 1156 ELSE 1157 Set Test Variable ${slaac_channel_2} ${initial_slaac_iface['IPv6AutoConfigEnabled']} 1158 END 1159 1160 1161Get Address Origin List And IPv4 or IPv6 Address 1162 [Documentation] Get address origin list and address for type. 1163 [Arguments] ${ip_address_type} ${channel_number}=${CHANNEL_NUMBER} 1164 1165 # Description of the argument(s): 1166 # ip_address_type Type of IPv4 or IPv6 address to be checked. 1167 # channel_number Channel number 1(eth0) or 2(eth1). 1168 1169 ${resp}= Redfish.Get ${REDFISH_NW_ETH_IFACE}${active_channel_config['${channel_number}']['name']} 1170 @{ip_addresses}= Get From Dictionary ${resp.dict} ${ip_address_type} 1171 1172 ${ip_addressorigin_list}= Create List 1173 ${ip_addr_list}= Create List 1174 FOR ${ip_address} IN @{ip_addresses} 1175 ${ip_addressorigin}= Get From Dictionary ${ip_address} AddressOrigin 1176 Append To List ${ip_addressorigin_list} ${ip_addressorigin} 1177 Append To List ${ip_addr_list} ${ip_address['Address']} 1178 END 1179 RETURN ${ip_addressorigin_list} ${ip_addr_list} 1180 1181 1182Verify All The Addresses Are Intact 1183 [Documentation] Verify all the addresses and address origins remain intact. 1184 [Arguments] ${channel_number}=${CHANNEL_NUMBER} 1185 ... ${initial_ipv4_addressorigin_list}=${initial_ipv4_addressorigin_list} 1186 ... ${initial_ipv4_addr_list}=${initial_ipv4_addr_list} 1187 1188 # Description of argument(s): 1189 # channel_number Channel number 1(eth0) or 2(eth1). 1190 # initial_ipv4_addressorigin_list Initial IPv4 address origin list. 1191 # initial_ipv4_addr_list Initial IPv4 address list. 1192 1193 # Verify that it will not impact the IPv4 configuration. 1194 Sleep ${NETWORK_TIMEOUT} 1195 Wait For Host To Ping ${OPENBMC_HOST} ${NETWORK_TIMEOUT} 1196 1197 # IPv6 Linklocal address must be present. 1198 @{ipv6_addressorigin_list} ${ipv6_linklocal_addr}= 1199 ... Get Address Origin List And Address For Type LinkLocal ${channel_number} 1200 1201 # IPv4 addresses must remain intact. 1202 ${ipv4_addressorigin_list} ${ipv4_addr_list}= 1203 ... Get Address Origin List And IPv4 or IPv6 Address IPv4Addresses ${channel_number} 1204 1205 Should be Equal ${initial_ipv4_addressorigin_list} ${ipv4_addressorigin_list} 1206 Should be Equal ${initial_ipv4_addr_list} ${ipv4_addr_list} 1207 1208 1209Get Interface ID Of IPv6 1210 [Documentation] Get interface id of IPv6 address. 1211 [Arguments] ${ipv6_address} 1212 1213 # Description of the argument(s): 1214 # ${ipv6_address} IPv6 Address to extract the last 4 hextets. 1215 1216 # Last 64 bits of SLAAC and Linklocal must be the same. 1217 # Sample IPv6 network configurations. 1218 #"IPv6AddressPolicyTable": [], 1219 # "IPv6Addresses": [ 1220 # { 1221 # "Address": "fe80::xxxx:xxxx:xxxx:xxxx", 1222 # "AddressOrigin": "LinkLocal", 1223 # "AddressState": null, 1224 # "PrefixLength": xx 1225 # } 1226 # ], 1227 # { 1228 # "Address": "2002:xxxx:xxxx:xxxx:xxxx", 1229 # "AddressOrigin": "SLAAC", 1230 # "PrefixLength": 64 1231 # } 1232 # ], 1233 1234 ${split_ip_address}= Split String ${ipv6_address} : 1235 ${missing_ip}= Evaluate 8 - len(${split_ip_address}) + 1 1236 ${expanded_ip}= Create List 1237 1238 FOR ${hextet} IN @{split_ip_address} 1239 IF '${hextet}' == '' 1240 FOR ${i} IN RANGE ${missing_ip} 1241 Append To List ${expanded_ip} 0000 1242 END 1243 ELSE 1244 Append To List ${expanded_ip} ${hextet} 1245 END 1246 END 1247 ${interface_id}= Evaluate ':'.join(${expanded_ip}[-4:]) 1248 RETURN ${interface_id} 1249 1250 1251Set And Verify SLAAC Property On Both Interfaces 1252 [Documentation] Set and verify SLAAC property on both interfaces. 1253 [Arguments] ${slaac_value_1} ${slaac_value_2} 1254 1255 # Description of the argument(s): 1256 # slaac_value_1 SLAAC value for channel 1. 1257 # slaac_value_2 SLAAC value for channel 2. 1258 1259 Set SLAAC Configuration State And Verify ${slaac_value_1} [${HTTP_OK}] ${1} 1260 Set SLAAC Configuration State And Verify ${slaac_value_2} [${HTTP_OK}] ${2} 1261 1262 Sleep 30s 1263 1264 # Check SLAAC Settings for eth0. 1265 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= 1266 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${1} 1267 IF "${slaac_value_1}" == "${True}" 1268 Should Not Be Empty ${ipv6_slaac_addr} SLAAC 1269 ELSE 1270 Should Not Contain ${ipv6_addressorigin_list} SLAAC 1271 END 1272 1273 # Check SLAAC Settings for eth1. 1274 @{ipv6_addressorigin_list} ${ipv6_slaac_addr}= 1275 ... Get Address Origin List And IPv4 or IPv6 Address IPv6Addresses ${2} 1276 IF "${slaac_value_2}" == "${True}" 1277 Should Not Be Empty ${ipv6_slaac_addr} SLAAC 1278 ELSE 1279 Should Not Contain ${ipv6_addressorigin_list} SLAAC 1280 END 1281 1282 Verify All The Addresses Are Intact ${1} 1283 Verify All The Addresses Are Intact ${2} 1284 ... ${eth1_initial_ipv4_addressorigin_list} ${eth1_initial_ipv4_addr_list} 1285 1286