]> git.decadent.org.uk Git - nfs-utils.git/blob - support/include/nfs/nfs.h
0cfed07bc4410b3300f87945ca30a3154677b96f
[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 struct dentry;
11
12 /*
13  * This is the new "dentry style" Linux NFSv2 file handle.
14  *
15  * The xino and xdev fields are currently used to transport the
16  * ino/dev of the exported inode.
17  */
18 struct nfs_fhbase {
19         struct dentry * fb_dentry;      /* dentry cookie */
20         u_int32_t               fb_ino;         /* our inode number */
21         u_int32_t               fb_dirino;      /* dir inode number */
22         u_int32_t               fb_dev;         /* our device */
23         u_int32_t               fb_xdev;
24         u_int32_t               fb_xino;
25 };
26
27 #define NFS_FH_PADDING          (NFS_FHSIZE - sizeof(struct nfs_fhbase))
28 struct knfs_fh {
29         struct nfs_fhbase       fh_base;
30         u_int8_t                        fh_cookie[NFS_FH_PADDING];
31 };
32
33 #define fh_dcookie              fh_base.fb_dentry
34 #define fh_ino                  fh_base.fb_ino
35 #define fh_dirino               fh_base.fb_dirino
36 #define fh_dev                  fh_base.fb_dev
37 #define fh_xdev                 fh_base.fb_xdev
38 #define fh_xino                 fh_base.fb_xino
39
40 /*
41  * Version of the syscall interface
42  */
43 #define NFSCTL_VERSION          0x0201
44
45 /*
46  * These are the commands understood by nfsctl().
47  */
48 #define NFSCTL_SVC              0       /* This is a server process. */
49 #define NFSCTL_ADDCLIENT        1       /* Add an NFS client. */
50 #define NFSCTL_DELCLIENT        2       /* Remove an NFS client. */
51 #define NFSCTL_EXPORT           3       /* export a file system. */
52 #define NFSCTL_UNEXPORT         4       /* unexport a file system. */
53 #define NFSCTL_UGIDUPDATE       5       /* update a client's uid/gid map. */
54 #define NFSCTL_GETFH            6       /* get an fh (used by mountd) */
55 #define NFSCTL_GETFD            7       /* get an fh by path (used by mountd) */
56
57 /* Above this is for lockd. */
58 #define NFSCTL_LOCKD            0x10000
59 #define LOCKDCTL_SVC            NFSCTL_LOCKD
60
61
62
63 /* SVC */
64 struct nfsctl_svc {
65         unsigned short          svc_port;
66         int                     svc_nthreads;
67 };
68
69 /* ADDCLIENT/DELCLIENT */
70 struct nfsctl_client {
71         char                    cl_ident[NFSCLNT_IDMAX+1];
72         int                     cl_naddr;
73         struct in_addr          cl_addrlist[NFSCLNT_ADDRMAX];
74         int                     cl_fhkeytype;
75         int                     cl_fhkeylen;
76         unsigned char           cl_fhkey[NFSCLNT_KEYMAX];
77 };
78
79 /* EXPORT/UNEXPORT */
80 struct nfsctl_export {
81         char                    ex_client[NFSCLNT_IDMAX+1];
82         char                    ex_path[NFS_MAXPATHLEN+1];
83         __kernel_dev_t          ex_dev;
84         __kernel_ino_t          ex_ino;
85         int                     ex_flags;
86         __kernel_uid_t          ex_anon_uid;
87         __kernel_gid_t          ex_anon_gid;
88 };
89
90 /* UGIDUPDATE */
91 struct nfsctl_uidmap {
92         char *                  ug_ident;
93         __kernel_uid_t          ug_uidbase;
94         int                     ug_uidlen;
95         __kernel_uid_t *        ug_udimap;
96         __kernel_gid_t          ug_gidbase;
97         int                     ug_gidlen;
98         __kernel_gid_t *        ug_gdimap;
99 };
100
101 /* GETFH */
102 struct nfsctl_fhparm {
103         struct sockaddr         gf_addr;
104         __kernel_dev_t          gf_dev;
105         __kernel_ino_t          gf_ino;
106         int                     gf_version;
107 };
108
109 /* GETFD */
110 struct nfsctl_fdparm {
111         struct sockaddr         gd_addr;
112         char                    gd_path[NFS_MAXPATHLEN+1];
113         int                     gd_version;
114 };
115
116 /*
117  * This is the argument union.
118  */
119 struct nfsctl_arg {
120         int                     ca_version;     /* safeguard */
121         union {
122                 struct nfsctl_svc       u_svc;
123                 struct nfsctl_client    u_client;
124                 struct nfsctl_export    u_export;
125                 struct nfsctl_uidmap    u_umap;
126                 struct nfsctl_fhparm    u_getfh;
127                 struct nfsctl_fdparm    u_getfd;
128                 unsigned int            u_debug;
129         } u;
130 #define ca_svc          u.u_svc
131 #define ca_client       u.u_client
132 #define ca_export       u.u_export
133 #define ca_umap         u.u_umap
134 #define ca_getfh        u.u_getfh
135 #define ca_getfd        u.u_getfd
136 #define ca_authd        u.u_authd
137 #define ca_debug        u.u_debug
138 };
139
140 union nfsctl_res {
141         struct knfs_fh          cr_getfh;
142         unsigned int            cr_debug;
143 };
144
145 #endif /* _NFS_NFS_H */