Skip to content

shakram02/Repoxy

Repository files navigation

Repoxy

The first proxy server enabling multiple controllers in one SDN network ✨

Repoxy allows multiple OpenFlow (OF) SDN controllers to manage a single SDN network. Targeting increased reliability of the network, making the SDN network able to operate if its main controller fails without any need to sync the network state. (given that tehre's at least one other controller attached to Repoxy)

Technical challenges

  • Some OF protocol details needed to be handled
  • Packets from controllers might arrive at different times with a different xid field for each OpnFlow conversation for each controller
  • OF Packet Fabrication after Xid modification

This project is implmented for this paper, published in IEEE TrustCom2018.

note: (This code isn't production ready).

overview Repoxy_network_planes Full details are included in the paper

The following images illustrate some of the architectural components and functionality of Repoxy

Packet synchronization

If two controllers send a feature request packet, each one of the controllers will issue a different xid to the request packet. As the protocol specifies, the xid field must be the same in request & reply packets.

Repoxy will wait the reply packet from the switch then modify the xid based on the ones assigned by each controller, then refabricates the reply packet with the correct xid corresponding to the controller's request. Before modifying the xid we must be sure that the state of the packets is synced, i.e. if we get 2 consecutive request packets from one controller (for example) the replies of the switch must be returned in the same order Repoxy has to figure out the reply packet corresponds to whiich request. With requests coming from switches and controllers, having more than one switch and more than one controller in the network, the task becomes tedious.

packet_correction.png

Development Tips

  • I used IntelliJ IDEA for developing the project. There's a free version available and it makes things much easier (Intellij is so nice that they provide a free community edition)
  • Make sure you have java8+ and javafx installed on your systen
  • Right click on the Main class from the right pane then select Run Main.main()

right_pane

  • If you want to use the GUI interface, do the same for GuiMain in user-interface module
    user_interface_module

  • Tests were done using poxcontroller and mininet network simulator

  • Test automation scripts are here

    • During my tests, I used the host and 2 VMs, I placed the network simulated using mininet and Repoxy on my PC and hosted one controller on a VM. The test scripts simulate somoe scenarios and tries to make things more straight forward since switching between multiple VMs to make sure that everything starts on time was very boring to me.

Testing

  • Start the two controllers and obtain their IPs and Port numbers
  • Start repoxy after assigning the IPs and Port Numbers of the controllers, There is a GUI app that can facilitate the task
  • When Repoxy starts it'll print out its IP and port
  • Open mininet and establish your network, set the controller IP for each of the switches as Repoxy's IP
  • Run mininet network and watch the logs.

Misc

Adding OpenFlow for Wireshark here Capture filter for Wireshark

tcp && not tcp.len==0 && (tcp.dstport==6833 || tcp.dstport==6834 || tcp.dstport==6835 || tcp.srcport==6833 || tcp.srcport==6834 || tcp.srcport==6835 )

About

An abstraction layer to allow multiple SDN controllers to manage the same set of switches without switchies knowing anything

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published