ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk#!/usr/sbin/dtrace -s
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * This file and its contents are supplied under the terms of the
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Common Development and Distribution License ("CDDL"), version 1.0.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * You may only use this file in accordance with the terms of version
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * 1.0 of the CDDL.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk *
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * A full copy of the text of the CDDL should have accompanied this
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * source. A copy of the CDDL is also available via the Internet at
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * http://www.illumos.org/license/CDDL.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * User-level dtrace for smbd. Watch everything it does.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Usage: dtrace -s smbd-all.d -p `pgrep smbd`
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk#pragma D option flowindent
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukself int trace;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukself int mask;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Trace everything in smbd
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:*smbd::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlsvc.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlrpc.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmbns.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmb.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libads.so.1::entry
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk self->trace++;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * If traced and not masked, print entry/return
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:*smbd::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlsvc.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlrpc.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmbns.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmb.so.1::entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libads.so.1::entry
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/self->trace > 0 && self->mask == 0/
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg0);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg1);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg2);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg3);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg4);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg5);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Mask (don't print) all function calls below these functions.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * These make many boring, repetitive function calls like
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * smb_mbtowc, smb_msgbuf_has_space, ...
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk *
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Also, libmlrpc has rather deep call stacks, particularly under
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * ndr_encode_decode_common(), so this stops traces below there.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Remove that from the mask actions to see the details.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::ht_findfirst:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::ht_findnext:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::ndr_encode_decode_common:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_msgbuf_decode:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_msgbuf_encode:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_strlwr:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_strupr:entry,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_wcequiv_strlen:entry
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk self->mask++;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Get some of the smbd debug messages, etc.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmb.so.1:smb_trace:entry
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/self->trace > 0 && self->mask == 0/
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("%s", copyinstr(arg0));
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmb.so.1:smb_syslog:entry
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/self->trace > 0 && self->mask == 0/
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("%s", copyinstr(arg1));
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libc_hwcap1.so.1:syslog:entry
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/self->trace > 0 && self->mask == 0/
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("%s", copyinstr(arg1));
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/*
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Now inverses of above, unwind order.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::ht_findfirst:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::ht_findnext:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::ndr_encode_decode_common:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_msgbuf_decode:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_msgbuf_encode:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_strlwr:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_strupr:return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target::smb_wcequiv_strlen:return
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk self->mask--;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:*smbd::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlsvc.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlrpc.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmbns.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmb.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libads.so.1::return
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk/self->trace > 0 && self->mask == 0/
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk printf("\t0x%x", arg1);
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:*smbd::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlsvc.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libmlrpc.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmbns.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libsmb.so.1::return,
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:libads.so.1::return
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk self->trace--;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}