diff --git a/tools/test/topos/sdnip/configs/addresses.json b/tools/test/topos/sdnip/configs/addresses.json
new file mode 100644
index 0000000..ac54b5a
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/addresses.json
@@ -0,0 +1,28 @@
+{
+    "addresses" : [
+	{
+	    "dpid" : "00:00:00:00:00:00:00:a1",
+	    "port" : "1",
+	    "ips" : ["10.0.1.101/24"],
+	    "mac" : "00:00:00:00:00:01"
+	},
+	{
+	    "dpid" : "00:00:00:00:00:00:00:a2",
+	    "port" : "1",
+	    "ips" : ["10.0.2.101/24"],
+	    "mac" : "00:00:00:00:00:02"
+	},
+	{
+	    "dpid" : "00:00:00:00:00:00:00:a5",
+	    "port" : "1",
+	    "ips" : ["10.0.3.101/24"],
+	    "mac" : "00:00:00:00:00:01"
+	},
+	{
+	    "dpid" : "00:00:00:00:00:00:00:a6",
+	    "port" : "1",
+	    "ips" : ["10.0.4.101/24"],
+	    "mac" : "00:00:00:00:00:01"
+	}
+    ]
+}
diff --git a/tools/test/topos/sdnip/configs/gui.json b/tools/test/topos/sdnip/configs/gui.json
new file mode 100644
index 0000000..fdc9757
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/gui.json
@@ -0,0 +1,9 @@
+{
+    "hosts" : [
+        { "mac": "00:00:00:00:00:01", "vlan": -1, "location": "of:00000000000000a3/1", "ip": "10.0.1.101, 10.0.2.101, 10.0.3.101, 10.0.4.101",                         "annotations": { "type": "bgpSpeaker" } },
+        { "mac": "00:00:00:00:01:01", "vlan": -1, "location": "of:00000000000000a1/1", "ip": "10.0.1.1",                                   "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:02:01", "vlan": -1, "location": "of:00000000000000a2/1", "ip": "10.0.2.1",                        "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:03:01", "vlan": -1, "location": "of:00000000000000a5/1", "ip": "10.0.3.1",                        "annotations": { "type": "router" } },
+        { "mac": "00:00:00:00:04:01", "vlan": -1, "location": "of:00000000000000a6/1", "ip": "10.0.4.1",                                   "annotations": { "type": "router" } }
+    ]
+}
diff --git a/tools/test/topos/sdnip/configs/quagga-sdn.conf b/tools/test/topos/sdnip/configs/quagga-sdn.conf
new file mode 100644
index 0000000..983c96e
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/quagga-sdn.conf
@@ -0,0 +1,35 @@
+!
+hostname bgp
+password sdnip
+!
+!
+router bgp 65000
+  bgp router-id 10.10.10.1
+  timers bgp 3 9
+  !
+  neighbor 10.0.1.1 remote-as 65001
+  neighbor 10.0.1.1 ebgp-multihop
+  neighbor 10.0.1.1 timers connect 5
+  neighbor 10.0.1.1 advertisement-interval 5
+  !
+  neighbor 10.0.2.1 remote-as 65002
+  neighbor 10.0.2.1 ebgp-multihop
+  neighbor 10.0.2.1 timers connect 5
+  neighbor 10.0.2.1 advertisement-interval 5
+  !
+  neighbor 10.0.3.1 remote-as 65003
+  neighbor 10.0.3.1 ebgp-multihop
+  neighbor 10.0.3.1 timers connect 5
+  neighbor 10.0.3.1 advertisement-interval 5
+  !
+  neighbor 10.0.4.1 remote-as 65004
+  neighbor 10.0.4.1 ebgp-multihop
+  neighbor 10.0.4.1 timers connect 5
+  neighbor 10.0.4.1 advertisement-interval 5
+  !
+  ! ONOS
+  neighbor 10.10.10.2 remote-as 65000
+  neighbor 10.10.10.2 port 2000
+  neighbor 10.10.10.2 timers connect 5
+!
+log stdout
diff --git a/tools/test/topos/sdnip/configs/quagga1.conf b/tools/test/topos/sdnip/configs/quagga1.conf
new file mode 100644
index 0000000..6e65c96
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/quagga1.conf
@@ -0,0 +1,15 @@
+! BGP configuration for r1
+!
+hostname r1
+password sdnip
+!
+router bgp 65001
+  bgp router-id 10.0.1.1
+  timers bgp 3 9
+  neighbor 10.0.1.101 remote-as 65000
+  neighbor 10.0.1.101 ebgp-multihop
+  neighbor 10.0.1.101 timers connect 5
+  neighbor 10.0.1.101 advertisement-interval 5
+  network 192.168.1.0/24
+!
+log stdout
diff --git a/tools/test/topos/sdnip/configs/quagga2.conf b/tools/test/topos/sdnip/configs/quagga2.conf
new file mode 100644
index 0000000..8ab7205
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/quagga2.conf
@@ -0,0 +1,15 @@
+! BGP configuration for r2
+!
+hostname r2
+password sdnip
+!
+router bgp 65002
+  bgp router-id 10.0.2.1
+  timers bgp 3 9
+  neighbor 10.0.2.101 remote-as 65000
+  neighbor 10.0.2.101 ebgp-multihop
+  neighbor 10.0.2.101 timers connect 5
+  neighbor 10.0.2.101 advertisement-interval 5
+  network 192.168.2.0/24
+!
+log stdout
diff --git a/tools/test/topos/sdnip/configs/quagga3.conf b/tools/test/topos/sdnip/configs/quagga3.conf
new file mode 100644
index 0000000..53d9c8a
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/quagga3.conf
@@ -0,0 +1,15 @@
+! BGP configuration for r3
+!
+hostname r3
+password sdnip
+!
+router bgp 65003
+  bgp router-id 10.0.3.1
+  timers bgp 3 9
+  neighbor 10.0.3.101 remote-as 65000
+  neighbor 10.0.3.101 ebgp-multihop
+  neighbor 10.0.3.101 timers connect 5
+  neighbor 10.0.3.101 advertisement-interval 5
+  network 192.168.3.0/24
+!
+log stdout
diff --git a/tools/test/topos/sdnip/configs/quagga4.conf b/tools/test/topos/sdnip/configs/quagga4.conf
new file mode 100644
index 0000000..809d500
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/quagga4.conf
@@ -0,0 +1,15 @@
+! BGP configuration for r4
+!
+hostname r4
+password sdnip
+!
+router bgp 65004
+  bgp router-id 10.0.4.1
+  timers bgp 3 9
+  neighbor 10.0.4.101 remote-as 65000
+  neighbor 10.0.4.101 ebgp-multihop
+  neighbor 10.0.4.101 timers connect 5
+  neighbor 10.0.4.101 advertisement-interval 5
+  !network 192.168.4.0/24
+!
+log stdout
diff --git a/tools/test/topos/sdnip/configs/sdnip.json b/tools/test/topos/sdnip/configs/sdnip.json
new file mode 100644
index 0000000..dde8ea7
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/sdnip.json
@@ -0,0 +1,54 @@
+{
+    "bgpPeers" : [
+        {
+            "attachmentDpid" : "00:00:00:00:00:00:00:a1",
+	    "attachmentPort" : "1",
+            "ipAddress" : "10.0.1.1"
+        },
+	{
+            "attachmentDpid" : "00:00:00:00:00:00:00:a2",
+	    "attachmentPort" : "1",
+            "ipAddress" : "10.0.2.1"
+        },
+	{
+            "attachmentDpid" : "00:00:00:00:00:00:00:a5",
+	    "attachmentPort" : "1",
+            "ipAddress" : "10.0.3.1"
+        },
+	{
+            "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+	    "attachmentPort" : "1",
+            "ipAddress" : "10.0.4.1"
+        }
+    ],
+    "bgpSpeakers" : [
+        {
+            "name" : "bgp",
+            "attachmentDpid" : "00:00:00:00:00:00:00:a3",
+            "attachmentPort" : "1",
+            "macAddress" : "00:00:00:00:00:01",
+            "interfaceAddresses" : [
+                {
+		    "interfaceDpid" : "00:00:00:00:00:00:00:a1",
+		    "interfacePort" : "1",
+                    "ipAddress" : "10.0.1.101"
+                },
+                {
+		    "interfaceDpid" : "00:00:00:00:00:00:00:a2",
+		    "interfacePort" : "1",
+                    "ipAddress" : "10.0.2.101"
+                },
+                {
+		    "interfaceDpid" : "00:00:00:00:00:00:00:a5",
+		    "interfacePort" : "1",
+                    "ipAddress" : "10.0.3.101"
+                },
+                {
+		    "interfaceDpid" : "00:00:00:00:00:00:00:a6",
+		    "interfacePort" : "1",
+                    "ipAddress" : "10.0.4.101"
+                }
+            ]
+        }
+    ]
+}
diff --git a/tools/test/topos/sdnip/configs/zebra.conf b/tools/test/topos/sdnip/configs/zebra.conf
new file mode 100644
index 0000000..6a4ae95
--- /dev/null
+++ b/tools/test/topos/sdnip/configs/zebra.conf
@@ -0,0 +1,5 @@
+! Configuration for zebra (NB: it is the same for all routers)
+!
+hostname zebra 
+password sdnip
+log stdout
diff --git a/tools/test/topos/sdnip/tutorial.py b/tools/test/topos/sdnip/tutorial.py
new file mode 100755
index 0000000..4f6d6bd
--- /dev/null
+++ b/tools/test/topos/sdnip/tutorial.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.cli import CLI
+from mininet.log import setLogLevel, info, debug
+from mininet.node import Host, RemoteController
+
+QUAGGA_DIR = '/usr/lib/quagga'
+# Must exist and be owned by quagga user (quagga:quagga by default on Ubuntu)
+QUAGGA_RUN_DIR = '/var/run/quagga'
+CONFIG_DIR = 'configs'
+
+class SdnIpHost(Host):
+    def __init__(self, name, ip, route, *args, **kwargs):
+        Host.__init__(self, name, ip=ip, *args, **kwargs)
+
+        self.route = route
+
+    def config(self, **kwargs):
+        Host.config(self, **kwargs)
+
+        debug("configuring route %s" % self.route)
+
+        self.cmd('ip route add default via %s' % self.route)
+
+class Router(Host):
+    def __init__(self, name, quaggaConfFile, zebraConfFile, intfDict, *args, **kwargs):
+        Host.__init__(self, name, *args, **kwargs)
+
+        self.quaggaConfFile = quaggaConfFile
+        self.zebraConfFile = zebraConfFile
+        self.intfDict = intfDict
+
+    def config(self, **kwargs):
+        Host.config(self, **kwargs)
+        self.cmd('sysctl net.ipv4.ip_forward=1')
+
+        for intf, attrs in self.intfDict.items():
+            self.cmd('ip addr flush dev %s' % intf)
+            if 'mac' in attrs:
+                self.cmd('ip link set %s down' % intf)
+                self.cmd('ip link set %s address %s' % (intf, attrs['mac']))
+                self.cmd('ip link set %s up ' % intf)
+            for addr in attrs['ipAddrs']:
+                self.cmd('ip addr add %s dev %s' % (addr, intf))
+
+        self.cmd('/usr/lib/quagga/zebra -d -f %s -z %s/zebra%s.api -i %s/zebra%s.pid' % (self.zebraConfFile, QUAGGA_RUN_DIR, self.name, QUAGGA_RUN_DIR, self.name))
+        self.cmd('/usr/lib/quagga/bgpd -d -f %s -z %s/zebra%s.api -i %s/bgpd%s.pid' % (self.quaggaConfFile, QUAGGA_RUN_DIR, self.name, QUAGGA_RUN_DIR, self.name))
+
+
+    def terminate(self):
+        self.cmd("ps ax | egrep 'bgpd%s.pid|zebra%s.pid' | awk '{print $1}' | xargs kill" % (self.name, self.name))
+
+        Host.terminate(self)
+
+
+class SdnIpTopo( Topo ):
+    "SDN-IP tutorial topology"
+    
+    def build( self ):
+        s1 = self.addSwitch('s1', dpid='00000000000000a1')
+        s2 = self.addSwitch('s2', dpid='00000000000000a2')
+        s3 = self.addSwitch('s3', dpid='00000000000000a3')
+        s4 = self.addSwitch('s4', dpid='00000000000000a4')
+        s5 = self.addSwitch('s5', dpid='00000000000000a5')
+        s6 = self.addSwitch('s6', dpid='00000000000000a6')
+
+        zebraConf = '%s/zebra.conf' % CONFIG_DIR
+
+        # Switches we want to attach our routers to, in the correct order
+        attachmentSwitches = [s1, s2, s5, s6]
+
+        for i in range(1, 4+1):
+            name = 'r%s' % i
+
+            eth0 = { 'mac' : '00:00:00:00:0%s:01' % i,
+                     'ipAddrs' : ['10.0.%s.1/24' % i] }
+            eth1 = { 'ipAddrs' : ['192.168.%s.254/24' % i] }
+            intfs = { '%s-eth0' % name : eth0,
+                      '%s-eth1' % name : eth1 }
+
+            quaggaConf = '%s/quagga%s.conf' % (CONFIG_DIR, i)
+
+            router = self.addHost(name, cls=Router, quaggaConfFile=quaggaConf,
+                                  zebraConfFile=zebraConf, intfDict=intfs)
+            
+            host = self.addHost('h%s' % i, cls=SdnIpHost, 
+                                ip='192.168.%s.1/24' % i,
+                                route='192.168.%s.254' % i)
+            
+            self.addLink(router, attachmentSwitches[i-1])
+            self.addLink(router, host)
+
+        # Set up the internal BGP speaker
+        bgpEth0 = { 'mac':'00:00:00:00:00:01', 
+                    'ipAddrs' : ['10.0.1.101/24',
+                                 '10.0.2.101/24',
+                                 '10.0.3.101/24',
+                                 '10.0.4.101/24',] }
+        bgpEth1 = { 'ipAddrs' : ['10.10.10.1/24'] }
+        bgpIntfs = { 'bgp-eth0' : bgpEth0,
+                     'bgp-eth1' : bgpEth1 }
+        
+        bgp = self.addHost( "bgp", cls=Router, 
+                             quaggaConfFile = '%s/quagga-sdn.conf' % CONFIG_DIR, 
+                             zebraConfFile = zebraConf, 
+                             intfDict=bgpIntfs )
+        
+        self.addLink( bgp, s3 )
+
+        # Connect BGP speaker to the root namespace so it can peer with ONOS
+        root = self.addHost( 'root', inNamespace=False, ip='10.10.10.2/24' )
+        self.addLink( root, bgp )
+
+
+        # Wire up the switches in the topology
+        self.addLink( s1, s2 )
+        self.addLink( s1, s3 )
+        self.addLink( s2, s4 )
+        self.addLink( s3, s4 )
+        self.addLink( s3, s5 )
+        self.addLink( s4, s6 )
+        self.addLink( s5, s6 )
+
+topos = { 'sdnip' : SdnIpTopo }
+
+if __name__ == '__main__':
+    setLogLevel('debug')
+    topo = SDNTopo()
+
+    net = Mininet(topo=topo, controller=RemoteController)
+
+    net.start()
+
+    CLI(net)
+
+    net.stop()
+
+    info("done\n")
