Print this page
    
11083 support NFS server in zone
Portions contributed by: Dan Kruchinin <dan.kruchinin@nexenta.com>
Portions contributed by: Stepan Zastupov <stepan.zastupov@gmail.com>
Portions contributed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
Portions contributed by: Mike Zeller <mike@mikezeller.net>
Portions contributed by: Dan McDonald <danmcd@joyent.com>
Portions contributed by: Gordon Ross <gordon.w.ross@gmail.com>
Portions contributed by: Vitaliy Gusev <gusev.vitaliy@gmail.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Jason King <jbk@joyent.com>
Reviewed by: C Fraire <cfraire@me.com>
Change-Id: I22f289d357503f9b48a0bc2482cc4328a6d43d16
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/lib/libdtrace/common/nfs.d
          +++ new/usr/src/lib/libdtrace/common/nfs.d
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  
    | 
      ↓ open down ↓ | 
    15 lines elided | 
    
      ↑ open up ↑ | 
  
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
       26 +/*
       27 + * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
       28 + */
  26   29  
  27   30  #pragma D depends_on library ip.d
  28   31  #pragma D depends_on library net.d
  29   32  #pragma D depends_on module nfs
  30   33  
  31   34  inline int T_RDMA = 4;
  32   35  #pragma D binding "1.5" T_RDMA
  33   36  
  34   37  typedef struct nfsv4opinfo {
  35   38          uint64_t noi_xid;       /* unique transation ID */
  36   39          cred_t *noi_cred;       /* credentials for operation */
  37   40          string noi_curpath;     /* current file handle path (if any) */
       41 +        string noi_shrpath;     /* current share path */
       42 +        zoneid_t noi_zoneid;    /* zone identifier */
  38   43  } nfsv4opinfo_t;
  39   44  
  40   45  typedef struct nfsv4cbinfo {
  41   46          string nci_curpath;     /* current file handle path (if any) */
  42   47  } nfsv4cbinfo_t;
  43   48  
  44   49  #pragma D binding "1.5" translator
  45   50  translator conninfo_t < struct svc_req *P > {
  46   51          ci_protocol = P->rq_xprt->xp_xpc.xpc_type == T_RDMA ? "rdma" :
  47   52              P->rq_xprt->xp_xpc.xpc_netid == "tcp" ? "ipv4" :
  48   53              P->rq_xprt->xp_xpc.xpc_netid == "udp" ? "ipv4" :
  49   54              P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ? "ipv6" :
  50   55              P->rq_xprt->xp_xpc.xpc_netid == "udp6" ? "ipv6" :
  51   56              "<unknown>";
  52   57  
  53   58          ci_local = (P->rq_xprt->xp_xpc.xpc_netid == "tcp" ||
  54   59              P->rq_xprt->xp_xpc.xpc_netid == "udp") ?
  55   60              inet_ntoa(&((struct sockaddr_in *)
  56   61              P->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin_addr.S_un.S_addr) :
  57   62              (P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ||
  58   63              P->rq_xprt->xp_xpc.xpc_netid == "udp6") ?
  59   64              inet_ntoa6(&((struct sockaddr_in6 *)
  60   65              P->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin6_addr) :
  61   66              "unknown";
  62   67  
  63   68          ci_remote = (P->rq_xprt->xp_xpc.xpc_netid == "tcp" ||
  64   69              P->rq_xprt->xp_xpc.xpc_netid == "udp") ?
  65   70              inet_ntoa(&((struct sockaddr_in *)
  66   71              P->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin_addr.S_un.S_addr) :
  67   72              (P->rq_xprt->xp_xpc.xpc_netid == "tcp6" ||
  68   73              P->rq_xprt->xp_xpc.xpc_netid == "udp6") ?
  69   74              inet_ntoa6(&((struct sockaddr_in6 *)
  70   75              P->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin6_addr) :
  71   76              "unknown";
  72   77  };
  73   78  
  74   79  #pragma D binding "1.5" translator
  75   80  translator conninfo_t < struct compound_state *P > {
  76   81          ci_protocol = P->req->rq_xprt->xp_xpc.xpc_type == T_RDMA ? "rdma" :
  77   82              P->req->rq_xprt->xp_xpc.xpc_netid == "tcp" ? "ipv4" :
  78   83              P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6" ? "ipv6" :
  79   84              "<unknown>";
  80   85  
  81   86          ci_local = (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp") ?
  82   87              inet_ntoa(&((struct sockaddr_in *)
  83   88              P->req->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin_addr.S_un.S_addr) :
  84   89              (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6") ?
  85   90              inet_ntoa6(&((struct sockaddr_in6 *)
  86   91              P->req->rq_xprt->xp_xpc.xpc_lcladdr.buf)->sin6_addr) :
  87   92              "unknown";
  88   93  
  89   94          ci_remote = (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp") ?
  90   95              inet_ntoa(&((struct sockaddr_in *)
  91   96              P->req->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin_addr.S_un.S_addr) :
  92   97              (P->req->rq_xprt->xp_xpc.xpc_netid == "tcp6") ?
  93   98              inet_ntoa6(&((struct sockaddr_in6 *)
  
    | 
      ↓ open down ↓ | 
    46 lines elided | 
    
      ↑ open up ↑ | 
  
  94   99              P->req->rq_xprt->xp_xpc.xpc_rtaddr.buf)->sin6_addr) :
  95  100              "unknown";
  96  101  
  97  102  };
  98  103  
  99  104  #pragma D binding "1.5" translator
 100  105  translator nfsv4opinfo_t < struct compound_state *P > {
 101  106          noi_xid = P->req->rq_xprt->xp_xid;
 102  107          noi_cred = P->basecr;
 103  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;
 104  112  };
 105  113  
 106  114  typedef struct nfsv3opinfo {
 107  115          uint64_t noi_xid;       /* unique transation ID */
 108  116          cred_t *noi_cred;       /* credentials for operation */
 109  117          string noi_curpath;     /* current file handle path (if any) */
      118 +        string noi_shrpath;     /* current share path */
      119 +        zoneid_t noi_zoneid;    /* zone identifier */
 110  120  } nfsv3opinfo_t;
 111  121  
 112  122  typedef struct nfsv3oparg nfsv3oparg_t;
 113  123  
 114  124  #pragma D binding "1.5" translator
 115  125  translator nfsv3opinfo_t < nfsv3oparg_t *P > {
 116  126          noi_xid = ((struct svc_req *)arg0)->rq_xprt->xp_xid;
 117  127          noi_cred = (cred_t *)arg1;
 118  128          noi_curpath = (arg2 == 0 || ((vnode_t *)arg2)->v_path == NULL) ?
 119  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;
 120  135  };
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX