mirror of
https://github.com/openvswitch/ovs
synced 2025-10-25 15:07:05 +00:00
utilities: Add smap related command and iterator to the GDB script
Adds "ovs_dump_smap <struct smap *>" command Example output: Breakpoint 1, trtcm_policer_qos_construct (details=0x135bad0, conf=0x7ffd31f5da28) at lib/netdev-dpdk.c:4154 (gdb) ovs_dump_smap 0x135bad0 cbs: 2048 cir: 151800 eir: 151800 pbs: 2048 Signed-off-by: Eelco Chaudron <echaudro@redhat.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
committed by
Ben Pfaff
parent
b1331295ea
commit
cd5b89a5a9
@@ -30,6 +30,7 @@
|
||||
# - ovs_dump_netdev_provider
|
||||
# - ovs_dump_ovs_list <struct ovs_list *> {[<structure>] [<member>] {dump}]}
|
||||
# - ovs_dump_simap <struct simap *>
|
||||
# - ovs_dump_smap <struct smap *>
|
||||
# - ovs_dump_udpif_keys {<udpif_name>|<udpif_address>} {short}
|
||||
# - ovs_show_fdb {[<bridge_name>] {dbg} {hash}}
|
||||
# - ovs_show_upcall {dbg}
|
||||
@@ -319,6 +320,19 @@ class ForEachSIMAP(ForEachHMAP):
|
||||
return node['name'], node['data']
|
||||
|
||||
|
||||
#
|
||||
# Class that will provide an iterator over an OVS smap.
|
||||
#
|
||||
class ForEachSMAP(ForEachHMAP):
|
||||
def __init__(self, shash):
|
||||
super(ForEachSMAP, self).__init__(shash['map'],
|
||||
"struct smap_node", "node")
|
||||
|
||||
def next(self):
|
||||
node = super(ForEachSMAP, self).next()
|
||||
return node['key'], node['value']
|
||||
|
||||
|
||||
#
|
||||
# Class that will provide an iterator over an OVS list.
|
||||
#
|
||||
@@ -734,8 +748,8 @@ class CmdDumpOvsList(gdb.Command):
|
||||
# Implements the GDB "ovs_dump_simap" command
|
||||
#
|
||||
class CmdDumpSimap(gdb.Command):
|
||||
"""Dump all nodes of an ovs_list give
|
||||
Usage: ovs_dump_ovs_list <struct simap *>
|
||||
"""Dump all key, value entries of a simap
|
||||
Usage: ovs_dump_simap <struct simap *>
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
@@ -766,7 +780,42 @@ class CmdDumpSimap(gdb.Command):
|
||||
|
||||
|
||||
#
|
||||
# Implements the GDB "ovs_dump_simap" command
|
||||
# Implements the GDB "ovs_dump_smap" command
|
||||
#
|
||||
class CmdDumpSmap(gdb.Command):
|
||||
"""Dump all key, value pairs of a smap
|
||||
Usage: ovs_dump_smap <struct smap *>
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
super(CmdDumpSmap, self).__init__("ovs_dump_smap",
|
||||
gdb.COMMAND_DATA)
|
||||
|
||||
def invoke(self, arg, from_tty):
|
||||
arg_list = gdb.string_to_argv(arg)
|
||||
|
||||
if len(arg_list) != 1:
|
||||
print("ERROR: Missing argument!\n")
|
||||
print(self.__doc__)
|
||||
return
|
||||
|
||||
smap = gdb.parse_and_eval(arg_list[0]).cast(
|
||||
gdb.lookup_type('struct smap').pointer())
|
||||
|
||||
values = dict()
|
||||
max_key_len = 0
|
||||
for key, value in ForEachSMAP(smap.dereference()):
|
||||
values[key.string()] = value.string()
|
||||
if len(key.string()) > max_key_len:
|
||||
max_key_len = len(key.string())
|
||||
|
||||
for key in sorted(values.iterkeys()):
|
||||
print("{}: {}".format(key.ljust(max_key_len),
|
||||
values[key]))
|
||||
|
||||
|
||||
#
|
||||
# Implements the GDB "ovs_dump_udpif_keys" command
|
||||
#
|
||||
class CmdDumpUdpifKeys(gdb.Command):
|
||||
"""Dump all nodes of an ovs_list give
|
||||
@@ -1124,6 +1173,7 @@ CmdDumpNetdev()
|
||||
CmdDumpNetdevProvider()
|
||||
CmdDumpOvsList()
|
||||
CmdDumpSimap()
|
||||
CmdDumpSmap()
|
||||
CmdDumpUdpifKeys()
|
||||
CmdShowFDB()
|
||||
CmdShowUpcall()
|
||||
|
||||
Reference in New Issue
Block a user