dana-i2cat/opennaas — pull request #635 by isartcanyameres (2013-07-31 09:00:28+00:00)
Title: Feature/opener

This pull request introduces the router.actionsets.opener extension.

This extension adds support for Quagga software routers using OPENER as an intermediary.

It provides an implementation of some router capabilities for software routers powered by Quagga and OPENER software tools. It enables OpenNaaS to manage software routers created with a Quagga instance controlled by OPENER.

* Quagga is an open-source routing software suite, providing implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPng and BGP-4 for Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. The Quagga architecture consists of a core daemon, zebra, which acts as an abstraction layer to the underlying Unix kernel and presents the Zserv API over a Unix or TCP stream to Quagga clients.

* The Open and Programmable ENvironment for Experimenting with Routing (OPENER) is a programmable environment for open access to network elements' capabilities. It allows third party applications to assist, query, complement, improve, and even change the processes and the commands running on the network elements. It also offers an all-in-one management system for developing, deploying and managing the apps on the devices.
OPENER offers an open API to the Quagga routing suite based on RESTful webservices. This implementation acts as a Quagga client, and exposes a REST WS API that enables third clients to manage interfaces, IP addresses and routing tables of the router.

A client for this RESTful WS open API, namely OPENERQuaggaOpenAPI, has been developed and integrated in OpenNaaS. This client is used to provide an ActionSet implementation for capabilities currently supported by the OPENERQuaggaOpenAPI.

The driver provides an implementation for following capabilities ActionSets:
Chassis - Partial implementation only able to retrieve already instantiated interfaces.
IP - Partial implementation- SetIP method implemented only
Queue - Partial implementation allowing execution with no rollback support.

The driver requires an OPENER protocol session to be initialized. This protocol session instantiates the OPENER client with required parameters (such as the URI of the OPENER protocol endpoint) allowing Action implementations to use it.
The OPENER client is based in Apache CXF JAX-RS web services implementation. Particularly, the client is instantiated as a JAX-RS proxy with OPENERQuaggaOpenAPI interface. Afterwards, Actions call the client completely unaware of the fact it is a WS client, as only the interface is exposed to them.

In order to use the OPENER-Quagga driver, a resource descriptor indicating it should be crafted accordingly:

ip

chassis

queue

router
opener1