Monday, August 13, 2012

Quote on Algorithms


"For me, great algorithms are the poetry of computation.
Just like verse, they can be terse, allusive, dense, and even
mysterious. But once unlocked, they cast a brilliant new light
on some aspect of computing" - Francis Sullivan

Tuesday, May 29, 2012

Types of spanning tree protocols

SPT (802.1d) - the original, good ol' Spanning Tree
PVST+ - Cisco per-VLAN SPT
RSTP -(802.1w) - Rapid Spanning Tree
RPVST+ - Cisco per-VLAN RSTP
MST - RSTP on multiple VLAN instances (do not need SPT per VLAN, groups similar topologies)

Friday, May 25, 2012

Nice summary of the differences between 802.1d (Spanning Tree Protocol - STP) and 802.1w (Rapid Spanning Tree Protocol - RSTP):
http://cciethebeginning.wordpress.com/2008/11/20/differences-between-stp-and-rstp/

Thursday, April 5, 2012

Cisco AnyConnect overwrites hosts file in Mac OS X

Just spend a while scratching my head over this one.. if you are using Cisco AnyConnect on Mac OSX and are using static entries in your /private/etc/hosts file, it will overwrite them with /private/etc/hosts.ac in versions 3.0.4 and earlier. This was fixed in 3.0.5080 - Release Notes
CSCts72767 3.0.4 AnyConnect overwrites hosts file by hosts.ac

Thursday, March 29, 2012

Installing vmware tools on Debian

Just a quick note for future use, need to do the following as root before running the vmware tools install: apt-get install gcc make apt-get install linux-headers-$(uname -r)

Monday, March 12, 2012

Academic Networking Papers

Just came across this list of authors that each give a list of 10 great academic networking papers. Could make for some interesting reading: http://ccr.sigcomm.org/online/?q=node/157

Thursday, February 9, 2012

Creating a hub in Floodlight

I'm interested in learning more about OpenFlow, and thought I'd go through the OpenFlow tutorial. Just to make things interesting I'm going to port it over from Beacon to Floodlight. First step for me is to remove the default forwarding behavior and just make the controller and switch act as a simple hub.

First we'll comment out the calls to initForwarding() and forwarding.startup() in Controller.java as well as references to the forwarding global variable:

protected void init() {
    topology = new TopologyImpl();
    deviceManager = new DeviceManagerImpl();
    counterStore = new CounterStore();
    pktinProcTime = new PktinProcessingTime();
    routingEngine = new RoutingImpl();
    flowCacheManager = new FlowCache();
    initStorageSource();

    topology.setFloodlightProvider(this);
    topology.setStorageSource(storageSource);

    deviceManager.setFloodlightProvider(this);
    deviceManager.setStorageSource(storageSource);
    deviceManager.setTopology(topology);

    initMessageFilterManager();
    initStaticFlowPusher();
    //initForwarding();


    // call this explicitly because it does setup
    this.setStorageSource(storageSource);        

    HashSet<ITopologyAware> topologyAware = new HashSet<ITopologyAware>();
    topologyAware.add(deviceManager);
    topologyAware.add(routingEngine);
    topology.setTopologyAware(topologyAware);
    topology.setRoutingEngine(routingEngine);

    HashSet<IDeviceManagerAware> dmAware = 
        new HashSet<IDeviceManagerAware>();
    //dmAware.add(forwarding);

protected void startupComponents() {
    // now, do our own init
    try {
        log.debug("Doing controller internal setup");
        this.startUp();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    log.debug("Starting topology service");
    topology.startUp();
    log.debug("Starting deviceManager service");
    deviceManager.startUp();
    // no need to do storageSource.startUp()
    log.debug("Starting counterStore service");
    counterStore.startUp();
    log.debug("Starting routingEngine service");
    routingEngine.startUp();
    //log.debug("Starting forwarding service");
    //forwarding.startUp(); 

protected void debugserver_start() {
    Map<String, Object> locals = new HashMap<String, Object>();
    locals.put("controller", this);
    locals.put("deviceManager", this.deviceManager);
    locals.put("topology", this.topology);
    locals.put("routingEngine", this.routingEngine);
    //locals.put("forwarding", this.forwarding);

Now we import the hub class:

import net.floodlightcontroller.hub.Hub; 

Then create a hub global variable:

protected Hub hub;

In the init() method we create our hub instance and set the floodlightprovider

hub = new Hub();
hub.setFloodlightProvider(this);

Then tell the hub to startup in the startupComponents() method

hub.startup();

After these changes I started up the controller and data gets forwarded out all ports just like a hub should!