summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJason Kölker <jason@koelker.net>2016-03-23 17:33:35 +0000
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-03-24 05:18:03 +0900
commitd33c9f0fd9b156636f892e01f64ce1c0052493ca (patch)
tree7301f3e0100ab4286d18a0a42624b4ba460383ed
parent9e7a3e2342d4fad77b62d3578ed3ca9a39ea55c4 (diff)
protocols/ovsdb: Add api for systemd_id lookup
Create an api helper function for correlation of system_id given a datapath_id. Signed-off-by: Jason Kölker <jason@koelker.net> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/services/protocols/ovsdb/api.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/ryu/services/protocols/ovsdb/api.py b/ryu/services/protocols/ovsdb/api.py
index ea73cbf2..1d399ea9 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()