diff --git a/extended/test_networkd_ext.robot b/extended/test_networkd_ext.robot
new file mode 100755
index 0000000..0b82030
--- /dev/null
+++ b/extended/test_networkd_ext.robot
@@ -0,0 +1,138 @@
+*** Settings ***
+Documentation       This suite will test extended Network Configuration Rest Interfaces
+
+Resource            ../lib/rest_client.robot
+Resource            ../lib/connection_client.robot
+Resource            ../lib/utils.robot
+Resource            ../lib/openbmc_ffdc.robot
+Library             ../lib/pythonutil.py
+
+Suite Setup         Open Connection And Log In
+Suite Teardown      Close All Connections
+Test Teardown       Log FFDC
+
+*** Test Cases ***
+
+Set IP address on valid Interface
+    [Tags]   network_test
+    [Documentation]   This test case sets the ip on the interface and validates
+    ...               that ip address has been set or not.
+    ...               Expectation is the ip address should get added.
+
+    validateEnvVariables
+
+
+    ${networkInfo}=    Get networkInfo from the interface    eth0
+    ${result}=  convert to integer     ${networkInfo['data'][1]}
+
+    ${MASK}=    calcDottedNetmask     ${result}
+    set suite variable   ${OLD_MASK}   ${MASK}
+    Log  ${OLD_MASK}
+    set suite variable   ${OLD_IP}          ${networkInfo['data'][2]}
+    set suite variable   ${OLD_GATEWAY}     ${networkInfo['data'][3]}
+
+    Log    ${OLD_IP}
+    Log    ${OLD_GATEWAY}
+
+
+    ${NEW_IP}=        Get Environment Variable    NEW_BMC_IP
+    ${NEW_MASK}=   Get Environment Variable    NEW_SUBNET_MASK
+    ${NEW_GATEWAY}=       Get Environment Variable    NEW_GATEWAY
+
+    ${arglist}=    Create List    eth0    ${NEW_IP}   ${NEW_MASK}   ${NEW_GATEWAY}
+    ${args}=     Create Dictionary   data=@{arglist}
+    run keyword and ignore error    Call Method    /org/openbmc/NetworkManager/Interface/   SetAddress4    data=${args}
+
+    Wait For Host To Ping       ${NEW_IP}
+    Set Suite Variable      ${AUTH_URI}       https://${NEW_IP}
+    Log    ${AUTH_URI}
+
+    ${networkInfo}=    Get networkInfo from the interface    eth0
+    ${ipaddress}=      set variable    ${networkInfo['data'][2]}
+    ${gateway}=        set variable    ${networkInfo['data'][3]}
+
+    ${isgatewayfound} =    Set Variable If   '${gateway}'=='${NEW_GATEWAY}'  true    false
+    Log   ${isgatewayfound}
+    ${isIPfound}=    Set Variable if    '${ipaddress}' == '${NEW_IP}'    true   false
+    should be true   '${isIPfound}' == 'true' and '${isgatewayfound}' == 'true'
+
+
+Revert the last ip address change
+    [Tags]   network_test
+    [Documentation]   This test case sets the ip  on the interface and validates
+    ...               that ip address has been set or not.
+    ...               Expectation is the ip address should get added.
+
+
+    ${arglist}=    Create List    eth0       ${OLD_IP}    ${OLD_MASK}   ${OLD_GATEWAY}
+    ${args}=     Create Dictionary   data=@{arglist}
+    run keyword and ignore error    Call Method    /org/openbmc/NetworkManager/Interface/   SetAddress4    data=${args}
+
+    Wait For Host To Ping       ${OLD_IP}
+    Set Suite Variable      ${AUTH_URI}    https://${OLD_IP}
+    Log    ${AUTH_URI}
+
+
+    ${networkInfo}=    Get networkInfo from the interface    eth0
+    ${ipaddress}=      set variable    ${networkInfo['data'][2]}
+    ${gateway}=        set variable    ${networkInfo['data'][3]}
+
+    ${isgatewayfound} =    Set Variable If   '${gateway}'=='${OLD_GATEWAY}'  true    false
+    Log   ${isgatewayfound}
+    ${isIPfound}=    Set Variable if    '${ipaddress}' == '${OLD_IP}'    true   false
+    should be true   '${isIPfound}' == 'true' and '${isgatewayfound}' == 'true'
+
+
+Persistency check for ip address
+    [Tags]   reboot_test
+    [Documentation]   we reboot the service processor and after reboot
+    ...               will request for the ip address to check the persistency
+    ...               of the ip address.
+    ...               Expectation is the ip address should persist.
+
+    Open Connection And Log In
+    Execute Command    reboot
+    Log    "System is getting rebooted wait for few seconds"
+    ${networkInfo}=    Get networkInfo from the interface    eth0
+    ${ipaddress}=      set variable    ${networkInfo['data'][2]}
+    ${gateway}=        set variable    ${networkInfo['data'][3]}
+
+    ${isgatewayfound} =    Set Variable If   '${gateway}'=='${OLD_GATEWAY}'  true    false
+    Log   ${isgatewayfound}
+    ${isIPfound}=    Set Variable if    '${ipaddress}' == '${OLD_IP}'    true   false
+    should be true   '${isIPfound}' == 'true' and '${isgatewayfound}' == 'true'
+
+
+***keywords***
+
+Get networkInfo from the interface
+
+    [Documentation]   This keyword is used to match the given ip with the configured one.
+    ...               returns true if match successfull else false
+    ...               eg:- Outout of getAddress4
+    ...               NewFormat:-{"data": [ 2,25,"9.3.164.147","9.3.164.129"],"message": "200 OK","status": "ok"}
+    ...               OldFormat:-
+    ...               {"data": [[[2,25,0,128,"9.3.164.177"],[2,8,254,128,"127.0.0.1"]],"9.3.164.129"],
+    ...                "message": "200 OK", "status": "ok"}
+
+    [arguments]    ${intf}
+    @{arglist}=    Create List   ${intf}
+    ${args}=       Create Dictionary   data=@{arglist}
+    ${resp}=       Call Method    /org/openbmc/NetworkManager/Interface/   GetAddress4    data=${args}
+    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
+    ${json} =   to json         ${resp.content}
+    Log   ${json['data'][2]}
+    Log   ${json['data'][3]}
+    [return]    ${json}
+
+
+validateEnvVariables
+
+    ${NEW_BMC_IP}=        Get Environment Variable    NEW_BMC_IP
+    ${NEW_SUBNET_MASK}=   Get Environment Variable    NEW_SUBNET_MASK
+    ${NEW_GATEWAY}=       Get Environment Variable    NEW_GATEWAY
+
+
+    should not be empty  ${NEW_BMC_IP}
+    should not be empty  ${NEW_GATEWAY}
+    should not be empty  ${NEW_SUBNET_MASK}
diff --git a/tests/test_networkd.robot b/tests/test_networkd.robot
index 974e89d..57c7140 100755
--- a/tests/test_networkd.robot
+++ b/tests/test_networkd.robot
@@ -99,76 +99,6 @@
    ...               with empty gateway,Expectation is it should get error.
 
 
