summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Ross <gwr@nexenta.com>2015-04-20 23:02:00 -0400
committerGordon Ross <gwr@nexenta.com>2019-05-18 19:44:49 -0400
commit2b8c497c035368b077a9b9afc6244d162a5c9972 (patch)
tree7900872b5641280b4efa8cab782ef3d93238f0eb
parent87ca5dca670d2ebc3089fba0461232c7235b6c4b (diff)
downloadillumos-joyent-2b8c497c035368b077a9b9afc6244d162a5c9972.tar.gz
10961 want mdb "shares" walker for smbsrv
Reviewed by: Bayard Bell <bayard.bell@nexenta.com> Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com> Reviewed by: Matt Barden <Matt.Barden@nexenta.com> Approved by: Joshua M. Clulow <josh@sysmgr.org>
-rw-r--r--usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c546
1 files changed, 295 insertions, 251 deletions
diff --git a/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c b/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c
index fe69d515fe..0ed662f026 100644
--- a/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c
+++ b/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c
@@ -386,154 +386,12 @@ static const char *smb2_cmd_names[SMB2__NCMDS] = {
"smb2_invalid_cmd"
};
-static int smb_dcmd_list(uintptr_t, uint_t, int, const mdb_arg_t *);
-static void smb_dcmd_list_help(void);
-static int smb_dcmd_server(uintptr_t, uint_t, int, const mdb_arg_t *);
-static void smb_dcmd_session_help(void);
-static int smb_dcmd_session(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_dcmd_request(uintptr_t, uint_t, int, const mdb_arg_t *);
-static void smb_dcmd_user_help(void);
-static int smb_dcmd_user(uintptr_t, uint_t, int, const mdb_arg_t *);
-static void smb_dcmd_tree_help(void);
-static int smb_dcmd_tree(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_dcmd_odir(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_dcmd_ofile(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_dcmd_kshare(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_dcmd_vfs(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_vfs_walk_init(mdb_walk_state_t *);
-static int smb_vfs_walk_step(mdb_walk_state_t *);
-static void smb_node_help(void);
-static int smb_dcmd_node(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_node_walk_init(mdb_walk_state_t *);
-static int smb_node_walk_step(mdb_walk_state_t *);
-static int smb_lock(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_oplock(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_oplock_grant(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_ace(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_ace_walk_init(mdb_walk_state_t *);
-static int smb_ace_walk_step(mdb_walk_state_t *);
-static int smb_acl(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_sd(uintptr_t, uint_t, int, const mdb_arg_t *);
-static int smb_sid(uintptr_t, uint_t, int, const mdb_arg_t *);
static int smb_sid_print(uintptr_t);
-static int smb_fssd(uintptr_t, uint_t, int, const mdb_arg_t *);
static int smb_dcmd_getopt(uint_t *, int, const mdb_arg_t *);
static int smb_dcmd_setopt(uint_t, int, mdb_arg_t *);
static int smb_obj_expand(uintptr_t, uint_t, const smb_exp_t *, ulong_t);
static int smb_obj_list(const char *, uint_t, uint_t);
static int smb_worker_findstack(uintptr_t);
-static int smb_stats(uintptr_t, uint_t, int, const mdb_arg_t *);
-
-/*
- * MDB module linkage information:
- *
- * We declare a list of structures describing our dcmds, a list of structures
- * describing our walkers and a function named _mdb_init to return a pointer
- * to our module information.
- */
-static const mdb_dcmd_t dcmds[] = {
- { "smblist",
- "[-seutfdwv]",
- "print tree of SMB objects",
- smb_dcmd_list,
- smb_dcmd_list_help },
- { "smbsrv",
- "[-seutfdwv]",
- "print smb_server information",
- smb_dcmd_server },
- { "smbshares",
- "[-v]",
- "print smb_kshare_t information",
- smb_dcmd_kshare },
- { "smbvfs",
- "[-v]",
- "print smb_vfs information",
- smb_dcmd_vfs },
- { "smbnode",
- "?[-vps]",
- "print smb_node_t information",
- smb_dcmd_node,
- smb_node_help },
- { "smbsess",
- "[-utfdwv]",
- "print smb_session_t information",
- smb_dcmd_session,
- smb_dcmd_session_help},
- { "smbreq",
- ":[-v]",
- "print smb_request_t information",
- smb_dcmd_request },
- { "smblock", ":[-v]",
- "print smb_lock_t information", smb_lock },
- { "smbuser",
- ":[-vdftq]",
- "print smb_user_t information",
- smb_dcmd_user,
- smb_dcmd_user_help },
- { "smbtree",
- ":[-vdf]",
- "print smb_tree_t information",
- smb_dcmd_tree,
- smb_dcmd_tree_help },
- { "smbodir",
- ":[-v]",
- "print smb_odir_t information",
- smb_dcmd_odir },
- { "smbofile",
- "[-v]",
- "print smb_file_t information",
- smb_dcmd_ofile },
- { "smboplock", NULL,
- "print smb_oplock_t information", smb_oplock },
- { "smboplockgrant", NULL,
- "print smb_oplock_grant_t information", smb_oplock_grant },
- { "smbstat", NULL,
- "print all smb dispatched requests statistics",
- smb_stats },
- { "smbace", "[-v]",
- "print smb_ace_t information", smb_ace },
- { "smbacl", "[-v]",
- "print smb_acl_t information", smb_acl },
- { "smbsid", "[-v]",
- "print smb_sid_t information", smb_sid },
- { "smbsd", "[-v]",
- "print smb_sd_t information", smb_sd },
- { "smbfssd", "[-v]",
- "print smb_fssd_t information", smb_fssd },
- { NULL }
-};
-
-static const mdb_walker_t walkers[] = {
- { "smbnode_walker",
- "walk list of smb_node_t structures",
- smb_node_walk_init,
- smb_node_walk_step,
- NULL,
- NULL },
- { "smbvfs_walker",
- "walk list of smb_vfs_t structures",
- smb_vfs_walk_init,
- smb_vfs_walk_step,
- NULL,
- NULL },
- { "smbace_walker",
- "walk list of smb_ace_t structures",
- smb_ace_walk_init,
- smb_ace_walk_step,
- NULL,
- NULL },
- { NULL }
-};
-
-static const mdb_modinfo_t modinfo = {
- MDB_API_VERSION, dcmds, walkers
-};
-
-const mdb_modinfo_t *
-_mdb_init(void)
-{
- return (&modinfo);
-}
/*
* *****************************************************************************
@@ -542,7 +400,7 @@ _mdb_init(void)
*/
static void
-smb_dcmd_list_help(void)
+smblist_help(void)
{
mdb_printf(
"Displays the list of objects using an indented tree format.\n"
@@ -570,7 +428,7 @@ smb_dcmd_list_help(void)
*/
/*ARGSUSED*/
static int
-smb_dcmd_list(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smblist_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
GElf_Sym sym;
uint_t opts = 0;
@@ -637,7 +495,7 @@ static const smb_exp_t smb_server_exp[] =
*/
/*ARGSUSED*/
static int
-smb_dcmd_server(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbsrv_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
ulong_t indent = 0;
@@ -726,7 +584,7 @@ static const smb_exp_t smb_session_exp[] =
};
static void
-smb_dcmd_session_help(void)
+smbsess_help(void)
{
mdb_printf(
"Display the contents of smb_session_t, with optional"
@@ -746,7 +604,7 @@ smb_dcmd_session_help(void)
* smbsess dcmd - Print out the smb_session structure.
*/
static int
-smb_dcmd_session(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbsess_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
ulong_t indent = 0;
@@ -866,7 +724,7 @@ static const char *smb_request_state[SMB_REQ_STATE_SENTINEL] =
"%-?p %-?p %-14lld %-14lld %-16s %s\n"
static int
-smb_dcmd_request(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbreq_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
@@ -1033,7 +891,7 @@ static const char *smb_user_state[SMB_USER_STATE_SENTINEL] =
};
static void
-smb_dcmd_user_help(void)
+smbuser_help(void)
{
mdb_printf(
"Display the contents of smb_user_t, with optional filtering.\n\n");
@@ -1045,7 +903,7 @@ smb_dcmd_user_help(void)
}
static int
-smb_dcmd_user(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbuser_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
@@ -1141,7 +999,7 @@ static const smb_exp_t smb_tree_exp[] =
};
static void
-smb_dcmd_tree_help(void)
+smbtree_help(void)
{
mdb_printf(
"Display the contents of smb_tree_t, with optional filtering.\n\n");
@@ -1155,7 +1013,7 @@ smb_dcmd_tree_help(void)
}
static int
-smb_dcmd_tree(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbtree_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
ulong_t indent = 0;
@@ -1231,7 +1089,7 @@ static const char *smb_odir_state[SMB_ODIR_STATE_SENTINEL] =
};
static int
-smb_dcmd_odir(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbodir_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
@@ -1302,7 +1160,7 @@ static const char *smb_ofile_state[SMB_OFILE_STATE_SENTINEL] =
};
static int
-smb_dcmd_ofile(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbofile_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
uint_t opts;
@@ -1369,78 +1227,86 @@ smb_dcmd_ofile(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
* *****************************************************************************
*/
+struct smb_kshare_cb_args {
+ uint_t opts;
+ char name[MAXNAMELEN];
+ char path[MAXPATHLEN];
+};
+
static int
-smb_kshare_cb(uintptr_t addr, const void *data, void *arg)
+smb_kshare_cb(uintptr_t addr, const void *data, void *varg)
{
- uint_t *opts = arg;
- uintptr_t ta, sa;
- char name[32];
- char path[64];
- _NOTE(ARGUNUSED(data));
+ struct smb_kshare_cb_args *args = varg;
+ const smb_kshare_t *shr = data;
- if (*opts & SMB_OPT_VERBOSE) {
+ if (args->opts & SMB_OPT_VERBOSE) {
mdb_arg_t argv;
argv.a_type = MDB_TYPE_STRING;
argv.a_un.a_str = "smb_kshare_t";
/* Don't fail the walk if this fails. */
+ mdb_printf("%-?p ", addr);
mdb_call_dcmd("print", addr, 0, 1, &argv);
- } else {
- /*
- * Summary line for a kshare
- * Don't fail the walk if any of these fail.
- */
- ta = addr + OFFSETOF(smb_kshare_t, shr_name);
- if (mdb_vread(&sa, sizeof (sa), ta) < 0 ||
- mdb_readstr(name, sizeof (name), sa) <= 0)
- strcpy(name, "?");
-
- ta = addr + OFFSETOF(smb_kshare_t, shr_path);
- if (mdb_vread(&sa, sizeof (sa), ta) < 0 ||
- mdb_readstr(path, sizeof (path), sa) <= 0)
- strcpy(path, "?");
-
- mdb_printf("%-?p ", addr); /* smb_kshare_t */
- mdb_printf("%-16s ", name);
- mdb_printf("%-s", path);
- mdb_printf("\n");
+ return (WALK_NEXT);
}
+ /*
+ * Summary line for an smb_kshare_t
+ * Don't fail the walk if any of these fail.
+ *
+ * Get the shr_name and shr_path strings.
+ */
+ if (mdb_readstr(args->name, sizeof (args->name),
+ (uintptr_t)shr->shr_name) <= 0)
+ strcpy(args->name, "?");
+
+ if (mdb_readstr(args->path, sizeof (args->path),
+ (uintptr_t)shr->shr_path) <= 0)
+ strcpy(args->path, "?");
+
+ mdb_printf("%-?p ", addr); /* smb_kshare_t */
+ mdb_printf("%-16s ", args->name);
+ mdb_printf("%-s\n", args->path);
+
return (WALK_NEXT);
}
/*
- * ::smbshares
+ * ::smbshare
*
- * dcmd - Print out smb_kshare structures.
+ * smbshare dcmd - Print out smb_kshare structures.
* requires addr of an smb_server_t
*/
/*ARGSUSED*/
static int
-smb_dcmd_kshare(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbshare_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
- uint_t opts = 0;
+ struct smb_kshare_cb_args *args;
+ args = mdb_zalloc(sizeof (*args), UM_SLEEP | UM_GC);
if (mdb_getopts(argc, argv,
- 'v', MDB_OPT_SETBITS, SMB_OPT_VERBOSE, &opts,
+ 'v', MDB_OPT_SETBITS, SMB_OPT_VERBOSE, &args->opts,
NULL) != argc)
return (DCMD_USAGE);
if (!(flags & DCMD_ADDRSPEC))
return (DCMD_USAGE);
- addr += OFFSETOF(smb_server_t, sv_export.e_share_avl.avl_tree);
if (DCMD_HDRSPEC(flags)) {
- mdb_printf(
- "%<b>%<u>"
- "%-?s "
- "%-16s "
- "%-s"
- "%</u>%</b>\n",
- "smb_kshare_t", "name", "path");
+ if ((args->opts & SMB_OPT_VERBOSE) != 0) {
+ mdb_printf("%<b>%<u>SMB kshares list:%</u>%</b>\n");
+ } else {
+ mdb_printf(
+ "%<b>%<u>"
+ "%-?s "
+ "%-16s "
+ "%-s"
+ "%</u>%</b>\n",
+ "smb_kshare_t", "name", "path");
+ }
}
- if (mdb_pwalk("avl", smb_kshare_cb, &opts, addr) == -1) {
+ if (mdb_pwalk("smbshare_walker", smb_kshare_cb, args, addr) == -1) {
mdb_warn("cannot walk smb_kshare avl");
return (DCMD_ERR);
}
@@ -1449,76 +1315,128 @@ smb_dcmd_kshare(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
}
/*
+ * Initialize the smb_kshare_t walker to point to the smb_export
+ * in the specified smb_server_t instance. (no global walks)
+ */
+static int
+smb_kshare_walk_init(mdb_walk_state_t *wsp)
+{
+
+ if (wsp->walk_addr == 0) {
+ mdb_printf("require address of an smb_server_t\n");
+ return (WALK_ERR);
+ }
+
+ wsp->walk_addr +=
+ OFFSETOF(smb_server_t, sv_export.e_share_avl.avl_tree);
+
+ if (mdb_layered_walk("avl", wsp) == -1) {
+ mdb_warn("failed to walk list of smb_kshare_t");
+ return (WALK_ERR);
+ }
+
+ return (WALK_NEXT);
+}
+
+static int
+smb_kshare_walk_step(mdb_walk_state_t *wsp)
+{
+ return (wsp->walk_callback(wsp->walk_addr, wsp->walk_layer,
+ wsp->walk_cbdata));
+}
+
+/*
* *****************************************************************************
* ******************************** smb_vfs_t **********************************
* *****************************************************************************
*/
+struct smb_vfs_cb_args {
+ uint_t opts;
+ vnode_t vn;
+ char path[MAXPATHLEN];
+};
+
+static int
+smb_vfs_cb(uintptr_t addr, const void *data, void *varg)
+{
+ struct smb_vfs_cb_args *args = varg;
+ const smb_vfs_t *sf = data;
+
+ if (args->opts & SMB_OPT_VERBOSE) {
+ mdb_arg_t argv;
+
+ argv.a_type = MDB_TYPE_STRING;
+ argv.a_un.a_str = "smb_vfs_t";
+ /* Don't fail the walk if this fails. */
+ mdb_printf("%-?p ", addr);
+ mdb_call_dcmd("print", addr, 0, 1, &argv);
+ return (WALK_NEXT);
+ }
+
+ /*
+ * Summary line for an smb_vfs_t
+ * Don't fail the walk if any of these fail.
+ *
+ * Get the vnode v_path string if we can.
+ */
+ strcpy(args->path, "?");
+ if (mdb_vread(&args->vn, sizeof (args->vn),
+ (uintptr_t)sf->sv_rootvp) == sizeof (args->vn))
+ (void) mdb_readstr(args->path, sizeof (args->path),
+ (uintptr_t)args->vn.v_path);
+
+ mdb_printf("%-?p ", addr);
+ mdb_printf("%-10d ", sf->sv_refcnt);
+ mdb_printf("%-?p ", sf->sv_vfsp);
+ mdb_printf("%-?p ", sf->sv_rootvp);
+ mdb_printf("%-s\n", args->path);
+
+ return (WALK_NEXT);
+}
+
/*
* ::smbvfs
*
* smbvfs dcmd - Prints out smb_vfs structures.
+ * requires addr of an smb_server_t
*/
/*ARGSUSED*/
static int
-smb_dcmd_vfs(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbvfs_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
- int verbose = FALSE;
- smb_vfs_t *sf;
- vnode_t *vn;
- char *path;
+ struct smb_vfs_cb_args *args;
+ args = mdb_zalloc(sizeof (*args), UM_SLEEP | UM_GC);
if (mdb_getopts(argc, argv,
- 'v', MDB_OPT_SETBITS, TRUE, &verbose,
+ 'v', MDB_OPT_SETBITS, SMB_OPT_VERBOSE, &args->opts,
NULL) != argc)
return (DCMD_USAGE);
- /*
- * If no smb_vfs address was specified on the command line, we can
- * print out all smb_vfs by invoking the smb_vfs walker, using
- * this dcmd itself as the callback.
- */
- if (!(flags & DCMD_ADDRSPEC)) {
- if (mdb_walk_dcmd("smbvfs_walker", "smbvfs",
- argc, argv) == -1) {
- mdb_warn("failed to walk 'smb_vfs'");
- return (DCMD_ERR);
- }
- return (DCMD_OK);
- }
+ if (!(flags & DCMD_ADDRSPEC))
+ return (DCMD_USAGE);
if (DCMD_HDRSPEC(flags)) {
- mdb_printf(
- "%<b>%<u>"
- "%-?s "
- "%-10s "
- "%-16s "
- "%-16s"
- "%-s"
- "%</u>%</b>\n",
- "SMB_VFS", "REFCNT", "VFS", "VNODE", "ROOT");
- }
-
- sf = mdb_alloc(sizeof (*sf), UM_SLEEP | UM_GC);
- if (mdb_vread(sf, sizeof (*sf), addr) == -1) {
- mdb_warn("failed to read smb_vfs at %p", addr);
- return (DCMD_ERR);
+ if ((args->opts & SMB_OPT_VERBOSE) != 0) {
+ mdb_printf("%<b>%<u>SMB VFS list:%</u>%</b>\n");
+ } else {
+ mdb_printf(
+ "%<b>%<u>"
+ "%-?s "
+ "%-10s "
+ "%-16s "
+ "%-16s"
+ "%-s"
+ "%</u>%</b>\n",
+ "SMB_VFS", "REFCNT", "VFS", "VNODE", "ROOT");
+ }
}
- vn = mdb_alloc(sizeof (*vn), UM_SLEEP | UM_GC);
- if (mdb_vread(vn, sizeof (*vn),
- (uintptr_t)sf->sv_rootvp) == -1) {
- mdb_warn("failed to read vnode at %p", sf->sv_rootvp);
+ if (mdb_pwalk("smbvfs_walker", smb_vfs_cb, args, addr) == -1) {
+ mdb_warn("cannot walk smb_vfs list");
return (DCMD_ERR);
}
- path = mdb_zalloc(MAXPATHLEN, UM_SLEEP | UM_GC);
- (void) mdb_vread(path, MAXPATHLEN, (uintptr_t)vn->v_path);
-
- mdb_printf(
- "%-?p %-10d %-?p %-?p %-s\n", addr, sf->sv_refcnt,
- sf->sv_vfsp, sf->sv_rootvp, path);
-
return (DCMD_OK);
}
@@ -1539,7 +1457,7 @@ smb_vfs_walk_init(mdb_walk_state_t *wsp)
OFFSETOF(smb_server_t, sv_export.e_vfs_list.ll_list);
if (mdb_layered_walk("list", wsp) == -1) {
- mdb_warn("failed to walk list of VFS");
+ mdb_warn("failed to walk list of smb_vfs_t");
return (WALK_ERR);
}
@@ -1560,7 +1478,7 @@ smb_vfs_walk_step(mdb_walk_state_t *wsp)
*/
static void
-smb_node_help(void)
+smbnode_help(void)
{
mdb_printf(
"Display the contents of smb_node_t, with optional filtering.\n\n");
@@ -1580,7 +1498,7 @@ smb_node_help(void)
* smb_node dcmd - Print out smb_node structure.
*/
static int
-smb_dcmd_node(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbnode_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_node_t node;
int rc;
@@ -1819,7 +1737,7 @@ smb_node_walk_step(mdb_walk_state_t *wsp)
*/
static int
-smb_lock(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smblock_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_lock_t lock;
int verbose = FALSE;
@@ -1916,7 +1834,8 @@ smb_lock(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
*/
/*ARGSUSED*/
static int
-smb_oplock_grant(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smboplockgrant_dcmd(uintptr_t addr, uint_t flags, int argc,
+ const mdb_arg_t *argv)
{
smb_oplock_grant_t grant;
char *level;
@@ -1961,7 +1880,7 @@ smb_oplock_grant(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
*/
/*ARGSUSED*/
static int
-smb_oplock(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smboplock_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_oplock_t oplock;
uintptr_t list_addr;
@@ -2009,7 +1928,7 @@ smb_oplock(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
*/
/*ARGSUSED*/
static int
-smb_stats(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbstat_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_server_t *sv;
@@ -2098,7 +2017,7 @@ static const mdb_bitmask_t ace_flag_bits[] = {
* ::smbace
*/
static int
-smb_ace(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbace_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_ace_t ace;
int verbose = FALSE;
@@ -2180,7 +2099,7 @@ smb_ace_walk_step(mdb_walk_state_t *wsp)
* ::smbacl
*/
static int
-smb_acl(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbacl_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_acl_t acl;
@@ -2217,7 +2136,7 @@ smb_acl(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
* ::smbsd
*/
static int
-smb_sd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbsd_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_sd_t sd;
int rc;
@@ -2305,7 +2224,7 @@ smb_sd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
*/
/*ARGSUSED*/
static int
-smb_sid(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbsid_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
/*
* An smb_sid address is required.
@@ -2367,7 +2286,7 @@ smb_sid_print(uintptr_t addr)
* ::smbfssd
*/
static int
-smb_fssd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+smbfssd_dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
smb_fssd_t fssd;
int rc;
@@ -2546,3 +2465,128 @@ smb_worker_findstack(uintptr_t addr)
mdb_printf("\n");
return (DCMD_OK);
}
+
+/*
+ * MDB module linkage information:
+ *
+ * We declare a list of structures describing our dcmds, a list of structures
+ * describing our walkers and a function named _mdb_init to return a pointer
+ * to our module information.
+ */
+static const mdb_dcmd_t dcmds[] = {
+ { "smblist",
+ "[-seutfdwv]",
+ "print tree of SMB objects",
+ smblist_dcmd,
+ smblist_help },
+ { "smbsrv",
+ "[-seutfdwv]",
+ "print smb_server information",
+ smbsrv_dcmd },
+ { "smbshare",
+ ":[-v]",
+ "print smb_kshare_t information",
+ smbshare_dcmd },
+ { "smbvfs",
+ ":[-v]",
+ "print smb_vfs information",
+ smbvfs_dcmd },
+ { "smbnode",
+ "?[-vps]",
+ "print smb_node_t information",
+ smbnode_dcmd,
+ smbnode_help },
+ { "smbsess",
+ "[-utfdwv]",
+ "print smb_session_t information",
+ smbsess_dcmd,
+ smbsess_help},
+ { "smbreq",
+ ":[-v]",
+ "print smb_request_t information",
+ smbreq_dcmd },
+ { "smblock", ":[-v]",
+ "print smb_lock_t information",
+ smblock_dcmd },
+ { "smbuser",
+ ":[-vdftq]",
+ "print smb_user_t information",
+ smbuser_dcmd,
+ smbuser_help },
+ { "smbtree",
+ ":[-vdf]",
+ "print smb_tree_t information",
+ smbtree_dcmd,
+ smbtree_help },
+ { "smbodir",
+ ":[-v]",
+ "print smb_odir_t information",
+ smbodir_dcmd },
+ { "smbofile",
+ "[-v]",
+ "print smb_file_t information",
+ smbofile_dcmd },
+ { "smboplock", NULL,
+ "print smb_oplock_t information",
+ smboplock_dcmd },
+ { "smboplockgrant", NULL,
+ "print smb_oplock_grant_t information",
+ smboplockgrant_dcmd },
+ { "smbstat", NULL,
+ "print all smb dispatched requests statistics",
+ smbstat_dcmd },
+ { "smbace", "[-v]",
+ "print smb_ace_t information",
+ smbace_dcmd },
+ { "smbacl", "[-v]",
+ "print smb_acl_t information",
+ smbacl_dcmd },
+ { "smbsid", "[-v]",
+ "print smb_sid_t information",
+ smbsid_dcmd },
+ { "smbsd", "[-v]",
+ "print smb_sd_t information",
+ smbsd_dcmd },
+ { "smbfssd", "[-v]",
+ "print smb_fssd_t information",
+ smbfssd_dcmd },
+ { NULL }
+};
+
+static const mdb_walker_t walkers[] = {
+ { "smbnode_walker",
+ "walk list of smb_node_t structures",
+ smb_node_walk_init,
+ smb_node_walk_step,
+ NULL,
+ NULL },
+ { "smbshare_walker",
+ "walk list of smb_kshare_t structures",
+ smb_kshare_walk_init,
+ smb_kshare_walk_step,
+ NULL,
+ NULL },
+ { "smbvfs_walker",
+ "walk list of smb_vfs_t structures",
+ smb_vfs_walk_init,
+ smb_vfs_walk_step,
+ NULL,
+ NULL },
+ { "smbace_walker",
+ "walk list of smb_ace_t structures",
+ smb_ace_walk_init,
+ smb_ace_walk_step,
+ NULL,
+ NULL },
+ { NULL }
+};
+
+static const mdb_modinfo_t modinfo = {
+ MDB_API_VERSION, dcmds, walkers
+};
+
+const mdb_modinfo_t *
+_mdb_init(void)
+{
+ return (&modinfo);
+}