home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / amd / part05 / nfs_prot.x < prev   
Text File  |  1990-04-10  |  6KB  |  325 lines

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