aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2010-03-27 17:31:54 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2010-03-27 17:31:54 +0000
commit78ba8b295c29d51814968f65655d9ca782f7d27b (patch)
tree15e7a01f587e00a6d4a2cf7b2b296d0fb1919fae /sys
parent72ec67fcb739bc48e83157a3e7f4b9e7e073127d (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/net/vnet.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/sys/net/vnet.c b/sys/net/vnet.c
index fe8df65389d6..323ed0855630 100644
--- a/sys/net/vnet.c
+++ b/sys/net/vnet.c
@@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
#ifdef DDB
#include <ddb/ddb.h>
+#include <ddb/db_sym.h>
#endif
#include <net/if.h>
@@ -219,6 +220,10 @@ SDT_PROBE_DEFINE2(vnet, functions, vnet_alloc, return, "int", "struct vnet *");
SDT_PROBE_DEFINE2(vnet, functions, vnet_destroy, entry, "int", "struct vnet *");
SDT_PROBE_DEFINE1(vnet, functions, vnet_destroy, return, "int");
+#ifdef DDB
+static void db_show_vnet_print_vs(struct vnet_sysinit *, int);
+#endif
+
/*
* Allocate a virtual network stack.
*/
@@ -713,6 +718,64 @@ DB_SHOW_COMMAND(vnets, db_show_vnets)
}
}
+static void
+db_show_vnet_print_vs(struct vnet_sysinit *vs, int ddb)
+{
+ const char *vsname, *funcname;
+ c_db_sym_t sym;
+ db_expr_t offset;
+
+#define xprint(...) \
+ if (ddb) \
+ db_printf(__VA_ARGS__); \
+ else \
+ printf(__VA_ARGS__)
+
+ if (vs == NULL) {
+ xprint("%s: no vnet_sysinit * given\n", __func__);
+ return;
+ }
+
+ sym = db_search_symbol((vm_offset_t)vs, DB_STGY_ANY, &offset);
+ db_symbol_values(sym, &vsname, NULL);
+ sym = db_search_symbol((vm_offset_t)vs->func, DB_STGY_PROC, &offset);
+ db_symbol_values(sym, &funcname, NULL);
+ xprint("%s(%p)\n", (vsname != NULL) ? vsname : "", vs);
+ xprint(" 0x%08x 0x%08x\n", vs->subsystem, vs->order);
+ xprint(" %p(%s)(%p)\n",
+ vs->func, (funcname != NULL) ? funcname : "", vs->arg);
+#undef xprint
+}
+
+DB_SHOW_COMMAND(vnet_sysinit, db_show_vnet_sysinit)
+{
+ struct vnet_sysinit *vs;
+
+ db_printf("VNET_SYSINIT vs Name(Ptr)\n");
+ db_printf(" Subsystem Order\n");
+ db_printf(" Function(Name)(Arg)\n");
+ TAILQ_FOREACH(vs, &vnet_constructors, link) {
+ db_show_vnet_print_vs(vs, 1);
+ if (db_pager_quit)
+ break;
+ }
+}
+
+DB_SHOW_COMMAND(vnet_sysuninit, db_show_vnet_sysuninit)
+{
+ struct vnet_sysinit *vs;
+
+ db_printf("VNET_SYSUNINIT vs Name(Ptr)\n");
+ db_printf(" Subsystem Order\n");
+ db_printf(" Function(Name)(Arg)\n");
+ TAILQ_FOREACH_REVERSE(vs, &vnet_destructors, vnet_sysuninit_head,
+ link) {
+ db_show_vnet_print_vs(vs, 1);
+ if (db_pager_quit)
+ break;
+ }
+}
+
#ifdef VNET_DEBUG
DB_SHOW_COMMAND(vnetrcrs, db_show_vnetrcrs)
{