Change to using variable length file handles, for better v3 support, and
[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 struct nfs_fh_len {
14         int             fh_size;
15         u_int8_t        fh_handle[NFS3_FHSIZE];
16 };
17 struct nfs_fh_old {
18         u_int8_t        fh_handle[NFS_FHSIZE];
19 };
20
21 /*
22  * Version of the syscall interface
23  */
24 #define NFSCTL_VERSION          0x0201
25
26 /*
27  * These are the commands understood by nfsctl().
28  */
29 #define NFSCTL_SVC              0       /* This is a server process. */
30 #define NFSCTL_ADDCLIENT        1       /* Add an NFS client. */
31 #define NFSCTL_DELCLIENT        2       /* Remove an NFS client. */
32 #define NFSCTL_EXPORT           3       /* export a file system. */
33 #define NFSCTL_UNEXPORT         4       /* unexport a file system. */
34 #define NFSCTL_UGIDUPDATE       5       /* update a client's uid/gid map. */
35 #define NFSCTL_GETFH            6       /* get an fh (used by mountd) */
36 #define NFSCTL_GETFD            7       /* get an fh by path (used by mountd) */
37 #define NFSCTL_GETFS            8       /* get an fh by path with max size (used by mountd) */
38
39 /* Above this is for lockd. */
40 #define NFSCTL_LOCKD            0x10000
41 #define LOCKDCTL_SVC            NFSCTL_LOCKD
42
43
44
45 /* SVC */
46 struct nfsctl_svc {
47         unsigned short          svc_port;
48         int                     svc_nthreads;
49 };
50
51 /* ADDCLIENT/DELCLIENT */
52 struct nfsctl_client {
53         char                    cl_ident[NFSCLNT_IDMAX+1];
54         int                     cl_naddr;
55         struct in_addr          cl_addrlist[NFSCLNT_ADDRMAX];
56         int                     cl_fhkeytype;
57         int                     cl_fhkeylen;
58         unsigned char           cl_fhkey[NFSCLNT_KEYMAX];
59 };
60
61 /* EXPORT/UNEXPORT */
62 struct nfsctl_export {
63         char                    ex_client[NFSCLNT_IDMAX+1];
64         char                    ex_path[NFS_MAXPATHLEN+1];
65         __kernel_dev_t          ex_dev;
66         __kernel_ino_t          ex_ino;
67         int                     ex_flags;
68         __kernel_uid_t          ex_anon_uid;
69         __kernel_gid_t          ex_anon_gid;
70 };
71
72 /* UGIDUPDATE */
73 struct nfsctl_uidmap {
74         char *                  ug_ident;
75         __kernel_uid_t          ug_uidbase;
76         int                     ug_uidlen;
77         __kernel_uid_t *        ug_udimap;
78         __kernel_gid_t          ug_gidbase;
79         int                     ug_gidlen;
80         __kernel_gid_t *        ug_gdimap;
81 };
82
83 /* GETFH */
84 struct nfsctl_fhparm {
85         struct sockaddr         gf_addr;
86         __kernel_dev_t          gf_dev;
87         __kernel_ino_t          gf_ino;
88         int                     gf_version;
89 };
90
91 /* GETFD */
92 struct nfsctl_fdparm {
93         struct sockaddr         gd_addr;
94         char                    gd_path[NFS_MAXPATHLEN+1];
95         int                     gd_version;
96 };
97
98 /* GETFS - GET Filehandle with Size */
99 struct nfsctl_fsparm {
100         struct sockaddr         gd_addr;
101         char                    gd_path[NFS_MAXPATHLEN+1];
102         int                     gd_maxlen;
103 };
104
105 /*
106  * This is the argument union.
107  */
108 struct nfsctl_arg {
109         int                     ca_version;     /* safeguard */
110         union {
111                 struct nfsctl_svc       u_svc;
112                 struct nfsctl_client    u_client;
113                 struct nfsctl_export    u_export;
114                 struct nfsctl_uidmap    u_umap;
115                 struct nfsctl_fhparm    u_getfh;
116                 struct nfsctl_fdparm    u_getfd;
117                 struct nfsctl_fsparm    u_getfs;
118         } u;
119 #define ca_svc          u.u_svc
120 #define ca_client       u.u_client
121 #define ca_export       u.u_export
122 #define ca_umap         u.u_umap
123 #define ca_getfh        u.u_getfh
124 #define ca_getfd        u.u_getfd
125 #define ca_getfs        u.u_getfs
126 #define ca_authd        u.u_authd
127 };
128
129 union nfsctl_res {
130         struct nfs_fh_old       cr_getfh;
131         struct nfs_fh_len       cr_getfs;
132 };
133
134 #endif /* _NFS_NFS_H */