1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 * 26 * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 27 */ 28 29 #pragma D depends_on library ip.d 30 #pragma D depends_on library net.d 31 #pragma D depends_on module genunix 32 #pragma D depends_on module smbsrv 33 34 #pragma D binding "1.5" translator 35 translator conninfo_t < struct smb_request *P > { 36 ci_protocol = 37 P->session->ipaddr.a_family == AF_INET6 ? "tcp6" : 38 P->session->ipaddr.a_family == AF_INET ? "tcp" : 39 "<unknown>"; 40 ci_local = "<any>"; /* not interesting */ 41 ci_remote = P->session->ip_addr_str; 42 }; 43 44 /* 45 * The smbopinfo_t structure describes the internal form of a 46 * single SMB request (SMB v1). 47 */ 48 typedef struct smbopinfo { 49 cred_t *soi_cred; /* credentials for operation */ 50 string soi_share; /* share name */ 51 string soi_curpath; /* file handle path (if any) */ 52 uint64_t soi_sid; /* session id */ 53 uint32_t soi_pid; /* process id */ 54 uint32_t soi_status; /* status */ 55 uint16_t soi_tid; /* tree id */ 56 uint16_t soi_uid; /* user id */ 57 uint16_t soi_mid; /* request id */ 58 uint16_t soi_fid; /* file id */ 59 uint16_t soi_flags2; /* flags2 */ 60 uint8_t soi_flags; /* flags */ 61 zoneid_t soi_zoneid; /* zone identifier */ 62 } smbopinfo_t; 63 64 #pragma D binding "1.5" translator 65 translator smbopinfo_t < struct smb_request *P > { 66 soi_cred = (cred_t *)P->user_cr; 67 soi_sid = P->session->s_kid; 68 soi_pid = P->smb_pid; 69 soi_status = P->smb_error.status; 70 soi_tid = P->smb_tid; 71 soi_uid = P->smb_uid; 72 soi_mid = P->smb_mid; 73 soi_fid = P->smb_fid; 74 soi_flags2 = P->smb_flg2; 75 soi_flags = P->smb_flg; 76 soi_zoneid = P->sr_server->sv_zid; 77 78 soi_share = (P->tid_tree == NULL) ? "<NULL>" : 79 P->tid_tree->t_sharename; 80 81 soi_curpath = (P->fid_ofile == NULL || 82 P->fid_ofile->f_node == NULL || 83 P->fid_ofile->f_node->vp == NULL || 84 P->fid_ofile->f_node->vp->v_path == NULL) ? "<NULL>" : 85 P->fid_ofile->f_node->vp->v_path; 86 }; 87 88 typedef struct smb_rw_args { 89 off_t soa_offset; 90 uint_t soa_count; 91 } smb_rw_args_t; 92 93 #pragma D binding "1.5" translator 94 translator smb_rw_args_t < smb_request_t *P > { 95 soa_offset = P->arg.rw->rw_offset; 96 soa_count = P->arg.rw->rw_count; 97 }; 98 99 typedef struct smb_name_args { 100 string soa_name; 101 } smb_name_args_t; 102 103 #pragma D binding "1.5" translator 104 translator smb_name_args_t < smb_request_t *P > { 105 soa_name = (P->arg.dirop.fqi.fq_path.pn_path == NULL) ? "<NULL>" : 106 P->arg.dirop.fqi.fq_path.pn_path; 107 }; 108 109 typedef struct smb_open_args { 110 string soa_name; 111 uint32_t soa_desired_access; 112 uint32_t soa_share_access; 113 uint32_t soa_create_options; 114 uint32_t soa_create_disposition; 115 } smb_open_args_t; 116 117 #pragma D binding "1.5" translator 118 translator smb_open_args_t < smb_request_t *P > { 119 soa_name = (P->arg.open.fqi.fq_path.pn_path == NULL) ? "<NULL>" : 120 P->arg.open.fqi.fq_path.pn_path; 121 soa_desired_access = P->arg.open.desired_access; 122 soa_share_access = P->arg.open.share_access; 123 soa_create_options = P->arg.open.create_options; 124 soa_create_disposition = P->arg.open.create_disposition; 125 }; 126 127 /* 128 * The smb2opinfo_t structure describes the internal form of a 129 * single SMB2 request (SMB v2 and later). 130 */ 131 typedef struct smb2opinfo { 132 cred_t *soi_cred; /* credentials for operation */ 133 string soi_share; /* share name */ 134 string soi_curpath; /* file handle path (if any) */ 135 uint64_t soi_sid; /* (internal) session ID */ 136 uint64_t soi_mid; /* Message ID */ 137 uint64_t soi_asyncid; /* Message ID (when async) */ 138 uint64_t soi_uid; /* user ID (SMB2 Session ID) */ 139 uint32_t soi_tid; /* tree ID */ 140 uint32_t soi_status; 141 uint32_t soi_flags; 142 zoneid_t soi_zoneid; /* zone identifier */ 143 } smb2opinfo_t; 144 145 #pragma D binding "1.5" translator 146 translator smb2opinfo_t < struct smb_request *P > { 147 soi_cred = (cred_t *)P->user_cr; 148 soi_sid = P->session->s_kid; 149 soi_mid = P->smb2_messageid; 150 soi_asyncid = P->smb2_async_id; 151 soi_uid = P->smb2_ssnid; 152 soi_tid = P->smb_tid; 153 soi_status = P->smb2_status; 154 soi_flags = P->smb2_hdr_flags; 155 soi_zoneid = P->sr_server->sv_zid; 156 157 soi_share = (P->tid_tree == NULL) ? "<NULL>" : 158 P->tid_tree->t_sharename; 159 160 soi_curpath = (P->fid_ofile == NULL || 161 P->fid_ofile->f_node == NULL || 162 P->fid_ofile->f_node->vp == NULL || 163 P->fid_ofile->f_node->vp->v_path == NULL) ? "<NULL>" : 164 P->fid_ofile->f_node->vp->v_path; 165 }; 166