dat.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. enum
  2. {
  3. FHSIZE = 32
  4. };
  5. typedef struct Accept Accept;
  6. typedef struct Auth Auth;
  7. typedef struct Authunix Authunix;
  8. typedef struct Chalstuff Chalstuff;
  9. typedef uchar Fhandle[FHSIZE];
  10. typedef struct Fid Fid;
  11. typedef struct Procmap Procmap;
  12. typedef struct Progmap Progmap;
  13. typedef struct Reject Reject;
  14. typedef struct Rpccall Rpccall;
  15. typedef struct Rpccache Rpccache;
  16. typedef struct Sattr Sattr;
  17. typedef struct Session Session;
  18. typedef struct String String;
  19. typedef struct Strnode Strnode;
  20. typedef struct Unixid Unixid;
  21. typedef struct Unixidmap Unixidmap;
  22. typedef struct Unixmap Unixmap;
  23. typedef struct Unixscmap Unixscmap;
  24. typedef struct Xfid Xfid;
  25. typedef struct Xfile Xfile;
  26. struct String
  27. {
  28. ulong n;
  29. char * s;
  30. };
  31. struct Progmap
  32. {
  33. int progno;
  34. int vers;
  35. void (*init)(int, char**);
  36. Procmap *pmap;
  37. };
  38. struct Procmap
  39. {
  40. int procno;
  41. int (*procp)(int, Rpccall*, Rpccall*);
  42. };
  43. struct Auth
  44. {
  45. ulong flavor;
  46. ulong count;
  47. void * data;
  48. };
  49. struct Authunix
  50. {
  51. ulong stamp;
  52. String mach;
  53. ulong uid;
  54. ulong gid;
  55. int gidlen;
  56. ulong gids[10];
  57. };
  58. struct Accept
  59. {
  60. Auth averf;
  61. ulong astat;
  62. union{
  63. void * results; /* SUCCESS */
  64. struct{ /* PROG_MISMATCH */
  65. ulong plow; /* acceptable version numbers */
  66. ulong phigh;
  67. };
  68. };
  69. };
  70. struct Reject
  71. {
  72. ulong rstat;
  73. union{
  74. struct{ /* RPC_MISMATCH */
  75. ulong rlow; /* acceptable rpc version numbers */
  76. ulong rhigh;
  77. };
  78. ulong authstat; /* AUTH_ERROR */
  79. };
  80. };
  81. struct Rpccall
  82. {
  83. uchar prefix0[12];
  84. ulong host; /* prefixed to RPC message */
  85. uchar prefix1[12];
  86. ulong lhost; /* prefixed to RPC message */
  87. ulong port; /* prefixed to RPC message */
  88. ulong lport; /* prefixed to RPC message */
  89. ulong xid; /* transaction id */
  90. ulong mtype; /* CALL or REPLY */
  91. union{
  92. struct{ /* CALL */
  93. ulong rpcvers; /* must be equal to two (2) */
  94. ulong prog; /* program number */
  95. ulong vers; /* program version */
  96. ulong proc; /* procedure number */
  97. Auth cred; /* authentication credentials */
  98. Auth verf; /* authentication verifier */
  99. Unixidmap *up;
  100. char * user;
  101. void * args; /* procedure-specific */
  102. };
  103. struct{ /* REPLY */
  104. ulong stat; /* MSG_ACCEPTED or MSG_DENIED */
  105. union{
  106. Accept;
  107. Reject;
  108. };
  109. };
  110. };
  111. };
  112. struct Rpccache
  113. {
  114. Rpccache *prev;
  115. Rpccache *next;
  116. ulong host;
  117. ulong port;
  118. ulong xid;
  119. int n;
  120. uchar data[4];
  121. };
  122. struct Sattr
  123. {
  124. ulong mode;
  125. ulong uid;
  126. ulong gid;
  127. ulong size;
  128. ulong atime; /* sec's */
  129. ulong ausec; /* microsec's */
  130. ulong mtime;
  131. ulong musec;
  132. };
  133. struct Strnode
  134. {
  135. Strnode *next; /* in hash bucket */
  136. char str[4];
  137. };
  138. struct Unixid
  139. {
  140. Unixid *next;
  141. char * name;
  142. int id;
  143. };
  144. struct Unixmap
  145. {
  146. char * file;
  147. int style;
  148. long timestamp;
  149. Unixid *ids;
  150. };
  151. struct Unixidmap
  152. {
  153. Unixidmap *next;
  154. int flag;
  155. char * server;
  156. char * client;
  157. Reprog *sexp;
  158. Reprog *cexp;
  159. Unixmap u;
  160. Unixmap g;
  161. };
  162. struct Unixscmap
  163. {
  164. Unixscmap *next;
  165. char * server;
  166. ulong clientip;
  167. Unixidmap *map;
  168. };
  169. struct Xfile
  170. {
  171. Xfile * next; /* hash chain */
  172. Session *s;
  173. Qid qid; /* from stat */
  174. Xfile * parent;
  175. Xfile * child; /* if directory */
  176. Xfile * sib; /* siblings */
  177. char * name; /* path element */
  178. Xfid * users;
  179. };
  180. enum
  181. {
  182. Oread = 1,
  183. Owrite = 2,
  184. Open = 3,
  185. Trunc = 4
  186. };
  187. struct Xfid
  188. {
  189. Xfid * next; /* Xfile's user list */
  190. Xfile * xp;
  191. char * uid;
  192. Fid * urfid;
  193. Fid * opfid;
  194. ulong mode; /* open mode, if opfid is non-zero */
  195. ulong offset;
  196. };
  197. struct Fid
  198. {
  199. Fid ** owner; /* null for root fids */
  200. Fid * prev;
  201. Fid * next;
  202. long tstale; /* auto-clunk */
  203. };
  204. enum
  205. {
  206. Maxfdata = 8192,
  207. Maxstatdata = 2048,
  208. };
  209. struct Session
  210. {
  211. Session *next;
  212. char * service; /* for dial */
  213. int fd;
  214. #define CHALLEN 1
  215. char cchal[CHALLEN]; /* client challenge */
  216. char schal[CHALLEN]; /* server challenge */
  217. char authid[ANAMELEN]; /* server encryption uid */
  218. char authdom[DOMLEN]; /* server encryption domain */
  219. char * spec; /* for attach */
  220. Xfile * root; /* to answer mount rpc */
  221. ushort tag;
  222. Fcall f;
  223. uchar data[IOHDRSZ+Maxfdata];
  224. uchar statbuf[Maxstatdata];
  225. Fid * free; /* available */
  226. Fid list; /* active, most-recently-used order */
  227. Fid fids[1000];
  228. int noauth;
  229. };
  230. struct Chalstuff
  231. {
  232. Chalstuff *next;
  233. Xfid * xf;
  234. long tstale;
  235. Chalstate;
  236. };
  237. extern int rpcdebug;
  238. extern int p9debug;
  239. extern int chatty;
  240. extern void (*rpcalarm)(void);
  241. extern long starttime;
  242. extern long nfstime;
  243. extern char * config;
  244. extern int staletime;
  245. extern int messagesize;
  246. extern char * commonopts;