-Set IP address on valid Interface
-    [Tags]   network_test
-    [Documentation]   This test case sets the ip  on the interface and validates
-    ...               that ip address has been set or not.
-    ...               Expectation is the ip address should get added.
-
-    validateEnvVariables
-
-
-    ${networkInfo}=    Get networkInfo from the interface    eth0
-    ${result}=  convert to integer     ${networkInfo['data'][1]}
-
-    ${MASK}=    calcDottedNetmask     ${result}
-    set suite variable   ${OLD_MASK}   ${MASK}
-    log to console  ${OLD_MASK}
-    set suite variable   ${OLD_IP}          ${networkInfo['data'][2]}
-    set suite variable   ${OLD_GATEWAY}     ${networkInfo['data'][3]}
-
-    log to console    ${OLD_IP}
-    log to console    ${OLD_GATEWAY}
-
-
-    ${NEW_IP}=        Get Environment Variable    NEW_BMC_IP
-    ${NEW_MASK}=   Get Environment Variable    NEW_SUBNET_MASK
-    ${NEW_GATEWAY}=       Get Environment Variable    NEW_GATEWAY
-
-    ${arglist}=    Create List    eth0    ${NEW_IP}   ${NEW_MASK}   ${NEW_GATEWAY}
-    ${args}=     Create Dictionary   data=@{arglist}
-    run keyword and ignore error    Call Method    /org/openbmc/NetworkManager/Interface/   SetAddress4    data=${args}
-
-    Wait For Host To Ping       ${NEW_IP}
-    Set Suite Variable      ${AUTH_URI}       https://${NEW_IP}
-    log to console    ${AUTH_URI}
-
-    ${networkInfo}=    Get networkInfo from the interface    eth0
-    ${ipaddress}=      set variable    ${networkInfo['data'][2]}
-    ${gateway}=        set variable    ${networkInfo['data'][3]}
-
-    ${isgatewayfound} =    Set Variable If   '${gateway}'=='${NEW_GATEWAY}'  true    false
-    log to console   ${isgatewayfound}
-    ${isIPfound}=    Set Variable if    '${ipaddress}' == '${NEW_IP}'    true   false
-    should be true   '${isIPfound}' == 'true' and '${isgatewayfound}' == 'true'
-
-
-Revert the last ip address change
-    [Tags]   network_test
-    [Documentation]   This test case sets the ip  on the interface and validates
-    ...               that ip address has been set or not.
-    ...               Expectation is the ip address should get added.
-
-
-    ${arglist}=    Create List    eth0       ${OLD_IP}    ${OLD_MASK}   ${OLD_GATEWAY}
-    ${args}=     Create Dictionary   data=@{arglist}
-    run keyword and ignore error    Call Method    /org/openbmc/NetworkManager/Interface/   SetAddress4    data=${args}
-
-    Wait For Host To Ping       ${OLD_IP}
-    Set Suite Variable      ${AUTH_URI}    https://${OLD_IP}
-    log to console    ${AUTH_URI}
-
-
-    ${networkInfo}=    Get networkInfo from the interface    eth0
-    ${ipaddress}=      set variable    ${networkInfo['data'][2]}
-    ${gateway}=        set variable    ${networkInfo['data'][3]}
-
-    ${isgatewayfound} =    Set Variable If   '${gateway}'=='${OLD_GATEWAY}'  true    false
-    log to console   ${isgatewayfound}
-    ${isIPfound}=    Set Variable if    '${ipaddress}' == '${OLD_IP}'    true   false
-    should be true   '${isIPfound}' == 'true' and '${isgatewayfound}' == 'true'
-
-
 Get IP Address type
     [Tags]   GOOD-PATH
     [Documentation]   This test case tries to set existing ipaddress address and
