Public | Automated Build

Last pushed: 2 years ago
Short Description
Openflow controller with layer 3 switch to forward packet among connected switches
Full Description

switch:

  ovs-vsctl add-br host1
  ovs-vsctl add-port host1 internet -- set Interface internet type=internal
  ifconfig internet 192.168.64.1
  ovs-vsctl set-controller tcp:CONTROLLER_IP:6633
  ovs-vsctl add-br host2
  ovs-vsctl add-port host2 internet -- set Interface internet type=internal
  ifconfig internet 192.168.64.2
  ovs-vsctl set-controller tcp:CONTROLLER_IP:6633

controller:

  ./pox.py l3_switch --fakeways=192.168.64.2 info.packet_dump log.level --DEBUG

Steps:

1. Keep a table that maps IP address to switch dpid, port, mac. Stock this table using information from ARP and IP packets.
2. When you see an ARP query, try to answer it using information in the table from step 1.  If the info in the table is old, just flood the query.
3. Flood all other ARPs.
4. When you see an IP packet, if you know the destination port (because it's in the table from step 1), forward packet to switch and port with matched dest ip.

POX is a networking software platform written in Python

POX started life as an OpenFlow controller, but can now also function
as an OpenFlow switch, and can be useful for writing networking software
in general.

POX officially requires Python 2.7 (though much of it will work fine
fine with Python 2.6), and should run under Linux, Mac OS, and Windows.
(And just about anywhere else -- we've run it on Android phones,
under FreeBSD, Haiku, and elsewhere. All you need is Python!)
You can place a pypy distribution alongside pox.py (in a directory
named "pypy"), and POX will run with pypy (this can be a significant
performance boost!).

POX currently communicates with OpenFlow 1.0 switches and includes
special support for the Open vSwitch/Nicira extensions.

pox.py boots up POX. It takes a list of module names on the command line,
locates the modules, calls their launch() function (if it exists), and
then transitions to the "up" state.

Modules are looked for everywhere that Python normally looks, plus the
"pox" and "ext" directories. Thus, you can do the following:

./pox.py forwarding.l2_learning

You can pass options to the modules by specifying options after the module
name. These are passed to the module's launch() funcion. For example,
to set the address or port of the controller, invoke as follows:

./pox.py openflow.of_01 --address=10.1.1.1 --port=6634

pox.py also supports a few command line options of its own which should
be given first:
--verbose print stack traces for initialization exceptions
--no-openflow don't start the openflow module automatically

Docker Pull Command
Owner
twhtanghk
Source Repository