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
8Library        ../../lib/bmc_network_utils.py
9Library        Collections
10
11Test Setup     Test Setup Execution
12Test Teardown  Test Teardown Execution
13
14
15*** Variables ***
16${test_ipv6_addr}          2001:db8:3333:4444:5555:6666:7777:8888
17${test_ipv6_invalid_addr}  2001:db8:3333:4444:5555:6666:7777:JJJJ
18
19# Valid prefix length is a intiger ranges from 1 to 128.
20${test_prefix_lenght}     64
21
22
23*** Test Cases ***
24
25Get IPv6 Address And Verify
26    [Documentation]  Get IPv6 Address And Verify.
27    [Tags]  Get_IPv6_Address_And_Verify
28
29    FOR  ${ipv6_network_configuration}  IN  @{ipv6_network_configurations}
30      Verify IPv6 On BMC  ${ipv6_network_configuration['Address']}
31    END
32
33
34Get PrefixLength And Verify
35    [Documentation]  Get IPv6 prefix length and verify.
36    [Tags]  Get_PrefixLength_And_Verify
37
38    FOR  ${ipv6_network_configuration}  IN  @{ipv6_network_configurations}
39      Verify IPv6 On BMC  ${ipv6_network_configuration['PrefixLength']}
40    END
41
42
43Get IPv6 Default Gateway And Verify
44    [Documentation]  Get IPv6 default gatway and verify.
45
46    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
47    ${ipv6_gateway}=  Get From Dictionary  ${resp.dict}  IPv6DefaultGateway
48    Verify IPv6 Default Gateway On BMC  ${ipv6_gateway}
49
50
51*** Keywords ***
52
53Test Setup Execution
54    [Documentation]  Test setup execution.
55
56    Redfish.Login
57
58    @{ipv6_network_configurations}=  Get IPv6 Network Configuration
59    Set Test Variable  @{ipv6_network_configurations}
60
61    # Get BMC IPv6 address and prefix length.
62    ${ipv6_data}=  Get BMC IPv6 Info
63    Set Test Variable  ${ipv6_data}
64
65
66Test Teardown Execution
67    [Documentation]  Test teardown execution.
68
69    FFDC On Test Case Fail
70    Redfish.Logout
71
72
73Get IPv6 Network Configuration
74    [Documentation]  Get Ipv6 network configuration.
75    # Sample output:
76    # {
77    #  "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces/eth0",
78    #  "@odata.type": "#EthernetInterface.v1_4_1.EthernetInterface",
79    #   "DHCPv4": {
80    #    "DHCPEnabled": false,
81    #    "UseDNSServers": false,
82    #    "UseDomainName": true,
83    #    "UseNTPServers": false
84    #  },
85    #  "DHCPv6": {
86    #    "OperatingMode": "Disabled",
87    #    "UseDNSServers": false,
88    #    "UseDomainName": true,
89    #    "UseNTPServers": false
90    #  },
91    #  "Description": "Management Network Interface",
92    #  "FQDN": "localhost",
93    #  "HostName": "localhost",
94    #  "IPv4Addresses": [
95    #    {
96    #      "Address": "xx.xx.xx.xx",
97    #      "AddressOrigin": "Static",
98    #      "Gateway": "xx.xx.xx.1",
99    #      "SubnetMask": "xx.xx.xx.0"
100    #    },
101    #    {
102    #      "Address": "169.254.xx.xx",
103    #      "AddressOrigin": "IPv4LinkLocal",
104    #      "Gateway": "0.0.0.0",
105    #      "SubnetMask": "xx.xx.0.0"
106    #    },
107    #  ],
108    #  "IPv4StaticAddresses": [
109    #    {
110    #      "Address": "xx.xx.xx.xx",
111    #      "AddressOrigin": "Static",
112    #      "Gateway": "xx.xx.xx.1",
113    #      "SubnetMask": "xx.xx.0.0"
114    #    }
115    # }
116    #  ],
117    #  "IPv6AddressPolicyTable": [],
118    #  "IPv6Addresses": [
119    #    {
120    #      "Address": "fe80::xxxx:xxxx:xxxx:xxxx",
121    #      "AddressOrigin": "LinkLocal",
122    #      "AddressState": null,
123    #      "PrefixLength": xx
124    #    }
125    #  ],
126    #  "IPv6DefaultGateway": "",
127    #  "IPv6StaticAddresses": [
128    #    { "Address": "xxxx:xxxx:xxxx:xxxx::xxxx",
129    #      "AddressOrigin": "Static",
130    #      "AddressState": null,
131    #      "PrefixLength": xxx
132    #    }
133    #  ],
134    #  "Id": "eth0",
135    #  "InterfaceEnabled": true,
136    #  "LinkStatus": "LinkUp",
137    #  "MACAddress": "xx:xx:xx:xx:xx:xx",
138    #  "Name": "Manager Ethernet Interface",
139    #  "NameServers": [],
140    #  "SpeedMbps": 0,
141    #  "StaticNameServers": [],
142    #  "Status": {
143    #    "Health": "OK",
144    #    "HealthRollup": "OK",
145    #    "State": "Enabled"
146    #  },
147    #  "VLANs": {
148    #    "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces/eth0/VLANs"
149
150
151    ${active_channel_config}=  Get Active Channel Config
152    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH_IFACE}${active_channel_config['${CHANNEL_NUMBER}']['name']}
153
154    @{ipv6_network_configurations}=  Get From Dictionary  ${resp.dict}  IPv6StaticAddresses
155    [Return]  @{ipv6_network_configurations}
156