Sometimes we need to dump packets on more than two interfaces in a bridge
at the same time. Then when we stop dumping in order, ovs-tcpdump print
traceback and fail to delete mirror interface for some interface.

For example:
br-int has two interface tap1 and br-int. We use ovs-tcpdump dump tap1 first
and dump br-int next. Then stopping tap1 ovs-tcpdump first, and stopping
br-int second. When we stop ovs-tcpdump for br-int, the screen show the error
like this:
__main__.OVSDBException: Unable to delete Mirror m_br-int

Signed-off-by: Han Ding <hand...@chinatelecom.cn>
---
 utilities/ovs-tcpdump.in | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in
index 82d1bedfa..6188be5c4 100755
--- a/utilities/ovs-tcpdump.in
+++ b/utilities/ovs-tcpdump.in
@@ -164,6 +164,9 @@ class OVSDB(object):
         schema.register_all()
         self._idl_conn = idl.Idl(db_sock, schema)
         OVSDB.wait_for_db_change(self._idl_conn)  # Initial Sync with DB
+
+    def close_idl(self):
+        self._idl_conn.close()

     def _get_schema(self):
         error, strm = Stream.open_block(Stream.open(self._db_sock))
@@ -500,6 +503,8 @@ def main():
             pass
         sys.exit(1)

+    ovsdb.close_idl()
+
     pipes = _doexec(*([dump_cmd, '-i', mirror_interface] + tcpdargs))
     try:
         while pipes.poll() is None:
@@ -512,6 +517,7 @@ def main():
         if pipes.poll() is None:
             pipes.terminate()

+        ovsdb = OVSDB(db_sock)
         ovsdb.destroy_mirror(interface, ovsdb.port_bridge(interface))
         ovsdb.destroy_port(mirror_interface, ovsdb.port_bridge(interface))
         if tap_created is True:
--
2.27.0




_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to