diff --git a/openpower/ext_interfaces/test_vmi.robot b/openpower/ext_interfaces/test_vmi.robot
index 8a465d1..b8da632 100644
--- a/openpower/ext_interfaces/test_vmi.robot
+++ b/openpower/ext_interfaces/test_vmi.robot
@@ -28,18 +28,6 @@
 &{ENABLE_DHCP}            DHCPv4=&{DHCP_ENABLED}
 &{DISABLE_DHCP}           DHCPv4=&{DHCP_DISABLED}
 
-&{SLAAC_ENABLED}          IPv6AutoConfigEnabled=${True}
-&{SLAAC_DISABLED}         IPv6AutoConfigEnabled=${False}
-
-&{ENABLE_SLAAC}           StatelessAddressAutoConfig=&{SLAAC_ENABLED}
-&{DISABLE_SLAAC}          StatelessAddressAutoConfig=&{SLAAC_DISABLED}
-
-&{DHCPv6_ENABLED}         OperatingMode=Enabled
-&{DHCPv6_DISABLED}        OperatingMode=Disabled
-
-&{ENABLE_DHCPv6}          DHCPv6=&{DHCPv6_ENABLED}
-&{DISABLE_DHCPv6}         DHCPv6=&{DHCPv6_DISABLED}
-
 ${default}                0.0.0.0
 ${default_ipv6addr}       ::
 ${prefix_length}          ${64}
@@ -662,6 +650,20 @@
     Should Be Equal  ${vmi_ipv6_gateway}  ${test_vmi_ipv6gateway}
 
 
+Delete VMI Static IPv6 Address And Verify
+    [Documentation]  Delete VMI static IPv6 address and verify address is erased.
+    [Tags]  Delete_VMI_Static_IPv6_Address_And_Verify
+    [Setup]  Set Static VMI IPv6 Address  ${test_vmi_ipv6addr}  ${prefix_length}
+
+    # Delete VMI static IPv6 address.
+    Delete VMI IPv6 Static Address
+
+    # Verify VMI static IPv6 address is erased.
+    ${vmi_ipv6addr}=  Verify VMI IPv6 Address  Static
+    Should Not Be Equal  ${vmi_ipv6addr["Address"]}  ${test_vmi_ipv6addr}
+    Should Be Equal  ${vmi_ipv6addr["Address"]}  ${default_ipv6addr}
+
+
 *** Keywords ***
 
 Suite Setup Execution
@@ -820,110 +822,3 @@
     ...  ${vmi_network_conf["IPv4_Gateway"]}  ${vmi_network_conf["IPv4_SubnetMask"]}
     Delete All Redfish Sessions
     Redfish.Logout
