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