@@ -198,30 +128,6 @@
     should be equal as strings      ${json['status']}      ok
 
 
-Persistency check for ip address
-    [Tags]   reboot_test
-    [Documentation]   we reboot the service processor and after reboot
-    ...               will request for the ip address to check the persistency
-    ...               of the ip address.
-    ...               Expectation is the ip address should persist.
-
-    Open Connection And Log In
-    Execute Command    reboot
-#    sleep  100sec
-    log to console    "System is getting rebooted wait for few seconds"
-    ${networkInfo}=    Get networkInfo from the interface    eth0
-    ${ipaddress}=      set variable    ${networkInfo['data'][2]}
-    ${gateway}=        set variable    ${networkInfo['data'][3]}
-
-    ${isgatewayfound} =    Set Variable If   '${gateway}'=='${OLD_GATEWAY}'  true    false
-    log to console   ${isgatewayfound}
-    ${isIPfound}=    Set Variable if    '${ipaddress}' == '${OLD_IP}'    true   false
-    should be true   '${isIPfound}' == 'true' and '${isgatewayfound}' == 'true'
-
-
-
-
-
 Set invalid Mac address     eth0     gg:hh:jj:kk:ll:mm    error
     [Tags]   network_test
     [Template]  SetMacAddress_bad
@@ -307,15 +213,3 @@
     ${resp}=   Call Method    /org/openbmc/NetworkManager/Interface/    GetHwAddress    data=${args}
     ${json} =   to json         ${resp.content}
     should be equal as strings   ${json['data']}    ${address}
-
-
-validateEnvVariables
-
-    ${NEW_BMC_IP}=        Get Environment Variable    NEW_BMC_IP
-    ${NEW_SUBNET_MASK}=   Get Environment Variable    NEW_SUBNET_MASK
-    ${NEW_GATEWAY}=       Get Environment Variable    NEW_GATEWAY
-
-
-    should not be empty  ${NEW_BMC_IP}
-    should not be empty  ${NEW_GATEWAY}
-    should not be empty  ${NEW_SUBNET_MASK}
