Create an api helper function for correlation of system_id given a
datapath_id.

Signed-off-by: Jason Kölker <[email protected]>
---
 ryu/services/protocols/ovsdb/api.py | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/ryu/services/protocols/ovsdb/api.py 
b/ryu/services/protocols/ovsdb/api.py
index ea73cbf..1d399ea 100644
--- a/ryu/services/protocols/ovsdb/api.py
+++ b/ryu/services/protocols/ovsdb/api.py
@@ -125,6 +125,37 @@ def get_datapath_ids_for_systemd_id(manager, system_id):
     return reply.result
 
 
+def get_system_id_for_datapath_id(manager, datapath_id):
+    def _get_dp_ids(tables):
+        bridges = tables.get('Bridge')
+
+        if not bridges:
+            return None
+
+        for bridge in bridges.rows.values():
+            datapath_ids = [dpidlib.str_to_dpid(dp_id)
+                            for dp_id in bridge.datapath_id]
+
+            if datapath_id in datapath_ids:
+                openvswitch = tables['Open_vSwitch'].rows
+
+                if openvswitch:
+                    row = openvswitch.get(list(openvswitch.keys())[0])
+                    return row.external_ids.get('system-id')
+
+        return None
+
+    request = ovsdb_event.EventReadRequest(None, _get_dp_ids)
+    reply = manager.send_request(request)
+
+    # NOTE(jkoelker) Bulk reads return a tuple of (system_id, result)
+    for result in reply.result:
+        if result[1]:
+            return result[0]
+
+    return None
+
+
 def get_bridges_by_system_id(manager, system_id):
     return get_table(manager, system_id, 'Bridge').rows.values()
 
-- 
2.7.3


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to