For our SDK4SDN work we made a comparison between two SDN controllers: Ryu and Opendaylight. We focused on the Northbound APIs of the controllers and we compared the capabilities and ease of use of their respective REST APIs.
Both controllers support REST, which is based on a mix of HTTP, JSON and XML. In Ryu a WSGI web server is used to create the REST APIs, which link with other systems and browsers. In OpenDaylight, the Jersey library provides the REST APIs with both JSON and XML interfaces. Jersey also provides its own API to simplify RESTful services by extending the JAX-RS toolkit which is compliant with the Northbound API.
The tables below outline some standard operations and Northbound REST APIs where you can find similar REST methods.
OpenStack | ||
Operation | Ryu API | OpenDaylight API |
Router Configuration | Neutron Routers Northbound | |
Firewall Configuration | Neutron Firewall Northbound Neutron Firewall Policy Northbound Neutron Firewall Rules Northbound |
|
Network Configuration | rest.py | Neutron Networks Northbound |
Switch Configuration | rest_conf_switch.py | |
Port Configuration | rest.py | Neutron Ports Northbound |
Flow Programming | ||
Statistics | ||
Topology |
Generic Networks | ||
Operation | Ryu API | OpenDaylight API |
Router Configuration | rest_router.py | Static Routing Northbound |
Firewall Configuration | rest_firewall.py | |
Network Configuration | ||
Switch Configuration | Switch Northbound | |
Port Configuration | ||
Flow Programming | ofctl_rest.py | Flow Programmer Northbound |
Statistics | ofctl_rest.py | Statistics Northbound |
Topology | rest_topology.py | Topology Northbound JAXRS |
A detailed description of REST APIs methods can be found here : Ryu Northbound APIs and OpenDaylight Northbound APIs.
The OpenDaylight controller is built using the Java OSGi framework. OSGi adds a modular framework that allows starting, stopping, loading and unloading of Java modules without bringing down the entire running JVM platform. Ryu controller does not offer this comodity. In Ryu we need to stop the controller and run it again with the needed modules for the REST methods we want to execute or we need to build a REST API with all REST modules included in it, which runs once and provides all REST methods without stopping the controller.
After this analysis, we concluded that there are not so many similarities between Northbound parts of the controllers. To unify communication between controllers we need another layer of APIs. But creating another layer of abstraction on top of the controllers would not be very efficient.