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