Skip to content
Go to file


Failed to load latest commit information.
Latest commit message
Commit time


Odin is an SDN framework programmable enterprise WLANs. It provides a platform for developing typical enterprise WLAN services such as mobility managers, and load balancers as "network applications".


For the agent/AP:

  • Click Modular Router.
  • Open vSwitch.
  • An ath9k driver based WiFi card.


Running Odin implies setting up the Odin master, and Odin agents.

If you cloned Odin from the git repository, pull the individual submodules:

  $: git clone
  $: cd odin
  $: git submodule init
  $: git submodule update

To build the master (which is built as an application on top of Floodlight), do the following:

  $: cd odin-master
  $: ant

You should find floodlight.jar inside target/

Before building the agent, apply the patch in odin-driver-patches to your Linux kernel ath9k driver code.

To build the agent, copy the files in odin-agent/src/ to your Click source's /elements/local folder, then build Click.

  $: cd odin-agent
  $: cp src/* <click-folder>/elements/local

Now build Click using your cross compiler. Don't forget to pass the --enable- local flag to Click's configure script.

Generate a Click file for the agent, using your preferred values for the options:

  $: python <AP_CHANNEL> <QUEUE_SIZE> \

Running Odin


The master is to be run on a central server that has IP reachability to all APs in the system. The master expects the following configuration parameter to be set in the floodlight configuration file:

  • net.floodlightcontroller.odin.master.OdinMaster.poolFile:

This should point to a pool file, which are essentially slices. An example poolfile is as follows:

  # Pool-1
  NAME pool-1
  APPLICATIONS net.floodlightcontroller.odin.applications.OdinMobilityManager

  # Pool-2
  NAME pool-2
  NETWORKS guest-network
  APPLICATIONS net.floodlightcontroller.odin.applications.SimpleLoadBalancer

Each pool is defined by a name, a list of IP address of physical APs, the list of SSIDs or NETWORKS to be announced, and a list of applications that operate on that pool.

  • net.floodlightcontroller.odin.master.OdinMaster.clientList [optional]:

For testing purposes, if you'd like to assign a static IP to a client and have it connect to odin, you need to specify the client's details in a file pointed to by this property. An example file looks as follows:

  00:16:7f:7e:00:00 00:1b:1b:7e:00:00 odin-ssid-1
  00:16:7f:7e:00:01 00:1b:1b:7e:00:01 odin-ssid-2
  00:16:7f:7e:00:02 00:1b:1b:7e:00:02 odin-ssid-3

Each row represents a client's MAC address, its static IP address, its LVAP's BSSID, and the SSID that its LVAP will announce.

To run the master:

  $: java -jar floodlight.jar


To run the agents, first instantiate Open vSwitch and have it connect to the Floodlight controller from above. Next, instantiate a monitor device:

  # If on OpenWRT Backfire
  $: iw phy phy0 interface add mon0 set type monitor
  $: iw dev wlan0 set channel <required-channel>
  $: ifconfig mon0 up

Then move the file generated through the click file generator to the AP, and run the following:

  $: click-align | click &

(Make sure specifies the same channel as being used by the monitor device.)

Click should have instantiated a tap device named 'ap', which should be added to Open vSwitch' datapath:

  $: ovs-dpctl add-if dp0 ap

Wait a few seconds for the agent to successfully connect to the master.


The system is described in the following Masters' thesis:


Odin: an SDN framework for programmable Enterprise WLANs.



No releases published


No packages published