On 22 Aug 2024, at 10:17, LIU Yulong wrote:
> 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 *> {short} > > (gdb) ovs_dump_conntrack_conns 0x5606339c25e0 > (struct conn *) 0x7f32c000a8c0: expiration = 26162886419, mark = 0, dl_type = > 8, zone = 3, nw_proto = 6 '\006' > (struct conn *) 0x7f32c00489d0: expiration = 26162900867, mark = 0, dl_type = > 8, zone = 3, nw_proto = 1 '\001' > (struct conn *) 0x7f32c0153bb0: expiration = 26249266420, mark = 0, dl_type = > 8, zone = 3, nw_proto = 6 '\006' > > (gdb) ovs_dump_conntrack_conns 0x5606339c25e0 short > (struct conn *) 0x7f32c000a8c0 > (struct conn *) 0x7f32c00489d0 > (struct conn *) 0x7f32c0153bb0 I tried your patch, but it’s not working. I guess it’s based on an old version of OVS and the internal mappings have changed. (gdb) ovs_dump_dp_netdev (struct dp_netdev *) 0x907c800: name = ovs-netdev, class = (struct dpif_class *) 0x1607240 <dpif_netdev_class> (gdb) p (struct dp_netdev *) 0x907c800 $2 = (struct dp_netdev *) 0x907c800 (gdb) ovs_dump_conntrack_conns 0x7f66c2f8b010 Python Exception <class 'gdb.error'> There is no member named cm_node.: Error occurred in Python: There is no member named cm_node. Please adjust the script for the latest OVS version. Thanks, Eelco > Signed-off-by: LIU Yulong <i...@liuyulong.me> > --- > v1: initial version > v2: address comments from reviewers > print details of struct conn > add short param > v3: address pep8 check warnnings > --- > utilities/gdb/ovs_gdb.py | 58 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 58 insertions(+) > > diff --git a/utilities/gdb/ovs_gdb.py b/utilities/gdb/ovs_gdb.py > index 982395dd1..ea9ee5f88 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 *> {short} > # > # Example: > # $ gdb $(which ovs-vswitchd) $(pidof ovs-vswitchd) > @@ -1550,6 +1551,62 @@ 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 *> {short} > + > + <struct conntrack *> : Pointer to conntrack > + short : Only dump conn structure addresses, > + no content details > + > + Example dumping all <struct conn> connections: > + > + (gdb) ovs_dump_conntrack_conns 0x5606339c25e0 > + (struct conn *) 0x7f32c000a8c0: expiration = ... nw_proto = 1 > + (struct conn *) 0x7f32c00489d0: expiration = ... nw_proto = 6 > + (struct conn *) 0x7f32c0153bb0: expiration = ... nw_proto = 17 > + > + (gdb) ovs_dump_conntrack_conns 0x5606339c25e0 short > + (struct conn *) 0x7f32c000a8c0 > + (struct conn *) 0x7f32c00489d0 > + (struct conn *) 0x7f32c0153bb0 > + """ > + def __init__(self): > + super(CmdDumpDpConntrackConn, self).__init__( > + "ovs_dump_conntrack_conns", > + gdb.COMMAND_DATA) > + > + @staticmethod > + def display_single_conn(conn, indent=0, short=False): > + indent = " " * indent > + if short: > + print("{}(struct conn *) {}".format(indent, conn)) > + else: > + print("{}(struct conn *) {}: expiration = {}, mark = {}, " > + "dl_type = {}, zone = {}, nw_proto = {}".format( > + indent, conn, conn['expiration'], > + conn['mark'], conn['key']['dl_type'], > + conn['key']['zone'], > + conn['key']['nw_proto'])) > + > + def invoke(self, arg, from_tty): > + arg_list = gdb.string_to_argv(arg) > + if len(arg_list) == 0: > + print("usage: ovs_dump_conntrack_conns <struct conntrack *> " > + "{short}") > + 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, short="short" in arg_list[1:]) > + > + > # > # Initialize all GDB commands > # > @@ -1571,3 +1628,4 @@ CmdDumpSmap() > CmdDumpUdpifKeys() > CmdShowFDB() > CmdShowUpcall() > +CmdDumpDpConntrackConn() > -- > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev