1*0dfe541eSEvan Layton #!/usr/sbin/dtrace -s
293bc28dbSGordon Ross /*
393bc28dbSGordon Ross  * This file and its contents are supplied under the terms of the
493bc28dbSGordon Ross  * Common Development and Distribution License ("CDDL"), version 1.0.
593bc28dbSGordon Ross  * You may only use this file in accordance with the terms of version
693bc28dbSGordon Ross  * 1.0 of the CDDL.
793bc28dbSGordon Ross  *
893bc28dbSGordon Ross  * A full copy of the text of the CDDL should have accompanied this
993bc28dbSGordon Ross  * source.  A copy of the CDDL is also available via the Internet at
1093bc28dbSGordon Ross  * http://www.illumos.org/license/CDDL.
1193bc28dbSGordon Ross  */
1293bc28dbSGordon Ross 
1393bc28dbSGordon Ross /*
14*0dfe541eSEvan Layton  * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
1593bc28dbSGordon Ross  */
1693bc28dbSGordon Ross 
1793bc28dbSGordon Ross /*
1893bc28dbSGordon Ross  * Example using the "smb2" dtrace provider.
1993bc28dbSGordon Ross  * Traces all SMB commands.
2093bc28dbSGordon Ross  *
2193bc28dbSGordon Ross  * All these probes provide:
2293bc28dbSGordon Ross  *	args[0]  conninfo_t
2393bc28dbSGordon Ross  *	args[1]  smb2opinfo_t
2493bc28dbSGordon Ross  * Some also provide one of: (not used here)
2593bc28dbSGordon Ross  *	args[2]  smb_open_args_t
2693bc28dbSGordon Ross  *	args[2]  smb_rw_args_t
27*0dfe541eSEvan Layton  *
28*0dfe541eSEvan Layton  * Usage: smb2-trace.d [<client ip>|all [<share path>|all] [<zone id>]]]
29*0dfe541eSEvan Layton  *
30*0dfe541eSEvan Layton  * example: smb2_trace.d 192.168.012.001 mypool_fs1  0
31*0dfe541eSEvan Layton  *
32*0dfe541eSEvan Layton  * It is valid to specify <client ip> or <share path> as "all" to
33*0dfe541eSEvan Layton  * print data for all clients and/or all shares.
34*0dfe541eSEvan Layton  * Omitting <zone id> will print data for all zones.
3593bc28dbSGordon Ross  */
3693bc28dbSGordon Ross 
37*0dfe541eSEvan Layton #pragma D option defaultargs
38*0dfe541eSEvan Layton 
39*0dfe541eSEvan Layton dtrace:::BEGIN
40*0dfe541eSEvan Layton {
41*0dfe541eSEvan Layton 	all_clients = (($$1 == NULL) || ($$1 == "all")) ? 1 : 0;
42*0dfe541eSEvan Layton 	all_shares = (($$2 == NULL) || ($$2 == "all")) ? 1 : 0;
43*0dfe541eSEvan Layton 	all_zones = ($$3 == NULL) ? 1 : 0;
44*0dfe541eSEvan Layton 
45*0dfe541eSEvan Layton 	client = $$1;
46*0dfe541eSEvan Layton 	share = $$2;
47*0dfe541eSEvan Layton 	zoneid = $3;
48*0dfe541eSEvan Layton 
49*0dfe541eSEvan Layton 	printf("%Y - client=%s share=%s zone=%s)\n", walltimestamp,
50*0dfe541eSEvan Layton 	    (all_clients) ? "all" : client,
51*0dfe541eSEvan Layton 	    (all_shares) ? "all" : share,
52*0dfe541eSEvan Layton 	    (all_zones) ? "all" : $$3);
53*0dfe541eSEvan Layton }
54*0dfe541eSEvan Layton 
5593bc28dbSGordon Ross smb2:::op-*-start
56*0dfe541eSEvan Layton / ((all_clients == 1) || (args[0]->ci_remote == client)) &&
57*0dfe541eSEvan Layton    ((all_shares == 1) || (args[1]->soi_share == share)) &&
58*0dfe541eSEvan Layton    ((all_zones == 1) || (args[1]->soi_zoneid == zoneid)) /
5993bc28dbSGordon Ross {
6093bc28dbSGordon Ross 	printf("clnt=%s mid=0x%x uid=0x%x tid=0x%x\n",
6193bc28dbSGordon Ross 	       args[0]->ci_remote,
6293bc28dbSGordon Ross 	       args[1]->soi_mid,
6393bc28dbSGordon Ross 	       args[1]->soi_uid,
6493bc28dbSGordon Ross 	       args[1]->soi_tid);
6593bc28dbSGordon Ross }
6693bc28dbSGordon Ross 
6793bc28dbSGordon Ross smb2:::op-*-done
68*0dfe541eSEvan Layton / ((all_clients == 1) || (args[0]->ci_remote == client)) &&
69*0dfe541eSEvan Layton    ((all_shares == 1) || (args[1]->soi_share == share)) &&
70*0dfe541eSEvan Layton    ((all_zones == 1) || (args[1]->soi_zoneid == zoneid)) /
7193bc28dbSGordon Ross {
7293bc28dbSGordon Ross 	printf("clnt=%s mid=0x%x status=0x%x\n",
7393bc28dbSGordon Ross 	       args[0]->ci_remote,
7493bc28dbSGordon Ross 	       args[1]->soi_mid,
7593bc28dbSGordon Ross 	       args[1]->soi_status);
7693bc28dbSGordon Ross }
77*0dfe541eSEvan Layton 
78*0dfe541eSEvan Layton dtrace:::END
79*0dfe541eSEvan Layton {
80*0dfe541eSEvan Layton }
81