1 /* 2 * Copyright (c) 1990 Jan-Simon Pendry 3 * Copyright (c) 1990 Imperial College of Science, Technology & Medicine 4 * Copyright (c) 1990, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Jan-Simon Pendry at Imperial College, London. 9 * 10 * %sccs.include.redist.c% 11 * 12 * @(#)nfs_prot.h 8.1 (Berkeley) 06/06/93 13 * 14 * $Id: nfs_prot.h,v 5.2.2.1 1992/02/09 15:09:29 jsp beta $ 15 * 16 */ 17 18 #define xdr_nfsstat xdr_enum 19 #define xdr_ftype xdr_enum 20 21 #define NFS_PORT 2049 22 #define NFS_MAXDATA 8192 23 #define NFS_MAXPATHLEN 1024 24 #define NFS_MAXNAMLEN 255 25 #define NFS_FHSIZE 32 26 #define NFS_COOKIESIZE 4 27 #define NFS_FIFO_DEV -1 28 #define NFSMODE_FMT 0170000 29 #define NFSMODE_DIR 0040000 30 #define NFSMODE_CHR 0020000 31 #define NFSMODE_BLK 0060000 32 #define NFSMODE_REG 0100000 33 #define NFSMODE_LNK 0120000 34 #define NFSMODE_SOCK 0140000 35 #define NFSMODE_FIFO 0010000 36 37 enum nfsstat { 38 NFS_OK = 0, 39 NFSERR_PERM = 1, 40 NFSERR_NOENT = 2, 41 NFSERR_IO = 5, 42 NFSERR_NXIO = 6, 43 NFSERR_ACCES = 13, 44 NFSERR_EXIST = 17, 45 NFSERR_NODEV = 19, 46 NFSERR_NOTDIR = 20, 47 NFSERR_ISDIR = 21, 48 NFSERR_FBIG = 27, 49 NFSERR_NOSPC = 28, 50 NFSERR_ROFS = 30, 51 NFSERR_NAMETOOLONG = 63, 52 NFSERR_NOTEMPTY = 66, 53 NFSERR_DQUOT = 69, 54 NFSERR_STALE = 70, 55 NFSERR_WFLUSH = 99 56 }; 57 typedef enum nfsstat nfsstat; 58 bool_t xdr_nfsstat(); 59 60 61 enum ftype { 62 NFNON = 0, 63 NFREG = 1, 64 NFDIR = 2, 65 NFBLK = 3, 66 NFCHR = 4, 67 NFLNK = 5, 68 NFSOCK = 6, 69 NFBAD = 7, 70 NFFIFO = 8 71 }; 72 typedef enum ftype ftype; 73 /* static bool_t xdr_ftype(); */ 74 75 76 struct nfs_fh { 77 char data[NFS_FHSIZE]; 78 }; 79 typedef struct nfs_fh nfs_fh; 80 bool_t xdr_nfs_fh(); 81 82 83 struct nfstime { 84 u_int seconds; 85 u_int useconds; 86 }; 87 typedef struct nfstime nfstime; 88 /* static bool_t xdr_nfstime(); */ 89 90 91 struct fattr { 92 ftype type; 93 u_int mode; 94 u_int nlink; 95 u_int uid; 96 u_int gid; 97 u_int size; 98 u_int blocksize; 99 u_int rdev; 100 u_int blocks; 101 u_int fsid; 102 u_int fileid; 103 nfstime atime; 104 nfstime mtime; 105 nfstime ctime; 106 }; 107 typedef struct fattr fattr; 108 /* static bool_t xdr_fattr(); */ 109 110 111 struct sattr { 112 u_int mode; 113 u_int uid; 114 u_int gid; 115 u_int size; 116 nfstime atime; 117 nfstime mtime; 118 }; 119 typedef struct sattr sattr; 120 /* static bool_t xdr_sattr(); */ 121 122 123 typedef char *filename; 124 /* static bool_t xdr_filename(); */ 125 126 127 typedef char *nfspath; 128 bool_t xdr_nfspath(); 129 130 131 struct attrstat { 132 nfsstat status; 133 union { 134 fattr attributes; 135 } attrstat_u; 136 }; 137 typedef struct attrstat attrstat; 138 bool_t xdr_attrstat(); 139 140 141 struct sattrargs { 142 nfs_fh file; 143 sattr attributes; 144 }; 145 typedef struct sattrargs sattrargs; 146 bool_t xdr_sattrargs(); 147 148 149 struct diropargs { 150 nfs_fh dir; 151 filename name; 152 }; 153 typedef struct diropargs diropargs; 154 bool_t xdr_diropargs(); 155 156 157 struct diropokres { 158 nfs_fh file; 159 fattr attributes; 160 }; 161 typedef struct diropokres diropokres; 162 bool_t xdr_diropokres(); 163 164 165 struct diropres { 166 nfsstat status; 167 union { 168 diropokres diropres; 169 } diropres_u; 170 }; 171 typedef struct diropres diropres; 172 bool_t xdr_diropres(); 173 174 175 struct readlinkres { 176 nfsstat status; 177 union { 178 nfspath data; 179 } readlinkres_u; 180 }; 181 typedef struct readlinkres readlinkres; 182 bool_t xdr_readlinkres(); 183 184 185 struct readargs { 186 nfs_fh file; 187 u_int offset; 188 u_int count; 189 u_int totalcount; 190 }; 191 typedef struct readargs readargs; 192 bool_t xdr_readargs(); 193 194 195 struct readokres { 196 fattr attributes; 197 struct { 198 u_int data_len; 199 char *data_val; 200 } data; 201 }; 202 typedef struct readokres readokres; 203 bool_t xdr_readokres(); 204 205 206 struct readres { 207 nfsstat status; 208 union { 209 readokres reply; 210 } readres_u; 211 }; 212 typedef struct readres readres; 213 bool_t xdr_readres(); 214 215 216 struct writeargs { 217 nfs_fh file; 218 u_int beginoffset; 219 u_int offset; 220 u_int totalcount; 221 struct { 222 u_int data_len; 223 char *data_val; 224 } data; 225 }; 226 typedef struct writeargs writeargs; 227 bool_t xdr_writeargs(); 228 229 230 struct createargs { 231 diropargs where; 232 sattr attributes; 233 }; 234 typedef struct createargs createargs; 235 bool_t xdr_createargs(); 236 237 238 struct renameargs { 239 diropargs from; 240 diropargs to; 241 }; 242 typedef struct renameargs renameargs; 243 bool_t xdr_renameargs(); 244 245 246 struct linkargs { 247 nfs_fh from; 248 diropargs to; 249 }; 250 typedef struct linkargs linkargs; 251 bool_t xdr_linkargs(); 252 253 254 struct symlinkargs { 255 diropargs from; 256 nfspath to; 257 sattr attributes; 258 }; 259 typedef struct symlinkargs symlinkargs; 260 bool_t xdr_symlinkargs(); 261 262 263 typedef char nfscookie[NFS_COOKIESIZE]; 264 /* static bool_t xdr_nfscookie(); */ 265 266 267 struct readdirargs { 268 nfs_fh dir; 269 nfscookie cookie; 270 u_int count; 271 }; 272 typedef struct readdirargs readdirargs; 273 bool_t xdr_readdirargs(); 274 275 276 struct entry { 277 u_int fileid; 278 filename name; 279 nfscookie cookie; 280 struct entry *nextentry; 281 }; 282 typedef struct entry entry; 283 /* static bool_t xdr_entry(); */ 284 285 286 struct dirlist { 287 entry *entries; 288 bool_t eof; 289 }; 290 typedef struct dirlist dirlist; 291 /* static bool_t xdr_dirlist(); */ 292 293 294 struct readdirres { 295 nfsstat status; 296 union { 297 dirlist reply; 298 } readdirres_u; 299 }; 300 typedef struct readdirres readdirres; 301 bool_t xdr_readdirres(); 302 303 304 struct statfsokres { 305 u_int tsize; 306 u_int bsize; 307 u_int blocks; 308 u_int bfree; 309 u_int bavail; 310 }; 311 typedef struct statfsokres statfsokres; 312 bool_t xdr_statfsokres(); 313 314 315 struct statfsres { 316 nfsstat status; 317 union { 318 statfsokres reply; 319 } statfsres_u; 320 }; 321 typedef struct statfsres statfsres; 322 bool_t xdr_statfsres(); 323 324 325 #define NFS_PROGRAM ((u_long)100003) 326 #define NFS_VERSION ((u_long)2) 327 #define NFSPROC_NULL ((u_long)0) 328 extern voidp nfsproc_null_2(); 329 #define NFSPROC_GETATTR ((u_long)1) 330 extern attrstat *nfsproc_getattr_2(); 331 #define NFSPROC_SETATTR ((u_long)2) 332 extern attrstat *nfsproc_setattr_2(); 333 #define NFSPROC_ROOT ((u_long)3) 334 extern voidp nfsproc_root_2(); 335 #define NFSPROC_LOOKUP ((u_long)4) 336 extern diropres *nfsproc_lookup_2(); 337 #define NFSPROC_READLINK ((u_long)5) 338 extern readlinkres *nfsproc_readlink_2(); 339 #define NFSPROC_READ ((u_long)6) 340 extern readres *nfsproc_read_2(); 341 #define NFSPROC_WRITECACHE ((u_long)7) 342 extern voidp nfsproc_writecache_2(); 343 #define NFSPROC_WRITE ((u_long)8) 344 extern attrstat *nfsproc_write_2(); 345 #define NFSPROC_CREATE ((u_long)9) 346 extern diropres *nfsproc_create_2(); 347 #define NFSPROC_REMOVE ((u_long)10) 348 extern nfsstat *nfsproc_remove_2(); 349 #define NFSPROC_RENAME ((u_long)11) 350 extern nfsstat *nfsproc_rename_2(); 351 #define NFSPROC_LINK ((u_long)12) 352 extern nfsstat *nfsproc_link_2(); 353 #define NFSPROC_SYMLINK ((u_long)13) 354 extern nfsstat *nfsproc_symlink_2(); 355 #define NFSPROC_MKDIR ((u_long)14) 356 extern diropres *nfsproc_mkdir_2(); 357 #define NFSPROC_RMDIR ((u_long)15) 358 extern nfsstat *nfsproc_rmdir_2(); 359 #define NFSPROC_READDIR ((u_long)16) 360 extern readdirres *nfsproc_readdir_2(); 361 #define NFSPROC_STATFS ((u_long)17) 362 extern statfsres *nfsproc_statfs_2(); 363 364