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