|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1990 Jan-Simon Pendry ! 3: * Copyright (c) 1990 Imperial College of Science, Technology & Medicine ! 4: * Copyright (c) 1990 The Regents of the University of California. ! 5: * 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: * Redistribution and use in source and binary forms are permitted provided ! 11: * that: (1) source distributions retain this entire copyright notice and ! 12: * comment, and (2) distributions including binaries display the following ! 13: * acknowledgement: ``This product includes software developed by the ! 14: * University of California, Berkeley and its contributors'' in the ! 15: * documentation or other materials provided with the distribution and in ! 16: * all advertising materials mentioning features or use of this software. ! 17: * Neither the name of the University nor the names of its contributors may ! 18: * be used to endorse or promote products derived from this software without ! 19: * specific prior written permission. ! 20: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 21: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 22: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 23: * ! 24: * @(#)nfs_prot.x 5.1 (Berkeley) 7/19/90 ! 25: */ ! 26: ! 27: const NFS_PORT = 2049; ! 28: const NFS_MAXDATA = 8192; ! 29: const NFS_MAXPATHLEN = 1024; ! 30: const NFS_MAXNAMLEN = 255; ! 31: const NFS_FHSIZE = 32; ! 32: const NFS_COOKIESIZE = 4; ! 33: const NFS_FIFO_DEV = -1; /* size kludge for named pipes */ ! 34: ! 35: /* ! 36: * File types ! 37: */ ! 38: const NFSMODE_FMT = 0170000; /* type of file */ ! 39: const NFSMODE_DIR = 0040000; /* directory */ ! 40: const NFSMODE_CHR = 0020000; /* character special */ ! 41: const NFSMODE_BLK = 0060000; /* block special */ ! 42: const NFSMODE_REG = 0100000; /* regular */ ! 43: const NFSMODE_LNK = 0120000; /* symbolic link */ ! 44: const NFSMODE_SOCK = 0140000; /* socket */ ! 45: const NFSMODE_FIFO = 0010000; /* fifo */ ! 46: ! 47: /* ! 48: * Error status ! 49: */ ! 50: enum nfsstat { ! 51: NFS_OK= 0, /* no error */ ! 52: NFSERR_PERM=1, /* Not owner */ ! 53: NFSERR_NOENT=2, /* No such file or directory */ ! 54: NFSERR_IO=5, /* I/O error */ ! 55: NFSERR_NXIO=6, /* No such device or address */ ! 56: NFSERR_ACCES=13, /* Permission denied */ ! 57: NFSERR_EXIST=17, /* File exists */ ! 58: NFSERR_NODEV=19, /* No such device */ ! 59: NFSERR_NOTDIR=20, /* Not a directory*/ ! 60: NFSERR_ISDIR=21, /* Is a directory */ ! 61: NFSERR_FBIG=27, /* File too large */ ! 62: NFSERR_NOSPC=28, /* No space left on device */ ! 63: NFSERR_ROFS=30, /* Read-only file system */ ! 64: NFSERR_NAMETOOLONG=63, /* File name too long */ ! 65: NFSERR_NOTEMPTY=66, /* Directory not empty */ ! 66: NFSERR_DQUOT=69, /* Disc quota exceeded */ ! 67: NFSERR_STALE=70, /* Stale NFS file handle */ ! 68: NFSERR_WFLUSH=99 /* write cache flushed */ ! 69: }; ! 70: ! 71: /* ! 72: * File types ! 73: */ ! 74: enum ftype { ! 75: NFNON = 0, /* non-file */ ! 76: NFREG = 1, /* regular file */ ! 77: NFDIR = 2, /* directory */ ! 78: NFBLK = 3, /* block special */ ! 79: NFCHR = 4, /* character special */ ! 80: NFLNK = 5, /* symbolic link */ ! 81: NFSOCK = 6, /* unix domain sockets */ ! 82: NFBAD = 7, /* unused */ ! 83: NFFIFO = 8 /* named pipe */ ! 84: }; ! 85: ! 86: /* ! 87: * File access handle ! 88: */ ! 89: struct nfs_fh { ! 90: opaque data[NFS_FHSIZE]; ! 91: }; ! 92: ! 93: /* ! 94: * Timeval ! 95: */ ! 96: struct nfstime { ! 97: unsigned seconds; ! 98: unsigned useconds; ! 99: }; ! 100: ! 101: ! 102: /* ! 103: * File attributes ! 104: */ ! 105: struct fattr { ! 106: ftype type; /* file type */ ! 107: unsigned mode; /* protection mode bits */ ! 108: unsigned nlink; /* # hard links */ ! 109: unsigned uid; /* owner user id */ ! 110: unsigned gid; /* owner group id */ ! 111: unsigned size; /* file size in bytes */ ! 112: unsigned blocksize; /* prefered block size */ ! 113: unsigned rdev; /* special device # */ ! 114: unsigned blocks; /* Kb of disk used by file */ ! 115: unsigned fsid; /* device # */ ! 116: unsigned fileid; /* inode # */ ! 117: nfstime atime; /* time of last access */ ! 118: nfstime mtime; /* time of last modification */ ! 119: nfstime ctime; /* time of last change */ ! 120: }; ! 121: ! 122: /* ! 123: * File attributes which can be set ! 124: */ ! 125: struct sattr { ! 126: unsigned mode; /* protection mode bits */ ! 127: unsigned uid; /* owner user id */ ! 128: unsigned gid; /* owner group id */ ! 129: unsigned size; /* file size in bytes */ ! 130: nfstime atime; /* time of last access */ ! 131: nfstime mtime; /* time of last modification */ ! 132: }; ! 133: ! 134: ! 135: typedef string filename<NFS_MAXNAMLEN>; ! 136: typedef string nfspath<NFS_MAXPATHLEN>; ! 137: ! 138: /* ! 139: * Reply status with file attributes ! 140: */ ! 141: union attrstat switch (nfsstat status) { ! 142: case NFS_OK: ! 143: fattr attributes; ! 144: default: ! 145: void; ! 146: }; ! 147: ! 148: struct sattrargs { ! 149: nfs_fh file; ! 150: sattr attributes; ! 151: }; ! 152: ! 153: /* ! 154: * Arguments for directory operations ! 155: */ ! 156: struct diropargs { ! 157: nfs_fh dir; /* directory file handle */ ! 158: filename name; /* name (up to NFS_MAXNAMLEN bytes) */ ! 159: }; ! 160: ! 161: struct diropokres { ! 162: nfs_fh file; ! 163: fattr attributes; ! 164: }; ! 165: ! 166: /* ! 167: * Results from directory operation ! 168: */ ! 169: union diropres switch (nfsstat status) { ! 170: case NFS_OK: ! 171: diropokres diropres; ! 172: default: ! 173: void; ! 174: }; ! 175: ! 176: union readlinkres switch (nfsstat status) { ! 177: case NFS_OK: ! 178: nfspath data; ! 179: default: ! 180: void; ! 181: }; ! 182: ! 183: /* ! 184: * Arguments to remote read ! 185: */ ! 186: struct readargs { ! 187: nfs_fh file; /* handle for file */ ! 188: unsigned offset; /* byte offset in file */ ! 189: unsigned count; /* immediate read count */ ! 190: unsigned totalcount; /* total read count (from this offset)*/ ! 191: }; ! 192: ! 193: /* ! 194: * Status OK portion of remote read reply ! 195: */ ! 196: struct readokres { ! 197: fattr attributes; /* attributes, need for pagin*/ ! 198: opaque data<NFS_MAXDATA>; ! 199: }; ! 200: ! 201: union readres switch (nfsstat status) { ! 202: case NFS_OK: ! 203: readokres reply; ! 204: default: ! 205: void; ! 206: }; ! 207: ! 208: /* ! 209: * Arguments to remote write ! 210: */ ! 211: struct writeargs { ! 212: nfs_fh file; /* handle for file */ ! 213: unsigned beginoffset; /* beginning byte offset in file */ ! 214: unsigned offset; /* current byte offset in file */ ! 215: unsigned totalcount; /* total write count (to this offset)*/ ! 216: opaque data<NFS_MAXDATA>; ! 217: }; ! 218: ! 219: struct createargs { ! 220: diropargs where; ! 221: sattr attributes; ! 222: }; ! 223: ! 224: struct renameargs { ! 225: diropargs from; ! 226: diropargs to; ! 227: }; ! 228: ! 229: struct linkargs { ! 230: nfs_fh from; ! 231: diropargs to; ! 232: }; ! 233: ! 234: struct symlinkargs { ! 235: diropargs from; ! 236: nfspath to; ! 237: sattr attributes; ! 238: }; ! 239: ! 240: ! 241: typedef opaque nfscookie[NFS_COOKIESIZE]; ! 242: ! 243: /* ! 244: * Arguments to readdir ! 245: */ ! 246: struct readdirargs { ! 247: nfs_fh dir; /* directory handle */ ! 248: nfscookie cookie; ! 249: unsigned count; /* number of directory bytes to read */ ! 250: }; ! 251: ! 252: struct entry { ! 253: unsigned fileid; ! 254: filename name; ! 255: nfscookie cookie; ! 256: entry *nextentry; ! 257: }; ! 258: ! 259: struct dirlist { ! 260: entry *entries; ! 261: bool eof; ! 262: }; ! 263: ! 264: union readdirres switch (nfsstat status) { ! 265: case NFS_OK: ! 266: dirlist reply; ! 267: default: ! 268: void; ! 269: }; ! 270: ! 271: struct statfsokres { ! 272: unsigned tsize; /* preferred transfer size in bytes */ ! 273: unsigned bsize; /* fundamental file system block size */ ! 274: unsigned blocks; /* total blocks in file system */ ! 275: unsigned bfree; /* free blocks in fs */ ! 276: unsigned bavail; /* free blocks avail to non-superuser */ ! 277: }; ! 278: ! 279: union statfsres switch (nfsstat status) { ! 280: case NFS_OK: ! 281: statfsokres reply; ! 282: default: ! 283: void; ! 284: }; ! 285: ! 286: /* ! 287: * Remote file service routines ! 288: */ ! 289: program NFS_PROGRAM { ! 290: version NFS_VERSION { ! 291: void ! 292: NFSPROC_NULL(void) = 0; ! 293: ! 294: attrstat ! 295: NFSPROC_GETATTR(nfs_fh) = 1; ! 296: ! 297: attrstat ! 298: NFSPROC_SETATTR(sattrargs) = 2; ! 299: ! 300: void ! 301: NFSPROC_ROOT(void) = 3; ! 302: ! 303: diropres ! 304: NFSPROC_LOOKUP(diropargs) = 4; ! 305: ! 306: readlinkres ! 307: NFSPROC_READLINK(nfs_fh) = 5; ! 308: ! 309: readres ! 310: NFSPROC_READ(readargs) = 6; ! 311: ! 312: void ! 313: NFSPROC_WRITECACHE(void) = 7; ! 314: ! 315: attrstat ! 316: NFSPROC_WRITE(writeargs) = 8; ! 317: ! 318: diropres ! 319: NFSPROC_CREATE(createargs) = 9; ! 320: ! 321: nfsstat ! 322: NFSPROC_REMOVE(diropargs) = 10; ! 323: ! 324: nfsstat ! 325: NFSPROC_RENAME(renameargs) = 11; ! 326: ! 327: nfsstat ! 328: NFSPROC_LINK(linkargs) = 12; ! 329: ! 330: nfsstat ! 331: NFSPROC_SYMLINK(symlinkargs) = 13; ! 332: ! 333: diropres ! 334: NFSPROC_MKDIR(createargs) = 14; ! 335: ! 336: nfsstat ! 337: NFSPROC_RMDIR(diropargs) = 15; ! 338: ! 339: readdirres ! 340: NFSPROC_READDIR(readdirargs) = 16; ! 341: ! 342: statfsres ! 343: NFSPROC_STATFS(nfs_fh) = 17; ! 344: } = 2; ! 345: } = 100003;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.