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
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk * Usage: dtrace -s smbd-doorsvc.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 * smbd_door_dispatch_op() is the logical top of smbd door service calls.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchukpid$target:*smbd:smbd_door_dispatch_op: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:libsmbfs.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 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 * Now inverses of above, unwind order.
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk */
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk
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:libsmbfs.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:smbd_door_dispatch_op:return
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk{
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk self->trace--;
ed81dd52230eff1a7c7625caad21af232c36f6cbAlek Pinchuk}