README ¶
OpenFlow-QUIC with EPM
OpenFlow-QUIC uses QUIC as the transport protocol for OpenFlow. We also design an Extended Performance Modular (EPM) scheduling algorithm to optimize the performance of OpenFlow.
Overview of OpenFlow-QUIC with EPM in Go
OpenFlow-QUIC with EPM is an extend performance modular implementation of the OpenFlow protocol in Go, serving Open vSwitch and RYU controller by quic-go v0.22.0 .
It uses Unix Domain Socket to insert a slight component into OVS and RYU.
This project provides improved performance for networks using OpenFlow through the use of multiple streams in QUIC and some behaviors based on OpenFlow messages (faster network convergence and reduced overhead for control plane flow table updates).
Citations
If you find this code useful in your research, please cite the following papers:
- WaiMin Lau, KaKei Wong and Lin Cui, "Optimizing the Performance of OpenFlow Protocol over QUIC", Journal of Network and Computer Applications, 2024.
INSTALLATION
Be careful, this implementation is based on quic-go v0.22.0. Some interfaces have been changed in the new quic-go version. You should change the codes in folder "quic-go" and implement them again by yourself.
-
There are examples in
/ovs-changed
,/ryu-changed
, and/quic-changed
. -
Compile the dynamic library by CGO
- some interfaces are added for supporting EPM to extract the queuing information in the folder of
/quic-changed/
. - download the
/client
and/server
. - run
go build --buildmode=c-shared -o "yourlibrary.so" *.go
in these folders, individually. - set their paths into OVS and RYU.
- some interfaces are added for supporting EPM to extract the queuing information in the folder of
-
As an OVS
- download the OVS and run
./configure
- make sure that you need to change the MakeFile. Add the
-ldl
in the line withLIBS
. - change the functions and add the dynamic library loader and library path to support OpenFlow-QUIC with EPM in
/ovs-master/stream-fd.c
and/ovs-master/stream-tcp.c
.
- If possible, you should create a series of codes to divide QUIC and TCP.
- please add the UDP flow entry into
/ofproto/in-band.c
. - after preparing, it's time to install OVS by
./make install
.
- download the OVS and run
-
As an RYU controller
- download the RYU
- change the functions and add the dynamic library loader and library path to support OpenFlow-QUIC with EPM in
/ryu-master/ryu/controller/controller.py
and/ryu-master/ryu/lib/hub.py
. - install the RYU by
pip3 install .
.
Usage
-
for OVS
- run
./runovs "your switch name" "your switch ip address and mask" "controller address"
. It will automatically create OVSDB and run OVSDB. - you should add the switch port by yourself. There is an example in
./runovs
.
- run
-
for RYU
- run
./ryu-manager "your controller application" --ofp-quic-unix-listen" "your unix socket path
.your unix socket path
default values is/tmp/ryu_quic.sock
.
- run
Development
-
Algorithm.go
contains the algorithm of EPM -
export_to_server.go
is for CGO compiling a dynamic library, providing the initiation function. -
OFHandlerOperatorReceiver.go
andOFHandlerOperatorSender.go
are responsible for each OpenFlow message following serveral rules to further improve the performance of OpenFlow-QUIC by EPM. -
some codes are ready for supporting multicast QUIC (Multicast Extension for QUIC draft-jholland-quic-multicast-02)
-
for client
QuicClientManager
controlsQuicClient
. TheQuicClient
creates the connection to QuicServer and returns the objectQuicServerConnection
.- Then,
QuicServerConnection
hands over the connection to "ConnectionController", which executes the scheduling by EPM's components.
-
for server
QuicServerManager
controlsQuicServer
. TheQuicServer
creates the connection to QuicClient and returns the objectQuicClientConnection
.- Then,
QuicClientConnection
hands over the connection to "ConnectionController", which executes the scheduling by EPM's components.
License
Copyright (c) 2022 AntLab Licensed under the GPL-3.0 license.