4 * Copyright (c) 1997-2009 Erez Zadok
5 * Copyright (c) 1990 Jan-Simon Pendry
6 * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
7 * Copyright (c) 1990 The Regents of the University of California.
10 * This code is derived from software contributed to Berkeley by
11 * Jan-Simon Pendry at Imperial College, London.
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 * 3. All advertising materials mentioning features or use of this software
22 * must display the following acknowledgment:
23 * This product includes software developed by the University of
24 * California, Berkeley and its contributors.
25 * 4. Neither the name of the University nor the names of its contributors
26 * may be used to endorse or promote products derived from this software
27 * without specific prior written permission.
29 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
42 * File: am-utils/conf/nfs_prot/nfs_prot_irix5.h
46 #ifndef _AMU_NFS_PROT_H
47 #define _AMU_NFS_PROT_H
49 #ifdef HAVE_NFS_NFSV2_H
50 # include <nfs/nfsv2.h>
51 #endif /* HAVE_NFS_NFSV2_H */
54 #endif /* HAVE_RPC_RPC_H */
55 #ifdef HAVE_NFS_RPCV2_H
56 # include <nfs/rpcv2.h>
57 #endif /* HAVE_NFS_RPCV2_H */
60 #endif /* HAVE_NFS_NFS_H */
65 #endif /* HAVE_SYS_UIO_H */
66 #ifdef HAVE_SYS_VNODE_H
67 # include <sys/vnode.h>
68 #endif /* HAVE_SYS_VNODE_H */
69 #ifdef HAVE_SYS_FS_NFS_H
70 # include <sys/fs/nfs.h>
71 #endif /* HAVE_SYS_FS_NFS_H */
73 #ifdef HAVE_RPCSVC_MOUNT_H
74 # include <rpcsvc/mount.h>
75 #endif /* HAVE_RPCSVC_MOUNT_H */
76 #ifdef HAVE_SYS_FSTYP_H
77 # include <sys/fstyp.h>
78 #endif /* HAVE_SYS_FSTYP_H */
80 /* XFS isn't really supported in 5.3, but the header files are confusing */
82 #undef MNTTAB_TYPE_XFS
84 /****************************************************************************/
88 * IRIX5.3 requires the fh_len field to be added to the struct nfs_args
89 * defined in <sys/fs/nfs_clnt.h> for NFS3 mounts (it doesn't hurt for
90 * NFS2 mounts). The mount syscall however always expects the argument
91 * structure size to be sizeof(struct nfs_args).
92 * So we need to use an extended struct nfs_args in amd/ops_nfs.c,
93 * while using the original struct nfs_arg in libamu/mountutil.c.
98 * NFS arguments to the mount system call.
100 struct irix5_nfs_args
{
101 struct sockaddr_in
*addr
; /* file server address */
102 fhandle_t
*fh
; /* File handle to be mounted */
103 int flags
; /* flags */
104 u_int wsize
; /* write size in bytes */
105 u_int rsize
; /* read size in bytes */
106 u_int timeo
; /* initial timeout in .1 secs */
107 u_int retrans
; /* times to retry send */
108 char *hostname
; /* server's name */
109 u_int acregmin
; /* attr cache file min secs */
110 u_int acregmax
; /* attr cache file max secs */
111 u_int acdirmin
; /* attr cache dir min secs */
112 u_int acdirmax
; /* attr cache dir max secs */
113 u_int symttl
; /* symlink cache time-to-live */
114 char base
[FSTYPSZ
]; /* base type for statvfs */
115 u_int namemax
; /* name length for statvfs */
116 u_int fh_len
; /* length for a v3 filehandle */
120 # define MNTOPT_PROTO "proto"
121 #endif /* not MNTOPT_PROTO */
123 # define MNTOPT_VERS "vers"
124 #endif /* not MNTOPT_VERS */
126 /****************************************************************************/
133 #define NFS_PORT 2049
134 #define NFS_MAXDATA 8192
135 #define NFS_MAXPATHLEN 1024
136 #define NFS_MAXNAMLEN 255
137 #define NFS_FHSIZE 32
139 /* Irix 5.2 is missing the definition for FHSIZE */
140 # define FHSIZE NFS_FHSIZE
141 #endif /* not FHSIZE */
142 #define NFS_COOKIESIZE 4
143 #define MNTPATHLEN 1024
144 #define MNTNAMLEN 255
146 #define NFSMODE_FMT 0170000
147 #define NFSMODE_DIR 0040000
148 #define NFSMODE_CHR 0020000
149 #define NFSMODE_BLK 0060000
150 #define NFSMODE_REG 0100000
151 #define NFSMODE_LNK 0120000
152 #define NFSMODE_SOCK 0140000
153 #define NFSMODE_FIFO 0010000
156 # define NFS_PROGRAM ((u_long)100003)
157 #endif /* not NFS_PROGRAM */
159 # define NFS_VERSION ((u_long)2)
160 #endif /* not NFS_VERSION */
162 #define NFSPROC_NULL ((u_long)0)
163 #define NFSPROC_GETATTR ((u_long)1)
164 #define NFSPROC_SETATTR ((u_long)2)
165 #define NFSPROC_ROOT ((u_long)3)
166 #define NFSPROC_LOOKUP ((u_long)4)
167 #define NFSPROC_READLINK ((u_long)5)
168 #define NFSPROC_READ ((u_long)6)
169 #define NFSPROC_WRITECACHE ((u_long)7)
170 #define NFSPROC_WRITE ((u_long)8)
171 #define NFSPROC_CREATE ((u_long)9)
172 #define NFSPROC_REMOVE ((u_long)10)
173 #define NFSPROC_RENAME ((u_long)11)
174 #define NFSPROC_LINK ((u_long)12)
175 #define NFSPROC_SYMLINK ((u_long)13)
176 #define NFSPROC_MKDIR ((u_long)14)
177 #define NFSPROC_RMDIR ((u_long)15)
178 #define NFSPROC_READDIR ((u_long)16)
179 #define NFSPROC_STATFS ((u_long)17)
181 /* map field names */
182 #define ml_hostname ml_name
183 #define ml_directory ml_path
184 #define ml_next ml_nxt
185 #define gr_next g_next
186 #define gr_name g_name
187 #define ex_dir ex_name
193 typedef char *dirpath
;
194 typedef char *filename
;
196 typedef char *nfspath
;
197 typedef char nfscookie
[NFS_COOKIESIZE
];
198 typedef enum nfsftype nfsftype
;
199 typedef enum nfsstat nfsstat
;
200 typedef struct attrstat nfsattrstat
;
201 typedef struct createargs nfscreateargs
;
202 typedef struct dirlist nfsdirlist
;
203 typedef struct diropargs nfsdiropargs
;
204 typedef struct diropokres nfsdiropokres
;
205 typedef struct diropres nfsdiropres
;
206 typedef struct entry nfsentry
;
207 typedef struct exports
*exports
;
208 typedef struct exports exportnode
;
209 typedef struct fattr nfsfattr
;
210 typedef struct fhstatus fhstatus
;
211 typedef struct groups
*groups
;
212 typedef struct groups groupnode
;
213 typedef struct linkargs nfslinkargs
;
214 typedef struct mountlist
*mountlist
;
215 typedef struct mountlist mountbody
;
216 typedef struct nfs_fh nfs_fh
;
217 typedef struct nfstime nfstime
;
218 typedef struct readargs nfsreadargs
;
219 typedef struct readdirargs nfsreaddirargs
;
220 typedef struct readdirres nfsreaddirres
;
221 typedef struct readlinkres nfsreadlinkres
;
222 typedef struct readokres nfsreadokres
;
223 typedef struct readres nfsreadres
;
224 typedef struct renameargs nfsrenameargs
;
225 typedef struct sattr nfssattr
;
226 typedef struct sattrargs nfssattrargs
;
227 typedef struct statfsokres nfsstatfsokres
;
228 typedef struct statfsres nfsstatfsres
;
229 typedef struct symlinkargs nfssymlinkargs
;
230 typedef struct writeargs nfswriteargs
;
237 extern void *nfsproc_null_2_svc(void *, struct svc_req
*);
238 extern nfsattrstat
*nfsproc_getattr_2_svc(nfs_fh
*, struct svc_req
*);
239 extern nfsattrstat
*nfsproc_setattr_2_svc(nfssattrargs
*, struct svc_req
*);
240 extern void *nfsproc_root_2_svc(void *, struct svc_req
*);
241 extern nfsdiropres
*nfsproc_lookup_2_svc(nfsdiropargs
*, struct svc_req
*);
242 extern nfsreadlinkres
*nfsproc_readlink_2_svc(nfs_fh
*, struct svc_req
*);
243 extern nfsreadres
*nfsproc_read_2_svc(nfsreadargs
*, struct svc_req
*);
244 extern void *nfsproc_writecache_2_svc(void *, struct svc_req
*);
245 extern nfsattrstat
*nfsproc_write_2_svc(nfswriteargs
*, struct svc_req
*);
246 extern nfsdiropres
*nfsproc_create_2_svc(nfscreateargs
*, struct svc_req
*);
247 extern nfsstat
*nfsproc_remove_2_svc(nfsdiropargs
*, struct svc_req
*);
248 extern nfsstat
*nfsproc_rename_2_svc(nfsrenameargs
*, struct svc_req
*);
249 extern nfsstat
*nfsproc_link_2_svc(nfslinkargs
*, struct svc_req
*);
250 extern nfsstat
*nfsproc_symlink_2_svc(nfssymlinkargs
*, struct svc_req
*);
251 extern nfsdiropres
*nfsproc_mkdir_2_svc(nfscreateargs
*, struct svc_req
*);
252 extern nfsstat
*nfsproc_rmdir_2_svc(nfsdiropargs
*, struct svc_req
*);
253 extern nfsreaddirres
*nfsproc_readdir_2_svc(nfsreaddirargs
*, struct svc_req
*);
254 extern nfsstatfsres
*nfsproc_statfs_2_svc(nfs_fh
*, struct svc_req
*);
256 extern bool_t
xdr_nfsstat(XDR
*, nfsstat
*);
257 extern bool_t
xdr_ftype(XDR
*, nfsftype
*);
258 extern bool_t
xdr_nfs_fh(XDR
*, nfs_fh
*);
259 extern bool_t
xdr_nfstime(XDR
*, nfstime
*);
260 extern bool_t
xdr_fattr(XDR
*, nfsfattr
*);
261 extern bool_t
xdr_sattr(XDR
*, nfssattr
*);
262 extern bool_t
xdr_filename(XDR
*, filename
*);
263 extern bool_t
xdr_nfspath(XDR
*, nfspath
*);
264 extern bool_t
xdr_attrstat(XDR
*, nfsattrstat
*);
265 extern bool_t
xdr_sattrargs(XDR
*, nfssattrargs
*);
266 extern bool_t
xdr_diropargs(XDR
*, nfsdiropargs
*);
267 extern bool_t
xdr_diropokres(XDR
*, nfsdiropokres
*);
268 extern bool_t
xdr_diropres(XDR
*, nfsdiropres
*);
269 extern bool_t
xdr_readlinkres(XDR
*, nfsreadlinkres
*);
270 extern bool_t
xdr_readargs(XDR
*, nfsreadargs
*);
271 extern bool_t
xdr_readokres(XDR
*, nfsreadokres
*);
272 extern bool_t
xdr_readres(XDR
*, nfsreadres
*);
273 extern bool_t
xdr_writeargs(XDR
*, nfswriteargs
*);
274 extern bool_t
xdr_createargs(XDR
*, nfscreateargs
*);
275 extern bool_t
xdr_renameargs(XDR
*, nfsrenameargs
*);
276 extern bool_t
xdr_linkargs(XDR
*, nfslinkargs
*);
277 extern bool_t
xdr_symlinkargs(XDR
*, nfssymlinkargs
*);
278 extern bool_t
xdr_nfscookie(XDR
*, nfscookie
);
279 extern bool_t
xdr_readdirargs(XDR
*, nfsreaddirargs
*);
280 extern bool_t
xdr_entry(XDR
*, nfsentry
*);
281 extern bool_t
xdr_dirlist(XDR
*, nfsdirlist
*);
282 extern bool_t
xdr_readdirres(XDR
*, nfsreaddirres
*);
283 extern bool_t
xdr_statfsokres(XDR
*, nfsstatfsokres
*);
284 extern bool_t
xdr_statfsres(XDR
*, nfsstatfsres
*);
292 char fh_data
[NFS_FHSIZE
];
335 nfssattr sag_attributes
;
339 nfs_fh da_fhandle
; /* was dir */
345 nfsfattr drok_attributes
;
349 nfsstat dr_status
; /* was status */
351 nfsdiropokres dr_drok_u
; /* was diropres */
352 } dr_u
; /* was diropres_u */
370 nfsfattr raok_attributes
;
380 nfsreadokres rr_reply_u
;
386 u_int wra_beginoffset
;
388 u_int wra_totalcount
;
396 nfsdiropargs ca_where
;
397 nfssattr ca_attributes
;
401 nfsdiropargs rna_from
;
411 nfsdiropargs sla_from
;
413 nfssattr sla_attributes
;
418 nfscookie rda_cookie
;
426 nfsentry
*ne_nextentry
;
430 nfsentry
*dl_entries
;
437 nfsdirlist rdr_reply_u
;
452 nfsstatfsokres sfr_reply_u
;
456 #endif /* not _AMU_NFS_PROT_H */