diff --git a/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.py b/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.py
new file mode 100644
index 0000000..13ea4dd
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.py
@@ -0,0 +1,291 @@
+class SRDhcprelay:
+    def __init__( self ):
+        self.default = ''
+
+    def CASE1( self, main ):
+        """
+        DHCP v4 tests
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=1,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 4 clients attached to switch directly and 1 server attached to switch directly" )
+
+    def CASE2( self, main ):
+        """
+        DHCP v4 tests
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch indirectly (via gateway)
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=2,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 4 clients attached to switch directly and 1 server attached to switch indirectly (via gateway)",
+                                 remoteServer=True )
+
+    def CASE3( self, main ):
+        """
+        DHCP v4 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=3,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 2 clients attached to switch directly and 2 clients via DHCP relay and and 1 server attached to switch directly",
+                                 dhcpRelay=True )
+
+    def CASE4( self, main ):
+        """
+        DHCP v4 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch indirectly (via gateway)
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=4,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 4 clients attached to switch directly and 2 clients via DHCP relay and and 1 server attached to switch indirectly (via gateway)",
+                                 dhcpRelay=True,
+                                 remoteServer=True )
+
+    def CASE5( self, main ):
+        """
+        DHCP v4 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch directly for directly connected hosts
+                another server attached to switch directly for indirectly connected hosts
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=5,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 2 clients attached to switch directly, 2 clients via DHCP relay and, 1 server attached to switch directly for direcly connected hosts and another server attached to switch directly for indirectly connected hosts",
+                                 dhcpRelay=True,
+                                 multipleServer=True )
+
+    def CASE6( self, main ):
+        """
+        DHCP v4 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch directly for directly connected hosts
+                another server attached to switch directly for indirectly connected hosts
+                "DhcpRelayAgentIp" addresses are configured for indirect hosts
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=6,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 2 clients attached to switch directly, 2 clients via DHCP relay and, 1 server attached to switch directly for direcly connected hosts and another server attached to switch directly for indirectly connected hosts, 'DhcpRelayAgentIp' addresses are configured for indirect hosts",
+                                 dhcpRelay=True,
+                                 multipleServer=True )
+
+    def CASE11( self, main ):
+        """
+        DHCP v6 tests
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=11,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 ipv6=True )
+
+    def CASE12( self, main ):
+        """
+        DHCP v6 tests
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch indirectly (via gateway)
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=12,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with 4 clients attached to switch directly and 1 server attached to switch indirectly (via gateway)",
+                                 remoteServer=True,
+                                 ipv6=True )
+
+    def CASE13( self, main ):
+        """
+        DHCP v6 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=13,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with 2 clients attached to switch directly and 2 clients via DHCP relay and and 1 server attached to switch directly",
+                                 dhcpRelay=True,
+                                 ipv6=True )
+
+    def CASE14( self, main ):
+        """
+        DHCP v6 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch indirectly (via gateway)
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=14,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with 4 clients attached to switch directly and 2 clients via DHCP relay and and 1 server attached to switch indirectly (via gateway)",
+                                 dhcpRelay=True,
+                                 remoteServer=True,
+                                 ipv6=True )
+
+    def CASE15( self, main ):
+        """
+        DHCP v6 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch directly for directly connected hosts
+                another server attached to switch directly for indirectly connected hosts
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=15,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with 2 clients attached to switch directly, 2 clients via DHCP relay and, 1 server attached to switch directly for direcly connected hosts and another server attached to switch directly for indirectly connected hosts",
+                                 dhcpRelay=True,
+                                 multipleServer=True,
+                                 ipv6=True )
+
+    def CASE16( self, main ):
+        """
+        DHCP v6 tests
+        Client: 2 clients attached to switch directly, 2 clients via DHCP relay
+        Server: 1 server attached to switch directly for directly connected hosts
+                another server attached to switch directly for indirectly connected hosts
+                "DhcpRelayAgentIp" addresses are configured for indirect hosts
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=16,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with 2 clients attached to switch directly, 2 clients via DHCP relay and, 1 server attached to switch directly for direcly connected hosts and another server attached to switch directly for indirectly connected hosts, 'DhcpRelayAgentIp' addresses are configured for indirect hosts",
+                                 dhcpRelay=True,
+                                 multipleServer=True,
+                                 ipv6=True )
+
+    def CASE21( self, main ):
+        """
+        DHCP v4 tests with tagged hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=21,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with tagged hosts: 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 vlan=[ 20, 20, 30, 30 ] )
+
+    def CASE22( self, main ):
+        """
+        DHCP v4 tests with tagged hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch indirectly (via gateway)
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=22,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with 4 clients attached to switch directly and 1 server attached to switch indirectly (via gateway)",
+                                 remoteServer=True,
+                                 vlan=[ 20, 20, 30, 30 ] )
+
+    def CASE31( self, main ):
+        """
+        DHCP v6 tests with tagged hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=31,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with tagged hosts: 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 ipv6=True,
+                                 vlan=[ 40, 40, 50, 50 ] )
+
+    def CASE41( self, main ):
+        """
+        DHCP v4 tests with dual-homed hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=41,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with dual-homed hosts: 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 dualHomed=True )
+
+    def CASE51( self, main ):
+        """
+        DHCP v6 tests with dual-homed hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=51,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with dual-homed hosts: 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 ipv6=True,
+                                 dualHomed=True )
+
+    def CASE61( self, main ):
+        """
+        DHCP v4 tests with dual-homed tagged hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=61,
+                                 onosNodes=3,
+                                 description="DHCP v4 tests with dual-homed tagged hosts: 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 vlan=[ 20, 20, 30, 30 ],
+                                 dualHomed=True )
+
+    def CASE71( self, main ):
+        """
+        DHCP v6 tests with dual-homed tagged hosts
+        Client: 4 clients attached to switch directly
+        Server: 1 server attached to switch directly
+        Sets up 3 ONOS instance
+        """
+        from tests.USECASE.SegmentRouting.SRDhcprelay.dependencies.SRDhcprelayTest import SRDhcprelayTest
+        SRDhcprelayTest.runTest( main,
+                                 testIndex=71,
+                                 onosNodes=3,
+                                 description="DHCP v6 tests with dual-homed tagged hosts: 4 clients attached to switch directly and 1 server attached to switch directly",
+                                 ipv6=True,
+                                 vlan=[ 40, 40, 50, 50 ],
+                                 dualHomed=True )
