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