Add a new GDB macro called ovs_dump_conntrack_conns, which can
be used to dump all conn structure in a conntrack. For example

(gdb) ovs_dump_conntrack_conns
usage: ovs_dump_conntrack_conns <struct conntrack *>

(gdb) ovs_dump_conntrack_conns  0x558e658c9660
(struct conn *) 0x7f4094016960
(struct conn *) 0x7f4094045b30
(struct conn *) 0x7f409406fa80

Signed-off-by: LIU Yulong <[email protected]>
---
 utilities/gdb/ovs_gdb.py | 41 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/utilities/gdb/ovs_gdb.py b/utilities/gdb/ovs_gdb.py
index 982395dd1..e7167f29e 100644
--- a/utilities/gdb/ovs_gdb.py
+++ b/utilities/gdb/ovs_gdb.py
@@ -37,6 +37,7 @@
 #    - ovs_dump_udpif_keys {<udpif_name>|<udpif_address>} {short}
 #    - ovs_show_fdb {[<bridge_name>] {dbg} {hash}}
 #    - ovs_show_upcall {dbg}
+#    - ovs_dump_conntrack_conns <struct conntrack *>
 #
 #  Example:
 #    $ gdb $(which ovs-vswitchd) $(pidof ovs-vswitchd)
@@ -1549,6 +1550,45 @@ class CmdDumpPackets(gdb.Command):
 
         return packet
 
+#
+# Implements the GDB "ovs_dump_conntrack_conns" command
+#
+class CmdDumpDpConntrackConn(gdb.Command):
+    """Dump all connections in a conntrack set
+    Usage:
+      ovs_dump_conntrack_conns <struct conntrack *>
+
+      <struct conntrack *> : Pointer to conntrack
+
+    Example dumping all <struct conn> connections:
+
+    (gdb) ovs_dump_ofpacts actions actions_len
+    (struct conn *) 0x7f4094016960
+    (struct conn *) 0x7f4094045b30
+    (struct conn *) 0x7f409406fa80
+    (struct conn *) 0x7f4094081360
+    """
+    def __init__(self):
+        super(CmdDumpDpConntrackConn, self).__init__(
+            "ovs_dump_conntrack_conns",
+            gdb.COMMAND_DATA)
+
+    @staticmethod
+    def display_single_conn(conn, indent=0):
+        indent = " " * indent
+        print("{}(struct conn *) {} ".format(indent, conn))
+
+    def invoke(self, arg, from_tty):
+        arg_list = gdb.string_to_argv(arg)
+        if len(arg_list) != 1:
+            print("usage: ovs_dump_conntrack_conns "
+                  "<struct conntrack *>")
+            return
+        ct = gdb.parse_and_eval(arg_list[0]).cast(
+            gdb.lookup_type('struct conntrack').pointer())
+        for node in ForEachCMAP(ct["conns"], "struct conn", "cm_node"):
+            self.display_single_conn(node)
+
 
 #
 # Initialize all GDB commands
@@ -1571,3 +1611,4 @@ CmdDumpSmap()
 CmdDumpUdpifKeys()
 CmdShowFDB()
 CmdShowUpcall()
+CmdDumpDpConntrackConn()
-- 
2.27.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to