Giter Club home page Giter Club logo

repoxy's Introduction

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 )

repoxy's People

Contributors

shakram02 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

tubbz-alt

repoxy's Issues

Integrate with test framework

Create a discovery server for the test scripts to know the ip of the proxy host, the same way it's used with controller hosts

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.