Subversion Repositories shark

Rev

Rev 423 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
423 giacomo 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 <asm/types.h>
13
#ifdef __KERNEL__
14
# include <linux/config.h>
15
# include <linux/types.h>
16
# include <linux/in.h>
17
#endif 
18
#include <linux/posix_types.h>
19
#include <linux/nfsd/const.h>
20
#include <linux/nfsd/export.h>
21
#include <linux/nfsd/nfsfh.h>
22
#include <linux/nfsd/auth.h>
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. DISCARDED */
38
/*#define NFSCTL_GETFH          6       / * get an fh by ino DISCARDED */
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 FH len */
41
 
42
/* SVC */
43
struct nfsctl_svc {
44
        unsigned short          svc_port;
45
        int                     svc_nthreads;
46
};
47
 
48
/* ADDCLIENT/DELCLIENT */
49
struct nfsctl_client {
50
        char                    cl_ident[NFSCLNT_IDMAX+1];
51
        int                     cl_naddr;
52
        struct in_addr          cl_addrlist[NFSCLNT_ADDRMAX];
53
        int                     cl_fhkeytype;
54
        int                     cl_fhkeylen;
55
        unsigned char           cl_fhkey[NFSCLNT_KEYMAX];
56
};
57
 
58
/* EXPORT/UNEXPORT */
59
struct nfsctl_export {
60
        char                    ex_client[NFSCLNT_IDMAX+1];
61
        char                    ex_path[NFS_MAXPATHLEN+1];
62
        __kernel_old_dev_t      ex_dev;
63
        __kernel_ino_t          ex_ino;
64
        int                     ex_flags;
65
        __kernel_uid_t          ex_anon_uid;
66
        __kernel_gid_t          ex_anon_gid;
67
};
68
 
69
/* GETFD */
70
struct nfsctl_fdparm {
71
        struct sockaddr         gd_addr;
72
        char                    gd_path[NFS_MAXPATHLEN+1];
73
        int                     gd_version;
74
};
75
 
76
/* GETFS - GET Filehandle with Size */
77
struct nfsctl_fsparm {
78
        struct sockaddr         gd_addr;
79
        char                    gd_path[NFS_MAXPATHLEN+1];
80
        int                     gd_maxlen;
81
};
82
 
83
/*
84
 * This is the argument union.
85
 */
86
struct nfsctl_arg {
87
        int                     ca_version;     /* safeguard */
88
        union {
89
                struct nfsctl_svc       u_svc;
90
                struct nfsctl_client    u_client;
91
                struct nfsctl_export    u_export;
92
                struct nfsctl_fdparm    u_getfd;
93
                struct nfsctl_fsparm    u_getfs;
94
                /*
95
                 * The following dummy member is needed to preserve binary compatibility
96
                 * on platforms where alignof(void*)>alignof(int).  It's needed because
97
                 * this union used to contain a member (u_umap) which contained a
98
                 * pointer.
99
                 */
100
                void *u_ptr;
101
        } u;
102
#define ca_svc          u.u_svc
103
#define ca_client       u.u_client
104
#define ca_export       u.u_export
105
#define ca_getfd        u.u_getfd
106
#define ca_getfs        u.u_getfs
107
};
108
 
109
union nfsctl_res {
110
        __u8                    cr_getfh[NFS_FHSIZE];
111
        struct knfsd_fh         cr_getfs;
112
};
113
 
114
#ifdef __KERNEL__
115
/*
116
 * Kernel syscall implementation.
117
 */
118
extern asmlinkage long  sys_nfsservctl(int, struct nfsctl_arg __user *, void __user *);
119
extern int              exp_addclient(struct nfsctl_client *ncp);
120
extern int              exp_delclient(struct nfsctl_client *ncp);
121
extern int              exp_export(struct nfsctl_export *nxp);
122
extern int              exp_unexport(struct nfsctl_export *nxp);
123
 
124
#endif /* __KERNEL__ */
125
 
126
#endif /* NFSD_SYSCALL_H */