1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * include/linux/nfsd/syscall.h 3*53ee8cc1Swenshuai.xi * 4*53ee8cc1Swenshuai.xi * This file holds all declarations for the knfsd syscall interface. 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de> 7*53ee8cc1Swenshuai.xi */ 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi #ifndef NFSD_SYSCALL_H 10*53ee8cc1Swenshuai.xi #define NFSD_SYSCALL_H 11*53ee8cc1Swenshuai.xi 12*53ee8cc1Swenshuai.xi #include <asm/types.h> 13*53ee8cc1Swenshuai.xi #include <linux/posix_types.h> 14*53ee8cc1Swenshuai.xi #include <linux/nfsd/const.h> 15*53ee8cc1Swenshuai.xi #include <linux/nfsd/export.h> 16*53ee8cc1Swenshuai.xi #include <linux/nfsd/nfsfh.h> 17*53ee8cc1Swenshuai.xi 18*53ee8cc1Swenshuai.xi /* 19*53ee8cc1Swenshuai.xi * Version of the syscall interface 20*53ee8cc1Swenshuai.xi */ 21*53ee8cc1Swenshuai.xi #define NFSCTL_VERSION 0x0201 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi /* 24*53ee8cc1Swenshuai.xi * These are the commands understood by nfsctl(). 25*53ee8cc1Swenshuai.xi */ 26*53ee8cc1Swenshuai.xi #define NFSCTL_SVC 0 /* This is a server process. */ 27*53ee8cc1Swenshuai.xi #define NFSCTL_ADDCLIENT 1 /* Add an NFS client. */ 28*53ee8cc1Swenshuai.xi #define NFSCTL_DELCLIENT 2 /* Remove an NFS client. */ 29*53ee8cc1Swenshuai.xi #define NFSCTL_EXPORT 3 /* export a file system. */ 30*53ee8cc1Swenshuai.xi #define NFSCTL_UNEXPORT 4 /* unexport a file system. */ 31*53ee8cc1Swenshuai.xi /*#define NFSCTL_UGIDUPDATE 5 / * update a client's uid/gid map. DISCARDED */ 32*53ee8cc1Swenshuai.xi /*#define NFSCTL_GETFH 6 / * get an fh by ino DISCARDED */ 33*53ee8cc1Swenshuai.xi #define NFSCTL_GETFD 7 /* get an fh by path (used by mountd) */ 34*53ee8cc1Swenshuai.xi #define NFSCTL_GETFS 8 /* get an fh by path with max FH len */ 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi /* SVC */ 37*53ee8cc1Swenshuai.xi struct nfsctl_svc { 38*53ee8cc1Swenshuai.xi unsigned short svc_port; 39*53ee8cc1Swenshuai.xi int svc_nthreads; 40*53ee8cc1Swenshuai.xi }; 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi /* ADDCLIENT/DELCLIENT */ 43*53ee8cc1Swenshuai.xi struct nfsctl_client { 44*53ee8cc1Swenshuai.xi char cl_ident[NFSCLNT_IDMAX+1]; 45*53ee8cc1Swenshuai.xi int cl_naddr; 46*53ee8cc1Swenshuai.xi struct in_addr cl_addrlist[NFSCLNT_ADDRMAX]; 47*53ee8cc1Swenshuai.xi int cl_fhkeytype; 48*53ee8cc1Swenshuai.xi int cl_fhkeylen; 49*53ee8cc1Swenshuai.xi unsigned char cl_fhkey[NFSCLNT_KEYMAX]; 50*53ee8cc1Swenshuai.xi }; 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xi /* EXPORT/UNEXPORT */ 53*53ee8cc1Swenshuai.xi struct nfsctl_export { 54*53ee8cc1Swenshuai.xi char ex_client[NFSCLNT_IDMAX+1]; 55*53ee8cc1Swenshuai.xi char ex_path[NFS_MAXPATHLEN+1]; 56*53ee8cc1Swenshuai.xi __kernel_old_dev_t ex_dev; 57*53ee8cc1Swenshuai.xi __kernel_ino_t ex_ino; 58*53ee8cc1Swenshuai.xi int ex_flags; 59*53ee8cc1Swenshuai.xi __kernel_uid_t ex_anon_uid; 60*53ee8cc1Swenshuai.xi __kernel_gid_t ex_anon_gid; 61*53ee8cc1Swenshuai.xi }; 62*53ee8cc1Swenshuai.xi 63*53ee8cc1Swenshuai.xi /* GETFD */ 64*53ee8cc1Swenshuai.xi struct nfsctl_fdparm { 65*53ee8cc1Swenshuai.xi struct sockaddr gd_addr; 66*53ee8cc1Swenshuai.xi char gd_path[NFS_MAXPATHLEN+1]; 67*53ee8cc1Swenshuai.xi int gd_version; 68*53ee8cc1Swenshuai.xi }; 69*53ee8cc1Swenshuai.xi 70*53ee8cc1Swenshuai.xi /* GETFS - GET Filehandle with Size */ 71*53ee8cc1Swenshuai.xi struct nfsctl_fsparm { 72*53ee8cc1Swenshuai.xi struct sockaddr gd_addr; 73*53ee8cc1Swenshuai.xi char gd_path[NFS_MAXPATHLEN+1]; 74*53ee8cc1Swenshuai.xi int gd_maxlen; 75*53ee8cc1Swenshuai.xi }; 76*53ee8cc1Swenshuai.xi 77*53ee8cc1Swenshuai.xi /* 78*53ee8cc1Swenshuai.xi * This is the argument union. 79*53ee8cc1Swenshuai.xi */ 80*53ee8cc1Swenshuai.xi struct nfsctl_arg { 81*53ee8cc1Swenshuai.xi int ca_version; /* safeguard */ 82*53ee8cc1Swenshuai.xi union { 83*53ee8cc1Swenshuai.xi struct nfsctl_svc u_svc; 84*53ee8cc1Swenshuai.xi struct nfsctl_client u_client; 85*53ee8cc1Swenshuai.xi struct nfsctl_export u_export; 86*53ee8cc1Swenshuai.xi struct nfsctl_fdparm u_getfd; 87*53ee8cc1Swenshuai.xi struct nfsctl_fsparm u_getfs; 88*53ee8cc1Swenshuai.xi /* 89*53ee8cc1Swenshuai.xi * The following dummy member is needed to preserve binary compatibility 90*53ee8cc1Swenshuai.xi * on platforms where alignof(void*)>alignof(int). It's needed because 91*53ee8cc1Swenshuai.xi * this union used to contain a member (u_umap) which contained a 92*53ee8cc1Swenshuai.xi * pointer. 93*53ee8cc1Swenshuai.xi */ 94*53ee8cc1Swenshuai.xi void *u_ptr; 95*53ee8cc1Swenshuai.xi } u; 96*53ee8cc1Swenshuai.xi #define ca_svc u.u_svc 97*53ee8cc1Swenshuai.xi #define ca_client u.u_client 98*53ee8cc1Swenshuai.xi #define ca_export u.u_export 99*53ee8cc1Swenshuai.xi #define ca_getfd u.u_getfd 100*53ee8cc1Swenshuai.xi #define ca_getfs u.u_getfs 101*53ee8cc1Swenshuai.xi }; 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi union nfsctl_res { 104*53ee8cc1Swenshuai.xi __u8 cr_getfh[NFS_FHSIZE]; 105*53ee8cc1Swenshuai.xi struct knfsd_fh cr_getfs; 106*53ee8cc1Swenshuai.xi }; 107*53ee8cc1Swenshuai.xi 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi #endif /* NFSD_SYSCALL_H */ 110