IPv6 libraries and base code

Signed-off-by: Prashanth Katti <prkatti1@in.ibm.com>
Change-Id: I0bffbe24582f8adcf69755f318e3c2686eaab022
diff --git a/redfish/managers/test_bmc_ipv6.robot b/redfish/managers/test_bmc_ipv6.robot
new file mode 100644
index 0000000..87b8a30
--- /dev/null
+++ b/redfish/managers/test_bmc_ipv6.robot
@@ -0,0 +1,138 @@
+*** Settings ***
+Documentation  Network interface IPv6 configuration and verification
+               ...  tests.
+
+Resource       ../../lib/bmc_redfish_resource.robot
+Resource       ../../lib/openbmc_ffdc.robot
+Resource       ../../lib/bmc_ipv6_utils.robot
+Library        ../../lib/bmc_network_utils.py
+Library        Collections
+
+Test Setup     Test Setup Execution
+Test Teardown  Test Teardown Execution
+
+
+*** Variables ***
+${test_ipv6_addr}          2001:db8:3333:4444:5555:6666:7777:8888
+${test_ipv6_invalid_addr}  2001:db8:3333:4444:5555:6666:7777:JJJJ
+
+# Valid prefix length is a intiger ranges from 1 to 128.
+${test_prefix_lenght}     64
+
+
+*** Test Cases ***
+
+Get IPv6 Address And Verify
+    [Documentation]  Get IPv6 Address And Verify.
+    [Tags]  Get_IPv6_Address_And_Verify
+
+    FOR  ${ipv6_network_configuration}  IN  @{ipv6_network_configurations}
+      Verify IPv6 On BMC  ${ipv6_network_configuration['Address']}
+    END
+
+
+*** Keywords ***
+
+Test Setup Execution
+    [Documentation]  Test setup execution.
+
+    Redfish.Login
+
+    @{ipv6_network_configurations}=  Get IPv6 Network Configuration
+    Set Test Variable  @{ipv6_network_configurations}
+
+    # Get BMC IPv6 address and prefix length.
+    ${ipv6_data}=  Get BMC IPv6 Info
+    Set Test Variable  ${ipv6_data}
+
+
+Test Teardown Execution
+    [Documentation]  Test teardown execution.
+
+    FFDC On Test Case Fail
+    Redfish.Logout
+
+
+Get IPv6 Network Configuration
+    [Documentation]  Get Ipv6 network configuration.
+    # Sample output:
+    # {
+    #  "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces/eth0",
+    #  "@odata.type": "#EthernetInterface.v1_4_1.EthernetInterface",
+    #   "DHCPv4": {
+    #    "DHCPEnabled": false,
+    #    "UseDNSServers": false,
+    #    "UseDomainName": true,
+    #    "UseNTPServers": false
+    #  },
+    #  "DHCPv6": {
+    #    "OperatingMode": "Disabled",
+    #    "UseDNSServers": false,
+    #    "UseDomainName": true,
+    #    "UseNTPServers": false
+    #  },
+    #  "Description": "Management Network Interface",
+    #  "FQDN": "localhost",
+    #  "HostName": "localhost",
+    #  "IPv4Addresses": [
+    #    {
+    #      "Address": "xx.xx.xx.xx",
+    #      "AddressOrigin": "Static",
+    #      "Gateway": "xx.xx.xx.1",
+    #      "SubnetMask": "xx.xx.xx.0"
+    #    },
+    #    {
+    #      "Address": "169.254.xx.xx",
+    #      "AddressOrigin": "IPv4LinkLocal",
+    #      "Gateway": "0.0.0.0",
+    #      "SubnetMask": "xx.xx.0.0"
+    #    },
+    #  ],
+    #  "IPv4StaticAddresses": [
+    #    {
+    #      "Address": "xx.xx.xx.xx",
+    #      "AddressOrigin": "Static",
+    #      "Gateway": "xx.xx.xx.1",
+    #      "SubnetMask": "xx.xx.0.0"
+    #    }
+    # }
+    #  ],
+    #  "IPv6AddressPolicyTable": [],
+    #  "IPv6Addresses": [
+    #    {
+    #      "Address": "fe80::xxxx:xxxx:xxxx:xxxx",
+    #      "AddressOrigin": "LinkLocal",
+    #      "AddressState": null,
+    #      "PrefixLength": xx
+    #    }
+    #  ],
+    #  "IPv6DefaultGateway": "",
+    #  "IPv6StaticAddresses": [
+    #    { "Address": "xxxx:xxxx:xxxx:xxxx::xxxx",
+    #      "AddressOrigin": "Static",
+    #      "AddressState": null,
+    #      "PrefixLength": xxx
+    #    }
+    #  ],
+    #  "Id": "eth0",
+    #  "InterfaceEnabled": true,
+    #  "LinkStatus": "LinkUp",
+    #  "MACAddress": "xx:xx:xx:xx:xx:xx",
+    #  "Name": "Manager Ethernet Interface",
+    #  "NameServers": [],
+    #  "SpeedMbps": 0,
+    #  "StaticNameServers": [],
+    #  "Status": {
+    #    "Health": "OK",
+    #    "HealthRollup": "OK",
+    #    "State": "Enabled"
+    #  },
+    #  "VLANs": {
+    #    "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces/eth0/VLANs"
+
+
+    ${active_channel_config}=  Get Active Channel Config
+    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH_IFACE}${active_channel_config['${CHANNEL_NUMBER}']['name']}
+
+    @{ipv6_network_configurations}=  Get From Dictionary  ${resp.dict}  IPv6StaticAddresses
+    [Return]  @{ipv6_network_configurations}