Comparison of Ryu and OpenDaylight Northbound APIs

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.

Table 1- Northbound REST API methods similarities in OpenStack
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

 

Table 2- Northbound REST API methods similarities in Generic Networks
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.


Leave a Reply

Your email address will not be published. Required fields are marked *