nfs.x 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. %/* This file is copied from RFC1813
  2. % * Copyright 1995 Sun Micrososystems (I assume)
  3. % */
  4. const NFS3_FHSIZE = 64;
  5. const NFS3_COOKIEVERFSIZE = 8;
  6. const NFS3_CREATEVERFSIZE = 8;
  7. const NFS3_WRITEVERFSIZE = 8;
  8. const ACCESS3_READ = 0x0001;
  9. const ACCESS3_LOOKUP = 0x0002;
  10. const ACCESS3_MODIFY = 0x0004;
  11. const ACCESS3_EXTEND = 0x0008;
  12. const ACCESS3_DELETE = 0x0010;
  13. const ACCESS3_EXECUTE = 0x0020;
  14. const FSF3_LINK = 0x0001;
  15. const FSF3_SYMLINK = 0x0002;
  16. const FSF3_HOMOGENEOUS = 0x0008;
  17. const FSF3_CANSETTIME = 0x0010;
  18. typedef unsigned hyper uint64;
  19. typedef hyper int64;
  20. typedef unsigned long uint32;
  21. typedef long int32;
  22. typedef string filename3<>;
  23. typedef string nfspath3<>;
  24. typedef uint64 fileid3;
  25. typedef uint64 cookie3;
  26. typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
  27. typedef opaque createverf3[NFS3_CREATEVERFSIZE];
  28. typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
  29. typedef uint32 uid3;
  30. typedef uint32 gid3;
  31. typedef uint64 size3;
  32. typedef uint64 offset3;
  33. typedef uint32 mode3;
  34. typedef uint32 count3;
  35. enum nfsstat3 {
  36. NFS3_OK = 0,
  37. NFS3ERR_PERM = 1,
  38. NFS3ERR_NOENT = 2,
  39. NFS3ERR_IO = 5,
  40. NFS3ERR_NXIO = 6,
  41. NFS3ERR_ACCES = 13,
  42. NFS3ERR_EXIST = 17,
  43. NFS3ERR_XDEV = 18,
  44. NFS3ERR_NODEV = 19,
  45. NFS3ERR_NOTDIR = 20,
  46. NFS3ERR_ISDIR = 21,
  47. NFS3ERR_INVAL = 22,
  48. NFS3ERR_FBIG = 27,
  49. NFS3ERR_NOSPC = 28,
  50. NFS3ERR_ROFS = 30,
  51. NFS3ERR_MLINK = 31,
  52. NFS3ERR_NAMETOOLONG = 63,
  53. NFS3ERR_NOTEMPTY = 66,
  54. NFS3ERR_DQUOT = 69,
  55. NFS3ERR_STALE = 70,
  56. NFS3ERR_REMOTE = 71,
  57. NFS3ERR_BADHANDLE = 10001,
  58. NFS3ERR_NOT_SYNC = 10002,
  59. NFS3ERR_BAD_COOKIE = 10003,
  60. NFS3ERR_NOTSUPP = 10004,
  61. NFS3ERR_TOOSMALL = 10005,
  62. NFS3ERR_SERVERFAULT = 10006,
  63. NFS3ERR_BADTYPE = 10007,
  64. NFS3ERR_JUKEBOX = 10008
  65. };
  66. enum ftype3 {
  67. NFS3REG = 1,
  68. NFS3DIR = 2,
  69. NFS3BLK = 3,
  70. NFS3CHR = 4,
  71. NFS3LNK = 5,
  72. NFS3SOCK = 6,
  73. NFS3FIFO = 7
  74. };
  75. enum stable_how {
  76. UNSTABLE = 0,
  77. DATA_SYNC = 1,
  78. FILE_SYNC = 2
  79. };
  80. enum createmode3 {
  81. UNCHECKED = 0,
  82. GUARDED = 1,
  83. EXCLUSIVE = 2
  84. };
  85. struct specdata3 {
  86. uint32 specdata1;
  87. uint32 specdata2;
  88. };
  89. struct nfs_fh3 {
  90. opaque data<NFS3_FHSIZE>;
  91. };
  92. struct nfstime3 {
  93. uint32 seconds;
  94. uint32 nseconds;
  95. };
  96. struct fattr3 {
  97. ftype3 type;
  98. mode3 mode;
  99. uint32 nlink;
  100. uid3 uid;
  101. gid3 gid;
  102. size3 size;
  103. size3 used;
  104. specdata3 rdev;
  105. uint64 fsid;
  106. fileid3 fileid;
  107. nfstime3 atime;
  108. nfstime3 mtime;
  109. nfstime3 ctime;
  110. };
  111. union post_op_attr switch (bool attributes_follow) {
  112. case TRUE:
  113. fattr3 attributes;
  114. case FALSE:
  115. void;
  116. };
  117. struct wcc_attr {
  118. size3 size;
  119. nfstime3 mtime;
  120. nfstime3 ctime;
  121. };
  122. union pre_op_attr switch (bool attributes_follow) {
  123. case TRUE:
  124. wcc_attr attributes;
  125. case FALSE:
  126. void;
  127. };
  128. struct wcc_data {
  129. pre_op_attr before;
  130. post_op_attr after;
  131. };
  132. union post_op_fh3 switch (bool handle_follows) {
  133. case TRUE:
  134. nfs_fh3 handle;
  135. case FALSE:
  136. void;
  137. };
  138. enum time_how {
  139. DONT_CHANGE = 0,
  140. SET_TO_SERVER_TIME = 1,
  141. SET_TO_CLIENT_TIME = 2
  142. };
  143. union set_mode3 switch (bool set_it) {
  144. case TRUE:
  145. mode3 mode;
  146. default:
  147. void;
  148. };
  149. union set_uid3 switch (bool set_it) {
  150. case TRUE:
  151. uid3 uid;
  152. default:
  153. void;
  154. };
  155. union set_gid3 switch (bool set_it) {
  156. case TRUE:
  157. gid3 gid;
  158. default:
  159. void;
  160. };
  161. union set_size3 switch (bool set_it) {
  162. case TRUE:
  163. size3 size;
  164. default:
  165. void;
  166. };
  167. union set_atime switch (time_how set_it) {
  168. case SET_TO_CLIENT_TIME:
  169. nfstime3 atime;
  170. default:
  171. void;
  172. };
  173. union set_mtime switch (time_how set_it) {
  174. case SET_TO_CLIENT_TIME:
  175. nfstime3 mtime;
  176. default:
  177. void;
  178. };
  179. struct sattr3 {
  180. set_mode3 mode;
  181. set_uid3 uid;
  182. set_gid3 gid;
  183. set_size3 size;
  184. set_atime atime;
  185. set_mtime mtime;
  186. };
  187. struct diropargs3 {
  188. nfs_fh3 dir;
  189. filename3 name;
  190. };
  191. struct GETATTR3args {
  192. nfs_fh3 object;
  193. };
  194. struct GETATTR3resok {
  195. fattr3 obj_attributes;
  196. };
  197. union GETATTR3res switch (nfsstat3 status) {
  198. case NFS3_OK:
  199. GETATTR3resok resok;
  200. default:
  201. void;
  202. };
  203. union sattrguard3 switch (bool check) {
  204. case TRUE:
  205. nfstime3 obj_ctime;
  206. case FALSE:
  207. void;
  208. };
  209. struct SETATTR3args {
  210. nfs_fh3 object;
  211. sattr3 new_attributes;
  212. sattrguard3 guard;
  213. };
  214. struct SETATTR3resok {
  215. wcc_data obj_wcc;
  216. };
  217. struct SETATTR3resfail {
  218. wcc_data obj_wcc;
  219. };
  220. union SETATTR3res switch (nfsstat3 status) {
  221. case NFS3_OK:
  222. SETATTR3resok resok;
  223. default:
  224. SETATTR3resfail resfail;
  225. };
  226. struct LOOKUP3args {
  227. diropargs3 what;
  228. };
  229. struct LOOKUP3resok {
  230. nfs_fh3 object;
  231. post_op_attr obj_attributes;
  232. post_op_attr dir_attributes;
  233. };
  234. struct LOOKUP3resfail {
  235. post_op_attr dir_attributes;
  236. };
  237. union LOOKUP3res switch (nfsstat3 status) {
  238. case NFS3_OK:
  239. LOOKUP3resok resok;
  240. default:
  241. LOOKUP3resfail resfail;
  242. };
  243. struct ACCESS3args {
  244. nfs_fh3 object;
  245. uint32 access;
  246. };
  247. struct ACCESS3resok {
  248. post_op_attr obj_attributes;
  249. uint32 access;
  250. };
  251. struct ACCESS3resfail {
  252. post_op_attr obj_attributes;
  253. };
  254. union ACCESS3res switch (nfsstat3 status) {
  255. case NFS3_OK:
  256. ACCESS3resok resok;
  257. default:
  258. ACCESS3resfail resfail;
  259. };
  260. struct READLINK3args {
  261. nfs_fh3 symlink;
  262. };
  263. struct READLINK3resok {
  264. post_op_attr symlink_attributes;
  265. nfspath3 data;
  266. };
  267. struct READLINK3resfail {
  268. post_op_attr symlink_attributes;
  269. };
  270. union READLINK3res switch (nfsstat3 status) {
  271. case NFS3_OK:
  272. READLINK3resok resok;
  273. default:
  274. READLINK3resfail resfail;
  275. };
  276. struct READ3args {
  277. nfs_fh3 file;
  278. offset3 offset;
  279. count3 count;
  280. };
  281. struct READ3resok {
  282. post_op_attr file_attributes;
  283. count3 count;
  284. bool eof;
  285. opaque data<>;
  286. };
  287. struct READ3resfail {
  288. post_op_attr file_attributes;
  289. };
  290. union READ3res switch (nfsstat3 status) {
  291. case NFS3_OK:
  292. READ3resok resok;
  293. default:
  294. READ3resfail resfail;
  295. };
  296. struct WRITE3args {
  297. nfs_fh3 file;
  298. offset3 offset;
  299. count3 count;
  300. stable_how stable;
  301. opaque data<>;
  302. };
  303. struct WRITE3resok {
  304. wcc_data file_wcc;
  305. count3 count;
  306. stable_how committed;
  307. writeverf3 verf;
  308. };
  309. struct WRITE3resfail {
  310. wcc_data file_wcc;
  311. };
  312. union WRITE3res switch (nfsstat3 status) {
  313. case NFS3_OK:
  314. WRITE3resok resok;
  315. default:
  316. WRITE3resfail resfail;
  317. };
  318. union createhow3 switch (createmode3 mode) {
  319. case UNCHECKED:
  320. case GUARDED:
  321. sattr3 obj_attributes;
  322. case EXCLUSIVE:
  323. createverf3 verf;
  324. };
  325. struct CREATE3args {
  326. diropargs3 where;
  327. createhow3 how;
  328. };
  329. struct CREATE3resok {
  330. post_op_fh3 obj;
  331. post_op_attr obj_attributes;
  332. wcc_data dir_wcc;
  333. };
  334. struct CREATE3resfail {
  335. wcc_data dir_wcc;
  336. };
  337. union CREATE3res switch (nfsstat3 status) {
  338. case NFS3_OK:
  339. CREATE3resok resok;
  340. default:
  341. CREATE3resfail resfail;
  342. };
  343. struct MKDIR3args {
  344. diropargs3 where;
  345. sattr3 attributes;
  346. };
  347. struct MKDIR3resok {
  348. post_op_fh3 obj;
  349. post_op_attr obj_attributes;
  350. wcc_data dir_wcc;
  351. };
  352. struct MKDIR3resfail {
  353. wcc_data dir_wcc;
  354. };
  355. union MKDIR3res switch (nfsstat3 status) {
  356. case NFS3_OK:
  357. MKDIR3resok resok;
  358. default:
  359. MKDIR3resfail resfail;
  360. };
  361. struct symlinkdata3 {
  362. sattr3 symlink_attributes;
  363. nfspath3 symlink_data;
  364. };
  365. struct SYMLINK3args {
  366. diropargs3 where;
  367. symlinkdata3 symlink;
  368. };
  369. struct SYMLINK3resok {
  370. post_op_fh3 obj;
  371. post_op_attr obj_attributes;
  372. wcc_data dir_wcc;
  373. };
  374. struct SYMLINK3resfail {
  375. wcc_data dir_wcc;
  376. };
  377. union SYMLINK3res switch (nfsstat3 status) {
  378. case NFS3_OK:
  379. SYMLINK3resok resok;
  380. default:
  381. SYMLINK3resfail resfail;
  382. };
  383. struct devicedata3 {
  384. sattr3 dev_attributes;
  385. specdata3 spec;
  386. };
  387. union mknoddata3 switch (ftype3 type) {
  388. case NFS3CHR:
  389. case NFS3BLK:
  390. devicedata3 device;
  391. case NFS3SOCK:
  392. case NFS3FIFO:
  393. sattr3 pipe_attributes;
  394. default:
  395. void;
  396. };
  397. struct MKNOD3args {
  398. diropargs3 where;
  399. mknoddata3 what;
  400. };
  401. struct MKNOD3resok {
  402. post_op_fh3 obj;
  403. post_op_attr obj_attributes;
  404. wcc_data dir_wcc;
  405. };
  406. struct MKNOD3resfail {
  407. wcc_data dir_wcc;
  408. };
  409. union MKNOD3res switch (nfsstat3 status) {
  410. case NFS3_OK:
  411. MKNOD3resok resok;
  412. default:
  413. MKNOD3resfail resfail;
  414. };
  415. struct REMOVE3args {
  416. diropargs3 object;
  417. };
  418. struct REMOVE3resok {
  419. wcc_data dir_wcc;
  420. };
  421. struct REMOVE3resfail {
  422. wcc_data dir_wcc;
  423. };
  424. union REMOVE3res switch (nfsstat3 status) {
  425. case NFS3_OK:
  426. REMOVE3resok resok;
  427. default:
  428. REMOVE3resfail resfail;
  429. };
  430. struct RMDIR3args {
  431. diropargs3 object;
  432. };
  433. struct RMDIR3resok {
  434. wcc_data dir_wcc;
  435. };
  436. struct RMDIR3resfail {
  437. wcc_data dir_wcc;
  438. };
  439. union RMDIR3res switch (nfsstat3 status) {
  440. case NFS3_OK:
  441. RMDIR3resok resok;
  442. default:
  443. RMDIR3resfail resfail;
  444. };
  445. struct RENAME3args {
  446. diropargs3 from;
  447. diropargs3 to;
  448. };
  449. struct RENAME3resok {
  450. wcc_data fromdir_wcc;
  451. wcc_data todir_wcc;
  452. };
  453. struct RENAME3resfail {
  454. wcc_data fromdir_wcc;
  455. wcc_data todir_wcc;
  456. };
  457. union RENAME3res switch (nfsstat3 status) {
  458. case NFS3_OK:
  459. RENAME3resok resok;
  460. default:
  461. RENAME3resfail resfail;
  462. };
  463. struct LINK3args {
  464. nfs_fh3 file;
  465. diropargs3 link;
  466. };
  467. struct LINK3resok {
  468. post_op_attr file_attributes;
  469. wcc_data linkdir_wcc;
  470. };
  471. struct LINK3resfail {
  472. post_op_attr file_attributes;
  473. wcc_data linkdir_wcc;
  474. };
  475. union LINK3res switch (nfsstat3 status) {
  476. case NFS3_OK:
  477. LINK3resok resok;
  478. default:
  479. LINK3resfail resfail;
  480. };
  481. struct READDIR3args {
  482. nfs_fh3 dir;
  483. cookie3 cookie;
  484. cookieverf3 cookieverf;
  485. count3 count;
  486. };
  487. struct entry3 {
  488. fileid3 fileid;
  489. filename3 name;
  490. cookie3 cookie;
  491. entry3 *nextentry;
  492. };
  493. struct dirlist3 {
  494. entry3 *entries;
  495. bool eof;
  496. };
  497. struct READDIR3resok {
  498. post_op_attr dir_attributes;
  499. cookieverf3 cookieverf;
  500. dirlist3 reply;
  501. };
  502. struct READDIR3resfail {
  503. post_op_attr dir_attributes;
  504. };
  505. union READDIR3res switch (nfsstat3 status) {
  506. case NFS3_OK:
  507. READDIR3resok resok;
  508. default:
  509. READDIR3resfail resfail;
  510. };
  511. struct READDIRPLUS3args {
  512. nfs_fh3 dir;
  513. cookie3 cookie;
  514. cookieverf3 cookieverf;
  515. count3 dircount;
  516. count3 maxcount;
  517. };
  518. struct entryplus3 {
  519. fileid3 fileid;
  520. filename3 name;
  521. cookie3 cookie;
  522. post_op_attr name_attributes;
  523. post_op_fh3 name_handle;
  524. entryplus3 *nextentry;
  525. };
  526. struct dirlistplus3 {
  527. entryplus3 *entries;
  528. bool eof;
  529. };
  530. struct READDIRPLUS3resok {
  531. post_op_attr dir_attributes;
  532. cookieverf3 cookieverf;
  533. dirlistplus3 reply;
  534. };
  535. struct READDIRPLUS3resfail {
  536. post_op_attr dir_attributes;
  537. };
  538. union READDIRPLUS3res switch (nfsstat3 status) {
  539. case NFS3_OK:
  540. READDIRPLUS3resok resok;
  541. default:
  542. READDIRPLUS3resfail resfail;
  543. };
  544. struct FSSTAT3args {
  545. nfs_fh3 fsroot;
  546. };
  547. struct FSSTAT3resok {
  548. post_op_attr obj_attributes;
  549. size3 tbytes;
  550. size3 fbytes;
  551. size3 abytes;
  552. size3 tfiles;
  553. size3 ffiles;
  554. size3 afiles;
  555. uint32 invarsec;
  556. };
  557. struct FSSTAT3resfail {
  558. post_op_attr obj_attributes;
  559. };
  560. union FSSTAT3res switch (nfsstat3 status) {
  561. case NFS3_OK:
  562. FSSTAT3resok resok;
  563. default:
  564. FSSTAT3resfail resfail;
  565. };
  566. struct FSINFO3args {
  567. nfs_fh3 fsroot;
  568. };
  569. struct FSINFO3resok {
  570. post_op_attr obj_attributes;
  571. uint32 rtmax;
  572. uint32 rtpref;
  573. uint32 rtmult;
  574. uint32 wtmax;
  575. uint32 wtpref;
  576. uint32 wtmult;
  577. uint32 dtpref;
  578. size3 maxfilesize;
  579. nfstime3 time_delta;
  580. uint32 properties;
  581. };
  582. struct FSINFO3resfail {
  583. post_op_attr obj_attributes;
  584. };
  585. union FSINFO3res switch (nfsstat3 status) {
  586. case NFS3_OK:
  587. FSINFO3resok resok;
  588. default:
  589. FSINFO3resfail resfail;
  590. };
  591. struct PATHCONF3args {
  592. nfs_fh3 object;
  593. };
  594. struct PATHCONF3resok {
  595. post_op_attr obj_attributes;
  596. uint32 linkmax;
  597. uint32 name_max;
  598. bool no_trunc;
  599. bool chown_restricted;
  600. bool case_insensitive;
  601. bool case_preserving;
  602. };
  603. struct PATHCONF3resfail {
  604. post_op_attr obj_attributes;
  605. };
  606. union PATHCONF3res switch (nfsstat3 status) {
  607. case NFS3_OK:
  608. PATHCONF3resok resok;
  609. default:
  610. PATHCONF3resfail resfail;
  611. };
  612. struct COMMIT3args {
  613. nfs_fh3 file;
  614. offset3 offset;
  615. count3 count;
  616. };
  617. struct COMMIT3resok {
  618. wcc_data file_wcc;
  619. writeverf3 verf;
  620. };
  621. struct COMMIT3resfail {
  622. wcc_data file_wcc;
  623. };
  624. union COMMIT3res switch (nfsstat3 status) {
  625. case NFS3_OK:
  626. COMMIT3resok resok;
  627. default:
  628. COMMIT3resfail resfail;
  629. };
  630. program NFS_PROGRAM {
  631. version NFS_V3 {
  632. void NFSPROC3_NULL(void) = 0;
  633. GETATTR3res NFSPROC3_GETATTR(GETATTR3args) = 1;
  634. SETATTR3res NFSPROC3_SETATTR(SETATTR3args) = 2;
  635. LOOKUP3res NFSPROC3_LOOKUP(LOOKUP3args) = 3;
  636. ACCESS3res NFSPROC3_ACCESS(ACCESS3args) = 4;
  637. READLINK3res NFSPROC3_READLINK(READLINK3args) = 5;
  638. READ3res NFSPROC3_READ(READ3args) = 6;
  639. WRITE3res NFSPROC3_WRITE(WRITE3args) = 7;
  640. CREATE3res NFSPROC3_CREATE(CREATE3args) = 8;
  641. MKDIR3res NFSPROC3_MKDIR(MKDIR3args) = 9;
  642. SYMLINK3res NFSPROC3_SYMLINK(SYMLINK3args) = 10;
  643. MKNOD3res NFSPROC3_MKNOD(MKNOD3args) = 11;
  644. REMOVE3res NFSPROC3_REMOVE(REMOVE3args) = 12;
  645. RMDIR3res NFSPROC3_RMDIR(RMDIR3args) = 13;
  646. RENAME3res NFSPROC3_RENAME(RENAME3args) = 14;
  647. LINK3res NFSPROC3_LINK(LINK3args) = 15;
  648. READDIR3res NFSPROC3_READDIR(READDIR3args) = 16;
  649. READDIRPLUS3res NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17;
  650. FSSTAT3res NFSPROC3_FSSTAT(FSSTAT3args) = 18;
  651. FSINFO3res NFSPROC3_FSINFO(FSINFO3args) = 19;
  652. PATHCONF3res NFSPROC3_PATHCONF(PATHCONF3args) = 20;
  653. COMMIT3res NFSPROC3_COMMIT(COMMIT3args) = 21;
  654. } = 3;
  655. } = 100003;