Skip to content

Project for the ANAWS course of the Master of Science in Computer Engineering, University of Pisa. A Floodlight module supporting mobility of users inside a network domain.

Notifications You must be signed in to change notification settings

diegocasu/SDN-for-mobility

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SDN for mobility

Project for the Advanced Network Architectures and Wireless Systems course of the Master of Science in Computer Engineering, University of Pisa.

The project consists in the design and implementation of a Floodlight module supporting mobility of users inside a network domain.

Overview

The repository is organized in the following way:

  • floodlight contains the source code of the Floodlight controller, where the custom module is located in the it.unipi.floodlight package. No additional changes to the source code of the controller were introduced.
  • mininet contains the scripts to generate the test topology in Mininet-WiFi and to inject the configuration in the controller via the REST interface.
  • asciimation-over-http contains a test application simulating a video streaming between a client and a server.

The test topology is the one of the following figure:

Test topology

Requirements

  • Floodlight requires Java 7 and Ant. The latter must support Java 7 (ex. version 1.9.X).
  • Mininet-WiFi can be installed following the instructions in its repository.
  • The test application and the script to inject the configuration in the controller require Python 3. The required packages can be installed with pip:
    pip install -r requirements.txt
    If the nodes in Mininet-Wifi do not see the Flask package during the execution, please install it via apt:
    sudo apt-get install python3-flask

Installation and execution

  • Compile and execute Floodlight. In the floodlight folder:
    ant
    sudo java -jar target/floodlight.jar
  • Build the topology using Mininet-WiFi. In the mininet folder:
    sudo python topology_generator.py
  • If you don't want to load manually or customise the configuration in the controller, inject the provided one. The script adds 3 users (sta1, sta2, sta3), the servers (h1, h2, h3) and the access switches (s1, s3, s5). In the mininet folder:
    python configuration_injection.py
  • Start the server application in the mininet nodes representing the servers (the contacted server is always the topologically closest one). For example, inside h1, execute in the asciimation-over-http folder:
    python server/movieserver.py --serverIP=10.0.1.1 --serverPort=5000
  • Start the client application in one mininet node representing a station, targeting the virtual IP exposed by Floodlight (by default 8.8.8.8). For example, inside sta1, execute in the asciimation-over-http folder:
    python client/movieclient.py --movie=starwars --serverIP=8.8.8.8 --serverPort=5000
  • Enjoy the movie!
    Client Streaming

The scripts inside mininet assume that the controller is running locally at 127.0.0.1, allowing the exchange of Openflow messages through the port 6653 and exposing the REST interface through the port 8080.

WARNING: if an access switch is shut down or the topology is reloaded while the controller is still running, the involved access switch(es) must be removed from the list of access switches and registered again using the REST interface. This operation is necessary to initialize properly their flow tables; it is not necessary for the core switches.

Mobility scenario

A station can be moved spatially in two ways:

  • instantaneously, operating on the Mininet-WiFi command line. For example, sta1 can be moved near ap2 with the command:
    mininet-wifi> py sta1.setPosition("60,30,0")
    
  • gradually, adding custom lines inside the topology_generator.py file. For example, sta1 can start moving towards ap2, when the topology is loaded, adding the lines:
    ...
    net.plotGraph(max_x=100, max_y=100)
    
    # Start mobility code.
    net.startMobility(time=0, ac_method="ssf")
    net.mobility(sta1, "start", time=30, position="15,30,0")
    net.mobility(sta1, "stop", time=40, position="60,30,0")
    net.stopMobility(time=45)
    # End mobility code.
    
    info("*** Starting network\n")
    net.build()
    ...
    
    This example is contained in topology_generator_with_mobility.py.

Contributors

Antonio Nunzio Pio Di Noia
Diego Casu
Leonardo Bernardi

Copyright

Original art work by Simon Jansen

About

Project for the ANAWS course of the Master of Science in Computer Engineering, University of Pisa. A Floodlight module supporting mobility of users inside a network domain.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published