diff --git a/network/test_bmc_network.robot b/network/test_bmc_network.robot
deleted file mode 100644
index 6c738e2..0000000
--- a/network/test_bmc_network.robot
+++ /dev/null
@@ -1,567 +0,0 @@
-*** Settings ***
-Documentation  Network interface and functionalities test module on BMC.
-
-Resource  ../lib/ipmi_client.robot
-Resource  ../lib/rest_client.robot
-Resource  ../lib/utils.robot
-Resource  ../lib/bmc_network_utils.robot
-Resource  ../lib/openbmc_ffdc.robot
-
-Force Tags  Network_Test
-
-Library  String
-Library  SSHLibrary
-
-Test Setup     Test Setup Execution
-Test Teardown  Test Teardown Execution
-
-*** Variables ***
-
-${alpha_ip}          xx.xx.xx.xx
-
-# 10.x.x.x series is a private IP address range and does not exist in
-# our network, so this is chosen to avoid IP conflict.
-
-${valid_ip}          10.6.6.6
-${valid_ip2}         10.6.6.7
-@{valid_ips}         ${valid_ip}  ${valid_ip2}
-${valid_gateway}     10.6.6.1
-${valid_prefix_len}  ${24}
-${broadcast_ip}      10.6.6.255
-${loopback_ip}       127.0.0.1
-${multicast_ip}      224.6.6.255
-${out_of_range_ip}   10.6.6.256
-
-# There will be 4 octets in IP address (e.g. xx.xx.xx.xx)
-# but trying to configure xx.xx.xx
-
-${less_octet_ip}     10.3.36
-
-# For the address 10.6.6.6, the 10.6.6.0 portion describes the
-# network ID and the 6 describe the host.
-
-${network_id}        10.6.6.0
-${hex_ip}            0xa.0xb.0xc.0xd
-${negative_ip}       10.-6.-6.6
-
-*** Test Cases ***
-
-Get BMC IPv4 Address And Verify
-    [Documentation]  Get BMC IPv4 address and verify.
-    [Tags]  Get_BMC_IPv4_Address_And_Verify
-
-    :FOR  ${ipv4_uri}  IN  @{IPv4_URI_List}
-    \  ${ipv4_addr}=  Read Attribute  ${ipv4_uri}  Address
-    \  Validate IP on BMC  ${ipv4_addr}
-
-Verify IPv4 Prefix Length
-    [Documentation]  Get prefix length and verify.
-    [Tags]  Verify_IPv4_Prefix_Length
-
-    :FOR  ${ipv4_uri}  IN  @{IPv4_URI_List}
-    \  ${prefix_length}=  Read Attribute  ${ipv4_uri}  PrefixLength
-    \  Validate Prefix Length On BMC  ${prefix_length}
-
-Verify Gateway Address
-    [Documentation]  Get gateway address and verify.
-    [Tags]  Verify_Gateway_Address
-
-    :FOR  ${ipv4_uri}  IN  @{IPv4_URI_List}
-    \  ${gateway_ip}=  Read Attribute  ${ipv4_uri}  Gateway
-    \  Validate Route On BMC  ${gateway_ip}
-
-Verify MAC Address
-    [Documentation]  Get MAC address and verify.
-    [Tags]  Verify_MAC_Address
-    ${macaddr}=  Read Attribute  ${NETWORK_MANAGER}eth0  MACAddress
-    Validate MAC On BMC  ${macaddr}
-
-Add New Valid IP And Verify
-    [Documentation]  Add new IP address and verify.
-    [Tags]  Add_New_Valid_IP_And_Verify
-
-    Configure Network Settings  ${valid_ip}  ${valid_prefix_len}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-    Verify IP Address Via REST And Delete  ${valid_ip}
-
-Configure Invalid IP String
-    [Documentation]  Configure invalid IP address which is a string.
-    [Tags]  Configure_Invalid_IP_String
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP        Expected_Result
-    ${alpha_ip}   ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Out Of Range IP
-    [Documentation]  Configure out-of-range IP address.
-    [Tags]  Configure_Out_Of_Range_IP
-    [Template]  Configure Network Settings
-
-    # IP Address        Prefix_length        Gateway_IP        Expected_Result
-    ${out_of_range_ip}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Broadcast IP
-    [Documentation]  Configure broadcast IP address.
-    [Tags]  Configure_Broadcast_IP
-    [Template]  Configure Network Settings
-
-    # IP Address     Prefix_length        Gateway_IP        Expected_Result
-    ${broadcast_ip}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Multicast IP
-    [Documentation]  Configure multicast IP address.
-    [Tags]  Configure_Multicast_IP
-    [Template]  Configure Network Settings
-
-    # IP Address     Prefix_length        Gateway_IP        Expected_Result
-    ${multicast_ip}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Loopback IP
-    [Documentation]  Configure loopback IP address.
-    [Tags]  Configure_Loopback_IP
-    [Template]  Configure Network Settings
-
-    # IP Address    Prefix_length        Gateway_IP        Expected_Result
-    ${loopback_ip}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Network ID
-    [Documentation]  Configure network ID IP address.
-    [Tags]  Configure_Network_ID
-    [Template]  Configure Network Settings
-
-    # IP Address   Prefix_length        Gateway_IP        Expected_Result
-    ${network_id}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Less Octet IP
-    [Documentation]  Configure less octet IP address.
-    [Tags]  Configure_Less_Octet_IP
-    [Template]  Configure Network Settings
-
-    # IP Address      Prefix_length        Gateway_IP        Expected_Result
-    ${less_octet_ip}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Empty IP
-    [Documentation]  Configure less octet IP address.
-    [Tags]  Configure_Empty_IP
-    [Template]  Configure Network Settings
-
-    # IP Address   Prefix_length        Gateway_IP        Expected_Result
-    ${EMPTY}       ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Special Char IP
-    [Documentation]  Configure invalid IP address containing special chars.
-    [Tags]  Configure_Special_Char_IP
-    [Template]  Configure Network Settings
-
-    # IP Address     Prefix_length         Gateway_IP        Expected_Result
-    @@@.%%.44.11     ${valid_prefix_len}   ${valid_gateway}  error
-
-
-Configure Hexadecimal IP
-    [Documentation]  Configure invalid IP address containing hex value.
-    [Tags]  Configure_Hexadecimal_IP
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP        Expected_Result
-    ${hex_ip}     ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Configure Negative Octet IP
-    [Documentation]  Configure invalid IP address containing negative octet.
-    [Tags]  Configure_Negative_Octet_IP
-    [Template]  Configure Network Settings
-
-    # IP Address    Prefix_length        Gateway_IP        Expected_Result
-    ${negative_ip}  ${valid_prefix_len}  ${valid_gateway}  error
-
-
-Add New Valid IP With Blank Gateway
-    [Documentation]  Add new IP with blank gateway.
-    [Tags]  Add_New_Valid_IP_With_Blank_Gateway
-
-    Configure Network Settings  ${valid_ip}  ${valid_prefix_len}  ${EMPTY}
-    ...  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-    Verify IP Address Via REST And Delete  ${valid_ip}
-
-
-Configure Invalid Gateway String
-    [Documentation]  Configure invalid IP address to a gateway which is
-    ...  an alpha string and expect an error.
-    [Tags]  Configure_Invalid_Gateway_String
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP   Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${alpha_ip}  error
-
-
-Configure Out Of Range IP For Gateway
-    [Documentation]  Configure out-of-range IP for gateway and expect an error.
-    [Tags]  Configure_Out_Of_Range_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP          Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${out_of_range_ip}  error
-
-
-Configure Broadcast IP For Gateway
-    [Documentation]  Configure broadcast IP for gateway and expect an error.
-    [Tags]  Configure_Broadcast_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP       Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${broadcast_ip}  error
-
-
-Configure Loopback IP For Gateway
-    [Documentation]  Configure loopback IP for gateway and expect an error.
-    [Tags]  Configure_Loopback_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP      Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${loopback_ip}  error
-
-
-Configure Multicast IP For Gateway
-    [Documentation]  Configure multicast IP for gateway and expect an error.
-    [Tags]  Configure_Multicast_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP       Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${multicast_ip}  error
-
-
-Configure Network ID For Gateway
-    [Documentation]  Configure network ID for gateway and expect an error.
-    [Tags]  Configure_Network_ID_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP     Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${network_id}  error
-
-
-Configure Less Octet IP For Gateway
-    [Documentation]  Configure less octet IP for gateway and expect an error.
-    [Tags]  Configure_Less_Octet_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP        Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${less_octet_ip}  error
-
-
-Configure Special Char IP For Gateway
-    [Documentation]  Configure special char IP for gateway and expect an error.
-    [Tags]  Configure_Special_Char_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP    Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  @@@.%%.44.11  error
-
-
-Configure Hexadecimal IP For Gateway
-    [Documentation]  Configure hexadecimal IP for gateway and expect an error.
-    [Tags]  Configure_Hexadecimal_IP_For_Gateway
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length        Gateway_IP  Expected_Result
-    ${valid_ip}   ${valid_prefix_len}  ${hex_ip}   error
-
-
-Configure Out Of Range Prefix Length
-    [Documentation]  Configure out-of-range prefix length and expect an error.
-    [Tags]  Configure_Out_Of_Range_Prefix_Length
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length  Gateway_IP        Expected_Result
-    ${valid_ip}   33             ${valid_gateway}  error
-
-
-Configure Negative Value For Prefix Length
-    [Documentation]  Configure negative prefix length and expect an error.
-    [Tags]  Configure_Negative_Value_For_Prefix_Length
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length  Gateway_IP        Expected_Result
-    ${valid_ip}   -10            ${valid_gateway}  error
-
-
-Configure Non Numeric Value For Prefix Length
-    [Documentation]  Configure non numeric  value prefix length and expect
-    ...  an error.
-    [Tags]  Configure_String_Value_For_Prefix_Length
-    [Template]  Configure Network Settings
-
-    # IP Address  Prefix_length  Gateway_IP        Expected_Result
-    ${valid_ip}   xx             ${valid_gateway}  error
-
-
-Add Fourth Octet Threshold IP And Verify
-    [Documentation]  Add fourth octet threshold IP and verify.
-    [Tags]  Add_Fourth_Octet_Threshold_IP_And_Verify
-
-    Configure Network Settings  10.6.6.254  ${valid_prefix_len}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-
-    Verify IP Address Via REST And Delete  10.6.6.254
-
-Add Third Octet Threshold IP And Verify
-    [Documentation]  Add third octet threshold IP and verify.
-    [Tags]  Add_Third_Octet_Threshold_IP_And_Verify
-
-    Configure Network Settings  10.6.255.6  ${valid_prefix_len}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-
-    Verify IP Address Via REST And Delete  10.6.255.6
-
-Add Second Octet Threshold IP And Verify
-    [Documentation]  Add second octet threshold IP and verify.
-    [Tags]  Add_Second_Octet_Threshold_IP_And_Verify
-
-    Configure Network Settings  10.255.6.6  ${valid_prefix_len}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-
-    Verify IP Address Via REST And Delete  10.255.6.6
-
-Add First Octet Threshold IP And Verify
-    [Documentation]  Add first octet threshold IP and verify.
-    [Tags]  Add_First_Octet_Threshold_IP_And_Verify
-
-    Configure Network Settings  223.6.6.6  ${valid_prefix_len}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-
-    Verify IP Address Via REST And Delete  223.6.6.6
-
-Configure Lowest Prefix Length
-    [Documentation]  Configure lowest prefix length.
-    [Tags]  Configure_Lowest_Prefix_Length
-
-    Configure Network Settings  ${valid_ip}  ${1}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-    Verify IP Address Via REST And Delete  ${valid_ip}
-
-Configure Threshold Prefix Length
-    [Documentation]  Configure threshold prefix length.
-    [Tags]  Configure_Threshold_Prefix_Length
-
-    Configure Network Settings  ${valid_ip}  ${32}
-    ...  ${valid_gateway}  valid
-
-    # Verify whether new IP object is created for the given IP via REST.
-    # Delete IP address and IP object after verification.
-    Verify IP Address Via REST And Delete  ${valid_ip}
-
-Verify Default Gateway
-    [Documentation]  Verify that the default gateway has a valid route.
-    [Tags]  Verify_Default_Gateway.
-
-    ${default_gw}=  Read Attribute  ${NETWORK_MANAGER}config
-    ...  DefaultGateway
-    Validate Route On BMC  ${default_gw}
-
-Verify Hostname
-    [Documentation]  Verify that the hostname read via REST is the same as the
-    ...  hostname configured on system.
-    [Tags]  Verify_Hostname
-
-    ${hostname}=  Read Attribute  ${NETWORK_MANAGER}config  HostName
-    Validate Hostname On BMC  ${hostname}
-
-Run IPMI With Multiple IPs Configured
-    [Documentation]  Test out-of-band IPMI command with multiple IPs configured.
-    [Tags]  Run_IPMI_With_Multiple_IPs_Configured
-    [Teardown]  Clear IP Address
-
-    # Configure two IPs and verify.
-
-    :FOR  ${loc_valid_ip}  IN  @{valid_ips}
-    \  Configure Network Settings  ${loc_valid_ip}  ${valid_prefix_len}
-    \  ...  ${valid_gateway}  valid
-
-    @{ip_uri_list}=  Get IPv4 URI List
-    @{ip_list}=  Get List Of IP Address Via REST  @{ip_uri_list}
-
-    List Should Contain Sub List  ${ip_list}  ${valid_ips}
-    ...  msg=IP address is not configured.
-
-    Run IPMI Standard Command  chassis bootparam get 5
-
-*** Keywords ***
-
-Clear IP Address
-    [Documentation]  Delete the IPs
-
-    # Get the current IPv4 list post delete and sleep 10s for sync.
-    :FOR  ${loc_valid_ip}  IN  @{valid_ips}
-    \  @{ip_uri_list}=  Get IPv4 URI List
-    \  Delete IP And Object  ${loc_valid_ip}  @{ip_uri_list}
-    \  Sleep  10s
-
-Test Setup Execution
-    [Documentation]  Network setup.
-    Open Connection And Login
-
-    @{IPv4_URI_List}=  Get IPv4 URI List
-    Set Test Variable  @{IPv4_URI_List}
-
-    # Get BMC IP address and prefix length.
-    ${ip_data}=  Get BMC IP Info
-    Set Test Variable  ${ip_data}
-
-Get IPv4 URI List
-    [Documentation]  Get all IPv4 URIs.
-
-    # Sample output:
-    #   "data": [
-    #     "/xyz/openbmc_project/network/eth0/ipv4/e9767624",
-    #     "/xyz/openbmc_project/network/eth0/ipv4/31f4ce8b"
-    #   ],
-
-    @{ipv4_uri_list}=  Read Properties  ${NETWORK_MANAGER}eth0/ipv4/
-    Should Not Be Empty  ${ipv4_uri_list}  msg=IPv4 URI list is empty.
-
-    [Return]  @{ipv4_uri_list}
-
-Validate IP On BMC
-    [Documentation]  Validate IP on BMC.
-    [Arguments]  ${ip_address}  ${ip_info}=${ip_data}
-
-    # Description of argument(s):
-    # ip_address  IP address of the system.
-    # ip_info     List of IP address and prefix length values.
-
-    Should Contain Match  ${ip_info}  ${ip_address}/*
-    ...  msg=IP address does not exist.
-
-Verify IP Address Via REST And Delete
-    [Documentation]  Verify IP address via REST and delete.
-    [Arguments]  ${ip_addr}
-
-    # Description of argument(s):
-    # ip_addr      IP address to be verified.
-
-    @{ip_uri_list}=  Get IPv4 URI List
-    @{ip_list}=  Get List Of IP Address Via REST  @{ip_uri_list}
-
-    List Should Contain Value  ${ip_list}  ${ip_addr}
-    ...  msg=IP address is not configured.
-
-    # If IP address is configured, delete it.
-    Delete IP And Object  ${ip_addr}  @{ip_uri_list}
-
-Validate Prefix Length On BMC
-    [Documentation]  Validate prefix length on BMC.
-    [Arguments]  ${prefix_length}
-
-    # Description of argument(s):
-    # prefix_length    It indicates netmask, netmask value 255.255.255.0
-    #                  is equal to prefix length 24.
-    # ip_data          Suite variable which has list of IP address and
-    #                  prefix length values.
-
-    Should Contain Match  ${ip_data}  */${prefix_length}
-    ...  msg=Prefix length does not exist.
-
-Validate Route On BMC
-    [Documentation]  Validate route.
-    [Arguments]  ${gateway_ip}
-
-    # Description of argument(s):
-    # gateway_ip  Gateway IP address.
-
-    ${route_info}=  Get BMC Route Info
-
-    # If gateway IP is empty or 0.0.0.0 it will not have route entry.
-
-    Run Keyword If  '${gateway_ip}' == '0.0.0.0'
-    ...      Pass Execution  Gatway IP is "0.0.0.0".
-    ...  ELSE
-    ...      Should Contain  ${route_info}  ${gateway_ip}
-    ...      msg=Gateway IP address not matching.
-
-
-Configure Network Settings
-    [Documentation]  Configure network settings.
-    [Arguments]  ${ip_addr}  ${prefix_len}  ${gateway_ip}  ${expected_result}
-
-    # Description of argument(s):
-    # ip_addr          IP address of BMC.
-    # prefix_len       Prefix length.
-    # gateway_ip       Gateway IP address.
-    # expected_result  Expected status of network setting configuration.
-
-    @{ip_parm_list}=  Create List  xyz.openbmc_project.Network.IP.Protocol.IPv4
-    ...  ${ip_addr}  ${prefix_len}  ${gateway_ip}
-
-    ${data}=  Create Dictionary  data=@{ip_parm_list}
-
-    Run Keyword And Ignore Error  OpenBMC Post Request
-    ...  ${NETWORK_MANAGER}eth0/action/IP  data=${data}
-
-    # After any modification on network interface, BMC restarts network
-    # module, wait until it is reachable. Then wait 15 seconds for new
-    # configuration to be updated on BMC.
-
-    Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
-    ...  ${NETWORK_RETRY_TIME}
-    Sleep  15s
-
-    # Verify whether new IP address is populated on BMC system.
-    # It should not allow to configure invalid settings.
-
-    ${ip_data}=  Get BMC IP Info
-    ${status}=  Run Keyword And Return Status
-    ...  Validate IP On BMC  ${ip_addr}  ${ip_data}
-
-    Run Keyword If  '${expected_result}' == 'error'
-    ...      Should Be Equal  ${status}  ${False}
-    ...      msg=Allowing the configuration of an invalid IP.
-    ...  ELSE
-    ...      Should Be Equal  ${status}  ${True}
-    ...      msg=Not allowing the configuration of a valid IP.
-
-Validate Hostname On BMC
-    [Documentation]  Verify that the hostname read via REST is the same as the
-    ...  hostname configured on system.
-    [Arguments]  ${hostname}
-
-    # Description of argument(s):
-    # hostname  A hostname value which is to be compared to the hostname
-    #           configured on system.
-
-    ${sys_hostname}=  Get BMC Hostname
-    Should Be Equal  ${sys_hostname}  ${hostname}
-    ...  ignore_case=True  msg=Hostname does not exist.
-
-Test Teardown Execution
-    [Documentation]  Do the post test teardown.
-
-    FFDC On Test Case Fail
-    Close All Connections
diff --git a/network/test_mac.robot b/network/test_mac.robot
deleted file mode 100644
index a175d60..0000000
--- a/network/test_mac.robot
+++ /dev/null
@@ -1,159 +0,0 @@
-*** Settings ***
-Documentation  Test BMC network interface functionalities.
-
-Resource  ../lib/rest_client.robot
-Resource  ../lib/utils.robot
-Resource  ../lib/bmc_network_utils.robot
-Resource  ../lib/boot_utils.robot
-
-Library  String
-Library  SSHLibrary
-
-Suite Setup  Suite Setup Execution
-
-*** Variables ***
-
-# AA:AA:AA:AA:AA:AA series is a valid MAC and does not exist in
-# our network, so this is chosen to avoid MAC conflict.
-
-${valid_mac}         AA:E2:84:14:28:79
-${broadcast_mac}     FF:FF:FF:FF:FF:FF
-${zero_mac}          00:00:00:00:00:00
-${out_of_range_mac}  AA:FF:FF:FF:FF:100
-${special_char_mac}  &$:AA:AA:AA:AA:^^
-
-# There will be 6 bytes in MAC address (e.g. xx.xx.xx.xx.xx.xx)
-# but trying to configure xx.xx.xx.xx.xx
-
-${less_byte_mac}     AA:AA:AA:AA:BB
-
-# There will be 6 bytes in MAC address (e.g. xx.xx.xx.xx.xx.xx)
-# but trying to configure xx.xx.xx.xx.xx.xx.xx
-
-${more_byte_mac}     AA:AA:AA:AA:AA:AA:BB
-
-*** Test Cases ***
-
-Configure Valid MAC And Verify
-    [Documentation]  Configure valid MAC and verify.
-    [Tags]  Configure_Valid_MAC_And_Verify
-
-    Configure MAC Settings  ${valid_mac}  valid
-
-    # Verify whether new MAC is configured on BMC.
-    Validate MAC On BMC  ${valid_mac}
-
-Configure Invalid MAC And Verify
-    [Documentation]  Configure invalid MAC address which is a string.
-    [Tags]  Configure_Invalid_MAC_And_Verify
-
-    [Template]  Configure MAC Settings
-    # MAC Address        Expected_Result
-    ${special_char_mac}  error
-
-
-Configure Out Of Range MAC And Verify
-    [Documentation]  Configure out-of-range MAC address.
-    [Tags]  Configure_Out_Of_Range_MAC_And_Verify
-
-    [Template]  Configure MAC Settings
-    # MAC Address        Expected_Result
-    ${out_of_range_mac}  error
-
-Configure Broadcast MAC And Verify
-    [Documentation]  Configure broadcast MAC address.
-    [Tags]  Configure_Broadcast_MAC_And_Verify
-
-    [Template]  Configure MAC Settings
-    # MAC Address     Expected_Result
-    ${broadcast_mac}  error
-
-Configure Zero MAC And Verify
-    [Documentation]  Configure zero MAC address.
-    [Tags]  Configure_Zero_MAC_And_Verify
-
-    [Template]  Configure MAC Settings
-    # MAC Address     Expected_Result
-    ${zero_mac}  error
-
-Configure More Byte MAC And Verify
-    [Documentation]  Configure more byte MAC address.
-    [Tags]  Configure_More_Byte_MAC_And_Verify
-
-    [Template]  Configure MAC Settings
-    # MAC Address     Expected_Result
-    ${more_byte_mac}  error
-
-Configure Less Byte MAC And Verify
-    [Documentation]  Configure less byte MAC address.
-    [Tags]  Configure_Less_Byte_MAC_And_Verify
-
-    [Template]  Configure MAC Settings
-    # MAC Address     Expected_Result
-    ${less_byte_mac}  error
-
-Configure Valid MAC And Check Persistency
-    [Documentation]  Configure valid MAC and check persistency.
-    [Tags]  Configure_Valid_MAC_And_Check_Persistency
-
-    Configure MAC Settings  ${valid_mac}  valid
-
-    # Verify whether new MAC is configured on BMC.
-    Validate MAC On BMC  ${valid_mac}
-
-    # Reboot BMC and check whether MAC is persistent.
-    OBMC Reboot (off)
-    Validate MAC On BMC  ${valid_mac}
-
-Revert To Initial MAC And Verify
-    [Documentation]  Revert to initial MAC address.
-    [Tags]  Revert_To_Initial_MAC_And_Verify
-
-    Configure MAC Settings  ${macaddr}  valid
-
-    # Verify whether new MAC is configured on BMC.
-    Validate MAC On BMC  ${macaddr}
-
-*** Keywords ***
-
-Suite Setup Execution
-    [Documentation]  Network setup.
-    Open Connection And Login
-
-    # Get BMC MAC address.
-    ${macaddr}=  Read Attribute  ${NETWORK_MANAGER}eth0  MACAddress
-    Validate MAC On BMC  ${macaddr}
-    Set Suite Variable  ${macaddr}
-
-Configure MAC Settings
-    [Documentation]  Configure MAC settings.
-    [Arguments]  ${mac_addr}  ${expected_result}
-
-    # Description of argument(s):
-    # mac_addr         MAC address of BMC.
-    # expected_result  Expected status of MAC configuration.
-
-    ${data}=  Create Dictionary  data=${mac_addr}
-
-    Run Keyword And Ignore Error  OpenBMC Put Request
-    ...  ${NETWORK_MANAGER}eth0/attr/MACAddress  data=${data}
-
-    # After any modification on network interface, BMC restarts network
-    # module, wait until it is reachable.
-
-    Wait For Host To Ping  ${OPENBMC_HOST}
-    ...  ${NETWORK_TIMEOUT}  ${NETWORK_RETRY_TIME}
-
-    # Verify whether new MAC address is populated on BMC system.
-    # It should not allow to configure invalid settings.
-
-    ${status}=  Run Keyword And Return Status
-    ...  Validate MAC On BMC  ${mac_addr}
-
-    Run Keyword If  '${expected_result}' == 'error'
-    ...      Should Be Equal  ${status}  ${False}
-    ...      msg=Allowing the configuration of an invalid MAC.
-    ...  ELSE
-    ...      Should Be Equal  ${status}  ${True}
-    ...      msg=Not allowing the configuration of a valid MAC.
-
