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 /* 27 * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 28 */ 29 30 #pragma D depends_on library ip.d 31 #pragma D depends_on library net.d 32 #pragma D depends_on module nfs 33 34 inline int T_RDMA = 4; 35 #pragma D binding "1.5" T_RDMA 36 37 typedef struct nfsv4opinfo { 38 uint64_t noi_xid; /* unique transation ID */ 39 cred_t *noi_cred; /* credentials for operation */ 40 string noi_curpath; /* current file handle path (if any) */ 41 string noi_shrpath; /* current share path */ 42 zoneid_t noi_zoneid; /* zone identifier */ 43 } nfsv4opinfo_t; 44 45 typedef struct nfsv4cbinfo { 46 string nci_curpath; /* current file handle path (if any) */ 47 } nfsv4cbinfo_t; 48 49 #pragma D binding "1.5" translator 50 translator conninfo_t < struct svc_req *P > { 51 ci_protocol = P->rq_xprt->xp_xpc.xpc_type == T_RDMA ? "rdma" : 52 P->rq_xprt->xp_xpc.xpc_netid == "tcp" ? "ipv4" : 53 P->rq_xprt->xp_xpc.xpc_netid == "udp" ? "ipv4" : 54 P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ? "ipv6" : 55 P->rq_xprt->xp_xpc.xpc_netid == "udp6" ? "ipv6" : 56 "<unknown>"; 57 58 ci_local = (P->rq_xprt->xp_xpc.xpc_netid == "tcp" || 59 P->rq_xprt->xp_xpc.xpc_netid == "udp") ? 60 inet_ntoa(&((struct sockaddr_in *) 61 P->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin_addr.S_un.S_addr) : 62 (P->rq_xprt->xp_xpc.xpc_netid == "tcp6" || 63 P->rq_xprt->xp_xpc.xpc_netid == "udp6") ? 64 inet_ntoa6(&((struct sockaddr_in6 *) 65 P->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin6_addr) : 66 "unknown"; 67 68 ci_remote = (P->rq_xprt->xp_xpc.xpc_netid == "tcp" || 69 P->rq_xprt->xp_xpc.xpc_netid == "udp") ? 70 inet_ntoa(&((struct sockaddr_in *) 71 P->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin_addr.S_un.S_addr) : 72 (P->rq_xprt->xp_xpc.xpc_netid == "tcp6" || 73 P->rq_xprt->xp_xpc.xpc_netid == "udp6") ? 74 inet_ntoa6(&((struct sockaddr_in6 *) 75 P->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin6_addr) : 76 "unknown"; 77 }; 78 79 #pragma D binding "1.5" translator 80 translator conninfo_t < struct compound_state *P > { 81 ci_protocol = P->req->rq_xprt->xp_xpc.xpc_type == T_RDMA ? "rdma" : 82 P->req->rq_xprt->xp_xpc.xpc_netid == "tcp" ? "ipv4" : 83 P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6" ? "ipv6" : 84 "<unknown>"; 85 86 ci_local = (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp") ? 87 inet_ntoa(&((struct sockaddr_in *) 88 P->req->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin_addr.S_un.S_addr) : 89 (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6") ? 90 inet_ntoa6(&((struct sockaddr_in6 *) 91 P->req->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin6_addr) : 92 "unknown"; 93 94 ci_remote = (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp") ? 95 inet_ntoa(&((struct sockaddr_in *) 96 P->req->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin_addr.S_un.S_addr) : 97 (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6") ? 98 inet_ntoa6(&((struct sockaddr_in6 *) 99 P->req->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin6_addr) : 100 "unknown"; 101 102 }; 103 104 #pragma D binding "1.5" translator 105 translator nfsv4opinfo_t < struct compound_state *P > { 106 noi_xid = P->req->rq_xprt->xp_xid; 107 noi_cred = P->basecr; 108 noi_curpath = (P->vp == NULL) ? "<unknown>" : P->vp->v_path; 109 noi_shrpath = (P->exi == NULL || P->exi->exi_export.ex_path == NULL) ? 110 "<unknown>" : P->exi->exi_export.ex_path; 111 noi_zoneid = (P->exi == NULL) ? -1 : P->exi->exi_zoneid; 112 }; 113 114 typedef struct nfsv3opinfo { 115 uint64_t noi_xid; /* unique transation ID */ 116 cred_t *noi_cred; /* credentials for operation */ 117 string noi_curpath; /* current file handle path (if any) */ 118 string noi_shrpath; /* current share path */ 119 zoneid_t noi_zoneid; /* zone identifier */ 120 } nfsv3opinfo_t; 121 122 typedef struct nfsv3oparg nfsv3oparg_t; 123 124 #pragma D binding "1.5" translator 125 translator nfsv3opinfo_t < nfsv3oparg_t *P > { 126 noi_xid = ((struct svc_req *)arg0)->rq_xprt->xp_xid; 127 noi_cred = (cred_t *)arg1; 128 noi_curpath = (arg2 == 0 || ((vnode_t *)arg2)->v_path == NULL) ? 129 "<unknown>" : ((vnode_t *)arg2)->v_path; 130 noi_shrpath = 131 (arg3 == 0 || ((exportinfo_t *)arg3)->exi_export.ex_path == NULL) ? 132 "<unknown>" : ((exportinfo_t *)arg3)->exi_export.ex_path; 133 noi_zoneid = 134 (arg3 == 0) ? -1 : ((exportinfo_t *)arg3)->exi_zoneid; 135 }; 136