diff --git a/bin/miniccnx b/bin/miniccnx
deleted file mode 100755
index 614d5ca..0000000
--- a/bin/miniccnx
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/python
-
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.log import setLogLevel, output, info
-from mininet.cli import CLI
-from mininet.node import CPULimitedCCNHost, CCNHost
-from mininet.link import TCLink
-from mininet.conf_parser import parse_hosts,parse_routers, parse_links
-import os.path, time
-import optparse
-import datetime
-import pdb
-
-def parse_args():
-    usage="""Usage: miniccnx [template_file] [ -t | --testbed ]
-    If no template_file is given, will try to load template
-    from file miniccnx.conf in the current directory.
-    If --testbed is used, miniccnx will run the NDN Project Testbed.
-    This assumes you are in the testbed directory in the miniccnx installation
-    directory.
-    """
-
-    testbed = False
-    parser = optparse.OptionParser(usage)
-
-    parser.add_option("-t", "--testbed", action="store_true", dest="testbed",
-    help="instantiates NDN Testbed")
-
-    (options, arg) = parser.parse_args()
-
-    testbed = options.testbed
-
-    if len(arg) == 0 or len(arg) > 2:
-        file = ''
-    else:
-        file = arg[0]
-
-    return file, testbed
-
-
-class CCNTopo(Topo):
-    def __init__(self, conf_arq, **opts):
-        Topo.__init__(self, **opts)
-
-        hosts_conf = parse_hosts(conf_arq)
-       	routers_conf = parse_routers(conf_arq)
-        links_conf = parse_links(conf_arq)
-
-
-        self.isTCLink = False
-        self.isLimited = False
-
-        for host in hosts_conf:
-#	    print host
-            if host.cpu != None and self.isLimited != True:
-                self.isLimited = True
-            self.addHost(host.name, app=host.app, fib=host.uri_tuples,cpu=host.cpu,cores=host.cores,cache=host.cache)
-
-        for router in routers_conf:
-            if router.cpu != None and self.isLimited != True:
-                self.isLimited = True
-            self.addHost(router.name,fib=router.uri_tuples,cpu=router.cpu,cores=router.cores, cache=router.cache)
-
-        for link in links_conf:
-            if len(link.linkDict) == 0:
-		#pdb.set_trace()
-                self.addLink(link.h1, link.h2)
-            else:
-                self.addLink(link.h1, link.h2, **link.linkDict)
-                self.isTCLink = True
-
-        info('Parse of ' + conf_arq + ' done.\n')
-
-def execute(template_file='miniccnx.conf', testbed=False):
-    "Create a network based on template_file"
-
-    if template_file == '':
-        template_file='miniccnx.conf'
-
-    if os.path.exists(template_file) == False:
-        info('No template file given and default template file miniccnx.conf not found. Exiting...\n')
-        quit()
-
-    topo = CCNTopo(template_file)
-
-    t = datetime.datetime.now()
-
-    if topo.isTCLink == True and topo.isLimited == True:
-        net = Mininet(topo,host=CPULimitedCCNHost,link=TCLink)
-    elif topo.isTCLink == True and topo.isLimited == False:
-        net = Mininet(topo,host=CCNHost,link=TCLink)
-    elif topo.isTCLink == False and topo.isLimited == True:
-        net = Mininet(topo,host=CPULimitedCCNHost)
-    else:
-        net = Mininet(topo,host=CCNHost)
-
-    t2 = datetime.datetime.now()
-
-    delta = t2 - t
-
-    info('Setup time: ' + str(delta.seconds) + '\n')
-
-    net.start()
-
-    if testbed == True:
-        info('Starting OSPFN ...\n')
-        for host in net.hosts:
-            host.cmd("cd {0}".format(host.name))
-            host.cmd("./routing.sh {0}".format(host.name))
-
-        time.sleep(60)
-
-        for host in net.hosts:
-            host.cmd("./ospfn-start.sh {0}".format(host.name))
-
-        info('OSPFN configuration completed!\n')
-
-    for host in net.hosts:
-        if 'app' in host.params:
-            if host.params['app'] != '_':
-                host.cmd(host.params['app'])
-
-    CLI(net)
-    net.stop()
-
-if __name__ == '__main__':
-
-    template, testbed = parse_args()
-    setLogLevel('info')
-    execute(template, testbed)
diff --git a/bin/miniccnxedit b/bin/miniccnxedit
deleted file mode 100755
index 6141102..0000000
--- a/bin/miniccnxedit
+++ /dev/null
@@ -1,1733 +0,0 @@
-#!/usr/bin/python
-
-"""
-MiniCCNxEdit: a simple network editor for MiniCCNx
-
-Based on miniedit by:
-Bob Lantz, April 2010
-Gregory Gee, July 2013
-
-Carlos Cabral, Jan 2013
-Caio Elias, Nov 2014
-
-"""
-
-MINIEDIT_VERSION = '2.2.0.1'
-
-from optparse import OptionParser
-from Tkinter import *
-from ttk import Notebook
-from tkMessageBox import showinfo, showerror, showwarning
-from subprocess import call
-import tkFont
-import csv
-import tkFileDialog
-import tkSimpleDialog
-import re
-import json
-from distutils.version import StrictVersion
-import os
-import sys
-from functools import partial
-
-import pdb
-
-if 'PYTHONPATH' in os.environ:
-    sys.path = os.environ[ 'PYTHONPATH' ].split( ':' ) + sys.path
-
-# someday: from ttk import *
-
-from mininet.log import info, error, debug, output, setLogLevel
-from mininet.net import Mininet, VERSION
-from mininet.util import ipStr, netParse, ipAdd, quietRun
-from mininet.util import buildTopo
-from mininet.util import custom, customConstructor
-from mininet.term import makeTerm, cleanUpScreens
-from mininet.node import Controller, RemoteController, NOX, OVSController
-from mininet.node import CPULimitedHost, Host, Node
-from mininet.node import OVSKernelSwitch, OVSSwitch, UserSwitch
-from mininet.link import TCLink, Intf, Link
-from mininet.cli import CLI
-from mininet.moduledeps import moduleDeps, pathCheck
-from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
-from mininet.topolib import TreeTopo
-
-print 'MiniCCNxEdit running...' #+VERSION
-MININET_VERSION = re.sub(r'[^\d\.]', '', VERSION)
-if StrictVersion(MININET_VERSION) > StrictVersion('2.0'):
-    from mininet.node import IVSSwitch
-
-TOPODEF = 'none'
-TOPOS = { 'minimal': lambda: SingleSwitchTopo( k=2 ),
-          'linear': LinearTopo,
-          'reversed': SingleSwitchReversedTopo,
-          'single': SingleSwitchTopo,
-          'none': None,
-          'tree': TreeTopo }
-LINKDEF = 'default'
-LINKS = { 'default': Link,
-          'tc': TCLink }
-HOSTDEF = 'proc'
-HOSTS = { 'proc': Host,
-          'rt': custom( CPULimitedHost, sched='rt' ),
-          'cfs': custom( CPULimitedHost, sched='cfs' ) }
-
-class LegacyRouter( Node ):
-
-    def __init__( self, name, inNamespace=True, **params ):
-        Node.__init__( self, name, inNamespace, **params )
-
-    def config( self, **_params ):
-        if self.intfs:
-            self.setParam( _params, 'setIP', ip='0.0.0.0' )
-        r = Node.config( self, **_params )
-        self.cmd('sysctl -w net.ipv4.ip_forward=1')
-        return r
-
-class CustomDialog(object):
-
-        # TODO: Fix button placement and Title and window focus lock
-        def __init__(self, master, title):
-            self.top=Toplevel(master)
-
-            self.bodyFrame = Frame(self.top)
-            self.bodyFrame.grid(row=0, column=0, sticky='nswe')
-            self.body(self.bodyFrame)
-
-            #return self.b # initial focus
-            buttonFrame = Frame(self.top, relief='ridge', bd=3, bg='lightgrey')
-            buttonFrame.grid(row=1 , column=0, sticky='nswe')
-
-            okButton = Button(buttonFrame, width=8, text='OK', relief='groove',
-                       bd=4, command=self.okAction)
-            okButton.grid(row=1, column=0, sticky=E)
-
-            canlceButton = Button(buttonFrame, width=8, text='Cancel', relief='groove',
-                        bd=4, command=self.cancelAction)
-            canlceButton.grid(row=1, column=1, sticky=W)
-
-        def body(self, master):
-            self.rootFrame = master
-
-        def apply(self):
-            self.top.destroy()
-
-        def cancelAction(self):
-            self.top.destroy()
-
-        def okAction(self):
-            self.apply()
-            self.top.destroy()
-
-class HostDialog(CustomDialog):
-
-        def __init__(self, master, title, prefDefaults, isRouter):
-
-            self.prefValues = prefDefaults
-            self.result = None
-	    self.isRouter = isRouter
-	    self.title = title
-
-            CustomDialog.__init__(self, master, title)
-
-        def body(self, master):
-            self.rootFrame = master
-            n = Notebook(self.rootFrame)
-            self.propFrame = Frame(n)
-            self.fibFrame = Frame(n)
-            n.add(self.propFrame, text='Properties')
-            n.add(self.fibFrame, text='FIB Entries')
-            n.pack()
-
-            ### TAB 1
-            # Field for Hostname
-            Label(self.propFrame, text="Hostname:").grid(row=0, sticky=E)
-            self.hostnameEntry = Entry(self.propFrame)
-            self.hostnameEntry.grid(row=0, column=1)
-            if 'hostname' in self.prefValues:
-                self.hostnameEntry.insert(0, self.prefValues['hostname'])
-
-            # Field for CPU
-            Label(self.propFrame, text="Amount CPU:").grid(row=2, sticky=E)
-            self.cpuEntry = Entry(self.propFrame)
-            self.cpuEntry.grid(row=2, column=1)
-	    Label(self.propFrame, text="%").grid(row=2, column=2, sticky=W)
-            if 'cpu' in self.prefValues:
-                self.cpuEntry.insert(0, str(self.prefValues['cpu']))
-            
-	    # Field for Memory
-            Label(self.propFrame, text="Amount MEM:").grid(row=3, sticky=E)
-            self.memEntry = Entry(self.propFrame)
-            self.memEntry.grid(row=3, column=1)
-	    Label(self.propFrame, text="%").grid(row=3, column=2, sticky=W)
-            if 'mem' in self.prefValues:
-                self.memEntry.insert(0, str(self.prefValues['mem']))
-	    
-	    # Field for Cache
-            Label(self.propFrame, text="Amount CACHE:").grid(row=4, sticky=E)
-            self.cacheEntry = Entry(self.propFrame)
-            self.cacheEntry.grid(row=4, column=1)
-	    Label(self.propFrame, text="KBytes").grid(row=4, column=2, sticky=W)
-            if 'cache' in self.prefValues:
-                self.cacheEntry.insert(0, str(self.prefValues['cache']))
-
-            # Start command
-	    #print self.isRouter
-	    if self.isRouter == 'False':
-		    Label(self.propFrame, text="Start Command:").grid(row=5, sticky=E)
-		    self.startEntry = Entry(self.propFrame)
-		    self.startEntry.grid(row=5, column=1, sticky='nswe', columnspan=3)
-		    Label(self.propFrame, text="[full path]").grid(row=5, column=2, sticky=W)
-		    if 'startCommand' in self.prefValues:
-		        self.startEntry.insert(0, str(self.prefValues['startCommand']))
-	    else: 
-		self.startEntry= Entry(self.propFrame)
-
-            ### TAB 2
-            # FIB Entries
-            self.fibEntries = 0
-            Label(self.fibFrame, text="FIB Entry:").grid(row=0, column=0, sticky=E)
-            self.fibButton = Button( self.fibFrame, text='Add', command=self.addEntry)
-            self.fibButton.grid(row=0, column=1)
-
-            self.fibFrame = VerticalScrolledTable(self.fibFrame, rows=0, columns=2, title='FIB Entries')
-            self.fibFrame.grid(row=1, column=0, sticky='nswe', columnspan=2)
-            self.fibTableFrame = self.fibFrame.interior
-            self.fibTableFrame.addRow(value=['Prefix','Next Hop'], readonly=True)
-
-            fibList = []
-            if 'fibEntries' in self.prefValues:
-                fibList = self.prefValues['fibEntries']
-            for fibEntr in fibList:
-                if isinstance( fibEntr, tuple ):
-                    self.fibTableFrame.addRow(value=fibEntr)
-                else:
-                    self.fibTableFrame.addRow(value=[fibEntr,''])
-
-        def addEntry( self ):
-            self.fibTableFrame.addRow()
-
-        def apply(self):
-            fibEntries = []
-            for row in range(self.fibTableFrame.rows):
-                if (len(self.fibTableFrame.get(row, 0)) > 0 and row > 0):
-                    if(len(self.fibTableFrame.get(row, 1)) > 0):
-                        fibEntries.append((self.fibTableFrame.get(row, 0), self.fibTableFrame.get(row, 1)))
-                    else:
-                        fibEntries.append(self.fibTableFrame.get(row, 0))
-
-            results = {'cpu': self.cpuEntry.get(),
-                       'cache': self.cacheEntry.get(),
-                       'mem': self.memEntry.get(),
-                       'hostname':self.hostnameEntry.get(),
-                       'startCommand':self.startEntry.get(),
-                       'fibEntries':fibEntries}
-            self.result = results
-
-class VerticalScrolledTable(LabelFrame):
-    """A pure Tkinter scrollable frame that actually works!
-
-    * Use the 'interior' attribute to place widgets inside the scrollable frame
-    * Construct and pack/place/grid normally
-    * This frame only allows vertical scrolling
-    
-    """
-    def __init__(self, parent, rows=2, columns=2, title=None, *args, **kw):
-        LabelFrame.__init__(self, parent, text=title, padx=5, pady=5, *args, **kw)            
-
-        # create a canvas object and a vertical scrollbar for scrolling it
-        vscrollbar = Scrollbar(self, orient=VERTICAL)
-        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
-        canvas = Canvas(self, bd=0, highlightthickness=0,
-                        yscrollcommand=vscrollbar.set)
-        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
-        vscrollbar.config(command=canvas.yview)
-
-        # reset the view
-        canvas.xview_moveto(0)
-        canvas.yview_moveto(0)
-
-        # create a frame inside the canvas which will be scrolled with it
-        self.interior = interior = TableFrame(canvas, rows=rows, columns=columns)
-        interior_id = canvas.create_window(0, 0, window=interior,
-                                           anchor=NW)
-
-        # track changes to the canvas and frame width and sync them,
-        # also updating the scrollbar
-        def _configure_interior(event):
-            # update the scrollbars to match the size of the inner frame
-            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
-            canvas.config(scrollregion="0 0 %s %s" % size)
-            if interior.winfo_reqwidth() != canvas.winfo_width():
-                # update the canvas's width to fit the inner frame
-                canvas.config(width=interior.winfo_reqwidth())
-        interior.bind('<Configure>', _configure_interior)
-
-        def _configure_canvas(event):
-            if interior.winfo_reqwidth() != canvas.winfo_width():
-                # update the inner frame's width to fill the canvas
-                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
-        canvas.bind('<Configure>', _configure_canvas)
-
-        return
-
-class TableFrame(Frame):
-    def __init__(self, parent, rows=2, columns=2):
-
-        Frame.__init__(self, parent, background="black")
-        self._widgets = []
-        self.rows = rows
-        self.columns = columns
-        for row in range(rows):
-            current_row = []
-            for column in range(columns):
-                label = Entry(self, borderwidth=0)
-                label.grid(row=row, column=column, sticky="wens", padx=1, pady=1)
-                current_row.append(label)
-            self._widgets.append(current_row)
-
-    def set(self, row, column, value):
-        widget = self._widgets[row][column]
-        widget.insert(0, value)
-
-    def get(self, row, column):
-        widget = self._widgets[row][column]
-        return widget.get()
-
-    def addRow( self, value=None, readonly=False ):
-        #print "Adding row " + str(self.rows +1)
-        current_row = []
-        for column in range(self.columns):
-            label = Entry(self, borderwidth=0)
-            label.grid(row=self.rows, column=column, sticky="wens", padx=1, pady=1)
-            if value is not None:
-                label.insert(0, value[column])
-            if (readonly == True):
-                label.configure(state='readonly')
-            current_row.append(label)
-        self._widgets.append(current_row)
-        self.update_idletasks()
-        self.rows += 1
-
-class LinkDialog(tkSimpleDialog.Dialog):
-
-        def __init__(self, parent, title, linkDefaults):
-
-            self.linkValues = linkDefaults
-
-            tkSimpleDialog.Dialog.__init__(self, parent, title)
-
-        def body(self, master):
-
-            self.var = StringVar(master)
-            Label(master, text="Bandwidth:").grid(row=0, sticky=E)
-            self.e1 = Entry(master)
-            self.e1.grid(row=0, column=1)
-            Label(master, text="[1-1000] Mbps").grid(row=0, column=2, sticky=W)
-            if 'bw' in self.linkValues:
-                self.e1.insert(0,str(self.linkValues['bw']))
-
-            Label(master, text="Delay:").grid(row=1, sticky=E)
-            self.e2 = Entry(master)
-            self.e2.grid(row=1, column=1)
-	    Label(master, text="[0-1000] ms").grid(row=1, column=2, sticky=W)
-            if 'delay' in self.linkValues:
-                self.e2.insert(0, self.linkValues['delay'])
-
-            Label(master, text="Loss:").grid(row=2, sticky=E)
-            self.e3 = Entry(master)
-            self.e3.grid(row=2, column=1)
-            Label(master, text="%").grid(row=2, column=2, sticky=W)
-            if 'loss' in self.linkValues:
-                self.e3.insert(0, str(self.linkValues['loss']))
-
-            return self.e1 # initial focus
-
-        def apply(self):
-            self.result = {}
-            if (len(self.e1.get()) > 0):
-                self.result['bw'] = int(self.e1.get())
-            if (len(self.e2.get()) > 0):
-                self.result['delay'] = self.e2.get()
-            if (len(self.e3.get()) > 0):
-                self.result['loss'] = int(self.e3.get())
-
-class ToolTip(object):
-
-    def __init__(self, widget):
-        self.widget = widget
-        self.tipwindow = None
-        self.id = None
-        self.x = self.y = 0
-
-    def showtip(self, text):
-        "Display text in tooltip window"
-        self.text = text
-        if self.tipwindow or not self.text:
-            return
-        x, y, cx, cy = self.widget.bbox("insert")
-        x = x + self.widget.winfo_rootx() + 27
-        y = y + cy + self.widget.winfo_rooty() +27
-        self.tipwindow = tw = Toplevel(self.widget)
-        tw.wm_overrideredirect(1)
-        tw.wm_geometry("+%d+%d" % (x, y))
-        try:
-            # For Mac OS
-            tw.tk.call("::tk::unsupported::MacWindowStyle",
-                       "style", tw._w,
-                       "help", "noActivates")
-        except TclError:
-            pass
-        label = Label(tw, text=self.text, justify=LEFT,
-                      background="#ffffe0", relief=SOLID, borderwidth=1,
-                      font=("tahoma", "8", "normal"))
-        label.pack(ipadx=1)
-
-    def hidetip(self):
-        tw = self.tipwindow
-        self.tipwindow = None
-        if tw:
-            tw.destroy()
-
-class MiniEdit( Frame ):
-
-    "A simple network editor for MiniCCNx."
-
-    def __init__( self, parent=None, cheight=600, cwidth=1000, template_file='miniccnx.conf' ):
-	
-	self.template_file = template_file
-
-        Frame.__init__( self, parent )
-        self.action = None
-        self.appName = 'MiniccnxEdit'
-        self.fixedFont = tkFont.Font ( family="DejaVu Sans Mono", size="14" )
-
-        # Style
-        self.font = ( 'Geneva', 9 )
-        self.smallFont = ( 'Geneva', 7 )
-        self.bg = 'white'
-
-        # Title
-        self.top = self.winfo_toplevel()
-        self.top.title( self.appName )
-
-        # Menu bar
-        self.createMenubar()
-
-        # Editing canvas
-        self.cheight, self.cwidth = cheight, cwidth
-        self.cframe, self.canvas = self.createCanvas()
-
-        # Toolbar
-        self.controllers = {}
-
-        # Toolbar
-        self.images = miniEditImages()
-        self.buttons = {}
-        self.active = None
-        self.tools = ( 'Select', 'Host', 'LegacyRouter', 'NetLink' )
-        self.customColors = { 'LegacyRouter': 'darkGreen', 'Host': 'blue' }
-        self.toolbar = self.createToolbar()
-
-        # Layout
-        self.toolbar.grid( column=0, row=0, sticky='nsew')
-        self.cframe.grid( column=1, row=0 )
-        self.columnconfigure( 1, weight=1 )
-        self.rowconfigure( 0, weight=1 )
-        self.pack( expand=True, fill='both' )
-
-        # About box
-        self.aboutBox = None
-
-        # Initialize node data
-        self.nodeBindings = self.createNodeBindings()
-        self.nodePrefixes = { 'LegacyRouter': 'r', 'Host': 'h'}
-        self.widgetToItem = {}
-        self.itemToWidget = {}
-
-        # Initialize link tool
-        self.link = self.linkWidget = None
-
-        # Selection support
-        self.selection = None
-
-        # Keyboard bindings
-        self.bind( '<Control-q>', lambda event: self.quit() )
-        self.bind( '<KeyPress-Delete>', self.deleteSelection )
-        self.bind( '<KeyPress-BackSpace>', self.deleteSelection )
-        self.focus()
-
-	#Mouse bindings
-	self.bind( '<Button-1>', lambda event: self.clearPopups )
-
-        self.hostPopup = Menu(self.top, tearoff=0)
-        self.hostPopup.add_command(label='Host Options', font=self.font, command=self.hostDetails)
-        #self.hostPopup.add_separator()
-        #self.hostPopup.add_command(label='Properties', font=self.font, command=self.hostDetails )
-
-        self.legacyRouterPopup = Menu(self.top, tearoff=0)
-        self.legacyRouterPopup.add_command(label='Router Options', font=self.font, command=self.hostDetails)
-
-        self.linkPopup = Menu(self.top, tearoff=0)
-        self.linkPopup.add_command(label='Link Options', font=self.font, command=self.linkDetails)
-        #self.linkPopup.add_separator()
-        #self.linkPopup.add_command(label='Properties', font=self.font, command=self.linkDetails )
-
-        # Event handling initalization
-        self.linkx = self.linky = self.linkItem = None
-        self.lastSelection = None
-
-        # Model initialization
-        self.links = {}
-        self.hostOpts = {}
-        self.switchOpts = {}
-	self.routerOpts = {}
-        self.hostCount = 0
-	self.routerCount = 0
-        self.net = None
-
-        # Close window gracefully
-        Wm.wm_protocol( self.top, name='WM_DELETE_WINDOW', func=self.quit )
-
-    def quit( self ):
-        "Stop our network, if any, then quit."
-        #sself.stop()
-        Frame.quit( self )
-
-    def createMenubar( self ): # MODIFICADO - OK
-        "Create our menu bar."
-
-        font = self.font
-
-        mbar = Menu( self.top, font=font )
-        self.top.configure( menu=mbar )
-
-        fileMenu = Menu( mbar, tearoff=False )
-        mbar.add_cascade( label="File", font=font, menu=fileMenu )
-        fileMenu.add_command( label="New", font=font, command=self.newTopology )
-        fileMenu.add_command( label="Open", font=font, command=self.loadTopology )
-        fileMenu.add_command( label="Save", font=font, command=self.saveTopology )
-        fileMenu.add_command( label="Generate", font=font, command=self.doGenerate )
-        fileMenu.add_separator()
-        fileMenu.add_command( label='Quit', command=self.quit, font=font )
-	
-        editMenu = Menu( mbar, tearoff=False )
-        mbar.add_cascade( label="Edit", font=font, menu=editMenu )
-        editMenu.add_command( label="Cut", font=font,
-                              command=lambda: self.deleteSelection( None ) )
-
-	# Application menu
-        appMenu = Menu( mbar, tearoff=False )
-        mbar.add_cascade( label=self.appName, font=font, menu=appMenu )
-        appMenu.add_command( label='About Mini-CCNx', command=self.about,
-                             font=font)
-        #appMenu.add_separator()
-        #appMenu.add_command( label='Quit', command=self.quit, font=font )
-
-    # Canvas - TUDO IGUAL - OK
-
-    def createCanvas( self ):
-        "Create and return our scrolling canvas frame."
-        f = Frame( self )
-
-        canvas = Canvas( f, width=self.cwidth, height=self.cheight,
-                         bg=self.bg )
-
-        # Scroll bars
-        xbar = Scrollbar( f, orient='horizontal', command=canvas.xview )
-        ybar = Scrollbar( f, orient='vertical', command=canvas.yview )
-        canvas.configure( xscrollcommand=xbar.set, yscrollcommand=ybar.set )
-
-        # Resize box
-        resize = Label( f, bg='white' )
-
-        # Layout
-        canvas.grid( row=0, column=1, sticky='nsew')
-        ybar.grid( row=0, column=2, sticky='ns')
-        xbar.grid( row=1, column=1, sticky='ew' )
-        resize.grid( row=1, column=2, sticky='nsew' )
-
-        # Resize behavior
-        f.rowconfigure( 0, weight=1 )
-        f.columnconfigure( 1, weight=1 )
-        f.grid( row=0, column=0, sticky='nsew' )
-        f.bind( '<Configure>', lambda event: self.updateScrollRegion() )
-
-        # Mouse bindings
-        canvas.bind( '<ButtonPress-1>', self.clickCanvas )
-        canvas.bind( '<B1-Motion>', self.dragCanvas )
-        canvas.bind( '<ButtonRelease-1>', self.releaseCanvas )
-
-        return f, canvas
-
-    def updateScrollRegion( self ):
-        "Update canvas scroll region to hold everything."
-        bbox = self.canvas.bbox( 'all' )
-        if bbox is not None:
-            self.canvas.configure( scrollregion=( 0, 0, bbox[ 2 ],
-                                   bbox[ 3 ] ) )
-
-    def canvasx( self, x_root ):
-        "Convert root x coordinate to canvas coordinate."
-        c = self.canvas
-        return c.canvasx( x_root ) - c.winfo_rootx()
-
-    def canvasy( self, y_root ):
-        "Convert root y coordinate to canvas coordinate."
-        c = self.canvas
-        return c.canvasy( y_root ) - c.winfo_rooty()
-
-    # Toolbar
-
-    def activate( self, toolName ): #IGUAL - OK
-        "Activate a tool and press its button."
-        # Adjust button appearance
-        if self.active:
-            self.buttons[ self.active ].configure( relief='raised' )
-        self.buttons[ toolName ].configure( relief='sunken' )
-        # Activate dynamic bindings
-        self.active = toolName
-
-
-    def createToolTip(self, widget, text): #NOVA - CRIA HINTS E TIPS
-        toolTip = ToolTip(widget)
-        def enter(event):
-            toolTip.showtip(text)
-        def leave(event):
-            toolTip.hidetip()
-        widget.bind('<Enter>', enter)
-        widget.bind('<Leave>', leave)
-
-    def createToolbar( self ): #MODIFICADO - OK
-        "Create and return our toolbar frame."
-
-        toolbar = Frame( self )
-
-        # Tools
-        for tool in self.tools:
-            cmd = ( lambda t=tool: self.activate( t ) )
-            b = Button( toolbar, text=tool, font=self.smallFont, command=cmd)
-            if tool in self.images:
-                b.config( height=35, image=self.images[ tool ] )
-                self.createToolTip(b, str(tool))
-                # b.config( compound='top' )
-            b.pack( fill='x' )
-            self.buttons[ tool ] = b
-        self.activate( self.tools[ 0 ] )
-
-        # Spacer
-        Label( toolbar, text='' ).pack()
-
-	# abaixo copiado Mini-CCNx para criar botao Generate
-
-        for cmd, color in [ ( 'Generate', 'darkGreen' ) ]:
-            doCmd = getattr( self, 'do' + cmd )
-            b = Button( toolbar, text=cmd, font=self.smallFont,
-                        fg=color, command=doCmd )
-            b.pack( fill='x', side='bottom' )
-
-        return toolbar
-
-    def doGenerate( self ): #COPIA Mini-CCNx - GERA TEMPLATE
-        "Generate template."
-        self.activate( 'Select' )
-        for tool in self.tools:
-            self.buttons[ tool ].config( state='disabled' )
-
-        self.buildTemplate()
-
-        for tool in self.tools:
-            self.buttons[ tool ].config( state='normal' )
-
-	toplevel = Toplevel()
-	label1 = Label(toplevel, text="Template file generated successfully", height=0, width=30)
-	label1.pack()
-	b=Button(toplevel, text="Ok", width=5, command=toplevel.destroy)
-	b.pack(side='bottom', padx=0,pady=0)
-
-    def parseFibEntries ( self, fibEntries ):
-	"Parse FIB Entries for write"
-	result=''
-	
-	for fibEntry in fibEntries:
-		entry = ','.join(map(str, fibEntry))
-		result += entry + ' '
-
-	return result
-
-    def buildTemplate( self ): #COPIA Mini-CCNx para criar Template
-        "Generate template"
-
-        template = open(self.template_file, 'w')
-
-        # hosts
-        template.write('[hosts]\n')
-        for widget in self.widgetToItem:
-            name = widget[ 'text' ]
-            tags = self.canvas.gettags( self.widgetToItem[ widget ] )
-	    #print self.hostOpts[name]
-            if 'Host' in tags:
-		hOpts=self.hostOpts[name]
-                template.write(name + ': ')
-		if 'startCommand' in hOpts:
-			template.write(hOpts['startCommand'] + ' ')
-		else:
-			template.write('_ ')
-		if 'cache' in hOpts:
-			template.write('cache=' + hOpts['cache'] + ' ')
-		if 'cpu' in hOpts:
-			cpu=float(hOpts['cpu'])/100
-			template.write('cpu=' + repr(cpu) + ' ')
-		if 'mem' in hOpts:
-			mem=float(hOpts['mem'])/100
-			template.write('mem=' + repr(mem) + ' ')
-		if 'fibEntries' in hOpts:
-			customFib = self.parseFibEntries(hOpts['fibEntries'])
-			template.write(customFib)
-		template.write('\n')
-
-        # switches/routers
-        template.write('[routers]\n')
-
-        for router in self.routerOpts.values():
-
-	    hasOpt='False'
-	    routerName=router['hostname']
-	    #nodetype=router['nodetype']
-	    #nodenum=router['nodenum']
-	    
-	    rOpts=self.routerOpts[routerName]
-
-	    template.write(routerName + ': ')
-
-	    if 'cpu' in rOpts:
-		cpu=float(rOpts['cpu'])/100
-		template.write('cpu=' + repr(cpu) + ' ')
-		hasOpt='True'
-	    if 'mem' in rOpts:
-		mem=float(rOpts['mem'])/100
-		template.write('mem=' + repr(mem) + ' ')
-		hasOpt='True'
-	    if 'cache' in rOpts:
-		template.write('cache=' + rOpts['cache'] + ' ')
-		hasOpt='True'
-	    if 'fibEntries' in rOpts:
-		customFib = self.parseFibEntries(rOpts['fibEntries'])
-		template.write(customFib)
-		hasOpt='True'
-	    if hasOpt == 'False':
-		template.write('_')
-
-	    template.write('\n')
-
-        # Make links
-        template.write('[links]\n')
-        for link in self.links.values():
-             dst=link['dest']
-	     src=link['src']
-	     linkopts=link['linkOpts']
-	     linktype=link['type']
-
-             srcName, dstName = src[ 'text' ], dst[ 'text' ]
-             template.write(srcName + ':' + dstName + ' ')
-	     if 'bw' in linkopts:
-	     	template.write('bw=' + str(linkopts['bw']) + ' ' )
-	     if 'loss' in linkopts:
-	     	template.write('loss=' + repr(linkopts['loss']) + ' ' )
-	     if 'delay' in linkopts:
-	     	template.write('delay=' + str(linkopts['delay']))
-	     
-	     template.write('\n')
-
-	template.close()
-
-    def addNode( self, node, nodeNum, x, y, name=None):
-        "Add a new node to our canvas."
-
-	if 'LegacyRouter' == node:
-	    self.routerCount += 1
-        if 'Host' == node:
-            self.hostCount += 1
-        if name is None:
-            name = self.nodePrefixes[ node ] + nodeNum
-        self.addNamedNode(node, name, x, y)
-
-    def addNamedNode( self, node, name, x, y):
-        "Add a new node to our canvas."
-        c = self.canvas
-        icon = self.nodeIcon( node, name )
-        item = self.canvas.create_window( x, y, anchor='c', window=icon,
-                                          tags=node )
-        self.widgetToItem[ icon ] = item
-        self.itemToWidget[ item ] = icon
-        icon.links = {}
-
-    def convertJsonUnicode(self, input):
-        "Some part of Mininet don't like Unicode"
-        if isinstance(input, dict):
-            return {self.convertJsonUnicode(key): self.convertJsonUnicode(value) for key, value in input.iteritems()}
-        elif isinstance(input, list):
-            return [self.convertJsonUnicode(element) for element in input]
-        elif isinstance(input, unicode):
-            return input.encode('utf-8')
-        else:
-            return input
-
-    def loadTopology( self ):
-        "Load command."
-        c = self.canvas
-
-        myFormats = [
-            ('Miniccnx Topology','*.mnccnx'),
-            ('All Files','*'),
-        ]
-        f = tkFileDialog.askopenfile(filetypes=myFormats, mode='rb')
-        if f == None:
-            return
-        self.newTopology()
-        loadedTopology = self.convertJsonUnicode(json.load(f))
-
-        # Load hosts
-        hosts = loadedTopology['hosts']
-        for host in hosts:
-            nodeNum = host['number']
-            hostname = 'h'+nodeNum
-            if 'hostname' in host['opts']:
-                hostname = host['opts']['hostname']
-            else:
-                host['opts']['hostname'] = hostname
-            if 'nodeNum' not in host['opts']:
-                host['opts']['nodeNum'] = int(nodeNum)
-            x = host['x']
-            y = host['y']
-            self.addNode('Host', nodeNum, float(x), float(y), name=hostname)
-
-            # Fix JSON converting tuple to list when saving
-            if 'privateDirectory' in host['opts']:
-                newDirList = []
-                for privateDir in host['opts']['privateDirectory']:
-                    if isinstance( privateDir, list ):
-                        newDirList.append((privateDir[0],privateDir[1]))
-                    else:
-                        newDirList.append(privateDir)
-                host['opts']['privateDirectory'] = newDirList
-            self.hostOpts[hostname] = host['opts']
-            icon = self.findWidgetByName(hostname)
-            icon.bind('<Button-3>', self.do_hostPopup )
-
-        # Load routers
-        routers = loadedTopology['routers']
-        for router in routers:
-            nodeNum = router['number']
-            hostname = 'r'+nodeNum
-	    #print router
-            if 'nodeType' not in router['opts']:
-                router['opts']['nodeType'] = 'legacyRouter'
-            if 'hostname' in router['opts']:
-                hostname = router['opts']['hostname']
-            else:
-                router['opts']['hostname'] = hostname
-            if 'nodeNum' not in router['opts']:
-                router['opts']['nodeNum'] = int(nodeNum)
-            x = router['x']
-            y = router['y']
-            if router['opts']['nodeType'] == "legacyRouter":
-                self.addNode('LegacyRouter', nodeNum, float(x), float(y), name=hostname)
-                icon = self.findWidgetByName(hostname)
-                icon.bind('<Button-3>', self.do_legacyRouterPopup )
-            self.routerOpts[hostname] = router['opts']
-
-        # Load links
-        links = loadedTopology['links']
-        for link in links:
-            srcNode = link['src']
-            src = self.findWidgetByName(srcNode)
-            sx, sy = self.canvas.coords( self.widgetToItem[ src ] )
-
-            destNode = link['dest']
-            dest = self.findWidgetByName(destNode)
-            dx, dy = self.canvas.coords( self.widgetToItem[ dest ]  )
-
-            self.link = self.canvas.create_line( sx, sy, dx, dy, width=4,
-                                             fill='blue', tag='link' )
-            c.itemconfig(self.link, tags=c.gettags(self.link)+('data',))
-            self.addLink( src, dest, linkopts=link['opts'] )
-            self.createDataLinkBindings()
-            self.link = self.linkWidget = None
-
-        f.close
-
-    def findWidgetByName( self, name ):
-        for widget in self.widgetToItem:
-            if name ==  widget[ 'text' ]:
-                return widget
-
-    def newTopology( self ):
-        "New command."
-        for widget in self.widgetToItem.keys():
-            self.deleteItem( self.widgetToItem[ widget ] )
-        self.hostCount = 0
-        self.routerCount = 0
-        self.links = {}
-        self.hostOpts = {}
-	self.routerOpts = {}
-
-    def saveTopology( self ):
-        "Save command."
-        myFormats = [
-            ('Miniccnx Topology','*.mnccnx'),
-            ('All Files','*'),
-        ]
-
-        savingDictionary = {}
-        fileName = tkFileDialog.asksaveasfilename(filetypes=myFormats ,title="Save the topology as...")
-        if len(fileName ) > 0:
-            # Save Application preferences
-            savingDictionary['version'] = '2'
-
-            # Save routers and Hosts
-            hostsToSave = []
-            routersToSave = []
-
-            for widget in self.widgetToItem:
-                name = widget[ 'text' ]
-                tags = self.canvas.gettags( self.widgetToItem[ widget ] )
-                x1, y1 = self.canvas.coords( self.widgetToItem[ widget ] )
-                if 'LegacyRouter' in tags:
-                    nodeNum = self.routerOpts[name]['nodeNum']
-                    nodeToSave = {'number':str(nodeNum),
-                                  'x':str(x1),
-                                  'y':str(y1),
-                                  'opts':self.routerOpts[name] }
-                    routersToSave.append(nodeToSave)
-                elif 'Host' in tags:
-                    nodeNum = self.hostOpts[name]['nodeNum']
-                    nodeToSave = {'number':str(nodeNum),
-                                  'x':str(x1),
-                                  'y':str(y1),
-                                  'opts':self.hostOpts[name] }
-                    hostsToSave.append(nodeToSave)
-                else:
-                    raise Exception( "Cannot create mystery node: " + name )
-            savingDictionary['hosts'] = hostsToSave
-            savingDictionary['routers'] = routersToSave
-
-            # Save Links
-            linksToSave = []
-            for link in self.links.values():
-                src = link['src']
-                dst = link['dest']
-                linkopts = link['linkOpts']
-
-                srcName, dstName = src[ 'text' ], dst[ 'text' ]
-                linkToSave = {'src':srcName,
-                              'dest':dstName,
-                              'opts':linkopts}
-                if link['type'] == 'data':
-                    linksToSave.append(linkToSave)
-            savingDictionary['links'] = linksToSave
-
-            # Save Application preferences
-            #savingDictionary['application'] = self.appPrefs
-
-            try:
-                f = open(fileName, 'wb')
-                f.write(json.dumps(savingDictionary, sort_keys=True, indent=4, separators=(',', ': ')))
-            except Exception as er:
-                print er
-            finally:
-                f.close()
-
-    # Generic canvas handler
-    #
-    # We could have used bindtags, as in nodeIcon, but
-    # the dynamic approach used here
-    # may actually require less code. In any case, it's an
-    # interesting introspection-based alternative to bindtags.
-
-    def canvasHandle( self, eventName, event ):
-        "Generic canvas event handler"
-        if self.active is None:
-            return
-        toolName = self.active
-        handler = getattr( self, eventName + toolName, None )
-        if handler is not None:
-            handler( event )
-
-    def clickCanvas( self, event ):
-        "Canvas click handler."
-        self.canvasHandle( 'click', event )
-
-    def dragCanvas( self, event ):
-        "Canvas drag handler."
-        self.canvasHandle( 'drag', event )
-
-    def releaseCanvas( self, event ):
-        "Canvas mouse up handler."
-        self.canvasHandle( 'release', event )
-
-    # Currently the only items we can select directly are
-    # links. Nodes are handled by bindings in the node icon.
-
-    def findItem( self, x, y ):
-        "Find items at a location in our canvas."
-        items = self.canvas.find_overlapping( x, y, x, y )
-        if len( items ) == 0:
-            return None
-        else:
-            return items[ 0 ]
-
-    # Canvas bindings for Select, Host, Router and Link tools
-
-    def clickSelect( self, event ):
-        "Select an item."
-        self.selectItem( self.findItem( event.x, event.y ) )
-
-    def deleteItem( self, item ):
-        "Delete an item."
-        # Don't delete while network is running
-        if self.buttons[ 'Select' ][ 'state' ] == 'disabled':
-            return
-        # Delete from model
-        if item in self.links:
-            self.deleteLink( item )
-        if item in self.itemToWidget:
-            self.deleteNode( item )
-        # Delete from view
-        self.canvas.delete( item )
-
-    def deleteSelection( self, _event ):
-        "Delete the selected item."
-        if self.selection is not None:
-            self.deleteItem( self.selection )
-        self.selectItem( None )
-
-    def clearPopups(self):
-	print 'Entrou funcao clear_popups'
-
-    	if isHostPopup == True:
-		print 'Hostpopup = true'
-    		self.hostPopup.unpost
-		isHostPopup = False
-	#if isRouterPopup == True
-	#if isLinkPopup == True
-
-    def nodeIcon( self, node, name ):
-        "Create a new node icon."
-        icon = Button( self.canvas, image=self.images[ node ],
-                       text=name, compound='top' )
-        # Unfortunately bindtags wants a tuple
-        bindtags = [ str( self.nodeBindings ) ]
-        bindtags += list( icon.bindtags() )
-        icon.bindtags( tuple( bindtags ) )
-        return icon
-
-    def newNode( self, node, event ):
-        "Add a new node to our canvas."
-        c = self.canvas
-        x, y = c.canvasx( event.x ), c.canvasy( event.y )
-        name = self.nodePrefixes[ node ]
-
-        if 'LegacyRouter' == node:
-            self.routerCount += 1
-            name = self.nodePrefixes[ node ] + str( self.routerCount )
-            self.routerOpts[name] = {}
-            self.routerOpts[name]['nodeNum']=self.routerCount
-            self.routerOpts[name]['hostname']=name
-            self.routerOpts[name]['nodeType']='legacyRouter'
-
-        if 'Host' == node:
-            self.hostCount += 1
-            name = self.nodePrefixes[ node ] + str( self.hostCount )
-            self.hostOpts[name] = {'sched':'host'}
-            self.hostOpts[name]['nodeNum']=self.hostCount
-            self.hostOpts[name]['hostname']=name
-
-        icon = self.nodeIcon( node, name )
-        item = self.canvas.create_window( x, y, anchor='c', window=icon,
-                                          tags=node )
-        self.widgetToItem[ icon ] = item
-        self.itemToWidget[ item ] = icon
-        self.selectItem( item )
-        icon.links = {}
-        if 'LegacyRouter' == node:
-            icon.bind('<Button-3>', self.do_legacyRouterPopup )
-        if 'Host' == node:
-            icon.bind('<Button-3>', self.do_hostPopup )
-
-    def clickHost( self, event ):
-        "Add a new host to our canvas."
-        self.newNode( 'Host', event )
-
-    def clickLegacyRouter( self, event ):
-        "Add a new router to our canvas."
-        self.newNode( 'LegacyRouter', event )
-
-    def dragNetLink( self, event ):
-        "Drag a link's endpoint to another node."
-        if self.link is None:
-            return
-        # Since drag starts in widget, we use root coords
-        x = self.canvasx( event.x_root )
-        y = self.canvasy( event.y_root )
-        c = self.canvas
-        c.coords( self.link, self.linkx, self.linky, x, y )
-
-    def releaseNetLink( self, _event ):
-        "Give up on the current link."
-        if self.link is not None:
-            self.canvas.delete( self.link )
-        self.linkWidget = self.linkItem = self.link = None
-
-    # Generic node handlers
-
-    def createNodeBindings( self ):
-        "Create a set of bindings for nodes."
-        bindings = {
-            '<ButtonPress-1>': self.clickNode,
-            '<B1-Motion>': self.dragNode,
-            '<ButtonRelease-1>': self.releaseNode,
-            '<Enter>': self.enterNode,
-            '<Leave>': self.leaveNode
-        }
-        l = Label()  # lightweight-ish owner for bindings
-        for event, binding in bindings.items():
-            l.bind( event, binding )
-        return l
-
-    def selectItem( self, item ):
-        "Select an item and remember old selection."
-        self.lastSelection = self.selection
-        self.selection = item
-
-    def enterNode( self, event ):
-        "Select node on entry."
-        self.selectNode( event )
-
-    def leaveNode( self, _event ):
-        "Restore old selection on exit."
-        self.selectItem( self.lastSelection )
-
-    def clickNode( self, event ):
-        "Node click handler."
-        if self.active is 'NetLink':
-            self.startLink( event )
-        else:
-            self.selectNode( event )
-        return 'break'
-
-    def dragNode( self, event ):
-        "Node drag handler."
-        if self.active is 'NetLink':
-            self.dragNetLink( event )
-        else:
-            self.dragNodeAround( event )
-
-    def releaseNode( self, event ):
-        "Node release handler."
-        if self.active is 'NetLink':
-            self.finishLink( event )
-
-    # Specific node handlers
-
-    def selectNode( self, event ):
-        "Select the node that was clicked on."
-        item = self.widgetToItem.get( event.widget, None )
-        self.selectItem( item )
-
-    def dragNodeAround( self, event ):
-        "Drag a node around on the canvas."
-        c = self.canvas
-        # Convert global to local coordinates;
-        # Necessary since x, y are widget-relative
-        x = self.canvasx( event.x_root )
-        y = self.canvasy( event.y_root )
-        w = event.widget
-        # Adjust node position
-        item = self.widgetToItem[ w ]
-        c.coords( item, x, y )
-        # Adjust link positions
-        for dest in w.links:
-            link = w.links[ dest ]
-            item = self.widgetToItem[ dest ]
-            x1, y1 = c.coords( item )
-            c.coords( link, x, y, x1, y1 )
-        self.updateScrollRegion()
-
-    def createDataLinkBindings( self ):
-        "Create a set of bindings for nodes."
-        # Link bindings
-        # Selection still needs a bit of work overall
-        # Callbacks ignore event
-
-        def select( _event, link=self.link ):
-            "Select item on mouse entry."
-            self.selectItem( link )
-
-        def highlight( _event, link=self.link ):
-            "Highlight item on mouse entry."
-            self.selectItem( link )
-            self.canvas.itemconfig( link, fill='green' )
-
-        def unhighlight( _event, link=self.link ):
-            "Unhighlight item on mouse exit."
-            self.canvas.itemconfig( link, fill='blue' )
-            #self.selectItem( None )
-
-        self.canvas.tag_bind( self.link, '<Enter>', highlight )
-        self.canvas.tag_bind( self.link, '<Leave>', unhighlight )
-        self.canvas.tag_bind( self.link, '<ButtonPress-1>', select )
-        self.canvas.tag_bind( self.link, '<Button-3>', self.do_linkPopup )
-
-    def startLink( self, event ):
-        "Start a new link."
-        if event.widget not in self.widgetToItem:
-            # Didn't click on a node
-            return
-
-        w = event.widget
-        item = self.widgetToItem[ w ]
-        x, y = self.canvas.coords( item )
-        self.link = self.canvas.create_line( x, y, x, y, width=4,
-                                             fill='blue', tag='link' )
-        self.linkx, self.linky = x, y
-        self.linkWidget = w
-        self.linkItem = item
-
-    def finishLink( self, event ):
-        "Finish creating a link"
-        if self.link is None:
-            return
-        source = self.linkWidget
-        c = self.canvas
-        # Since we dragged from the widget, use root coords
-        x, y = self.canvasx( event.x_root ), self.canvasy( event.y_root )
-        target = self.findItem( x, y )
-        dest = self.itemToWidget.get( target, None )
-        if ( source is None or dest is None or source == dest
-                or dest in source.links or source in dest.links ):
-            self.releaseNetLink( event )
-            return
-        # For now, don't allow hosts to be directly linked
-        stags = self.canvas.gettags( self.widgetToItem[ source ] )
-        dtags = self.canvas.gettags( target )
-        if (('Host' in stags and 'Host' in dtags)):
-            self.releaseNetLink( event )
-            return
-
-        # Set link type
-        linkType='data'
-	
-	self.createDataLinkBindings()
-        c.itemconfig(self.link, tags=c.gettags(self.link)+(linkType,))
-
-        x, y = c.coords( target )
-        c.coords( self.link, self.linkx, self.linky, x, y )
-        self.addLink( source, dest, linktype=linkType )
-        
-        # We're done
-        self.link = self.linkWidget = None
-
-    # Menu handlers
-
-    def about( self ):
-        "Display about box."
-        about = self.aboutBox
-        if about is None:
-            bg = 'white'
-            about = Toplevel( bg='white' )
-            about.title( 'About' )
-            info = self.appName + ': a simple network editor for MiniCCNx - based on Miniedit'
-	    warning = 'Development version - not entirely functional!'
-            #version = 'MiniEdit '+MINIEDIT_VERSION
-	    author = 'Carlos Cabral, Jan 2013'
-	    author2 = 'Caio Elias, Nov 2014'
-            author3 = 'Originally by: Bob Lantz <rlantz@cs>, April 2010'
-            enhancements = 'Enhancements by: Gregory Gee, Since July 2013'
-            www = 'http://gregorygee.wordpress.com/category/miniedit/'
-            line1 = Label( about, text=info, font='Helvetica 10 bold', bg=bg )
-            line2 = Label( about, text=warning, font='Helvetica 9', bg=bg )
-            line3 = Label( about, text=author, font='Helvetica 9', bg=bg )
-	    line4 = Label( about, text=author2, font='Helvetica 9', bg=bg )
-	    line5 = Label( about, text=author3, font='Helvetica 9', bg=bg )
-            line6 = Label( about, text=enhancements, font='Helvetica 9', bg=bg )
-            line7 = Entry( about, font='Helvetica 9', bg=bg, width=len(www), justify=CENTER )
-	    
-
-            line7.insert(0, www)
-            line7.configure(state='readonly')
-            line1.pack( padx=20, pady=10 )
-            line2.pack(pady=10 )
-            line3.pack(pady=10 )
-            line4.pack(pady=10 )
-            line5.pack(pady=10 )
-	    line6.pack(pady=10 )
-	    line7.pack(pady=10 )
-            hide = ( lambda about=about: about.withdraw() )
-            self.aboutBox = about
-            # Hide on close rather than destroying window
-            Wm.wm_protocol( about, name='WM_DELETE_WINDOW', func=hide )
-        # Show (existing) window
-        about.deiconify()
-
-    def createToolImages( self ):
-        "Create toolbar (and icon) images."
-
-    def hostDetails( self, _ignore=None ):
-        if ( self.selection is None or
-             self.net is not None or
-             self.selection not in self.itemToWidget ):
-            return
-        widget = self.itemToWidget[ self.selection ]
-        name = widget[ 'text' ]
-        tags = self.canvas.gettags( self.selection )
-
-	#print tags
-        if 'Host' in tags:
-
-        	prefDefaults = self.hostOpts[name]
-        	hostBox = HostDialog(self, title='Host Details', prefDefaults=prefDefaults, isRouter='False')
-        	self.master.wait_window(hostBox.top)
-        	if hostBox.result:
-		    newHostOpts = {'nodeNum':self.hostOpts[name]['nodeNum']}
-
-		    if len(hostBox.result['startCommand']) > 0:
-		        newHostOpts['startCommand'] = hostBox.result['startCommand']
-		    if hostBox.result['cpu']:
-		        newHostOpts['cpu'] = hostBox.result['cpu']
-		    if hostBox.result['mem']:
-		        newHostOpts['mem'] = hostBox.result['mem']
-		    if len(hostBox.result['hostname']) > 0:
-		        newHostOpts['hostname'] = hostBox.result['hostname']
-		        name = hostBox.result['hostname']
-		        widget[ 'text' ] = name
-		    if len(hostBox.result['cache']) > 0:
-		        newHostOpts['cache'] = hostBox.result['cache']
-		    if len(hostBox.result['fibEntries']) > 0:
-		        newHostOpts['fibEntries'] = hostBox.result['fibEntries']
-		    self.hostOpts[name] = newHostOpts
-
-		    print 'New host details for ' + name + ' = ' + str(newHostOpts)
-
-	elif 'LegacyRouter' in tags:
-
-		prefDefaults = self.routerOpts[name]
-        	hostBox = HostDialog(self, title='Router Details', prefDefaults=prefDefaults, isRouter='True')
-        	self.master.wait_window(hostBox.top)
-        	if hostBox.result:
-		    newRouterOpts = {'nodeNum':self.routerOpts[name]['nodeNum']}
-
-		    if hostBox.result['cpu']:
-		        newRouterOpts['cpu'] = hostBox.result['cpu']
-		    if hostBox.result['mem']:
-		        newRouterOpts['mem'] = hostBox.result['mem']
-		    if len(hostBox.result['hostname']) > 0:
-		        newRouterOpts['hostname'] = hostBox.result['hostname']
-		        name = hostBox.result['hostname']
-		        widget[ 'text' ] = name
-		    if len(hostBox.result['cache']) > 0:
-		        newRouterOpts['cache'] = hostBox.result['cache']
-		    if len(hostBox.result['fibEntries']) > 0:
-		        newRouterOpts['fibEntries'] = hostBox.result['fibEntries']
-		    self.routerOpts[name] = newRouterOpts
-
-		    print 'New host details for ' + name + ' = ' + str(newRouterOpts)
-
-    def linkDetails( self, _ignore=None ):
-        if ( self.selection is None or
-             self.net is not None):
-            return
-        link = self.selection
-
-        linkDetail =  self.links[link]
-        src = linkDetail['src']
-        dest = linkDetail['dest']
-        linkopts = linkDetail['linkOpts']
-        linkBox = LinkDialog(self, title='Link Details', linkDefaults=linkopts)
-        if linkBox.result is not None:
-            linkDetail['linkOpts'] = linkBox.result
-            print 'New link details = ' + str(linkBox.result)
-
-    # Model interface
-    #
-    # Ultimately we will either want to use a topo or
-    # mininet object here, probably.
-
-    def addLink( self, source, dest, linktype='data', linkopts={} ):
-        "Add link to model."
-        source.links[ dest ] = self.link
-        dest.links[ source ] = self.link
-        self.links[ self.link ] = {'type' :linktype,
-                                   'src':source,
-                                   'dest':dest,
-                                   'linkOpts':linkopts}
-
-    def deleteLink( self, link ):
-        "Delete link from model."
-        pair = self.links.get( link, None )
-        if pair is not None:
-            source=pair['src']
-            dest=pair['dest']
-            del source.links[ dest ]
-            del dest.links[ source ]
-            stags = self.canvas.gettags( self.widgetToItem[ source ] )
-            dtags = self.canvas.gettags( self.widgetToItem[ dest ] )
-            ltags = self.canvas.gettags( link )
-
-        if link is not None:
-            del self.links[ link ]
-
-    def deleteNode( self, item ):
-        "Delete node (and its links) from model."
-
-        widget = self.itemToWidget[ item ]
-        tags = self.canvas.gettags(item)
-            
-        for link in widget.links.values():
-            # Delete from view and model
-            self.deleteItem( link )
-        del self.itemToWidget[ item ]
-        del self.widgetToItem[ widget ]
-
-    def do_linkPopup(self, event):
-        # display the popup menu
-        if ( self.net is None ):
-            try:
-                self.linkPopup.tk_popup(event.x_root, event.y_root)
-            finally:
-                # make sure to release the grab (Tk 8.0a1 only)
-                self.linkPopup.grab_release()
-
-    def do_legacyRouterPopup(self, event):
-        # display the popup menu
-        if ( self.net is None ):
-            try:
-                self.legacyRouterPopup.tk_popup(event.x_root, event.y_root)
-            finally:
-                # make sure to release the grab (Tk 8.0a1 only)
-                self.legacyRouterPopup.grab_release()
-
-    def do_hostPopup(self, event):
-        # display the popup menu
-        if ( self.net is None ):
-		try:
-		    self.hostPopup.tk_popup(event.x_root, event.y_root)
-		    isHostPopup = True
-		finally:
-		    # make sure to release the grab (Tk 8.0a1 only)
-		    self.hostPopup.grab_release()
-
-    def xterm( self, _ignore=None ):
-        "Make an xterm when a button is pressed."
-        if ( self.selection is None or
-             self.net is None or
-             self.selection not in self.itemToWidget ):
-            return
-        name = self.itemToWidget[ self.selection ][ 'text' ]
-        if name not in self.net.nameToNode:
-            return
-        term = makeTerm( self.net.nameToNode[ name ], 'Host', term=self.appPrefs['terminalType'] )
-        if StrictVersion(MININET_VERSION) > StrictVersion('2.0'):
-            self.net.terms += term
-        else:
-            self.net.terms.append(term)
-
-    def iperf( self, _ignore=None ):
-        "Make an xterm when a button is pressed."
-        if ( self.selection is None or
-             self.net is None or
-             self.selection not in self.itemToWidget ):
-            return
-        name = self.itemToWidget[ self.selection ][ 'text' ]
-        if name not in self.net.nameToNode:
-            return
-        self.net.nameToNode[ name ].cmd( 'iperf -s -p 5001 &' )
-
-    """ BELOW HERE IS THE TOPOLOGY IMPORT CODE """
-
-    def parseArgs( self ):
-        """Parse command-line args and return options object.
-           returns: opts parse options dict"""
-
-        if '--custom' in sys.argv:
-            index = sys.argv.index( '--custom' )
-            if len( sys.argv ) > index + 1:
-                filename = sys.argv[ index + 1 ]
-                self.parseCustomFile( filename )
-            else:
-                raise Exception( 'Custom file name not found' )
-
-        desc = ( "The %prog utility creates Miniccnx network from the\n"
-                 "command line. It can create parametrized topologies,\n"
-                 "invoke the Miniccnx CLI, and run tests." )
-
-        usage = ( '%prog [options] [template_file]\n'
-		  '\nIf no template_file is given, generated template will be written to the file miniccnx.conf in the current directory.\n'
-                  'Type %prog -h for details)' )
-
-        opts = OptionParser( description=desc, usage=usage )
-
-        addDictOption( opts, TOPOS, TOPODEF, 'topo' )
-        addDictOption( opts, LINKS, LINKDEF, 'link' )
-
-        opts.add_option( '--custom', type='string', default=None,
-                         help='read custom topo and node params from .py' +
-                         'file' )
-
-        self.options, self.args = opts.parse_args()
-        # We don't accept extra arguments after the options
-        if self.args:
-	     if len(self.args) > 1:
-	     	opts.print_help()
-             	exit()
-	     else:
-	     	self.template_file=self.args[0]
-
-    def setCustom( self, name, value ):
-        "Set custom parameters for MininetRunner."
-        if name in ( 'topos', 'switches', 'hosts', 'controllers' ):
-            # Update dictionaries
-            param = name.upper()
-            globals()[ param ].update( value )
-        elif name == 'validate':
-            # Add custom validate function
-            self.validate = value
-        else:
-            # Add or modify global variable or class
-            globals()[ name ] = value
-
-    def parseCustomFile( self, fileName ):
-        "Parse custom file and add params before parsing cmd-line options."
-        customs = {}
-        if os.path.isfile( fileName ):
-            execfile( fileName, customs, customs )
-            for name, val in customs.iteritems():
-                self.setCustom( name, val )
-        else:
-            raise Exception( 'could not find custom file: %s' % fileName )
-
-    def importTopo( self ):
-        print 'topo='+self.options.topo
-        if self.options.topo == 'none':
-            return
-        self.newTopology()
-        topo = buildTopo( TOPOS, self.options.topo )
-        link = customConstructor( LINKS, self.options.link )
-        importNet = Mininet(topo=topo, build=False, link=link)
-        importNet.build()
-
-        c = self.canvas
-        rowIncrement = 100
-        currentY = 100
-
-        # Add switches
-        print 'switches:'+str(len(importNet.switches))
-        columnCount = 0
-        for switch in importNet.switches:
-            name = switch.name
-            self.switchOpts[name] = {}
-            self.switchOpts[name]['nodeNum']=self.switchCount
-            self.switchOpts[name]['hostname']=name
-            self.switchOpts[name]['switchType']='default'
-            self.switchOpts[name]['controllers']=[]
-
-            x = columnCount*100+100
-            self.addNode('Switch', self.switchCount,
-                 float(x), float(currentY), name=name)
-            icon = self.findWidgetByName(name)
-            icon.bind('<Button-3>', self.do_switchPopup )
-
-            if columnCount == 9:
-                columnCount = 0
-                currentY = currentY + rowIncrement
-            else:
-                columnCount =columnCount+1
-
-        currentY = currentY + rowIncrement
-        # Add hosts
-        print 'hosts:'+str(len(importNet.hosts))
-        columnCount = 0
-        for host in importNet.hosts:
-            name = host.name
-            self.hostOpts[name] = {'sched':'host'}
-            self.hostOpts[name]['nodeNum']=self.hostCount
-            self.hostOpts[name]['hostname']=name
-            #self.hostOpts[name]['ip']=host.IP()
-
-            x = columnCount*100+100
-            self.addNode('Host', self.hostCount,
-                 float(x), float(currentY), name=name)
-            icon = self.findWidgetByName(name)
-            icon.bind('<Button-3>', self.do_hostPopup )
-            if columnCount == 9:
-                columnCount = 0
-                currentY = currentY + rowIncrement
-            else:
-                columnCount =columnCount+1
-
-        print 'links:'+str(len(topo.links()))
-        #[('h1', 's3'), ('h2', 's4'), ('s3', 's4')]
-        for link in topo.links():
-            print str(link)
-            srcNode = link[0]
-            src = self.findWidgetByName(srcNode)
-            sx, sy = self.canvas.coords( self.widgetToItem[ src ] )
-
-            destNode = link[1]
-            dest = self.findWidgetByName(destNode)
-            dx, dy = self.canvas.coords( self.widgetToItem[ dest]  )
-
-            params = topo.linkInfo( srcNode, destNode )
-            print 'Link Parameters='+str(params)
-
-            self.link = self.canvas.create_line( sx, sy, dx, dy, width=4,
-                                             fill='blue', tag='link' )
-            c.itemconfig(self.link, tags=c.gettags(self.link)+('data',))
-            self.addLink( src, dest, linkopts=params )
-            self.createDataLinkBindings()
-            self.link = self.linkWidget = None
-
-        importNet.stop()
-
-def miniEditImages():
-    "Create and return images for MiniEdit."
-
-    # Image data. Git will be unhappy. However, the alternative
-    # is to keep track of separate binary files, which is also
-    # unappealing.
-
-    return {
-        'Select': BitmapImage(
-            file='/usr/include/X11/bitmaps/left_ptr' ),
-
-        'LegacyRouter': PhotoImage( data=r"""
-	    R0lGODlhMgAYAPcAAAEBAXZ8gQNAgL29vQNctjl/xVSa4j1dfCF+
-	    3QFq1DmL3wJMmAMzZZW11dnZ2SFrtyNdmTSO6gIZMUKa8gJVqEOH
-	    zR9Pf5W74wFjxgFx4jltn+np6Eyi+DuT6qKiohdtwwUPGWiq6ymF
-	    4LHH3Rh11CV81kKT5AMoUA9dq1ap/mV0gxdXlytRdR1ptRNPjTt9
-	    vwNgvwJZsX+69gsXJQFHjTtjizF0tvHx8VOm9z2V736Dhz2N3QM2
-	    acPZ70qe8gFo0HS19wVRnTiR6hMpP0eP1i6J5iNlqAtgtktjfQFu
-	    3TNxryx4xAMTIzOE1XqAh1uf5SWC4AcfNy1XgQJny93n8a2trRh3
-	    12Gt+VGm/AQIDTmByAF37QJasydzvxM/ayF3zhdLf8zLywFdu4i5
-	    6gFlyi2J4yV/1w8wUo2/8j+X8D2Q5Eee9jeR7Uia7DpeggFt2QNP
-	    m97e3jRong9bpziH2DuT7aipqQoVICmG45vI9R5720eT4Q1hs1er
-	    /yVVhwJJktPh70tfdbHP7Xev5xs5V7W1sz9jhz11rUVZcQ9WoCVV
-	    hQk7cRdtwWuw9QYOFyFHbSBnr0dznxtWkS18zKfP9wwcLAMHCwFF
-	    iS5UeqGtuRNNiwMfPS1hlQMtWRE5XzGM5yhxusLCwCljnwMdOFWh
-	    7cve8pG/7Tlxp+Tr8g9bpXF3f0lheStrrYu13QEXLS1ppTV3uUuR
-	    1RMjNTF3vU2X4TZupwRSolNne4nB+T+L2YGz4zJ/zYe99YGHjRdD
-	    cT95sx09XQldsgMLEwMrVc/X3yN3yQ1JhTRbggsdMQNfu9HPz6Wl
-	    pW2t7RctQ0GFyeHh4dvl8SBZklCb5kOO2kWR3Vmt/zdjkQIQHi90
-	    uvPz8wIVKBp42SV5zbfT7wtXpStVfwFWrBVvyTt3swFz5kGBv2+1
-	    /QlbrVFjdQM7d1+j54i67UmX51qn9i1vsy+D2TuR5zddhQsjOR1t
-	    u0GV6ghbsDVZf4+76RRisent8Xd9hQFBgwFNmwJLlcPDwwFr1z2T
-	    5yH5BAEAAAAALAAAAAAyABgABwj/AAEIHEiQYJY7Qwg9UsTplRIb
-	    ENuxEiXJgpcz8e5YKsixY8Essh7JcbbOBwcOa1JOmJAmTY4cHeoI
-	    abJrCShI0XyB8YRso0eOjoAdWpciBZajJ1GuWcnSZY46Ed5N8hPA
-	    TqEBoRB9gVJsxRlhPwHI0kDkVywcRpGe9LF0adOnMpt8CxDnxg1o
-	    9lphKoEACoIvmlxxvHOKVg0n/Tzku2WoVoU2J1P6WNkSrtwADuxC
-	    G/MOjwgRUEIjGG3FhaOBzaThiDSCil27G8Isc3LLjZwXsA6YYJmD
-	    jhTMmseoKQIFDx7RoxHo2abnwygAlUj1mV6tWjlelEpRwfd6gzI7
-	    VeJQ/2vZoVaDUqigqftXpH0R46H9Kl++zUo4JnKq9dGvv09RHFhc
-	    IUMe0NiFDyql0OJUHWywMc87TXRhhCRGiHAccvNZUR8JxpDTH38p
-	    9HEUFhxgMSAvjbBjQge8PSXEC6uo0IsHA6gAAShmgCbffNtsQwIJ
-	    ifhRHX/TpUUiSijlUk8AqgQixSwdNBjCa7CFoVggmEgCyRf01WcF
-	    CYvYUgB104k4YlK5HONEXXfpokYdMrXRAzMhmNINNNzB9p0T57Ag
-	    yZckpKKPGFNgw06ZWKR10jTw6MAmFWj4AJcQQkQQwSefvFeGCemM
-	    IQggeaJywSQ/wgHOAmJskQEfWqBlFBEH1P/QaGY3QOpDZXA2+A6m
-	    7hl3IRQKGDCIAj6iwE8yGKC6xbJv8IHNHgACQQybN2QiTi5NwdlB
-	    pZdiisd7vyanByOJ7CMGGRhgwE+qyy47DhnBPLDLEzLIAEQjBtCh
-	    RmVPNWgpr+Be+Nc9icARww9TkIEuDAsQ0O7DzGIQzD2QdDEJHTsI
-	    AROc3F7qWQncyHPPHN5QQAAG/vjzw8oKp8sPPxDH3O44/kwBQzLB
-	    xBCMOTzzHEMMBMBARgJvZJBBEm/4k0ACKydMBgwYoKNNEjJXbTXE
-	    42Q9jtFIp8z0Dy1jQMA1AGziz9VoW7310V0znYDTGMQgwUDXLDBO
-	    2nhvoTXbbyRk/XXL+pxWkAT8UJ331WsbnbTSK8MggDZhCTOMLQkc
-	    jvXeSPedAAw0nABWWARZIgEDfyTzxt15Z53BG1PEcEknrvgEelhZ
-	    MDHKCTwI8EcQFHBBAAFcgGPLHwLwcMIo12Qxu0ABAQA7
-            """),
-
-        'Host': PhotoImage( data=r"""
-            R0lGODlhIAAYAPcAMf//////zP//mf//Zv//M///AP/M///MzP/M
-            mf/MZv/MM//MAP+Z//+ZzP+Zmf+ZZv+ZM/+ZAP9m//9mzP9mmf9m
-            Zv9mM/9mAP8z//8zzP8zmf8zZv8zM/8zAP8A//8AzP8Amf8AZv8A
-            M/8AAMz//8z/zMz/mcz/Zsz/M8z/AMzM/8zMzMzMmczMZszMM8zM
-            AMyZ/8yZzMyZmcyZZsyZM8yZAMxm/8xmzMxmmcxmZsxmM8xmAMwz
-            /8wzzMwzmcwzZswzM8wzAMwA/8wAzMwAmcwAZswAM8wAAJn//5n/
-            zJn/mZn/Zpn/M5n/AJnM/5nMzJnMmZnMZpnMM5nMAJmZ/5mZzJmZ
-            mZmZZpmZM5mZAJlm/5lmzJlmmZlmZplmM5lmAJkz/5kzzJkzmZkz
-            ZpkzM5kzAJkA/5kAzJkAmZkAZpkAM5kAAGb//2b/zGb/mWb/Zmb/
-            M2b/AGbM/2bMzGbMmWbMZmbMM2bMAGaZ/2aZzGaZmWaZZmaZM2aZ
-            AGZm/2ZmzGZmmWZmZmZmM2ZmAGYz/2YzzGYzmWYzZmYzM2YzAGYA
-            /2YAzGYAmWYAZmYAM2YAADP//zP/zDP/mTP/ZjP/MzP/ADPM/zPM
-            zDPMmTPMZjPMMzPMADOZ/zOZzDOZmTOZZjOZMzOZADNm/zNmzDNm
-            mTNmZjNmMzNmADMz/zMzzDMzmTMzZjMzMzMzADMA/zMAzDMAmTMA
-            ZjMAMzMAAAD//wD/zAD/mQD/ZgD/MwD/AADM/wDMzADMmQDMZgDM
-            MwDMAACZ/wCZzACZmQCZZgCZMwCZAABm/wBmzABmmQBmZgBmMwBm
-            AAAz/wAzzAAzmQAzZgAzMwAzAAAA/wAAzAAAmQAAZgAAM+4AAN0A
-            ALsAAKoAAIgAAHcAAFUAAEQAACIAABEAAADuAADdAAC7AACqAACI
-            AAB3AABVAABEAAAiAAARAAAA7gAA3QAAuwAAqgAAiAAAdwAAVQAA
-            RAAAIgAAEe7u7t3d3bu7u6qqqoiIiHd3d1VVVURERCIiIhEREQAA
-            ACH5BAEAAAAALAAAAAAgABgAAAiNAAH8G0iwoMGDCAcKTMiw4UBw
-            BPXVm0ixosWLFvVBHFjPoUeC9Tb+6/jRY0iQ/8iVbHiS40CVKxG2
-            HEkQZsyCM0mmvGkw50uePUV2tEnOZkyfQA8iTYpTKNOgKJ+C3AhO
-            p9SWVaVOfWj1KdauTL9q5UgVbFKsEjGqXVtP40NwcBnCjXtw7tx/
-            C8cSBBAQADs=
-        """ ),
-
-        'NetLink': PhotoImage( data=r"""
-            R0lGODlhFgAWAPcAMf//////zP//mf//Zv//M///AP/M///MzP/M
-            mf/MZv/MM//MAP+Z//+ZzP+Zmf+ZZv+ZM/+ZAP9m//9mzP9mmf9m
-            Zv9mM/9mAP8z//8zzP8zmf8zZv8zM/8zAP8A//8AzP8Amf8AZv8A
-            M/8AAMz//8z/zMz/mcz/Zsz/M8z/AMzM/8zMzMzMmczMZszMM8zM
-            AMyZ/8yZzMyZmcyZZsyZM8yZAMxm/8xmzMxmmcxmZsxmM8xmAMwz
-            /8wzzMwzmcwzZswzM8wzAMwA/8wAzMwAmcwAZswAM8wAAJn//5n/
-            zJn/mZn/Zpn/M5n/AJnM/5nMzJnMmZnMZpnMM5nMAJmZ/5mZzJmZ
-            mZmZZpmZM5mZAJlm/5lmzJlmmZlmZplmM5lmAJkz/5kzzJkzmZkz
-            ZpkzM5kzAJkA/5kAzJkAmZkAZpkAM5kAAGb//2b/zGb/mWb/Zmb/
-            M2b/AGbM/2bMzGbMmWbMZmbMM2bMAGaZ/2aZzGaZmWaZZmaZM2aZ
-            AGZm/2ZmzGZmmWZmZmZmM2ZmAGYz/2YzzGYzmWYzZmYzM2YzAGYA
-            /2YAzGYAmWYAZmYAM2YAADP//zP/zDP/mTP/ZjP/MzP/ADPM/zPM
-            zDPMmTPMZjPMMzPMADOZ/zOZzDOZmTOZZjOZMzOZADNm/zNmzDNm
-            mTNmZjNmMzNmADMz/zMzzDMzmTMzZjMzMzMzADMA/zMAzDMAmTMA
-            ZjMAMzMAAAD//wD/zAD/mQD/ZgD/MwD/AADM/wDMzADMmQDMZgDM
-            MwDMAACZ/wCZzACZmQCZZgCZMwCZAABm/wBmzABmmQBmZgBmMwBm
-            AAAz/wAzzAAzmQAzZgAzMwAzAAAA/wAAzAAAmQAAZgAAM+4AAN0A
-            ALsAAKoAAIgAAHcAAFUAAEQAACIAABEAAADuAADdAAC7AACqAACI
-            AAB3AABVAABEAAAiAAARAAAA7gAA3QAAuwAAqgAAiAAAdwAAVQAA
-            RAAAIgAAEe7u7t3d3bu7u6qqqoiIiHd3d1VVVURERCIiIhEREQAA
-            ACH5BAEAAAAALAAAAAAWABYAAAhIAAEIHEiwoEGBrhIeXEgwoUKG
-            Cx0+hGhQoiuKBy1irChxY0GNHgeCDAlgZEiTHlFuVImRJUWXEGEy
-            lBmxI8mSNknm1Dnx5sCAADs=
-        """ )
-    }
-
-def addDictOption( opts, choicesDict, default, name, helpStr=None ):
-    """Convenience function to add choices dicts to OptionParser.
-       opts: OptionParser instance
-       choicesDict: dictionary of valid choices, must include default
-       default: default choice key
-       name: long option name
-       help: string"""
-    if default not in choicesDict:
-        raise Exception( 'Invalid  default %s for choices dict: %s' %
-                         ( default, name ) )
-    if not helpStr:
-        helpStr = ( '|'.join( sorted( choicesDict.keys() ) ) +
-                    '[,param=value...]' )
-    opts.add_option( '--' + name,
-                     type='string',
-                     default = default,
-                     help = helpStr )
-
-if __name__ == '__main__':
-    setLogLevel( 'info' )
-    app = MiniEdit()
-    """ import topology if specified """
-    app.parseArgs()
-    app.importTopo()
-
-    global isHostPopup
-    global isRouterPopup
-    global isLinkPopup
-
-    app.mainloop()
diff --git a/bin/mn b/bin/mn
deleted file mode 100755
index 0fb5bae..0000000
--- a/bin/mn
+++ /dev/null
@@ -1,280 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Mininet runner
-author: Brandon Heller (brandonh@stanford.edu)
-
-To see options:
-  sudo mn -h
-
-Example to pull custom params (topo, switch, etc.) from a file:
-  sudo mn --custom ~/mininet/custom/custom_example.py
-"""
-
-from optparse import OptionParser
-import os
-import sys
-import time
-
-# Fix setuptools' evil madness, and open up (more?) security holes
-if 'PYTHONPATH' in os.environ:
-    sys.path = os.environ[ 'PYTHONPATH' ].split( ':' ) + sys.path
-
-from mininet.clean import cleanup
-from mininet.cli import CLI
-from mininet.log import lg, LEVELS, info
-from mininet.net import Mininet, MininetWithControlNet, VERSION
-from mininet.node import ( Host, CPULimitedHost, Controller, OVSController,
-                           NOX, RemoteController, UserSwitch, OVSKernelSwitch,
-                           OVSLegacyKernelSwitch )
-from mininet.link import Link, TCLink
-from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
-from mininet.topolib import TreeTopo
-from mininet.util import custom, customConstructor
-from mininet.util import buildTopo
-
-
-# built in topologies, created only when run
-TOPODEF = 'minimal'
-TOPOS = { 'minimal': lambda: SingleSwitchTopo( k=2 ),
-          'linear': LinearTopo,
-          'reversed': SingleSwitchReversedTopo,
-          'single': SingleSwitchTopo,
-          'tree': TreeTopo }
-
-SWITCHDEF = 'ovsk'
-SWITCHES = { 'user': UserSwitch,
-             'ovsk': OVSKernelSwitch,
-             'ovsl': OVSLegacyKernelSwitch }
-
-HOSTDEF = 'proc'
-HOSTS = { 'proc': Host,
-          'rt': custom( CPULimitedHost, sched='rt' ),
-          'cfs': custom( CPULimitedHost, sched='cfs' ) }
-
-CONTROLLERDEF = 'ovsc'
-CONTROLLERS = { 'ref': Controller,
-                'ovsc': OVSController,
-                'nox': NOX,
-                'remote': RemoteController,
-                'none': lambda name: None }
-
-LINKDEF = 'default'
-LINKS = { 'default': Link,
-          'tc': TCLink }
-
-
-# optional tests to run
-TESTS = [ 'cli', 'build', 'pingall', 'pingpair', 'iperf', 'all', 'iperfudp',
-          'none' ]
-
-ALTSPELLING = { 'pingall': 'pingAll',
-                'pingpair': 'pingPair',
-                'iperfudp': 'iperfUdp',
-                'iperfUDP': 'iperfUdp',
-                'prefixlen': 'prefixLen' }
-
-
-def addDictOption( opts, choicesDict, default, name, helpStr=None ):
-    """Convenience function to add choices dicts to OptionParser.
-       opts: OptionParser instance
-       choicesDict: dictionary of valid choices, must include default
-       default: default choice key
-       name: long option name
-       help: string"""
-    if default not in choicesDict:
-        raise Exception( 'Invalid  default %s for choices dict: %s' %
-                         ( default, name ) )
-    if not helpStr:
-        helpStr = ( '|'.join( sorted( choicesDict.keys() ) ) +
-                    '[,param=value...]' )
-    opts.add_option( '--' + name,
-                     type='string',
-                     default = default,
-                     help = helpStr )
-
-
-def version( *_args ):
-    "Print Mininet version and exit"
-    print "%s" % VERSION
-    exit()
-
-class MininetRunner( object ):
-    "Build, setup, and run Mininet."
-
-    def __init__( self ):
-        "Init."
-        self.options = None
-        self.args = None  # May be used someday for more CLI scripts
-        self.validate = None
-
-        self.parseArgs()
-        self.setup()
-        self.begin()
-
-    def setCustom( self, name, value ):
-        "Set custom parameters for MininetRunner."
-        if name in ( 'topos', 'switches', 'hosts', 'controllers' ):
-            # Update dictionaries
-            param = name.upper()
-            globals()[ param ].update( value )
-        elif name == 'validate':
-            # Add custom validate function
-            self.validate = value
-        else:
-            # Add or modify global variable or class
-            globals()[ name ] = value
-
-    def parseCustomFile( self, fileName ):
-        "Parse custom file and add params before parsing cmd-line options."
-        customs = {}
-        if os.path.isfile( fileName ):
-            execfile( fileName, customs, customs )
-            for name, val in customs.iteritems():
-                self.setCustom( name, val )
-        else:
-            raise Exception( 'could not find custom file: %s' % fileName )
-
-    def parseArgs( self ):
-        """Parse command-line args and return options object.
-           returns: opts parse options dict"""
-        if '--custom' in sys.argv:
-            index = sys.argv.index( '--custom' )
-            if len( sys.argv ) > index + 1:
-                filename = sys.argv[ index + 1 ]
-                self.parseCustomFile( filename )
-            else:
-                raise Exception( 'Custom file name not found' )
-
-        desc = ( "The %prog utility creates Mininet network from the\n"
-                 "command line. It can create parametrized topologies,\n"
-                 "invoke the Mininet CLI, and run tests." )
-
-        usage = ( '%prog [options]\n'
-                  '(type %prog -h for details)' )
-
-        opts = OptionParser( description=desc, usage=usage )
-        addDictOption( opts, SWITCHES, SWITCHDEF, 'switch' )
-        addDictOption( opts, HOSTS, HOSTDEF, 'host' )
-        addDictOption( opts, CONTROLLERS, CONTROLLERDEF, 'controller' )
-        addDictOption( opts, LINKS, LINKDEF, 'link' )
-        addDictOption( opts, TOPOS, TOPODEF, 'topo' )
-
-        opts.add_option( '--clean', '-c', action='store_true',
-                         default=False, help='clean and exit' )
-        opts.add_option( '--custom', type='string', default=None,
-                         help='read custom topo and node params from .py' +
-                         'file' )
-        opts.add_option( '--test', type='choice', choices=TESTS,
-                         default=TESTS[ 0 ],
-                         help='|'.join( TESTS ) )
-        opts.add_option( '--xterms', '-x', action='store_true',
-                         default=False, help='spawn xterms for each node' )
-        opts.add_option( '--ipbase', '-i', type='string', default='10.0.0.0/8',
-                         help='base IP address for hosts' )
-        opts.add_option( '--mac', action='store_true',
-                         default=False, help='automatically set host MACs' )
-        opts.add_option( '--arp', action='store_true',
-                         default=False, help='set all-pairs ARP entries' )
-        opts.add_option( '--verbosity', '-v', type='choice',
-                         choices=LEVELS.keys(), default = 'info',
-                         help = '|'.join( LEVELS.keys() )  )
-        opts.add_option( '--innamespace', action='store_true',
-                         default=False, help='sw and ctrl in namespace?' )
-        opts.add_option( '--listenport', type='int', default=6634,
-                         help='base port for passive switch listening' )
-        opts.add_option( '--nolistenport', action='store_true',
-                         default=False, help="don't use passive listening " +
-                         "port")
-        opts.add_option( '--pre', type='string', default=None,
-                         help='CLI script to run before tests' )
-        opts.add_option( '--post', type='string', default=None,
-                         help='CLI script to run after tests' )
-        opts.add_option( '--prefixlen', type='int', default=8,
-                         help='prefix length (e.g. /8) for automatic '
-                         'network configuration' )
-        opts.add_option( '--pin', action='store_true',
-                         default=False, help="pin hosts to CPU cores "
-                         "(requires --host cfs or --host rt)" )
-        opts.add_option( '--version', action='callback', callback=version )
-
-        self.options, self.args = opts.parse_args()
-
-    def setup( self ):
-        "Setup and validate environment."
-
-        # set logging verbosity
-        if LEVELS[self.options.verbosity] > LEVELS['output']:
-            print ( '*** WARNING: selected verbosity level (%s) will hide CLI '
-                    'output!\n'
-                    'Please restart Mininet with -v [debug, info, output].'
-                    % self.options.verbosity )
-        lg.setLogLevel( self.options.verbosity )
-
-    def begin( self ):
-        "Create and run mininet."
-
-        if self.options.clean:
-            cleanup()
-            exit()
-
-        start = time.time()
-
-        topo = buildTopo( TOPOS, self.options.topo )
-        switch = customConstructor( SWITCHES, self.options.switch )
-        host = customConstructor( HOSTS, self.options.host )
-        controller = customConstructor( CONTROLLERS, self.options.controller )
-        link = customConstructor( LINKS, self.options.link )
-
-        if self.validate:
-            self.validate( self.options )
-
-        inNamespace = self.options.innamespace
-        Net = MininetWithControlNet if inNamespace else Mininet
-        ipBase = self.options.ipbase
-        xterms = self.options.xterms
-        mac = self.options.mac
-        arp = self.options.arp
-        pin = self.options.pin
-        listenPort = None
-        if not self.options.nolistenport:
-            listenPort = self.options.listenport
-        mn = Net( topo=topo,
-                  switch=switch, host=host, controller=controller,
-                  link=link,
-                  ipBase=ipBase,
-                  inNamespace=inNamespace,
-                  xterms=xterms, autoSetMacs=mac,
-                  autoStaticArp=arp, autoPinCpus=pin,
-                  listenPort=listenPort )
-
-        if self.options.pre:
-            CLI( mn, script=self.options.pre )
-
-        test = self.options.test
-        test = ALTSPELLING.get( test, test )
-
-        mn.start()
-
-        if test == 'none':
-            pass
-        elif test == 'all':
-            mn.start()
-            mn.ping()
-            mn.iperf()
-        elif test == 'cli':
-            CLI( mn )
-        elif test != 'build':
-            getattr( mn, test )()
-
-        if self.options.post:
-            CLI( mn, script=self.options.post )
-
-        mn.stop()
-
-        elapsed = float( time.time() - start )
-        info( 'completed in %0.3f seconds\n' % elapsed )
-
-
-if __name__ == "__main__":
-    MininetRunner()
diff --git a/custom/README b/custom/README
deleted file mode 100644
index 68f0ce6..0000000
--- a/custom/README
+++ /dev/null
@@ -1,6 +0,0 @@
-This directory should hold configuration files for custom mininets.
-
-See custom_example.py, which loads the default minimal topology.  The advantage of defining a mininet in a separate file is that you then use the --custom option in mn to run the CLI or specific tests with it.
-
-To start up a mininet with the provided custom topology, do:
-  sudo mn --custom custom_example.py --topo mytopo
diff --git a/custom/carlos-topo.py b/custom/carlos-topo.py
deleted file mode 100644
index 07a167f..0000000
--- a/custom/carlos-topo.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""Custom topology example
-
-Two directly connected switches plus a host for each switch:
-
-   host --- switch --- switch --- host
-
-Adding the 'topos' dict with a key/value pair to generate our newly defined
-topology enables one to pass in '--topo=mytopo' from the command line.
-"""
-
-from mininet.topo import Topo
-
-class MyTopo( Topo ):
-    "Simple topology example."
-
-    def __init__( self ):
-        "Create custom topo."
-
-        # Initialize topology
-        Topo.__init__( self )
-
-        # Add hosts and switches
-        client = self.addHost( 'h1' )
-	client.setIP('1.0.0.1')
-        router = self.addHost( 'h2' )
-	client.setIP('1.0.1.1',intf='h1-eth0')
-	client.setIP('2.0.1.2',intf='h1-eth1')
-	server = self.addHost( 'h3' )
-	client.setIP('2.0.0.1')
-
-        #leftSwitch = self.addSwitch( 's3' )
-        #rightSwitch = self.addSwitch( 's4' )
-
-        # Add links
-        #self.addLink( leftHost, leftSwitch )
-	#self.addLink( leftHost, rightSwitch)
-        #self.addLink( leftSwitch, rightSwitch )
-        #self.addLink( rightSwitch, rightHost )
-	self.addLink( client, router )
-	self.addLink( server, router )
-
-
-topos = { 'mytopo': ( lambda: MyTopo() ) }
diff --git a/custom/topo-2sw-2host.py b/custom/topo-2sw-2host.py
deleted file mode 100644
index 6f8638e..0000000
--- a/custom/topo-2sw-2host.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""Custom topology example
-
-Two directly connected switches plus a host for each switch:
-
-   host --- switch --- switch --- host
-
-Adding the 'topos' dict with a key/value pair to generate our newly defined
-topology enables one to pass in '--topo=mytopo' from the command line.
-"""
-
-from mininet.topo import Topo
-
-class MyTopo( Topo ):
-    "Simple topology example."
-
-    def __init__( self ):
-        "Create custom topo."
-
-        # Initialize topology
-        Topo.__init__( self )
-
-        # Add hosts and switches
-        leftHost = self.addHost( 'h1' )
-        rightHost = self.addHost( 'h2' )
-        leftSwitch = self.addSwitch( 's3' )
-        rightSwitch = self.addSwitch( 's4' )
-
-        # Add links
-        self.addLink( leftHost, leftSwitch )
-        self.addLink( leftSwitch, rightSwitch )
-        self.addLink( rightSwitch, rightHost )
-
-
-topos = { 'mytopo': ( lambda: MyTopo() ) }
diff --git a/ospfn/NDN Testbed.kml b/ospfn/NDN Testbed.kml
deleted file mode 100644
index 203442c..0000000
--- a/ospfn/NDN Testbed.kml
+++ /dev/null
@@ -1,1387 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
-<Document>
-	<name>NDN Testbed</name>
-	<StyleMap id="inline">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline13</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline94</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline0">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline1">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline2">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline3">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style7">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline4">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline5">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline6">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline7">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline8">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline9">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline10">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style16">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline11">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline12">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline70</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline80</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline13">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline14">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline82</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline8</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline15">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline16">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline17">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style3">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<StyleMap id="inline18">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline23</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline77</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="style14">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline19">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline20">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline2</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline16</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline21">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline22">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline5</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline88</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline23">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline24">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline25">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline56</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline92</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline26">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style4">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<StyleMap id="inline27">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline65</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline86</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline28">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline29">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline74</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline55</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="style10">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="style11">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<StyleMap id="inline30">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline78</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline61</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline31">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline59</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline24</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline32">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline33">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline34">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline52</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline73</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline35">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline36">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline37">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style9">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline38">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline39">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline40">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style2">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="style17">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline41">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline42">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline46</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline50</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline43">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline44">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline32</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline103</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline45">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline91</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline17</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="style6">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline46">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline47">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline48">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline7</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline79</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline49">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline50">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline51">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline90</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline0</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline52">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline53">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline21</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline19</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline54">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline55">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style8">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline56">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline57">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline60</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline10</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline58">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline59">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline60">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style12">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline61">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline62">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline35</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline64</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline63">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline54</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline11</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline64">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline65">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style15">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline66">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline67">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline58</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline76</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline68">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline38</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline28</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline69">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline49</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline98</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline70">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline71">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline95</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline41</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline72">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline39</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline3</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline73">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline74">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style1">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<StyleMap id="inline75">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline84</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline96</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline76">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline77">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline78">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline79">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline80">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline81">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline82">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline83">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline6</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline26</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline84">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline85">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="style13">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<Style id="inline86">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline87">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline66</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline81</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline88">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline89">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline90">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline91">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline92">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline93">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline43</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline4</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline94">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline95">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Style id="inline96">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline97">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline85</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline47</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline98">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<StyleMap id="inline99">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline9</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline89</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline100">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline36</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline15</styleUrl>
-		</Pair>
-	</StyleMap>
-	<StyleMap id="inline101">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline33</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline37</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="style5">
-		<IconStyle>
-			<Icon>
-				<href>http://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png</href>
-			</Icon>
-		</IconStyle>
-	</Style>
-	<StyleMap id="inline102">
-		<Pair>
-			<key>normal</key>
-			<styleUrl>#inline1</styleUrl>
-		</Pair>
-		<Pair>
-			<key>highlight</key>
-			<styleUrl>#inline40</styleUrl>
-		</Pair>
-	</StyleMap>
-	<Style id="inline103">
-		<LineStyle>
-			<color>ff0000ff</color>
-			<width>2</width>
-		</LineStyle>
-	</Style>
-	<Placemark>
-		<name>spp-wash:neu</name>
-		<styleUrl>#inline57</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-77.0351962789041,38.89355915892995,6.286915479119226 -71.08932466870712,42.33945216177298,5.298561176154728 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-atla:spp-wash</name>
-		<styleUrl>#inline53</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-84.38707672015283,33.74428091260496,312.2150235432476 -77.0373963019953,38.89169242115599,68.77555307412139 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>uiuc:neu</name>
-		<styleUrl>#inline68</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-88.23453219521171,40.08552214302232,222.3112143080591 -71.12021668531591,42.32889217642497,7.667427391210504 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>um:spp-atla</name>
-		<styleUrl>#inline48</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-89.94151548236987,35.11421818857127,86.71365268262211 -84.43945037063854,33.70054946385193,308.4065029471537 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>um:neu</name>
-		<styleUrl>#inline87</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-89.94071969269582,35.11602554844325,93.12590937831966 -71.10138814458209,42.33282251251992,5.677025944950811 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>washu:uiuc</name>
-		<styleUrl>#inline25</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-90.3019551255301,38.64766029499769,151.7930585919139 -88.23273254858323,40.08757570790794,222.6673833132559 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>whasu:um</name>
-		<styleUrl>#inline75</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-89.94111983331238,35.11563024754825,92.2866301984144 -90.30252207361144,38.64717597860027,155.4791831015957 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-hous:spp-atla</name>
-		<styleUrl>#inline69</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-95.3712565367793,29.75857515541838,14.65019607135557 -84.38987630562976,33.74725687487077,317.2632275888314 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-kans:uiuc</name>
-		<styleUrl>#inline42</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-94.57850233067749,39.09844467148834,250.9698519551797 -88.23245132235624,40.08762368842777,219.352821750666 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-kans:spp-wash</name>
-		<styleUrl>#inline45</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-94.57943788601482,39.09826601743211,273.3459492061655 -77.03802743471795,38.89398748132508,5.791405634479879 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-kans:washu</name>
-		<styleUrl>#inline100</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-94.5792729338142,39.09844276706531,265.9302658066846 -90.30199833647895,38.64763414187772,151.5785495879082 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-kans:spp-atla</name>
-		<styleUrl>#inline22</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-94.57954196024892,39.09855144358256,265.7704212697216 -84.38983200432291,33.74727571486449,311.3662270958762 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-kans:spp-hous</name>
-		<styleUrl>#inline14</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-94.57927815654155,39.09875246671262,268.3788802545565 -95.37007288615649,29.75847588827946,13.5194328911787 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>csu:washu</name>
-		<styleUrl>#inline18</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-105.0787404411907,40.56911598979946,1524.303341313438 -90.30196635220791,38.6476535134279,152.6401806577502 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>csu:um</name>
-		<styleUrl>#inline71</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-105.078140714869,40.56961612911522,1525.279375105285 -89.94040323215431,35.11613398935153,93.04420805962997 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ua:spp-hous</name>
-		<styleUrl>#inline93</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-110.9582060163944,32.22977822559954,736.2330008047713 -95.37014757271967,29.75843890696482,13.53724645091658 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ua:um</name>
-		<styleUrl>#inline97</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-110.9577350852564,32.23101079730665,739.4968276169053 -89.94015994906228,35.11650353521963,92.36925205023091 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ua:csu</name>
-		<styleUrl>#inline31</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-105.0776692813087,40.57019155521086,1526.030854928092 -110.9581187451631,32.23067421979356,738.8725172897811 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-salt:csu</name>
-		<styleUrl>#inline63</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-111.8925281594117,40.75770023002554,1304.531976328895 -105.0780796695405,40.56939415069849,1524.82664692824 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp:salt-spp-kans</name>
-		<styleUrl>#inline12</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-111.893328128371,40.75740827637261,1297.848556795271 -94.57934839362927,39.09855032098844,266.2869903879557 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>spp-salt:spp-hous</name>
-		<styleUrl>#inline99</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-111.8918760848697,40.75856786744627,1298.836957098833 -95.37018633021539,29.75843099596923,14.510984838289 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>caida-ucsd:ua</name>
-		<styleUrl>#inline62</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-117.1876338985086,32.77160902948733,72.15938095758888 -110.9575748009736,32.23176564033071,740.1102044739318 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>uci:caida-ucsd</name>
-		<styleUrl>#inline</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-117.8424469322175,33.64844214857224,19.01477847073255 -117.187288829381,32.77150610138234,67.55093898763488 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>remap:uci</name>
-		<styleUrl>#inline101</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.4396180653448,34.07535089582008,142.9637192711749 -117.8428947272542,33.64833355754981,14.81711185798074 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ucla:spp-salt</name>
-		<styleUrl>#inline30</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.4455694593792,34.06826097495284,112.9744795659523 -111.893827577001,40.75562571638292,1303.618369850314 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ucla:csu</name>
-		<styleUrl>#inline20</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.4455958374922,34.06818195115108,112.4643014292514 -105.077612536882,40.57019705577519,1525.158522111549 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ucla:ua</name>
-		<styleUrl>#inline34</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.44556255681,34.06808079105861,112.4065889471122 -110.9581422108386,32.22991337008364,734.9879479393751 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ucla:uci</name>
-		<styleUrl>#inline67</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.4455195280505,34.06800482241495,111.9212282836942 -117.8426410303324,33.64818380776127,23.95856298932791 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ucla:caida-ucsd</name>
-		<styleUrl>#inline29</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.4456519360387,34.06792678665325,111.5153253926207 -117.1877711527838,32.76962032083577,68.19993007077051 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>ucla:remap</name>
-		<styleUrl>#inline72</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.4455884607668,34.06796888521002,111.7458457189148 -118.439635441144,34.07520303533296,142.6657859179949 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>parc:uiuc</name>
-		<styleUrl>#inline83</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-122.1481441145024,37.40195350444811,62.67559747396429 -88.23257835324767,40.0876658688013,223.3842607984745 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>parc:csu</name>
-		<styleUrl>#inline51</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-122.1482893748443,37.40217093393014,59.83766381430213 -105.0776197218521,40.57020380487289,1525.162607078206 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>parc:remap</name>
-		<styleUrl>#inline102</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-122.1481440725852,37.40201299569676,59.03149391616439 -118.445704687809,34.06777761178643,111.3239666762324 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>parc:ucla</name>
-		<styleUrl>#inline44</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-122.1482820556799,37.40209769150846,62.21507562784606 -118.4394860956223,34.07608504163112,142.8653129107064 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>pku:ucla</name>
-		<styleUrl>#inline27</styleUrl>
-		<LineString>
-			<tessellate>1</tessellate>
-			<coordinates>
-				-118.439273142346,34.07609266391709,144.6673868067747 116.3059957195656,39.98758845350724,56.04695322462267 
-			</coordinates>
-		</LineString>
-	</Placemark>
-	<Placemark>
-		<name>University Of California, Los Angeles</name>
-		<visibility>0</visibility>
-		<styleUrl>#style10</styleUrl>
-		<Point>
-			<coordinates>-118.44548,34.068611,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>PARC, a Xerox company</name>
-		<visibility>0</visibility>
-		<styleUrl>#style7</styleUrl>
-		<Point>
-			<coordinates>-122.148224,37.402603,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>UCLA School of Theater, Film and Television</name>
-		<visibility>0</visibility>
-		<styleUrl>#style6</styleUrl>
-		<Point>
-			<coordinates>-118.439369,34.076385,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>University of California Irvine</name>
-		<visibility>0</visibility>
-		<styleUrl>#style13</styleUrl>
-		<Point>
-			<coordinates>-117.842545,33.64875,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>University of San Diego</name>
-		<visibility>0</visibility>
-		<styleUrl>#style12</styleUrl>
-		<Point>
-			<coordinates>-117.1875,32.771919,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Salt Lake City, UT</name>
-		<visibility>0</visibility>
-		<description><![CDATA[<a href="https://maps.google.com/maps/place?ftid=0x87523d9488d131ed:0x5b53b7a0484d31ca&amp;q=Salt+Lake+City,+UT,+United+States&amp;hl=en&amp;authuser=0&amp;cd=1&amp;cad=src:ppiwlink&amp;ei=l043UciMM5PltgetxICIBQ&amp;sig2=-oknFSwkRBXmGD4fmSKkSg&amp;dtab=5" target="_blank"><img src="https://cbks0.google.com/cbk?output=thumbnail&amp;w=90&amp;h=68&amp;ll=40.760779,-111.891047&amp;thumb=0"></a>]]></description>
-		<styleUrl>#style16</styleUrl>
-		<Point>
-			<coordinates>-111.891045,40.76078,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>The University of Arizona</name>
-		<visibility>0</visibility>
-		<styleUrl>#style1</styleUrl>
-		<Point>
-			<coordinates>-110.957207,32.232323,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Colorado State University</name>
-		<visibility>0</visibility>
-		<styleUrl>#style11</styleUrl>
-		<Point>
-			<coordinates>-105.077385,40.570847,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Kansas City, MO</name>
-		<visibility>0</visibility>
-		<description><![CDATA[<a href="https://maps.google.com/maps/place?ftid=0x87c0f75eafe99997:0x558525e66aaa51a2&amp;q=Kansas+City,+MO,+United+States&amp;hl=en&amp;authuser=0&amp;cd=1&amp;cad=src:ppiwlink&amp;ei=FVE3UdT_GITHtwecqIHgCA&amp;sig2=9ptGPuI6cqIVFCdsWCWRgA&amp;dtab=5" target="_blank"><img src="https://cbks0.google.com/cbk?output=thumbnail&amp;w=90&amp;h=68&amp;ll=39.099726,-94.578567&amp;thumb=0"></a>]]></description>
-		<styleUrl>#style3</styleUrl>
-		<Point>
-			<coordinates>-94.578568,39.099728,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Houston, TX</name>
-		<visibility>0</visibility>
-		<description><![CDATA[<a href="https://maps.google.com/maps/place?ftid=0x8640b8b4488d8501:0xca0d02def365053b&amp;q=Houston,+TX,+United+States&amp;hl=en&amp;authuser=0&amp;cd=1&amp;cad=src:ppiwlink&amp;ei=LlE3UZGmJoXhtge--YBg&amp;sig2=ACVaWLLE7UMcQcCppZFWiQ&amp;dtab=5" target="_blank"><img src="https://cbks0.google.com/cbk?output=thumbnail&amp;w=90&amp;h=68&amp;ll=29.760193,-95.369390&amp;thumb=0"></a>]]></description>
-		<styleUrl>#style17</styleUrl>
-		<Point>
-			<coordinates>-95.369392,29.760193,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Washington University</name>
-		<visibility>0</visibility>
-		<description><![CDATA[Washington University<br>1 Brookings Dr, St. Louis, MO 63130<br>(314) 935-5484<br>]]></description>
-		<styleUrl>#style5</styleUrl>
-		<Point>
-			<coordinates>-90.301498,38.648087,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>University of Memphis</name>
-		<visibility>0</visibility>
-		<styleUrl>#style15</styleUrl>
-		<Point>
-			<coordinates>-89.93976600000001,35.117023,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Atlanta, GA</name>
-		<visibility>0</visibility>
-		<description><![CDATA[<a href="https://maps.google.com/maps/place?ftid=0x88f5045d6993098d:0x66fede2f990b630b&amp;q=Atlanta,+GA,+United+States&amp;hl=en&amp;authuser=0&amp;cd=1&amp;cad=src:ppiwlink&amp;ei=9VE3UZKZL9Lwtge__oCIBw&amp;sig2=oyrSkrYNq8lBVt-JAxqwfg&amp;dtab=5" target="_blank"><img src="https://cbks0.google.com/cbk?output=thumbnail&amp;w=90&amp;h=68&amp;ll=33.748995,-84.387982&amp;thumb=0"></a>]]></description>
-		<styleUrl>#style2</styleUrl>
-		<Point>
-			<coordinates>-84.387985,33.748997,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>University of Illinois</name>
-		<visibility>0</visibility>
-		<styleUrl>#style9</styleUrl>
-		<Point>
-			<coordinates>-88.229996,40.091022,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Washington, DC</name>
-		<visibility>0</visibility>
-		<description><![CDATA[<a href="https://maps.google.com/maps/place?ftid=0x89b7c6de5af6e45b:0xc2524522d4885d2a&amp;q=Washington,+DC,+United+States&amp;hl=en&amp;authuser=0&amp;cd=1&amp;cad=src:ppiwlink&amp;ei=WlI3UdGgG8Smtwefv4DwBA&amp;sig2=SdX2AvT-NdF_J97YtHtHhA&amp;dtab=5" target="_blank"><img src="https://cbks0.google.com/cbk?output=thumbnail&amp;w=90&amp;h=68&amp;ll=38.895112,-77.036366&amp;thumb=0"></a>]]></description>
-		<styleUrl>#style8</styleUrl>
-		<Point>
-			<coordinates>-77.03636899999999,38.895111,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Northeastern University</name>
-		<visibility>0</visibility>
-		<styleUrl>#style14</styleUrl>
-		<Point>
-			<coordinates>-71.088905,42.340168,0</coordinates>
-		</Point>
-	</Placemark>
-	<Placemark>
-		<name>Peking University （Southwest Gate）</name>
-		<visibility>0</visibility>
-		<styleUrl>#style4</styleUrl>
-		<Point>
-			<coordinates>116.305611,39.987755,0</coordinates>
-		</Point>
-	</Placemark>
-</Document>
-</kml>
diff --git a/ospfn/caida-ucsd/ospfd.conf b/ospfn/caida-ucsd/ospfd.conf
deleted file mode 100644
index 44809b7..0000000
--- a/ospfn/caida-ucsd/ospfd.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-
-hostname caida-ucsd
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface caida-ucsd-eth0
-interface caida-ucsd-eth1
-interface caida-ucsd-eth2
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.1
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.8/30 area 0
- network 1.0.0.4/30 area 0
- network 1.0.0.0/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/caida-ucsd/ospfn-start.sh b/ospfn/caida-ucsd/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/caida-ucsd/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/caida-ucsd/ospfn.conf b/ospfn/caida-ucsd/ospfn.conf
deleted file mode 100644
index 9a76683..0000000
--- a/ospfn/caida-ucsd/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/caida.org/ 1
-logdir .
diff --git a/ospfn/caida-ucsd/routing.sh b/ospfn/caida-ucsd/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/caida-ucsd/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/caida-ucsd/zebra.conf b/ospfn/caida-ucsd/zebra.conf
deleted file mode 100644
index 7da96fa..0000000
--- a/ospfn/caida-ucsd/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname caida-ucsd
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/clean.sh b/ospfn/clean.sh
deleted file mode 100644
index b93c286..0000000
--- a/ospfn/clean.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-killall -r ccnd ospf zebra
-rm log*
-rm */*log
-rm -rf /var/run/quagga-state/*
diff --git a/ospfn/csu/ospfd.conf b/ospfn/csu/ospfd.conf
deleted file mode 100644
index a314c69..0000000
--- a/ospfn/csu/ospfd.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-
-hostname caida-ucsd
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface csu-eth0
-interface csu-eth1
-interface csu-eth2
-interface csu-eth3
-interface csu-eth4
-interface csu-eth5
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.2
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.12/30 area 0
- network 1.0.0.24/30 area 0
- network 1.0.0.16/30 area 0
- network 1.0.0.20/30 area 0
- network 1.0.0.28/30 area 0
- network 1.0.0.32/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/csu/ospfn-start.sh b/ospfn/csu/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/csu/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/csu/ospfn.conf b/ospfn/csu/ospfn.conf
deleted file mode 100644
index 3151d22..0000000
--- a/ospfn/csu/ospfn.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-ccnname /ndn/colostate.edu/netsec/ 1
-ccnname /ndn/opschat/ 2
-logdir .
diff --git a/ospfn/csu/routing.sh b/ospfn/csu/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/csu/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/csu/zebra.conf b/ospfn/csu/zebra.conf
deleted file mode 100644
index 73d08b1..0000000
--- a/ospfn/csu/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname csu
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/delay b/ospfn/delay
deleted file mode 100644
index ae60d8d..0000000
--- a/ospfn/delay
+++ /dev/null
@@ -1,35 +0,0 @@
-pku:ucla 10070	0.05035
-parc:ucla 499	0.002495
-parc:remap 499	0.002495
-parc:csu 1518	0.00759
-parc:uiuc 2946	0.01473
-ucla:remap 1	5e-06
-ucla:caida-ucsd 186	0.00093
-ucla:uci 72	0.00036
-ucla:ua 728	0.00364
-ucla:csu 1385	0.006925
-ucla:spp-salt 941	0.004705
-remap:uci 72	0.00036
-uci:caida-ucsd 115	0.000575
-caida-ucsd:ua 588	0.00294
-spp-salt:spp-hous 1931	0.009655
-spp-salt:spp-kans 1489	0.007445
-spp-salt:csu 577	0.002885
-ua:csu 1065	0.005325
-ua:um 1972	0.00986
-ua:spp-hous 1512	0.00756
-csu:um 1461	0.007305
-csu:washu 1285	0.006425
-spp-kans:spp-hous 1039	0.005195
-spp-kans:spp-atla 1089	0.005445
-spp-kans:washu 374	0.00187
-spp-kans:spp-wash 1517	0.007585
-spp-kans:uiuc 556	0.00278
-spp-hous:spp-atla 1130	0.00565
-washu:um 393	0.001965
-washu:uiuc 239	0.001195
-um:neu 1818	0.00909
-um:spp-atla 530	0.00265
-uiuc:neu 1454	0.00727
-spp-atla:spp-wash 872	0.00436
-spp-wash:neu 632	0.00316
diff --git a/ospfn/distance b/ospfn/distance
deleted file mode 100644
index e11157e..0000000
--- a/ospfn/distance
+++ /dev/null
@@ -1,35 +0,0 @@
-pku:ucla 10070
-parc:ucla 499
-parc:remap 499
-parc:csu 1518
-parc:uiuc 2946
-ucla:remap 1
-ucla:caida-ucsd 186
-ucla:uci 72
-ucla:ua 728
-ucla:csu 1385
-ucla:spp-salt 941
-remap:uci 72
-uci:caida-ucsd 115
-caida-ucsd:ua 588
-spp-salt:spp-hous 1931
-spp-salt:spp-kans 1489
-spp-salt:csu 577
-ua:csu 1065
-ua:um 1972
-ua:spp-hous 1512
-csu:um 1461
-csu:washu 1285
-spp-kans:spp-hous 1039
-spp-kans:spp-atla 1089
-spp-kans:washu 374
-spp-kans:spp-wash 1517
-spp-kans:uiuc 556
-spp-hous:spp-atla 1130
-washu:um 393
-washu:uiuc 239
-um:neu 1818
-um:spp-atla 530
-uiuc:neu 1454
-spp-atla:spp-wash 872
-spp-wash:neu 632
diff --git a/ospfn/dump.txt b/ospfn/dump.txt
deleted file mode 100644
index 78f5218..0000000
--- a/ospfn/dump.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-<CCNHost caida-ucsd: caida-ucsd-eth0:1.0.0.9,caida-ucsd-eth1:1.0.0.5,caida-ucsd-eth2:1.0.0.1 pid=7506> 
-
-<CCNHost csu: csu-eth0:1.0.0.13,csu-eth1:1.0.0.25,csu-eth2:1.0.0.17,csu-eth3:1.0.0.21,csu-eth4:1.0.0.29,csu-eth5:1.0.0.33 pid=7515> 
-
-<CCNHost neu: neu-eth0:1.0.0.45,neu-eth1:1.0.0.41,neu-eth2:1.0.0.37 pid=7523> 
-
-<CCNHost parc: parc-eth0:1.0.0.53,parc-eth1:1.0.0.49,parc-eth2:1.0.0.14,parc-eth3:1.0.0.57 pid=7531> 
-
-<CCNHost pku: pku-eth0:1.0.0.61 pid=7539> 
-
-<CCNHost remap: remap-eth0:1.0.0.50,remap-eth1:1.0.0.69,remap-eth2:1.0.0.65 pid=7547> 
-
-<CCNHost spp-atla: spp-atla-eth0:1.0.0.77,spp-atla-eth1:1.0.0.73,spp-atla-eth2:1.0.0.85,spp-atla-eth3:1.0.0.81 pid=7555> 
-
-<CCNHost spp-hous: spp-hous-eth0:1.0.0.93,spp-hous-eth1:1.0.0.97,spp-hous-eth2:1.0.0.89,spp-hous-eth3:1.0.0.74 pid=7563> 
-
-<CCNHost spp-kans: spp-kans-eth0:1.0.0.101,spp-kans-eth1:1.0.0.90,spp-kans-eth2:1.0.0.78,spp-kans-eth3:1.0.0.113,spp-kans-eth4:1.0.0.105,spp-kans-eth5:1.0.0.109 pid=7571> 
-
-<CCNHost spp-salt: spp-salt-eth0:1.0.0.117,spp-salt-eth1:1.0.0.94,spp-salt-eth2:1.0.0.102,spp-salt-eth3:1.0.0.18 pid=7579> 
-
-<CCNHost spp-wash: spp-wash-eth0:1.0.0.106,spp-wash-eth1:1.0.0.82,spp-wash-eth2:1.0.0.38 pid=7587> 
-
-<CCNHost ua: ua-eth0:1.0.0.121,ua-eth1:1.0.0.2,ua-eth2:1.0.0.22,ua-eth3:1.0.0.125,ua-eth4:1.0.0.98 pid=7595> 
-
-<CCNHost uci: uci-eth0:1.0.0.129,uci-eth1:1.0.0.66,uci-eth2:1.0.0.6 pid=7603> 
-
-<CCNHost ucla: ucla-eth0:1.0.0.62,ucla-eth1:1.0.0.54,ucla-eth2:1.0.0.70,ucla-eth3:1.0.0.10,ucla-eth4:1.0.0.130,ucla-eth5:1.0.0.122,ucla-eth6:1.0.0.26,ucla-eth7:1.0.0.118 pid=7611> 
-
-<CCNHost uiuc: uiuc-eth0:1.0.0.58,uiuc-eth1:1.0.0.110,uiuc-eth2:1.0.0.133,uiuc-eth3:1.0.0.42 pid=7619> 
-
-<CCNHost um: um-eth0:1.0.0.126,um-eth1:1.0.0.30,um-eth2:1.0.0.137,um-eth3:1.0.0.46,um-eth4:1.0.0.86 pid=7627> 
-
-<CCNHost washu: washu-eth0:1.0.0.34,washu-eth1:1.0.0.114,washu-eth2:1.0.0.138,washu-eth3:1.0.0.134 pid=7635>
diff --git a/ospfn/miniccnx.conf b/ospfn/miniccnx.conf
deleted file mode 100644
index b1c93f5..0000000
--- a/ospfn/miniccnx.conf
+++ /dev/null
@@ -1,54 +0,0 @@
-[nodes]
-pku: _ ccnx:/,ucla
-parc: _
-ucla: _
-remap: _
-uci: _
-caida-ucsd: _
-spp-salt: _
-ua: _
-csu: _
-spp-kans: _
-spp-hous: _
-washu: _
-um: _
-uiuc: _
-spp-atla: _
-spp-wash: _
-neu: _
-[links]
-pku:ucla bw=200 delay=50ms
-parc:ucla bw=200 delay=2ms
-parc:remap bw=200 delay=2ms
-parc:csu bw=200 delay=8ms
-parc:uiuc bw=200 delay=14ms
-ucla:remap bw=200
-ucla:caida-ucsd bw=200
-ucla:uci bw=200
-ucla:ua bw=200 delay=4ms
-ucla:csu bw=200 delay=7ms
-ucla:spp-salt bw=200 delay=5ms
-remap:uci bw=200
-uci:caida-ucsd bw=200 
-caida-ucsd:ua bw=200 delay=3ms
-spp-salt:spp-hous bw=200 delay=10ms
-spp-salt:spp-kans bw=200 delay=7ms
-spp-salt:csu bw=200 delay=3ms
-ua:csu bw=200 delay=5ms
-ua:um bw=200 delay=10ms
-ua:spp-hous bw=200 delay=7ms
-csu:um bw=200 delay=7ms
-csu:washu bw=200 delay=6ms
-spp-kans:spp-hous bw=200 delay=5ms
-spp-kans:spp-atla bw=200 delay=5ms
-spp-kans:washu bw=200 delay=2ms
-spp-kans:spp-wash bw=200 delay=7ms
-spp-kans:uiuc bw=200 delay=3ms
-spp-hous:spp-atla bw=200 delay=6ms
-washu:um bw=200 delay=2ms
-washu:uiuc bw=200 delay=1ms
-um:neu bw=200 delay=9ms
-um:spp-atla bw=200 delay=3ms
-uiuc:neu bw=200 delay=7ms
-spp-atla:spp-wash bw=200 delay=4ms
-spp-wash:neu bw=200 delay=3ms
diff --git a/ospfn/neu/ospfd.conf b/ospfn/neu/ospfd.conf
deleted file mode 100644
index 83fbfb2..0000000
--- a/ospfn/neu/ospfd.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-
-hostname caida-ucsd
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface neu-eth0
-interface neu-eth1
-interface neu-eth2
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.3
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.36/30 area 0
- network 1.0.0.40/30 area 0
- network 1.0.0.44/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/neu/ospfn-start.sh b/ospfn/neu/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/neu/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/neu/ospfn.conf b/ospfn/neu/ospfn.conf
deleted file mode 100644
index 47872c2..0000000
--- a/ospfn/neu/ospfn.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-ccnname /ndn/neu.edu/northpole/ 1
-ccnname /ndn/opschat/ 2
-logdir .
diff --git a/ospfn/neu/routing.sh b/ospfn/neu/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/neu/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/neu/zebra.conf b/ospfn/neu/zebra.conf
deleted file mode 100644
index 4ac4253..0000000
--- a/ospfn/neu/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname neu
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/ospfn-start.sh b/ospfn/ospfn-start.sh
deleted file mode 100644
index a829d92..0000000
--- a/ospfn/ospfn-start.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-ospfn -f ospfn.conf -d
-sleep 1
diff --git a/ospfn/parc/ospfd.conf b/ospfn/parc/ospfd.conf
deleted file mode 100644
index 9f1aabe..0000000
--- a/ospfn/parc/ospfd.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hostname parc
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface parc-eth0
-interface parc-eth1
-interface parc-eth2
-interface parc-eth3
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.4
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.52/30 area 0
- network 1.0.0.48/30 area 0
- network 1.0.0.12/30 area 0
- network 1.0.0.56/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/parc/ospfn-start.sh b/ospfn/parc/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/parc/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/parc/ospfn.conf b/ospfn/parc/ospfn.conf
deleted file mode 100644
index d336afc..0000000
--- a/ospfn/parc/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/parc.com/ 1
-logdir .
diff --git a/ospfn/parc/routing.sh b/ospfn/parc/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/parc/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/parc/zebra.conf b/ospfn/parc/zebra.conf
deleted file mode 100644
index f87c306..0000000
--- a/ospfn/parc/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname parc
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/pku/log.pku b/ospfn/pku/log.pku
deleted file mode 100644
index e9394dc..0000000
--- a/ospfn/pku/log.pku
+++ /dev/null
@@ -1,74 +0,0 @@
-1362605134.590307 ccnd[2905]: CCND_DEBUG=6 CCND_CAP=50000
-1362605134.590760 ccnd[2905]: listening on /tmp/.sock.ccnx.pku
-1362605134.590988 ccnd[2905]: accepting ipv4 datagrams on fd 4 rcvbuf 229376
-1362605134.591188 ccnd[2905]: accepting ipv4 connections on fd 5
-1362605134.591385 ccnd[2905]: accepting ipv6 datagrams on fd 6 rcvbuf 229376
-1362605134.591574 ccnd[2905]: accepting ipv6 connections on fd 7
-1362605134.598531 ccnd[2905]: debug.2573 prefix,ff=3 0 ccnx:/ccnx/ping (16 bytes)
-1362605134.599086 ccnd[2905]: debug.2573 prefix,ff=3 0 ccnx:/%C1.M.S.localhost/%C1.M.SRV/ccnd (37 bytes)
-1362605134.599787 ccnd[2905]: debug.2573 prefix,ff=3 0 ccnx:/%C1.M.S.neighborhood (24 bytes)
-1362605134.600188 ccnd[2905]: debug.2573 prefix,ff=3 0 ccnx:/%C1.M.FACE (13 bytes)
-1362605134.600597 ccnd[2905]: debug.2573 prefix,ff=0x17 0 ccnx:/ccnx/H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0 (45 bytes)
-1362605134.600803 ccnd[2905]: debug.2573 prefix,ff=0x23 0 ccnx:/%C1.M.S.localhost (20 bytes)
-1362605134.601137 ccnd[2905]: accepted client fd=8 id=6
-1362605134.601375 ccnd[2905]: shutdown client fd=8 id=6
-1362605134.601757 ccnd[2905]: recycling face id 6 (slot 6)
-1362605138.427405 ccnd[2905]: accepted client fd=8 id=6
-1362605138.428146 ccnd[2905]: shutdown client fd=8 id=6
-1362605138.428927 ccnd[2905]: recycling face id 6 (slot 6)
-1362605147.034371 ccnd[2905]: accepted datagram client id=6 (flags=0x40012) 1.0.0.62 port 9695
-1362605147.034720 ccnd[2905]: debug.4238 interest_from 6 ccnx:/%C1.M.FACE (95 bytes,aok=0,scope=2) 481D0E-037B-0000-5B08-FA5CAB
-1362605147.035071 ccnd[2905]: debug.4238 interest_from 6 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY (55 bytes,scope=2)
-1362605147.035454 ccnd[2905]: debug.3388 interest_to 0 ccnx:/%C1.M.FACE (95 bytes,aok=0,scope=2,i=1) 481D0E-037B-0000-5B08-FA5CAB
-1362605147.035738 ccnd[2905]: ic.1004 adjstate 6 .S.......... 0x60012
-1362605147.035967 ccnd[2905]: ic.687 adjstate 6 .S.......P.. 0x60012
-1362605147.036153 ccnd[2905]: ic.692 adjstate 6 .So......P.. 0x60012
-1362605147.036453 ccnd[2905]: debug.3388 interest_to 0 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY (71 bytes,scope=2,i=2) 481D0E-0B59-0006-5B08-539692
-1362605147.042080 ccnd[2905]: debug.4238 interest_from 0 ccnx:/%C1.M.FACE/%C1.M.G%00%00%BE%92h%89P%1D%C7%C5%14%0D%A8Z/%C1.M.NODE (110 bytes,aok=0,scope=2)
-1362605147.042562 ccnd[2905]: debug.4524 content_from 0 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7BD%E9r/%00/%18%F6%14%F8%18%0C%CF%E1%D7%E54%06%87%FD%DB%BCy%5CC%C2%1DL%F9%1DSk%C9%E18%DAu%BC (617 bytes)
-1362605147.042950 ccnd[2905]: debug.3388 interest_to 6 ccnx:/%C1.M.FACE/%C1.M.G%00%00%BE%92h%89P%1D%C7%C5%14%0D%A8Z/%C1.M.NODE (121 bytes,aok=0,scope=2,i=3) 481D0E-0B59-0000-5B0A-1F87F8
-1362605147.043547 ccnd[2905]: debug.1505 content_to 6 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7BD%E9r/%00/%18%F6%14%F8%18%0C%CF%E1%D7%E54%06%87%FD%DB%BCy%5CC%C2%1DL%F9%1DSk%C9%E18%DAu%BC (617 bytes)
-1362605151.036301 ccnd[2905]: ic.626 adjstate 6 .So......PR. 0x20012
-1362605151.036691 ccnd[2905]: debug.3582 interest_expiry 6 ccnx:/%C1.M.FACE (79 bytes,aok=0,scope=2,i=1)
-1362605151.037160 ccnd[2905]: debug.4238 interest_from 0 ccnx:/%C1.M.FACE/%C1.M.G%00%00%BE%92h%89P%1D%C7%C5%14%0D%A8Z/%C1.M.NODE (110 bytes,aok=0,scope=2,i=3)
-1362605151.040679 ccnd[2905]: debug.3388 interest_to 6 ccnx:/%C1.M.FACE/%C1.M.G%00%00%BE%92h%89P%1D%C7%C5%14%0D%A8Z/%C1.M.NODE (121 bytes,aok=0,scope=2,i=3) 481D0E-0B59-0000-5F09-FA2E13
-1362605152.044448 ccnd[2905]: debug.4361 stale ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7BD%E9r/%00/%18%F6%14%F8%18%0C%CF%E1%D7%E54%06%87%FD%DB%BCy%5CC%C2%1DL%F9%1DSk%C9%E18%DAu%BC (617 bytes)
-1362605155.036439 ccnd[2905]: ic.808 adjstate 6 ........T... 0x20012
-1362605155.037069 ccnd[2905]: debug.3582 interest_expiry 0 ccnx:/%C1.M.FACE/%C1.M.G%00%00%BE%92h%89P%1D%C7%C5%14%0D%A8Z/%C1.M.NODE (105 bytes,aok=0,scope=2,i=3)
-1362605164.855859 ccnd[2905]: ic.789 adjstate 6 ............ 0x20012
-1362605165.128890 ccnd[2905]: ic.490 adjstate 6 s........... 0x20012
-1362605165.129481 ccnd[2905]: debug.4238 interest_from 0 ccnx:/%C1.M.FACE (84 bytes,aok=0,scope=2)
-1362605165.129928 ccnd[2905]: debug.3388 interest_to 6 ccnx:/%C1.M.FACE (95 bytes,aok=0,scope=2,i=4) 481D0E-0B59-0000-6D21-75F8FC
-1362605165.130319 ccnd[2905]: debug.1963 stuff_interest_to 6 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY (55 bytes,scope=2)
-1362605165.132557 ccnd[2905]: debug.4524 content_from 6 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7B%3E%E0%80/%00/%0Cw~U%F5%20%06C%CB%3C%9B%93%CA%B2.%FE%A2%CAQ%8E%1F%DE%AED%99%A1s%80-Q%D4%EF (617 bytes)
-1362605169.130199 ccnd[2905]: ic.808 adjstate 6 ........T... 0x20012
-1362605169.130818 ccnd[2905]: debug.3582 interest_expiry 0 ccnx:/%C1.M.FACE (79 bytes,aok=0,scope=2,i=4)
-1362605170.134193 ccnd[2905]: debug.4361 stale ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7B%3E%E0%80/%00/%0Cw~U%F5%20%06C%CB%3C%9B%93%CA%B2.%FE%A2%CAQ%8E%1F%DE%AED%99%A1s%80-Q%D4%EF (617 bytes)
-1362605182.069440 ccnd[2905]: ic.789 adjstate 6 ............ 0x20012
-1362605182.289413 ccnd[2905]: ic.490 adjstate 6 s........... 0x20012
-1362605182.290005 ccnd[2905]: debug.4238 interest_from 0 ccnx:/%C1.M.FACE (84 bytes,aok=0,scope=2)
-1362605182.290453 ccnd[2905]: debug.3388 interest_to 6 ccnx:/%C1.M.FACE (95 bytes,aok=0,scope=2,i=5) 481D0E-0B59-0000-7E4A-5C808D
-1362605182.290844 ccnd[2905]: debug.1963 stuff_interest_to 6 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY (55 bytes,scope=2)
-1362605182.292835 ccnd[2905]: debug.4524 content_from 6 ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7B%3E%CF%8F/%00/%1F%1B%AFq%08W%3A%B4%FF%23%A6%BCP%E0%06~q%83y%86%B7%D8b%FA%EF%08o%D77%8C%A4%CC (617 bytes)
-1362605186.290472 ccnd[2905]: ic.808 adjstate 6 ........T... 0x20012
-1362605186.291076 ccnd[2905]: debug.3582 interest_expiry 0 ccnx:/%C1.M.FACE (79 bytes,aok=0,scope=2,i=5)
-1362605187.293856 ccnd[2905]: debug.4361 stale ccnx:/%C1.M.S.neighborhood/%C1.M.SRV/ccnd/KEY/%C1.M.K%00H%1D%0E%AF%CE%91%2A%23%D6%1B%CD%D3-%DF%10%F4%03%0DC%E5%20%09%06%99%FD%90%D1%CD%EAn%EE%F0/%FD%05%13%7B%3E%CF%8F/%00/%1F%1B%AFq%08W%3A%B4%FF%23%A6%BCP%E0%06~q%83y%86%B7%D8b%FA%EF%08o%D77%8C%A4%CC (617 bytes)
-1362605198.648471 ccnd[2905]: releasing face id 6 (slot 6)
-1362606539.505981 ccnd[2905]: accepted client fd=8 id=7
-1362606539.507491 ccnd[2905]: accepted client fd=9 id=8
-1362606539.507556 ccnd[2905]: stopping (/tmp/.sock.ccnx.pku gone)
-1362606539.507591 ccnd[2905]: exiting.
-1362606539.507631 ccnd[2905]: closing fd 3 while finalizing face 1
-1362606539.507662 ccnd[2905]: releasing face id 1 (slot 1)
-1362606539.507698 ccnd[2905]: closing fd 4 while finalizing face 2
-1362606539.507729 ccnd[2905]: releasing face id 2 (slot 2)
-1362606539.507764 ccnd[2905]: closing fd 5 while finalizing face 3
-1362606539.507795 ccnd[2905]: releasing face id 3 (slot 3)
-1362606539.507829 ccnd[2905]: closing fd 6 while finalizing face 4
-1362606539.507859 ccnd[2905]: releasing face id 4 (slot 4)
-1362606539.507893 ccnd[2905]: closing fd 7 while finalizing face 5
-1362606539.507923 ccnd[2905]: releasing face id 5 (slot 5)
-1362606539.508031 ccnd[2905]: closing fd 8 while finalizing face 7
-1362606539.508111 ccnd[2905]: releasing face id 7 (slot 7)
-1362606539.508174 ccnd[2905]: closing fd 9 while finalizing face 8
-1362606539.508226 ccnd[2905]: recycling face id 8 (slot 8)
diff --git a/ospfn/pku/ospfd.conf b/ospfn/pku/ospfd.conf
deleted file mode 100644
index 6e021f3..0000000
--- a/ospfn/pku/ospfd.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-
-hostname pku
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface pku-eth0
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.5
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.60/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/pku/ospfn-start.sh b/ospfn/pku/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/pku/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/pku/ospfn.conf b/ospfn/pku/ospfn.conf
deleted file mode 100644
index a082242..0000000
--- a/ospfn/pku/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/pku.edu.cn/ 1
-logdir .
diff --git a/ospfn/pku/routing.sh b/ospfn/pku/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/pku/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/pku/zebra.conf b/ospfn/pku/zebra.conf
deleted file mode 100644
index 4540dc9..0000000
--- a/ospfn/pku/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname pku
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/remap/ospfd.conf b/ospfn/remap/ospfd.conf
deleted file mode 100644
index bd2fe87..0000000
--- a/ospfn/remap/ospfd.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-
-hostname remap
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface remap-eth0
-interface remap-eth1
-interface remap-eth2
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.6
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.48/30 area 0
- network 1.0.0.68/30 area 0
- network 1.0.0.64/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/remap/ospfn-start.sh b/ospfn/remap/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/remap/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/remap/ospfn.conf b/ospfn/remap/ospfn.conf
deleted file mode 100644
index eed23a4..0000000
--- a/ospfn/remap/ospfn.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-ccnname /ucla.edu/apps/ 1
-ccnname /ndn/remap.ucla.edu/ 2
-ccnname /ndn/ucla.edu/apps/ 3
-logdir .
diff --git a/ospfn/remap/routing.sh b/ospfn/remap/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/remap/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/remap/zebra.conf b/ospfn/remap/zebra.conf
deleted file mode 100644
index 6eed246..0000000
--- a/ospfn/remap/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname remap
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/routing.sh b/ospfn/routing.sh
deleted file mode 100644
index 15d5205..0000000
--- a/ospfn/routing.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-#sleep 1
-zebra -d -f zebra.conf -i /var/run/quagga-state/zebra.$1.pid
-#sleep 1
-ospfd -f ospfd.conf -i /var/run/quagga-state/ospfd.$1.pid -d -a
-#sleep 5
-#ospfn -d -f ospfn.conf
-
diff --git a/ospfn/spp-atla/ospfd.conf b/ospfn/spp-atla/ospfd.conf
deleted file mode 100644
index 65ce600..0000000
--- a/ospfn/spp-atla/ospfd.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hostname spp-atla
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface spp-atla-eth0
-interface spp-atla-eth1
-interface spp-atla-eth2
-interface spp-atla-eth3
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.7
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.72/30 area 0
- network 1.0.0.76/30 area 0
- network 1.0.0.80/30 area 0
- network 1.0.0.84/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/spp-atla/ospfn-start.sh b/ospfn/spp-atla/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/spp-atla/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/spp-atla/ospfn.conf b/ospfn/spp-atla/ospfn.conf
deleted file mode 100644
index 869c4c1..0000000
--- a/ospfn/spp-atla/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/sppatla1/ 1
-logdir .
diff --git a/ospfn/spp-atla/routing.sh b/ospfn/spp-atla/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/spp-atla/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/spp-atla/zebra.conf b/ospfn/spp-atla/zebra.conf
deleted file mode 100644
index 7f3c151..0000000
--- a/ospfn/spp-atla/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname spp-atla
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/spp-hous/ospfd.conf b/ospfn/spp-hous/ospfd.conf
deleted file mode 100644
index c68a53d..0000000
--- a/ospfn/spp-hous/ospfd.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hostname spp-hous
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface spp-hous-eth0
-interface spp-hous-eth1
-interface spp-hous-eth2
-interface spp-hous-eth3
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.8
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.92/30 area 0
- network 1.0.0.96/30 area 0
- network 1.0.0.88/30 area 0
- network 1.0.0.72/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/spp-hous/ospfn-start.sh b/ospfn/spp-hous/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/spp-hous/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/spp-hous/ospfn.conf b/ospfn/spp-hous/ospfn.conf
deleted file mode 100644
index fbbdaa2..0000000
--- a/ospfn/spp-hous/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/spphous1/ 1
-logdir .
diff --git a/ospfn/spp-hous/routing.sh b/ospfn/spp-hous/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/spp-hous/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/spp-hous/zebra.conf b/ospfn/spp-hous/zebra.conf
deleted file mode 100644
index 4af101c..0000000
--- a/ospfn/spp-hous/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname spp-hous
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/spp-kans/ospfd.conf b/ospfn/spp-kans/ospfd.conf
deleted file mode 100644
index 5d6c587..0000000
--- a/ospfn/spp-kans/ospfd.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-
-hostname spp-kans
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface spp-kans-eth0
-interface spp-kans-eth1
-interface spp-kans-eth2
-interface spp-kans-eth3
-interface spp-kans-eth4
-interface spp-kans-eth5
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.9
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.100/30 area 0
- network 1.0.0.88/30 area 0
- network 1.0.0.76/30 area 0
- network 1.0.0.112/30 area 0
- network 1.0.0.104/30 area 0
- network 1.0.0.108/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/spp-kans/ospfn-start.sh b/ospfn/spp-kans/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/spp-kans/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/spp-kans/ospfn.conf b/ospfn/spp-kans/ospfn.conf
deleted file mode 100644
index 2723a0e..0000000
--- a/ospfn/spp-kans/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/sppkans1/ 1
-logdir .
diff --git a/ospfn/spp-kans/routing.sh b/ospfn/spp-kans/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/spp-kans/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/spp-kans/zebra.conf b/ospfn/spp-kans/zebra.conf
deleted file mode 100644
index eb03d3a..0000000
--- a/ospfn/spp-kans/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname spp-kans
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/spp-salt/ospfd.conf b/ospfn/spp-salt/ospfd.conf
deleted file mode 100644
index 2f58d93..0000000
--- a/ospfn/spp-salt/ospfd.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hostname spp-salt
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface spp-salt-eth0
-interface spp-salt-eth1
-interface spp-salt-eth2
-interface spp-salt-eth3
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.10
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.116/30 area 0
- network 1.0.0.92/30 area 0
- network 1.0.0.100/30 area 0
- network 1.0.0.16/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/spp-salt/ospfn-start.sh b/ospfn/spp-salt/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/spp-salt/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/spp-salt/ospfn.conf b/ospfn/spp-salt/ospfn.conf
deleted file mode 100644
index fb3756e..0000000
--- a/ospfn/spp-salt/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/sppsalt1/ 1
-logdir .
diff --git a/ospfn/spp-salt/routing.sh b/ospfn/spp-salt/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/spp-salt/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/spp-salt/zebra.conf b/ospfn/spp-salt/zebra.conf
deleted file mode 100644
index a89af87..0000000
--- a/ospfn/spp-salt/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname spp-salt
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/spp-wash/ospfd.conf b/ospfn/spp-wash/ospfd.conf
deleted file mode 100644
index 14b92c7..0000000
--- a/ospfn/spp-wash/ospfd.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-
-hostname spp-wash
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface spp-wash-eth0
-interface spp-wash-eth1
-interface spp-wash-eth2
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.11
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.104/30 area 0
- network 1.0.0.80/30 area 0
- network 1.0.0.36/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/spp-wash/ospfn-start.sh b/ospfn/spp-wash/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/spp-wash/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/spp-wash/ospfn.conf b/ospfn/spp-wash/ospfn.conf
deleted file mode 100644
index 9e819b7..0000000
--- a/ospfn/spp-wash/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/sppwash1/ 1
-logdir .
diff --git a/ospfn/spp-wash/routing.sh b/ospfn/spp-wash/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/spp-wash/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/spp-wash/zebra.conf b/ospfn/spp-wash/zebra.conf
deleted file mode 100644
index 7acfd06..0000000
--- a/ospfn/spp-wash/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname spp-wash
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/ua/ospfd.conf b/ospfn/ua/ospfd.conf
deleted file mode 100644
index 9338a4d..0000000
--- a/ospfn/ua/ospfd.conf
+++ /dev/null
@@ -1,33 +0,0 @@
-
-hostname ua
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface ua-eth0
-interface ua-eth1
-interface ua-eth2
-interface ua-eth3
-interface ua-eth4
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.12
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.120/30 area 0
- network 1.0.0.0/30 area 0
- network 1.0.0.20/30 area 0
- network 1.0.0.124/30 area 0
- network 1.0.0.96/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/ua/ospfn-start.sh b/ospfn/ua/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/ua/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/ua/ospfn.conf b/ospfn/ua/ospfn.conf
deleted file mode 100644
index a2f28ba..0000000
--- a/ospfn/ua/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/arizona.edu/ 1
-logdir .
diff --git a/ospfn/ua/routing.sh b/ospfn/ua/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/ua/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/ua/zebra.conf b/ospfn/ua/zebra.conf
deleted file mode 100644
index f6ffcd6..0000000
--- a/ospfn/ua/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname ua
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/uci/ospfd.conf b/ospfn/uci/ospfd.conf
deleted file mode 100644
index b495dbd..0000000
--- a/ospfn/uci/ospfd.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-
-hostname caida-ucsd
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface uci-eth0
-interface uci-eth1
-interface uci-eth2
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.13
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.128/30 area 0
- network 1.0.0.64/30 area 0
- network 1.0.0.4/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/uci/ospfn-start.sh b/ospfn/uci/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/uci/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/uci/ospfn.conf b/ospfn/uci/ospfn.conf
deleted file mode 100644
index 92d695f..0000000
--- a/ospfn/uci/ospfn.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-ccnname /uci.edu/ 1
-ccnname /ndn/uci.edu/ 2
-logdir .
diff --git a/ospfn/uci/routing.sh b/ospfn/uci/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/uci/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/uci/zebra.conf b/ospfn/uci/zebra.conf
deleted file mode 100644
index 82e393e..0000000
--- a/ospfn/uci/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname uci
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/ucla/ospfd.conf b/ospfn/ucla/ospfd.conf
deleted file mode 100644
index 3b7752b..0000000
--- a/ospfn/ucla/ospfd.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-
-hostname ucla
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface ucla-eth0
-interface ucla-eth1
-interface ucla-eth2
-interface ucla-eth3
-interface ucla-eth4
-interface ucla-eth5
-interface ucla-eth6
-interface ucla-eth7
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.14
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.60/30 area 0
- network 1.0.0.52/30 area 0
- network 1.0.0.68/30 area 0
- network 1.0.0.8/30 area 0
- network 1.0.0.128/30 area 0
- network 1.0.0.120/30 area 0
- network 1.0.0.24/30 area 0
- network 1.0.0.116/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/ucla/ospfn-start.sh b/ospfn/ucla/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/ucla/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/ucla/ospfn.conf b/ospfn/ucla/ospfn.conf
deleted file mode 100644
index b16009e..0000000
--- a/ospfn/ucla/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/ucla.edu/ 1
-logdir .
diff --git a/ospfn/ucla/routing.sh b/ospfn/ucla/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/ucla/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/ucla/zebra.conf b/ospfn/ucla/zebra.conf
deleted file mode 100644
index af6fc92..0000000
--- a/ospfn/ucla/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname ucla
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/uiuc/ospfd.conf b/ospfn/uiuc/ospfd.conf
deleted file mode 100644
index 4feeabc..0000000
--- a/ospfn/uiuc/ospfd.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hostname uiuc
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface uiuc-eth0
-interface uiuc-eth1
-interface uiuc-eth2
-interface uiuc-eth3
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.15
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.56/30 area 0
- network 1.0.0.108/30 area 0
- network 1.0.0.132/30 area 0
- network 1.0.0.40/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/uiuc/ospfn-start.sh b/ospfn/uiuc/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/uiuc/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/uiuc/ospfn.conf b/ospfn/uiuc/ospfn.conf
deleted file mode 100644
index f1a9601..0000000
--- a/ospfn/uiuc/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/uiuc.edu/ 1
-logdir .
diff --git a/ospfn/uiuc/routing.sh b/ospfn/uiuc/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/uiuc/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/uiuc/zebra.conf b/ospfn/uiuc/zebra.conf
deleted file mode 100644
index 1411f5d..0000000
--- a/ospfn/uiuc/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname uiuc
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/um/ospfd.conf b/ospfn/um/ospfd.conf
deleted file mode 100644
index 01d7cda..0000000
--- a/ospfn/um/ospfd.conf
+++ /dev/null
@@ -1,33 +0,0 @@
-
-hostname um
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface um-eth0
-interface um-eth1
-interface um-eth2
-interface um-eth3
-interface um-eth4
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.16
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.124/30 area 0
- network 1.0.0.28/30 area 0
- network 1.0.0.136/30 area 0
- network 1.0.0.44/30 area 0
- network 1.0.0.84/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/um/ospfn-start.sh b/ospfn/um/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/um/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/um/ospfn.conf b/ospfn/um/ospfn.conf
deleted file mode 100644
index 5d6b971..0000000
--- a/ospfn/um/ospfn.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-ccnname /ndn/memphis.edu/ 1
-ccnname /ndn/memphis.edu/netlab/ 2
-logdir .
diff --git a/ospfn/um/routing.sh b/ospfn/um/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/um/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/um/zebra.conf b/ospfn/um/zebra.conf
deleted file mode 100644
index 3824b75..0000000
--- a/ospfn/um/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname um
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
diff --git a/ospfn/washu/ospfd.conf b/ospfn/washu/ospfd.conf
deleted file mode 100644
index e53c7cf..0000000
--- a/ospfn/washu/ospfd.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-
-hostname washu
-password pwd
-enable password pwd 
-!log file /var/log/quagga/ospfd-s1.log
-log file ospfd.log
-!
-!
-!
-interface washu-eth0
-interface washu-eth1
-interface washu-eth2
-interface washu-eth3
-!
-!
-!access-list ospfn permit 10.0.0.0/8
-!access-list ospfn deny any
-!
-router ospf
- ospf router-id 0.0.0.17
- redistribute connected
- distribute-list ospfn out connected   
- network 1.0.0.32/30 area 0
- network 1.0.0.112/30 area 0
- network 1.0.0.136/30 area 0
- network 1.0.0.132/30 area 0
- capability opaque
-!
-line vty
-!
-!end of configuration file here
diff --git a/ospfn/washu/ospfn-start.sh b/ospfn/washu/ospfn-start.sh
deleted file mode 120000
index c7171fd..0000000
--- a/ospfn/washu/ospfn-start.sh
+++ /dev/null
@@ -1 +0,0 @@
-../ospfn-start.sh
\ No newline at end of file
diff --git a/ospfn/washu/ospfn.conf b/ospfn/washu/ospfn.conf
deleted file mode 100644
index f1a9601..0000000
--- a/ospfn/washu/ospfn.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-ccnname /ndn/uiuc.edu/ 1
-logdir .
diff --git a/ospfn/washu/routing.sh b/ospfn/washu/routing.sh
deleted file mode 120000
index e04b310..0000000
--- a/ospfn/washu/routing.sh
+++ /dev/null
@@ -1 +0,0 @@
-../routing.sh
\ No newline at end of file
diff --git a/ospfn/washu/zebra.conf b/ospfn/washu/zebra.conf
deleted file mode 100644
index 0eb5384..0000000
--- a/ospfn/washu/zebra.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-! -*- zebra -*-
-!
-! zebra sample configuration file
-!
-! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
-!
-hostname washu
-password zebra
-enable password zebra
-!
-! Interface's description. 
-!
-!interface lo
-! description test of desc.
-!
-!interface sit0
-! multicast
-
-!
-! Static default route sample.
-!
-!ip route 0.0.0.0/0 203.181.89.241
-!
-
-log file zebra.log
