diff options
author | Jason Kölker <jason@koelker.net> | 2016-03-23 17:33:35 +0000 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-03-24 05:18:03 +0900 |
commit | d33c9f0fd9b156636f892e01f64ce1c0052493ca (patch) | |
tree | 7301f3e0100ab4286d18a0a42624b4ba460383ed | |
parent | 9e7a3e2342d4fad77b62d3578ed3ca9a39ea55c4 (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.py | 31 |
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() |