]> git.decadent.org.uk Git - nfs-utils.git/blob - support/include/nfs/nfs.h
f0286b2ca07704a49c84502004333aefd8fceea5
[nfs-utils.git] / support / include / nfs / nfs.h
1 #ifndef _NFS_NFS_H
2 #define _NFS_NFS_H
3
4 #include <linux/posix_types.h>
5 #include <sys/types.h>
6 #include <netinet/in.h>
7 #include <rpcsvc/nfs_prot.h>
8 #include <nfs/export.h>
9
10 #define NFS3_FHSIZE     64
11 #define NFS_FHSIZE      32
12
13 #define NFSD_MINVERS 2
14 #define NFSD_MAXVERS 4
15
16 struct nfs_fh_len {
17         int             fh_size;
18         u_int8_t        fh_handle[NFS3_FHSIZE];
19 };
20 struct nfs_fh_old {
21         u_int8_t        fh_handle[NFS_FHSIZE];
22 };
23
24 /*
25  * Version of the syscall interface
26  */
27 #define NFSCTL_VERSION          0x0201
28
29 /*
30  * These are the commands understood by nfsctl().
31  */
32 #define NFSCTL_SVC              0       /* This is a server process. */
33 #define NFSCTL_ADDCLIENT        1       /* Add an NFS client. */
34 #define NFSCTL_DELCLIENT        2       /* Remove an NFS client. */
35 #define NFSCTL_EXPORT           3       /* export a file system. */
36 #define NFSCTL_UNEXPORT         4       /* unexport a file system. */
37 #define NFSCTL_UGIDUPDATE       5       /* update a client's uid/gid map. */
38 #define NFSCTL_GETFH            6       /* get an fh (used by mountd) */
39 #define NFSCTL_GETFD            7       /* get an fh by path (used by mountd) */
40 #define NFSCTL_GETFS            8       /* get an fh by path with max size (used by mountd) */
41
42 /* Above this is for lockd. */
43 #define NFSCTL_LOCKD            0x10000
44 #define LOCKDCTL_SVC            NFSCTL_LOCKD
45
46 #define NFSCTL_VERUNSET(_cltbits, _v) ((_cltbits) &= ~(1 << ((_v) - 1))) 
47 #define NFSCTL_UDPUNSET(_cltbits)     ((_cltbits) &= ~(1 << (17 - 1))) 
48 #define NFSCTL_TCPUNSET(_cltbits)     ((_cltbits) &= ~(1 << (18 - 1))) 
49
50 #define NFSCTL_VERISSET(_cltbits, _v) ((_cltbits) & (1 << ((_v) - 1))) 
51 #define NFSCTL_UDPISSET(_cltbits)     ((_cltbits) & (1 << (17 - 1))) 
52 #define NFSCTL_TCPISSET(_cltbits)     ((_cltbits) & (1 << (18 - 1))) 
53
54 #define NFSCTL_ALLBITS (~0)
55
56 /* SVC */
57 struct nfsctl_svc {
58         unsigned short          svc_port;
59         int                     svc_nthreads;
60 };
61
62 /* ADDCLIENT/DELCLIENT */
63 struct nfsctl_client {
64         char                    cl_ident[NFSCLNT_IDMAX+1];
65         int                     cl_naddr;
66         struct in_addr          cl_addrlist[NFSCLNT_ADDRMAX];
67         int                     cl_fhkeytype;
68         int                     cl_fhkeylen;
69         unsigned char           cl_fhkey[NFSCLNT_KEYMAX];
70 };
71
72 /* IN 2.5.6? __kernel_dev_t changed size, and __kernel_old_dev_t was left
73  * with the old value.  We need to make sure we use the right one.
74  *
75  */
76 #include <linux/version.h>
77 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,70)
78 # define __nfsd_dev_t  __kernel_old_dev_t
79 #else
80 # define __nfsd_dev_t  __kernel_dev_t
81 #endif
82
83 /* EXPORT/UNEXPORT */
84 struct nfsctl_export {
85         char                    ex_client[NFSCLNT_IDMAX+1];
86         char                    ex_path[NFS_MAXPATHLEN+1];
87         __nfsd_dev_t            ex_dev;
88         __kernel_ino_t          ex_ino;
89         int                     ex_flags;
90         __kernel_uid_t          ex_anon_uid;
91         __kernel_gid_t          ex_anon_gid;
92 };
93
94 /* UGIDUPDATE */
95 struct nfsctl_uidmap {
96         char *                  ug_ident;
97         __kernel_uid_t          ug_uidbase;
98         int                     ug_uidlen;
99         __kernel_uid_t *        ug_udimap;
100         __kernel_gid_t          ug_gidbase;
101         int                     ug_gidlen;
102         __kernel_gid_t *        ug_gdimap;
103 };
104
105 /* GETFH */
106 struct nfsctl_fhparm {
107         struct sockaddr         gf_addr;
108         __nfsd_dev_t            gf_dev;
109         __kernel_ino_t          gf_ino;
110         int                     gf_version;
111 };
112
113 /* GETFD */
114 struct nfsctl_fdparm {
115         struct sockaddr         gd_addr;
116         char                    gd_path[NFS_MAXPATHLEN+1];
117         int                     gd_version;
118 };
119
120 /* GETFS - GET Filehandle with Size */
121 struct nfsctl_fsparm {
122         struct sockaddr         gd_addr;
123         char                    gd_path[NFS_MAXPATHLEN+1];
124         int                     gd_maxlen;
125 };
126
127 /*
128  * This is the argument union.
129  */
130 struct nfsctl_arg {
131         int                     ca_version;     /* safeguard */
132         union {
133                 struct nfsctl_svc       u_svc;
134                 struct nfsctl_client    u_client;
135                 struct nfsctl_export    u_export;
136                 struct nfsctl_uidmap    u_umap;
137                 struct nfsctl_fhparm    u_getfh;
138                 struct nfsctl_fdparm    u_getfd;
139                 struct nfsctl_fsparm    u_getfs;
140         } u;
141 #define ca_svc          u.u_svc
142 #define ca_client       u.u_client
143 #define ca_export       u.u_export
144 #define ca_umap         u.u_umap
145 #define ca_getfh        u.u_getfh
146 #define ca_getfd        u.u_getfd
147 #define ca_getfs        u.u_getfs
148 #define ca_authd        u.u_authd
149 };
150
151 union nfsctl_res {
152         struct nfs_fh_old       cr_getfh;
153         struct nfs_fh_len       cr_getfs;
154 };
155
156 #endif /* _NFS_NFS_H */