-
-
-Set VMI SLAACv6 Origin
-    [Documentation]  Set VMI SLAACv6 origin.
-    [Arguments]  ${slaac_enabled}=${False}  ${valid_status_code}=${HTTP_ACCEPTED}
-    ...  ${interface}=${ethernet_interface}
-
-    # Description of argument(s):
-    # slaacv6_enabled    True if user wants to enable SLAACv6. Default is Static, hence value is set to False.
-    # valid_status_code  Expected valid status code from PATCH request. Default is HTTP_OK.
-    # interface          VMI interface (eg. eth0 or eth1).
-
-    ${data}=  Set Variable If  ${slaac_enabled} == ${False}  ${DISABLE_SLAAC}  ${ENABLE_SLAAC}
-    ${resp}=  Redfish.Patch
-    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-    ...  body=${data}  valid_status_codes=[${valid_status_code}]
-
-    Sleep  ${wait_time}
-    Return From Keyword If  ${valid_status_code} != ${HTTP_ACCEPTED}
-    ${resp}=  Redfish.Get
-    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-    Should Be Equal  ${resp.dict["StatelessAddressAutoConfig"]["IPv6AutoConfigEnabled"]}  ${slaac_enabled}
-
-
-Verify VMI IPv6 Address
-    [Documentation]  Verify VMI IPv6 address configurations.
-    [Arguments]  ${ipv6_origin}  ${interface}=${ethernet_interface}
-
-    # Description of argument(s):
-    # ipv6_origin     Origin of IPv6 address eg. Static or DHCPv6 or SLAAC.
-    # interface       VMI interface (eg. eth0 or eth1).
-
-    ${resp}=  Redfish.Get  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-
-    @{vmi_ipv6_configurations}=  Get From Dictionary  ${resp.dict}  IPv6Addresses
-    ${vmi_ipv6_config}=  Get From List  ${vmi_ipv6_configurations}  0
-    Should Not Be Empty  ${vmi_ipv6_config["Address"]}
-    Should Be Equal As Strings   ${vmi_ipv6_config["AddressOrigin"]}  ${ipv6_origin}
-    RETURN  &{vmi_ipv6_config}
-
-
-Set VMI DHCPv6 Property
-    [Documentation]  Set VMI DHCPv6 attribute.
-    [Arguments]  ${dhcpv6_operatingmode}=${Disabled}  ${valid_status_code}=${HTTP_ACCEPTED}
-    ...  ${interface}=${ethernet_interface}
-
-    # Description of argument(s):
-    # dhcpv6_operatingmode    Enabled if user wants to enable DHCPv6.
-    # ...                     Default is Static, hence value is set to Disabled.
-    # valid_status_code       Expected valid status code from PATCH request. Default is HTTP_OK.
-    # interface               VMI interface (eg. eth0 or eth1).
-
-    ${data}=  Set Variable If  '${dhcpv6_operatingmode}' == 'Disabled'  ${DISABLE_DHCPv6}  ${ENABLE_DHCPv6}
-    ${resp}=  Redfish.Patch
-    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-    ...  body=${data}  valid_status_codes=[${valid_status_code}]
-
-    Sleep  ${wait_time}
-    Return From Keyword If  ${valid_status_code} != ${HTTP_ACCEPTED}
-    ${resp}=  Redfish.Get
-    ...  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-    Should Be Equal  ${resp.dict["DHCPv6"]["OperatingMode"]}  ${dhcpv6_operatingmode}
-
-
-Set Static VMI IPv6 Address
-    [Documentation]  Add static VMI IPv6 address.
-    [Arguments]  ${vmi_ipv6_addr}  ${prefix_len}  ${valid_status_codes}=${HTTP_ACCEPTED}
-    ...  ${interface}=${ethernet_interface}
-
-    # Description of argument(s):
-    # vmi_ipv6_addr       VMI IPv6 address to be added.
-    # prefix_len          Prefix length for the VMI IPv6 to be added.
-    # valid_status_codes  Expected valid status code from PATCH request.
-    # interface           VMI interface (eg. eth0 or eth1).
-
-    ${prefix_length}=  Convert To Integer  ${prefix_len}
-    ${empty_dict}=  Create Dictionary
-    ${vmi_ipv6_data}=  Create Dictionary  Address=${vmi_ipv6_addr}
-    ...  PrefixLength=${prefix_length}
-
-    ${patch_list}=  Create List
-
-    Append To List  ${patch_list}  ${vmi_ipv6_data}
-    ${data}=  Create Dictionary  IPv6StaticAddresses=${patch_list}
-
-    ${active_channel_config}=  Get Active Channel Config
-    ${ethernet_interface}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
-
-    Redfish.patch  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-    ...  body=&{data}  valid_status_codes=[${valid_status_codes}]
-
-
-Set VMI IPv6 Static Default Gateway
-    [Documentation]  Set VMI IPv6 static default gateway address.
-    [Arguments]  ${vmi_staticipv6_gateway}  ${valid_status_codes}=${HTTP_ACCEPTED}
-    ...  ${interface}=${ethernet_interface}
-
-    # Description of argument(s):
-    # vmi_staticipv6_gateway   VMI static IPv6 default gateway address.
-    # valid_status_codes       Expected valid status code from PATCH request.
-    # interface                VMI interface (eg. eth0 or eth1).
-
-    ${patch_list}=  Create List  ${vmi_staticipv6_gateway}
-    ${data}=  Create Dictionary  IPv6StaticDefaultGateways=${patch_list}
-
-    Redfish.patch  /redfish/v1/Systems/hypervisor/EthernetInterfaces/${interface}
-    ...  body=&{data}  valid_status_codes=[${valid_status_codes}]
