diff --git a/tools/test/topos/optical-2.py b/tools/test/topos/optical-2.py
deleted file mode 100755
index 245d449..0000000
--- a/tools/test/topos/optical-2.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-
-''' file: custom/optical.py '''
-from mininet.node import RemoteController
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.cli import CLI
-from mininet.log import setLogLevel, info
-from mininet.util import irange
-
-switches = []
-
-class OpticalTopo( Topo ):
-
-    def build( self, n=6, tapStart=29 ):
-	global switches
-        # Add hosts and switches
-        hosts = []
-        switches = []
-        for i in irange( 1, n ):
-            h = self.addHost( 'h%d' % i )
-            s = self.addSwitch( 's%d' % i, dpid='0000ffffffff%04d' % i )
-            self.addLink( h, s )
-            hosts.append( h )
-            switches.append( s )
-
-        # Add optical tap interfaces
-        tapNum = tapStart
-        #for sw in switches:
-        #    self.addLink( sw, sw, intfName1='%s-eth0' % sw, intfName2='tap%d' % tapNum )
-	    #Add tap interface  up
-            #sudo ip link set dev tap25 up
-       #     tapNum += 1
-
-# if you use, sudo mn --custom custom/optical.py, then register the topo:
-#sudo mn --custom ~/mininet/custom/optical-2.py --topo optical,6 --controller=remote
-#sudo ./mininet/custom/optical-2.py
-topos = { 'optical': OpticalTopo }
-
-def installStaticFlows( net ):
-    for swName in [ 's1', 's2', 's3', 's4', 's5', 's6' ]:
-      info( 'Adding flows to %s...' % swName )
-      sw = net[ swName ]
-      sw.dpctl( 'add-flow', 'in_port=1,actions=output=2' )
-      sw.dpctl( 'add-flow', 'in_port=2,actions=output=1' )
-      info( sw.dpctl( 'dump-flows' ) )
-
-def run():
-    net = Mininet( topo=OpticalTopo(), controller=RemoteController )
-    net.start()
-    #installStaticFlows( net )
-    tapStart = 29
-    for sw in switches:
-        net.get(sw).attach( 'tap%d' %tapStart )
-        tapStart += 1
-    CLI( net )
-    net.stop()
-
-# if the script is run directly (sudo custom/optical.py):
-if __name__ == '__main__':
-    setLogLevel( 'info' )
-    run()
