nfs_prot.x
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:7k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC */
  2. /*
  3.  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  4.  * unrestricted use provided that this legend is included on all tape
  5.  * media and as a part of the software program in whole or part.  Users
  6.  * may copy or modify Sun RPC without charge, but are not authorized
  7.  * to license or distribute it to anyone else except as part of a product or
  8.  * program developed by the user.
  9.  *
  10.  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  11.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  12.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  13.  *
  14.  * Sun RPC is provided with no support and without any obligation on the
  15.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  16.  * modification or enhancement.
  17.  *
  18.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  19.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  20.  * OR ANY PART THEREOF.
  21.  *
  22.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  23.  * or profits or other special, indirect and consequential damages, even if
  24.  * Sun has been advised of the possibility of such damages.
  25.  *
  26.  * Sun Microsystems, Inc.
  27.  * 2550 Garcia Avenue
  28.  * Mountain View, California  94043
  29.  */
  30. /*
  31.  * nfs_prot.x 1.2 87/10/12
  32.  * Copyright 1987 Sun Microsystems, Inc.
  33.  */
  34. const NFS_PORT          = 2049;
  35. const NFS_MAXDATA       = 8192;
  36. const NFS_MAXPATHLEN    = 1024;
  37. const NFS_MAXNAMLEN = 255;
  38. const NFS_FHSIZE = 32;
  39. const NFS_COOKIESIZE = 4;
  40. const NFS_FIFO_DEV = -1; /* size kludge for named pipes */
  41. /*
  42.  * File types
  43.  */
  44. const NFSMODE_FMT  = 0170000; /* type of file */
  45. const NFSMODE_DIR  = 0040000; /* directory */
  46. const NFSMODE_CHR  = 0020000; /* character special */
  47. const NFSMODE_BLK  = 0060000; /* block special */
  48. const NFSMODE_REG  = 0100000; /* regular */
  49. const NFSMODE_LNK  = 0120000; /* symbolic link */
  50. const NFSMODE_SOCK = 0140000; /* socket */
  51. const NFSMODE_FIFO = 0010000; /* fifo */
  52. /*
  53.  * Error status
  54.  */
  55. enum nfsstat {
  56. NFS_OK= 0, /* no error */
  57. NFSERR_PERM=1, /* Not owner */
  58. NFSERR_NOENT=2, /* No such file or directory */
  59. NFSERR_IO=5, /* I/O error */
  60. NFSERR_NXIO=6, /* No such device or address */
  61. NFSERR_ACCES=13, /* Permission denied */
  62. NFSERR_EXIST=17, /* File exists */
  63. NFSERR_NODEV=19, /* No such device */
  64. NFSERR_NOTDIR=20, /* Not a directory*/
  65. NFSERR_ISDIR=21, /* Is a directory */
  66. NFSERR_FBIG=27, /* File too large */
  67. NFSERR_NOSPC=28, /* No space left on device */
  68. NFSERR_ROFS=30, /* Read-only file system */
  69. NFSERR_NAMETOOLONG=63, /* File name too long */
  70. NFSERR_NOTEMPTY=66, /* Directory not empty */
  71. NFSERR_DQUOT=69, /* Disc quota exceeded */
  72. NFSERR_STALE=70, /* Stale NFS file handle */
  73. NFSERR_WFLUSH=99 /* write cache flushed */
  74. };
  75. /*
  76.  * File types
  77.  */
  78. enum ftype {
  79. NFNON = 0, /* non-file */
  80. NFREG = 1, /* regular file */
  81. NFDIR = 2, /* directory */
  82. NFBLK = 3, /* block special */
  83. NFCHR = 4, /* character special */
  84. NFLNK = 5, /* symbolic link */
  85. NFSOCK = 6, /* unix domain sockets */
  86. NFBAD = 7, /* unused */
  87. NFFIFO = 8  /* named pipe */
  88. };
  89. /*
  90.  * File access handle
  91.  */
  92. struct nfs_fh {
  93. opaque data[NFS_FHSIZE];
  94. };
  95. /*
  96.  * Timeval
  97.  */
  98. struct nfstime {
  99. unsigned seconds;
  100. unsigned useconds;
  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; /* preferred 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.  * File attributes which can be set
  123.  */
  124. struct sattr {
  125. unsigned mode; /* protection mode bits */
  126. unsigned uid; /* owner user id */
  127. unsigned gid; /* owner group id */
  128. unsigned size; /* file size in bytes */
  129. nfstime atime; /* time of last access */
  130. nfstime mtime; /* time of last modification */
  131. };
  132. typedef string filename<NFS_MAXNAMLEN>;
  133. typedef string nfspath<NFS_MAXPATHLEN>;
  134. /*
  135.  * Reply status with file attributes
  136.  */
  137. union attrstat switch (nfsstat status) {
  138. case NFS_OK:
  139. fattr attributes;
  140. default:
  141. void;
  142. };
  143. struct sattrargs {
  144. nfs_fh file;
  145. sattr attributes;
  146. };
  147. /*
  148.  * Arguments for directory operations
  149.  */
  150. struct diropargs {
  151. nfs_fh dir; /* directory file handle */
  152. filename name; /* name (up to NFS_MAXNAMLEN bytes) */
  153. };
  154. struct diropokres {
  155. nfs_fh file;
  156. fattr attributes;
  157. };
  158. /*
  159.  * Results from directory operation
  160.  */
  161. union diropres switch (nfsstat status) {
  162. case NFS_OK:
  163. diropokres diropres;
  164. default:
  165. void;
  166. };
  167. union readlinkres switch (nfsstat status) {
  168. case NFS_OK:
  169. nfspath data;
  170. default:
  171. void;
  172. };
  173. /*
  174.  * Arguments to remote read
  175.  */
  176. struct readargs {
  177. nfs_fh file; /* handle for file */
  178. unsigned offset; /* byte offset in file */
  179. unsigned count; /* immediate read count */
  180. unsigned totalcount; /* total read count (from this offset)*/
  181. };
  182. /*
  183.  * Status OK portion of remote read reply
  184.  */
  185. struct readokres {
  186. fattr attributes; /* attributes, need for pagin*/
  187. opaque data<NFS_MAXDATA>;
  188. };
  189. union readres switch (nfsstat status) {
  190. case NFS_OK:
  191. readokres reply;
  192. default:
  193. void;
  194. };
  195. /*
  196.  * Arguments to remote write
  197.  */
  198. struct writeargs {
  199. nfs_fh file; /* handle for file */
  200. unsigned beginoffset; /* beginning byte offset in file */
  201. unsigned offset; /* current byte offset in file */
  202. unsigned totalcount; /* total write count (to this offset)*/
  203. opaque data<NFS_MAXDATA>;
  204. };
  205. struct createargs {
  206. diropargs where;
  207. sattr attributes;
  208. };
  209. struct renameargs {
  210. diropargs from;
  211. diropargs to;
  212. };
  213. struct linkargs {
  214. nfs_fh from;
  215. diropargs to;
  216. };
  217. struct symlinkargs {
  218. diropargs from;
  219. nfspath to;
  220. sattr attributes;
  221. };
  222. typedef opaque nfscookie[NFS_COOKIESIZE];
  223. /*
  224.  * Arguments to readdir
  225.  */
  226. struct readdirargs {
  227. nfs_fh dir; /* directory handle */
  228. nfscookie cookie;
  229. unsigned count; /* number of directory bytes to read */
  230. };
  231. struct entry {
  232. unsigned fileid;
  233. filename name;
  234. nfscookie cookie;
  235. entry *nextentry;
  236. };
  237. struct dirlist {
  238. entry *entries;
  239. bool eof;
  240. };
  241. union readdirres switch (nfsstat status) {
  242. case NFS_OK:
  243. dirlist reply;
  244. default:
  245. void;
  246. };
  247. struct statfsokres {
  248. unsigned tsize; /* preferred transfer size in bytes */
  249. unsigned bsize; /* fundamental file system block size */
  250. unsigned blocks; /* total blocks in file system */
  251. unsigned bfree; /* free blocks in fs */
  252. unsigned bavail; /* free blocks avail to non-superuser */
  253. };
  254. union statfsres switch (nfsstat status) {
  255. case NFS_OK:
  256. statfsokres reply;
  257. default:
  258. void;
  259. };
  260. /*
  261.  * Remote file service routines
  262.  */
  263. program NFS_PROGRAM {
  264. version NFS_VERSION {
  265. void
  266. NFSPROC_NULL(void) = 0;
  267. attrstat
  268. NFSPROC_GETATTR(nfs_fh) = 1;
  269. attrstat
  270. NFSPROC_SETATTR(sattrargs) = 2;
  271. void
  272. NFSPROC_ROOT(void) = 3;
  273. diropres
  274. NFSPROC_LOOKUP(diropargs) = 4;
  275. readlinkres
  276. NFSPROC_READLINK(nfs_fh) = 5;
  277. readres
  278. NFSPROC_READ(readargs) = 6;
  279. void
  280. NFSPROC_WRITECACHE(void) = 7;
  281. attrstat
  282. NFSPROC_WRITE(writeargs) = 8;
  283. diropres
  284. NFSPROC_CREATE(createargs) = 9;
  285. nfsstat
  286. NFSPROC_REMOVE(diropargs) = 10;
  287. nfsstat
  288. NFSPROC_RENAME(renameargs) = 11;
  289. nfsstat
  290. NFSPROC_LINK(linkargs) = 12;
  291. nfsstat
  292. NFSPROC_SYMLINK(symlinkargs) = 13;
  293. diropres
  294. NFSPROC_MKDIR(createargs) = 14;
  295. nfsstat
  296. NFSPROC_RMDIR(diropargs) = 15;
  297. readdirres
  298. NFSPROC_READDIR(readdirargs) = 16;
  299. statfsres
  300. NFSPROC_STATFS(nfs_fh) = 17;
  301. } = 2;
  302. } = 100003;