From aa198d6900e2044ad940f4a1e89b3e7e0174c8c1 Mon Sep 17 00:00:00 2001 From: Jason Kölker Date: Fri, 24 Jul 2015 17:58:02 +0000 Subject: Add OVSDB manager protocol application MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows listening on a socket for OVSDB clients, reacting to their events and modifying their database. Co-Authored-By: Chris Hansen Co-Authored-By: Ravi Kamachi Signed-off-by: Jason Kölker Signed-off-by: Chris Hansen Signed-off-by: Ravi Kamachi Signed-off-by: FUJITA Tomonori --- doc/source/library.rst | 1 + doc/source/library_ovsdb_manager.rst | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 doc/source/library_ovsdb_manager.rst (limited to 'doc') diff --git a/doc/source/library.rst b/doc/source/library.rst index 38cc3872..bc8ff67f 100644 --- a/doc/source/library.rst +++ b/doc/source/library.rst @@ -12,3 +12,4 @@ Ryu provides some useful library for your network applications. library_of_config.rst library_bgp_speaker.rst library_bgp_speaker_ref.rst + library_ovsdb_manager.rst diff --git a/doc/source/library_ovsdb_manager.rst b/doc/source/library_ovsdb_manager.rst new file mode 100644 index 00000000..b23ae81d --- /dev/null +++ b/doc/source/library_ovsdb_manager.rst @@ -0,0 +1,61 @@ +********************* +OVSDB Manager library +********************* + +Introduction +============ + +Ryu OVSDB Manager library allows your code to interact with devices +speaking the OVSDB protocol. This enables your code to perform remote +management of the devices and react to topology changes on them. + +Example +======= + +The following logs all new OVSDB connections and allows creating a port +on a bridge. + +.. code-block:: python + + import uuid + + from ryu.base import app_manager + from ryu.services.protocols.ovsdb import api as ovsdb + from ryu.services.protocols.ovsdb import event as ovsdb_event + + + class MyApp(app_manager.RyuApp): + @set_ev_cls(ovsdb_event.EventNewOVSDBConnection) + def handle_new_ovsdb_connection(self, ev): + system_id = ev.system_id + self.logger.info('New OVSDB connection from system id %s', + systemd_id) + + def create_port(self, systemd_id, bridge_name, name): + new_iface_uuid = uuid.uuid4() + new_port_uuid = uuid.uuid4() + + def _create_port(tables, insert): + bridge = ovsdb.row_by_name(self, system_id, bridge_name) + + iface = insert(tables['Interface'], new_iface_uuid) + iface.name = name + iface.type = 'internal' + + port = insert(tables['Port'], new_port_uuid) + port.name = name + port.interfaces = [iface] + + brdige.ports = bridfe.ports + [port] + + return (new_port_uuid, new_iface_uuid) + + req = ovsdb_event.EventModifyRequest(system_id, _create_port) + rep = self.send_request(req) + + if rep.status != 'success': + self.logger.error('Error creating port %s on bridge %s: %s', + name, bridge, rep.status) + return None + + return reply.insert_uuid[new_port_uuid] -- cgit v1.2.3