====== OVSDB Dev ======
* https://wiki.opendaylight.org/view/OVSDB_Integration:Main
* Try ovsdb, end of this page: https://wiki.opendaylight.org/view/OVSDB_Integration:Mininet_OVSDB_Tutorial
* ovsdb southbound: https://wiki.opendaylight.org/view/OVSDB:MDSAL_Southbound
* http://thenewstack.io/sdn-series-part-vi-opendaylight/
====== Learning Path ======
* OVSDB: https://wiki.opendaylight.org/view/OVSDB_Integration:Main
===== Developer guide: =====
https://wiki.opendaylight.org/view/OVSDB:Developer_Guide
==== Integration Design ====
https://wiki.opendaylight.org/view/OVSDB_Integration:Design
**The controller**
In the SDN space, controllers and applications can interact with the OpenVSwitch by means of two different channels : OpenFlow and OVSDB.
While the protocol OpenFlow addresses the forwarding-side of the OVS functionality, OVSDB addresses the management-plane.
A simple and concise overview of OVSDB can be found at http://networkstatic.net/getting-started-ovsdb/ (Thanks to Brent's tireless efforts).
**The controller** comprises many Java OSGi bundles that work together to provide the needed controller functionalities.
The bundles are placed in the following broad categories:
Network Service Functional Modules (such as Topology Manager, Inventory Manager, Forwarding Rules Manager,...)
NorthBound API Modules (such as Topology APIs, Bridge Domain APIs, Neutron APIs, Connection Manager APIs, ...)
Service Abstraction Layer(SAL)- (Inventory Services, DataPath Services, Topology Services, Network Config,...)
SouthBound Plugins (OpenFlow Plugin, OVSDB Plugin, OpenDove Plugin,...)
Application Modules (Simple Forwarding, Load Balancer)
+--------------+--------------+-----------+
| Connection |Network Config| Neutron |
| Service APIs| APIs | APIs |
+--------------+--------------+-----------+
| NorthBound API Layer (REST) |
+-----------------------------------------+
+-----------------------------------------+
| +------------+ +---------+ +---------+ |
| |Connection | |Topology | | Switch | |
| | Manager | | Manager | | Manager | |
| +------------+ +---------+ +---------+ |
| Network Service Functions Layer |
+-----------------------------------------+
+-----------------------------------------+
| +------------+ +---------+ +---------+ |
| |Connection | |Data Pkt | |Inventory| |
| | Service | | Service | | Service | |
| +------------+ +---------+ +---------+ |
| Service Abstraction Layer (SAL) |
+-----------------------------------------+
+-----------------------------------------+
| SouthBound API Layer |
| +----------------+ +----------------+ |
| | OpenFlow Plugin| | OVSDB Plugin | |
| | +------------+ | | +------------+ | |
| | | Flow Prog | | | | Connection | | |
| | | Service | | | | Service | | |
| | +------------+ | | +------------+ | |
| | +------------+ | | +------------+ | |
| | | Data Pkt | | | | Net Config | | |
| | | Service | | | | Service | | |
| | +-----.------+ | | +-----.------+ | |
| | . | | . | |
| +----------------+ +----------------+ |
+-----------------------------------------+
Each of the SouthBound Plugins serves a different purpose, with some overlapping.
For example, the OpenFlow plugin might serve the Data-Plane needs of an OVS element while the OVSDB plugin can serve the management plane needs of the same OVS element.
As the Openflow Plugin talks OpenFlow protocol with the OVS element, the OVSDB plugin will use OVSDB schema over JSON-RPC transport.
The OVSDB tables can be viewed with the following command:
ovsdb-client dump
The command can be called remotely also:
ovsdb-client dump tcp:172.16.58.131:6640
ovsdb-client dump tcp:172.16.58.131:6640
**OVSDB Southbound plugin**
The OpenDaylight OVSDB southbound plugin consists of one or more OSGi bundles addressing the following services or functionalities :
Connection Service - Based on Netty
Network Configuration Service
Bidirectional JSON-RPC Library
OVSDB Schema definitions and Object mappers
Overlay Tunnel management
OVSDB to OpenFlow plugin mapping service
Inventory Service
==== . ====
**Connection Service - Based on Netty**
Every succesful connection to a network element will result in a Node object (Refer to OpenDaylight SAL Node.java) with the type = "OVSDB" and value = User-Readable Name of the Connection as specified by the Connection Manager. This Node object is returned to the OpenDaylight Connection Manager and the application that invoked the Connect() functionality.
IPluginInConnectionService : public Node connect(String identifier, Map params)
==== . ====
**Network Configuration Service**
https://wiki.opendaylight.org/view/OpenDaylight_Controller:NetworkConfigurationServices
===== Southbound =====
* https://wiki.opendaylight.org/view/OVSDB:MDSAL_Southbound
* http://networkstatic.net/getting-started-ovsdb/
===== Northbound =====
https://wiki.opendaylight.org/view/OVSDB:Northbound
===== Openflowplugin =====
* https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:Overview
* https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:User_Guide
* https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:Developer_Guide
* https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:YangModels
===== Testing =====
mvn clean install -Dskip
mvn install -DskipTests -DskipIT -nsu
Load karaf feature:
feature:install odl-mdsal-apidocs odl-netconf-mdsal odl-restconf
Load dlux:
feature:install odl-dlux-all
Load ovsdb feature:
feature:install odl-ovsdb-library odl-ovsdb-schema-openvswitch odl-ovsdb-schema-hardwarevtep odl-ovsdb-plugin odl-ovsdb-northbound \
odl-ovsdb-compatibility-layer odl-ovsdb-ovssfc
Load l2switch
feature:install odl-l2switch-all
Now mininet ping work!!
==== openflowplugin ====
Following should be installed:
odl-openflowplugin-southbound odl-openflowplugin-flow-services odl-openflowplugin-nsf-services odl-openflowplugin-nsf-model
feature:install odl-openflowplugin-flow-services-rest
Then the end-to-end tutorials here should work: https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin:User_Guide
==== All in one: ====
feature:install odl-restconf odl-l2switch-switch odl-mdsal-apidocs odl-dlux-core
==== Log ====
tail -f distribution/distribution-karaf/target/assembly/data/log/karaf.log
==== dlux ====
karaf> http:list | grep -i dlux
271 | DluxLoaderIndexServlet | ServletModel-33 | Deployed | /index.html | [/index.html/*]
271 | ResourceServlet | /dlux | Deployed | / | [/]
====== Mininet ======
mn --topo single,3 --mac --switch ovsk,protocols=OpenFlow13 --controller remote,ip=10.10.11.44,port=6653
python:
* https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin::Mininet_with_multiple_controllers