diff --git a/vrouter.py b/vrouter.py
new file mode 100755
index 0000000..8c6b7f7
--- /dev/null
+++ b/vrouter.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+from mininet.node import RemoteController, OVSBridge
+from routinglib import BasicAutonomousSystem
+from routinglib import SdnAutonomousSystem, AutonomousSystem
+from routinglib import generateRoutes
+
+
+class VrouterTopo( Topo ):
+    "Single switch topology for testing the vRouter"
+    
+    def __init__( self, *args, **kwargs ):
+        Topo.__init__( self, *args, **kwargs )
+        # Router switch
+        s1 = self.addSwitch('s1', dpid='00000000000000b1')
+        
+        # SDN AS
+        onosIps = ['192.168.56.11']
+        sdnAs = SdnAutonomousSystem(onosIps, numBgpSpeakers=1, asNum=65000)
+        
+        numRoutesPerAs = 1
+        
+        # Normal ASes
+        as1 = BasicAutonomousSystem(1, 
+                    generateRoutes(u'10.1.0.0/16', numRoutesPerAs))
+        AutonomousSystem.addPeering(as1, sdnAs, useVlans=True)
+        as1.addLink(s1)
+        as1.build(self)
+
+        as2 = BasicAutonomousSystem(2, 
+                    generateRoutes(u'10.2.0.0/16', numRoutesPerAs))
+        AutonomousSystem.addPeering(as2, sdnAs, useVlans=True)
+        as2.addLink(s1)
+        as2.build(self)
+        
+        as3 = BasicAutonomousSystem(3, 
+                    generateRoutes(u'10.3.0.0/16', numRoutesPerAs))
+        AutonomousSystem.addPeering(as3, sdnAs, useVlans=True)
+        as3.addLink(s1)
+        as3.build(self)
+        
+        as4 = BasicAutonomousSystem(4, 
+                    generateRoutes(u'10.4.0.0/16', numRoutesPerAs))
+        AutonomousSystem.addPeering(as4, sdnAs, useVlans=False)
+        as4.addLink(s1)
+        as4.build(self)
+        
+        # SDN AS (internal BGP speaker) connects to control plane switch
+        cs0 = self.addSwitch('cs0', cls=OVSBridge)
+        sdnAs.build(self, s1, cs0)
+        
+topos = { 'vrouter' : VrouterTopo }
+
+if __name__ == "__main__":
+    setLogLevel('debug')
+    topo = VrouterTopo()
+
+    net = Mininet(topo=topo, controller=None)
+    net.addController(RemoteController('c0', ip='192.168.56.11'))
+
+    net.start()
+
+    CLI(net)
+
+    net.stop()
+
