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 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ 27 /* All Rights Reserved */ 28 29 #ifndef _NFS_NFSSYS_H 30 #define _NFS_NFSSYS_H 31 32 #pragma ident "%Z%%M% %I% %E% SMI" 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 /* 39 * Private definitions for the nfssys system call. 40 * Note: <nfs/export.h> and <nfs/nfs.h> must be included before 41 * this file. 42 */ 43 44 /* 45 * Flavors of nfssys call. Note that OLD_mumble commands are no longer 46 * implemented, but the entries are kept as placeholders for binary 47 * compatibility. 48 */ 49 enum nfssys_op { OLD_NFS_SVC, OLD_ASYNC_DAEMON, EXPORTFS, OLD_NFS_GETFH, 50 OLD_NFS_CNVT, NFS_REVAUTH, OLD_NFS_FH_TO_FID, OLD_LM_SVC, KILL_LOCKMGR, 51 LOG_FLUSH, SVCPOOL_CREATE, NFS_SVC, LM_SVC, SVCPOOL_WAIT, SVCPOOL_RUN, 52 NFS4_SVC, RDMA_SVC_INIT, NFS4_CLR_STATE, NFS_IDMAP, 53 NFS_SVC_REQUEST_QUIESCE, NFS_GETFH }; 54 55 struct nfs_svc_args { 56 int fd; /* Connection endpoint */ 57 char *netid; /* Identify transport */ 58 struct netbuf addrmask; /* Address mask for host */ 59 int versmin; /* Min protocol version to offer */ 60 int versmax; /* Max protocol version to offer */ 61 int delegation; /* NFSv4 delegation on/off? */ 62 }; 63 64 #ifdef _SYSCALL32 65 struct nfs_svc_args32 { 66 int32_t fd; /* Connection endpoint */ 67 caddr32_t netid; /* Identify transport */ 68 struct netbuf32 addrmask; /* Address mask for host */ 69 int32_t versmin; /* Min protocol version to offer */ 70 int32_t versmax; /* Max protocol version to offer */ 71 int32_t delegation; /* NFSv4 delegation on/off? */ 72 }; 73 #endif 74 75 struct exportfs_args { 76 char *dname; 77 struct exportdata *uex; 78 }; 79 80 #ifdef _SYSCALL32 81 struct exportfs_args32 { 82 caddr32_t dname; 83 caddr32_t uex; 84 }; 85 #endif 86 87 struct nfs_getfh_args { 88 char *fname; 89 int vers; 90 int *lenp; 91 char *fhp; 92 }; 93 94 #ifdef _SYSCALL32 95 struct nfs_getfh_args32 { 96 caddr32_t fname; 97 int32_t vers; 98 caddr32_t lenp; 99 caddr32_t fhp; 100 }; 101 #endif 102 103 struct nfs_revauth_args { 104 int authtype; 105 uid_t uid; 106 }; 107 108 #ifdef _SYSCALL32 109 struct nfs_revauth_args32 { 110 int32_t authtype; 111 uid32_t uid; 112 }; 113 #endif 114 115 /* 116 * Arguments for establishing lock manager service. If you change 117 * lm_svc_args, you should increment the version number. Try to keep 118 * supporting one or more old versions of the args, so that old lockd's 119 * will work with new kernels. 120 */ 121 122 enum lm_fmly { LM_INET, LM_INET6, LM_LOOPBACK }; 123 enum lm_proto { LM_TCP, LM_UDP }; 124 125 struct lm_svc_args { 126 int version; /* keep this first */ 127 int fd; 128 enum lm_fmly n_fmly; /* protocol family */ 129 enum lm_proto n_proto; /* protocol */ 130 dev_t n_rdev; /* device ID */ 131 int debug; /* debugging level */ 132 time_t timout; /* client handle life (asynch RPCs) */ 133 int grace; /* secs in grace period */ 134 time_t retransmittimeout; /* retransmission interval */ 135 }; 136 137 #ifdef _SYSCALL32 138 struct lm_svc_args32 { 139 int32_t version; /* keep this first */ 140 int32_t fd; 141 enum lm_fmly n_fmly; /* protocol family */ 142 enum lm_proto n_proto; /* protocol */ 143 dev32_t n_rdev; /* device ID */ 144 int32_t debug; /* debugging level */ 145 time32_t timout; /* client handle life (asynch RPCs) */ 146 int32_t grace; /* secs in grace period */ 147 time32_t retransmittimeout; /* retransmission interval */ 148 }; 149 #endif 150 151 #define LM_SVC_CUR_VERS 30 /* current lm_svc_args vers num */ 152 153 /* 154 * Arguments for nfslog flush service. 155 */ 156 struct nfsl_flush_args { 157 int version; 158 int directive; 159 char *buff; /* buffer to flush/rename */ 160 int buff_len; /* includes terminating '\0' */ 161 }; 162 163 #define NFSL_FLUSH_ARGS_VERS 1 /* current nfsl_flush_args vers num */ 164 165 #ifdef _SYSCALL32 166 struct nfsl_flush_args32 { 167 int32_t version; 168 int32_t directive; 169 caddr32_t buff; /* buffer to flush/rename */ 170 int32_t buff_len; /* includes terminating '\0' */ 171 }; 172 #endif 173 174 /* 175 * Arguments for initialising RDMA service. 176 */ 177 struct rdma_svc_args { 178 uint32_t poolid; /* Thread Pool ID */ 179 char *netid; /* Network Identifier */ 180 int nfs_versmin; /* Min NFS version to offer */ 181 int nfs_versmax; /* Max NFS version to offer */ 182 int delegation; /* NFSv4 delegation on/off? */ 183 }; 184 185 #ifdef _SYSCALL32 186 struct rdma_svc_args32 { 187 uint32_t poolid; /* Thread Pool ID */ 188 caddr32_t netid; /* Network Identifier */ 189 int32_t nfs_versmin; /* Min NFS version to offer */ 190 int32_t nfs_versmax; /* Max NFS version to offer */ 191 int32_t delegation; /* NFSv4 delegation on/off? */ 192 }; 193 #endif 194 195 196 #define NFS4_CLRST_VERSION 1 197 struct nfs4clrst_args { 198 int vers; 199 int addr_type; 200 void *ap; 201 }; 202 203 #ifdef _SYSCALL32 204 struct nfs4clrst_args32 { 205 int32_t vers; 206 int32_t addr_type; 207 caddr32_t ap; 208 }; 209 #endif 210 211 struct nfsidmap_args { 212 uint_t state; /* Flushes caches, set state up 1 or down 0 */ 213 uint_t did; /* Door id to upcall */ 214 }; 215 216 #define NFSL_ALL 0x01 /* Flush all buffers */ 217 #define NFSL_RENAME 0x02 /* Rename buffer(s) */ 218 #define NFSL_SYNC 0x04 /* Perform operation synchronously? */ 219 220 #ifdef _KERNEL 221 union nfssysargs { 222 struct exportfs_args *exportfs_args_u; /* exportfs args */ 223 struct nfs_getfh_args *nfs_getfh_args_u; /* nfs_getfh args */ 224 struct nfs_svc_args *nfs_svc_args_u; /* nfs_svc args */ 225 struct rdma_svc_args *rdma_svc_args_u; /* rdma_svc args */ 226 struct nfs_revauth_args *nfs_revauth_args_u; /* nfs_revauth args */ 227 struct lm_svc_args *lm_svc_args_u; /* lm_svc args */ 228 /* kill_lockmgr args: none */ 229 struct nfsl_flush_args *nfsl_flush_args_u; /* nfsl_flush args */ 230 struct svcpool_args *svcpool_args_u; /* svcpool args */ 231 struct nfs4clrst_args *nfs4clrst_u; /* nfs4 clear state */ 232 struct nfsidmap_args *nfsidmap_u; /* nfsidmap */ 233 }; 234 235 struct nfssysa { 236 enum nfssys_op opcode; /* operation discriminator */ 237 union nfssysargs arg; /* syscall-specific arg pointer */ 238 }; 239 #define nfssysarg_exportfs arg.exportfs_args_u 240 #define nfssysarg_getfh arg.nfs_getfh_args_u 241 #define nfssysarg_svc arg.nfs_svc_args_u 242 #define nfssysarg_rdmastart arg.rdma_svc_args_u 243 #define nfssysarg_revauth arg.nfs_revauth_args_u 244 #define nfssysarg_lmsvc arg.lm_svc_args_u 245 #define nfssysarg_nfslflush arg.nfsl_flush_args_u 246 #define nfssysarg_svcpool arg.svcpool_args_u 247 #define nfssysarg_nfs4clrst arg.nfs4clrst_u 248 #define nfssysarg_nfsidmap arg.nfsidmap_u 249 250 #ifdef _SYSCALL32 251 union nfssysargs32 { 252 caddr32_t exportfs_args_u; /* exportfs args */ 253 caddr32_t nfs_getfh_args_u; /* nfs_getfh args */ 254 caddr32_t nfs_svc_args_u; /* nfs_svc args */ 255 caddr32_t rdma_svc_args_u; /* rdma_start args */ 256 caddr32_t nfs_revauth_args_u; /* nfs_revauth args */ 257 caddr32_t lm_svc_args_u; /* lm_svc args */ 258 /* kill_lockmgr args: none */ 259 caddr32_t nfsl_flush_args_u; /* nfsl_flush args */ 260 caddr32_t svcpool_args_u; 261 caddr32_t nfs4clrst_u; 262 }; 263 struct nfssysa32 { 264 enum nfssys_op opcode; /* operation discriminator */ 265 union nfssysargs32 arg; /* syscall-specific arg pointer */ 266 }; 267 #endif /* _SYSCALL32 */ 268 269 #endif /* _KERNEL */ 270 271 struct nfs4_svc_args { 272 int fd; /* Connection endpoint */ 273 int cmd; 274 char *netid; /* Transport Identifier */ 275 char *addr; /* Universal Address */ 276 char *protofmly; /* Protocol Family */ 277 char *proto; /* Protocol, eg. "tcp" */ 278 struct netbuf addrmask; /* Address mask for host */ 279 }; 280 281 #ifdef _SYSCALL32 282 struct nfs4_svc_args32 { 283 int32_t fd; 284 int32_t cmd; 285 caddr32_t netid; 286 caddr32_t addr; 287 caddr32_t protofmly; 288 caddr32_t proto; 289 struct netbuf32 addrmask; 290 }; 291 #endif 292 293 #define NFS4_KRPC_START 1 294 #define NFS4_SETPORT 2 295 #define NFS4_DQUERY 4 296 297 #ifdef _KERNEL 298 299 #include <sys/systm.h> /* for rval_t typedef */ 300 301 extern int nfssys(enum nfssys_op opcode, void *arg); 302 extern int exportfs(struct exportfs_args *, model_t, cred_t *); 303 extern int nfs_getfh(struct nfs_getfh_args *, model_t, cred_t *); 304 extern int nfs_svc(struct nfs_svc_args *, model_t); 305 extern int lm_svc(struct lm_svc_args *uap); 306 extern int lm_shutdown(void); 307 extern int nfsl_flush(struct nfsl_flush_args *, model_t); 308 extern int nfs4_svc(struct nfs4_svc_args *, model_t); 309 extern int rdma_start(struct rdma_svc_args *); 310 extern void rfs4_clear_client_state(struct nfs4clrst_args *); 311 extern void nfs_idmap_args(struct nfsidmap_args *); 312 #endif 313 314 #ifdef __cplusplus 315 } 316 #endif 317 318 #endif /* _NFS_NFSSYS_H */ 319