1 /* 2 * Copyright (c) 1997-2006 Erez Zadok 3 * Copyright (c) 1990 Jan-Simon Pendry 4 * Copyright (c) 1990 Imperial College of Science, Technology & Medicine 5 * Copyright (c) 1990 The Regents of the University of California. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * Jan-Simon Pendry at Imperial College, London. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. All advertising materials mentioning features or use of this software 20 * must display the following acknowledgment: 21 * This product includes software developed by the University of 22 * California, Berkeley and its contributors. 23 * 4. Neither the name of the University nor the names of its contributors 24 * may be used to endorse or promote products derived from this software 25 * without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37 * SUCH DAMAGE. 38 * 39 * 40 * File: am-utils/include/am_xdr_func.h 41 * 42 */ 43 44 #ifdef HAVE_FS_NFS3 45 46 #define AM_FHSIZE3 64 /* size in bytes of a file handle (v3) */ 47 #define AM_MOUNTVERS3 ((unsigned long)(3)) 48 49 /* NFSv3 handle */ 50 struct am_nfs_fh3 { 51 u_int am_fh3_length; 52 char am_fh3_data[AM_FHSIZE3]; 53 }; 54 typedef struct am_nfs_fh3 am_nfs_fh3; 55 56 #define AM_NFSPROC3_LOOKUP ((u_long) 3) 57 enum am_nfsstat3 { 58 AM_NFS3_OK = 0, 59 AM_NFS3ERR_PERM = 1, 60 AM_NFS3ERR_NOENT = 2, 61 AM_NFS3ERR_IO = 5, 62 AM_NFS3ERR_NXIO = 6, 63 AM_NFS3ERR_ACCES = 13, 64 AM_NFS3ERR_EXIST = 17, 65 AM_NFS3ERR_XDEV = 18, 66 AM_NFS3ERR_NODEV = 19, 67 AM_NFS3ERR_NOTDIR = 20, 68 AM_NFS3ERR_ISDIR = 21, 69 AM_NFS3ERR_INVAL = 22, 70 AM_NFS3ERR_FBIG = 27, 71 AM_NFS3ERR_NOSPC = 28, 72 AM_NFS3ERR_ROFS = 30, 73 AM_NFS3ERR_MLINK = 31, 74 AM_NFS3ERR_NAMETOOLONG = 63, 75 AM_NFS3ERR_NOTEMPTY = 66, 76 AM_NFS3ERR_DQUOT = 69, 77 AM_NFS3ERR_STALE = 70, 78 AM_NFS3ERR_REMOTE = 71, 79 AM_NFS3ERR_BADHANDLE = 10001, 80 AM_NFS3ERR_NOT_SYNC = 10002, 81 AM_NFS3ERR_BAD_COOKIE = 10003, 82 AM_NFS3ERR_NOTSUPP = 10004, 83 AM_NFS3ERR_TOOSMALL = 10005, 84 AM_NFS3ERR_SERVERFAULT = 10006, 85 AM_NFS3ERR_BADTYPE = 10007, 86 AM_NFS3ERR_JUKEBOX = 10008 87 }; 88 typedef enum am_nfsstat3 am_nfsstat3; 89 90 typedef struct { 91 u_int fhandle3_len; 92 char *fhandle3_val; 93 } am_fhandle3; 94 95 enum am_mountstat3 { 96 AM_MNT3_OK = 0, 97 AM_MNT3ERR_PERM = 1, 98 AM_MNT3ERR_NOENT = 2, 99 AM_MNT3ERR_IO = 5, 100 AM_MNT3ERR_ACCES = 13, 101 AM_MNT3ERR_NOTDIR = 20, 102 AM_MNT3ERR_INVAL = 22, 103 AM_MNT3ERR_NAMETOOLONG = 63, 104 AM_MNT3ERR_NOTSUPP = 10004, 105 AM_MNT3ERR_SERVERFAULT = 10006 106 }; 107 typedef enum am_mountstat3 am_mountstat3; 108 109 struct am_mountres3_ok { 110 am_fhandle3 fhandle; 111 struct { 112 u_int auth_flavors_len; 113 int *auth_flavors_val; 114 } auth_flavors; 115 }; 116 typedef struct am_mountres3_ok am_mountres3_ok; 117 118 struct am_mountres3 { 119 am_mountstat3 fhs_status; 120 union { 121 am_mountres3_ok mountinfo; 122 } mountres3_u; 123 }; 124 typedef struct am_mountres3 am_mountres3; 125 126 typedef char *am_filename3; 127 128 struct am_diropargs3 { 129 am_nfs_fh3 dir; 130 am_filename3 name; 131 }; 132 typedef struct am_diropargs3 am_diropargs3; 133 134 struct am_LOOKUP3args { 135 am_diropargs3 what; 136 }; 137 typedef struct am_LOOKUP3args am_LOOKUP3args; 138 139 struct am_LOOKUP3resok { 140 am_nfs_fh3 object; 141 #if 0 142 post_op_attr obj_attributes; 143 post_op_attr dir_attributes; 144 #endif 145 }; 146 typedef struct am_LOOKUP3resok am_LOOKUP3resok; 147 148 struct am_LOOKUP3resfail { 149 #if 0 150 post_op_attr dir_attributes; 151 #else 152 char dummy; /* cannot have an empty declaration */ 153 #endif 154 }; 155 typedef struct am_LOOKUP3resfail am_LOOKUP3resfail; 156 157 struct am_LOOKUP3res { 158 am_nfsstat3 status; 159 union { 160 am_LOOKUP3resok ok; 161 am_LOOKUP3resfail fail; 162 } res_u; 163 }; 164 typedef struct am_LOOKUP3res am_LOOKUP3res; 165 #endif /* HAVE_FS_NFS3 */ 166 167 /* 168 * Multi-protocol NFS file handle 169 */ 170 union am_nfs_handle { 171 /* placeholder for V4 file handle */ 172 #ifdef HAVE_FS_NFS3 173 am_nfs_fh3 v3; /* NFS version 3 handle */ 174 #endif /* HAVE_FS_NFS3 */ 175 am_nfs_fh v2; /* NFS version 2 handle */ 176 }; 177 typedef union am_nfs_handle am_nfs_handle_t; 178 179 180 /* 181 * Definitions of all possible xdr functions that are otherwise 182 * not defined elsewhere. 183 */ 184 185 #ifndef _AM_XDR_FUNC_H 186 #define _AM_XDR_FUNC_H 187 188 #ifndef HAVE_XDR_ATTRSTAT 189 bool_t xdr_attrstat(XDR *xdrs, nfsattrstat *objp); 190 #endif /* not HAVE_XDR_ATTRSTAT */ 191 #ifndef HAVE_XDR_CREATEARGS 192 bool_t xdr_createargs(XDR *xdrs, nfscreateargs *objp); 193 #endif /* not HAVE_XDR_CREATEARGS */ 194 #ifndef HAVE_XDR_DIRLIST 195 bool_t xdr_dirlist(XDR *xdrs, nfsdirlist *objp); 196 #endif /* not HAVE_XDR_DIRLIST */ 197 #ifndef HAVE_XDR_DIROPARGS 198 bool_t xdr_diropargs(XDR *xdrs, nfsdiropargs *objp); 199 #endif /* not HAVE_XDR_DIROPARGS */ 200 #ifndef HAVE_XDR_DIROPOKRES 201 bool_t xdr_diropokres(XDR *xdrs, nfsdiropokres *objp); 202 #endif /* not HAVE_XDR_DIROPOKRES */ 203 #ifndef HAVE_XDR_DIROPRES 204 bool_t xdr_diropres(XDR *xdrs, nfsdiropres *objp); 205 #endif /* not HAVE_XDR_DIROPRES */ 206 #ifndef HAVE_XDR_DIRPATH 207 bool_t xdr_dirpath(XDR *xdrs, dirpath *objp); 208 #endif /* not HAVE_XDR_DIRPATH */ 209 #ifndef HAVE_XDR_ENTRY 210 bool_t xdr_entry(XDR *xdrs, nfsentry *objp); 211 #endif /* not HAVE_XDR_ENTRY */ 212 #ifndef HAVE_XDR_EXPORTNODE 213 bool_t xdr_exportnode(XDR *xdrs, exportnode *objp); 214 #endif /* not HAVE_XDR_EXPORTNODE */ 215 #ifndef HAVE_XDR_EXPORTS 216 bool_t xdr_exports(XDR *xdrs, exports *objp); 217 #endif /* not HAVE_XDR_EXPORTS */ 218 #ifndef HAVE_XDR_FATTR 219 bool_t xdr_fattr(XDR *xdrs, nfsfattr *objp); 220 #endif /* not HAVE_XDR_FATTR */ 221 #ifndef HAVE_XDR_FHANDLE 222 bool_t xdr_fhandle(XDR *xdrs, fhandle objp); 223 #endif /* not HAVE_XDR_FHANDLE */ 224 #ifndef HAVE_XDR_FHSTATUS 225 bool_t xdr_fhstatus(XDR *xdrs, fhstatus *objp); 226 #endif /* not HAVE_XDR_FHSTATUS */ 227 #ifndef HAVE_XDR_FILENAME 228 bool_t xdr_filename(XDR *xdrs, filename *objp); 229 #endif /* not HAVE_XDR_FILENAME */ 230 #ifndef HAVE_XDR_FTYPE 231 bool_t xdr_ftype(XDR *xdrs, nfsftype *objp); 232 #endif /* not HAVE_XDR_FTYPE */ 233 #ifndef HAVE_XDR_GROUPNODE 234 bool_t xdr_groupnode(XDR *xdrs, groupnode *objp); 235 #endif /* not HAVE_XDR_GROUPNODE */ 236 #ifndef HAVE_XDR_GROUPS 237 bool_t xdr_groups(XDR *xdrs, groups *objp); 238 #endif /* not HAVE_XDR_GROUPS */ 239 #ifndef HAVE_XDR_LINKARGS 240 bool_t xdr_linkargs(XDR *xdrs, nfslinkargs *objp); 241 #endif /* not HAVE_XDR_LINKARGS */ 242 #ifndef HAVE_XDR_MOUNTBODY 243 bool_t xdr_mountbody(XDR *xdrs, mountbody *objp); 244 #endif /* not HAVE_XDR_MOUNTBODY */ 245 #ifndef HAVE_XDR_MOUNTLIST 246 bool_t xdr_mountlist(XDR *xdrs, mountlist *objp); 247 #endif /* not HAVE_XDR_MOUNTLIST */ 248 #ifndef HAVE_XDR_NAME 249 bool_t xdr_name(XDR *xdrs, name *objp); 250 #endif /* not HAVE_XDR_NAME */ 251 #ifndef HAVE_XDR_NFS_FH 252 bool_t xdr_nfs_fh(XDR *xdrs, am_nfs_fh *objp); 253 #endif /* not HAVE_XDR_NFS_FH */ 254 #ifndef HAVE_XDR_NFSCOOKIE 255 bool_t xdr_nfscookie(XDR *xdrs, nfscookie objp); 256 #endif /* not HAVE_XDR_NFSCOOKIE */ 257 #ifndef HAVE_XDR_NFSPATH 258 bool_t xdr_nfspath(XDR *xdrs, nfspath *objp); 259 #endif /* not HAVE_XDR_NFSPATH */ 260 #ifndef HAVE_XDR_NFSSTAT 261 bool_t xdr_nfsstat(XDR *xdrs, nfsstat *objp); 262 #endif /* not HAVE_XDR_NFSSTAT */ 263 #ifndef HAVE_XDR_NFSTIME 264 bool_t xdr_nfstime(XDR *xdrs, nfstime *objp); 265 #endif /* not HAVE_XDR_NFSTIME */ 266 #ifndef HAVE_XDR_POINTER 267 bool_t xdr_pointer(register XDR *xdrs, char **objpp, u_int obj_size, XDRPROC_T_TYPE xdr_obj); 268 #endif /* not HAVE_XDR_POINTER */ 269 #ifndef HAVE_XDR_READARGS 270 bool_t xdr_readargs(XDR *xdrs, nfsreadargs *objp); 271 #endif /* not HAVE_XDR_READARGS */ 272 #ifndef HAVE_XDR_READDIRARGS 273 bool_t xdr_readdirargs(XDR *xdrs, nfsreaddirargs *objp); 274 #endif /* not HAVE_XDR_READDIRARGS */ 275 #ifndef HAVE_XDR_READDIRRES 276 bool_t xdr_readdirres(XDR *xdrs, nfsreaddirres *objp); 277 #endif /* not HAVE_XDR_READDIRRES */ 278 #ifndef HAVE_XDR_READLINKRES 279 bool_t xdr_readlinkres(XDR *xdrs, nfsreadlinkres *objp); 280 #endif /* not HAVE_XDR_READLINKRES */ 281 #ifndef HAVE_XDR_READOKRES 282 bool_t xdr_readokres(XDR *xdrs, nfsreadokres *objp); 283 #endif /* not HAVE_XDR_READOKRES */ 284 #ifndef HAVE_XDR_READRES 285 bool_t xdr_readres(XDR *xdrs, nfsreadres *objp); 286 #endif /* not HAVE_XDR_READRES */ 287 #ifndef HAVE_XDR_RENAMEARGS 288 bool_t xdr_renameargs(XDR *xdrs, nfsrenameargs *objp); 289 #endif /* not HAVE_XDR_RENAMEARGS */ 290 #ifndef HAVE_XDR_SATTR 291 bool_t xdr_sattr(XDR *xdrs, nfssattr *objp); 292 #endif /* not HAVE_XDR_SATTR */ 293 #ifndef HAVE_XDR_SATTRARGS 294 bool_t xdr_sattrargs(XDR *xdrs, nfssattrargs *objp); 295 #endif /* not HAVE_XDR_SATTRARGS */ 296 #ifndef HAVE_XDR_STATFSOKRES 297 bool_t xdr_statfsokres(XDR *xdrs, nfsstatfsokres *objp); 298 #endif /* not HAVE_XDR_STATFSOKRES */ 299 #ifndef HAVE_XDR_STATFSRES 300 bool_t xdr_statfsres(XDR *xdrs, nfsstatfsres *objp); 301 #endif /* not HAVE_XDR_STATFSRES */ 302 #ifndef HAVE_XDR_SYMLINKARGS 303 bool_t xdr_symlinkargs(XDR *xdrs, nfssymlinkargs *objp); 304 #endif /* not HAVE_XDR_SYMLINKARGS */ 305 #ifndef HAVE_XDR_WRITEARGS 306 bool_t xdr_writeargs(XDR *xdrs, nfswriteargs *objp); 307 #endif /* not HAVE_XDR_WRITEARGS */ 308 309 /* 310 * NFS3 XDR FUNCTIONS: 311 */ 312 #ifdef HAVE_FS_NFS3 313 bool_t xdr_am_fhandle3(XDR *xdrs, am_fhandle3 *objp); 314 bool_t xdr_am_mountstat3(XDR *xdrs, am_mountstat3 *objp); 315 bool_t xdr_am_mountres3_ok(XDR *xdrs, am_mountres3_ok *objp); 316 bool_t xdr_am_mountres3(XDR *xdrs, am_mountres3 *objp); 317 bool_t xdr_am_diropargs3(XDR *xdrs, am_diropargs3 *objp); 318 bool_t xdr_am_filename3(XDR *xdrs, am_filename3 *objp); 319 bool_t xdr_am_LOOKUP3args(XDR *xdrs, am_LOOKUP3args *objp); 320 bool_t xdr_am_LOOKUP3res(XDR *xdrs, am_LOOKUP3res *objp); 321 bool_t xdr_am_LOOKUP3resfail(XDR *xdrs, am_LOOKUP3resfail *objp); 322 bool_t xdr_am_LOOKUP3resok(XDR *xdrs, am_LOOKUP3resok *objp); 323 bool_t xdr_am_nfsstat3(XDR *xdrs, am_nfsstat3 *objp); 324 bool_t xdr_am_nfs_fh3(XDR *xdrs, am_nfs_fh3 *objp); 325 #endif /* HAVE_FS_NFS3 */ 326 327 #endif /* not _AM_XDR_FUNC_H */ 328