dat.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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. /* corresponds to Udphdr */
  84. uchar prefix0[12];
  85. ulong host; /* ipv4 subset: prefixed to RPC message */
  86. uchar prefix1[12];
  87. ulong lhost; /* ipv4 subset: prefixed to RPC message */
  88. /* ignore ifcaddr */
  89. ulong port; /* prefixed to RPC message */
  90. ulong lport; /* prefixed to RPC message */
  91. ulong xid; /* transaction id */
  92. ulong mtype; /* CALL or REPLY */
  93. union{
  94. struct{ /* CALL */
  95. ulong rpcvers; /* must be equal to two (2) */
  96. ulong prog; /* program number */
  97. ulong vers; /* program version */
  98. ulong proc; /* procedure number */
  99. Auth cred; /* authentication credentials */
  100. Auth verf; /* authentication verifier */
  101. Unixidmap *up;
  102. char * user;
  103. void * args; /* procedure-specific */
  104. };
  105. struct{ /* REPLY */
  106. ulong stat; /* MSG_ACCEPTED or MSG_DENIED */
  107. union{
  108. Accept;
  109. Reject;
  110. };
  111. };
  112. };
  113. };
  114. struct Rpccache
  115. {
  116. Rpccache *prev;
  117. Rpccache *next;
  118. ulong host;
  119. ulong port;
  120. ulong xid;
  121. int n;
  122. uchar data[4];
  123. };
  124. struct Sattr
  125. {
  126. ulong mode;
  127. ulong uid;
  128. ulong gid;
  129. ulong size;
  130. ulong atime; /* sec's */
  131. ulong ausec; /* microsec's */
  132. ulong mtime;
  133. ulong musec;
  134. };
  135. struct Strnode
  136. {
  137. Strnode *next; /* in hash bucket */
  138. char str[4];
  139. };
  140. struct Unixid
  141. {
  142. Unixid *next;
  143. char * name;
  144. int id;
  145. };
  146. struct Unixmap
  147. {
  148. char * file;
  149. int style;
  150. long timestamp;
  151. Unixid *ids;
  152. };
  153. struct Unixidmap
  154. {
  155. Unixidmap *next;
  156. int flag;
  157. char * server;
  158. char * client;
  159. Reprog *sexp;
  160. Reprog *cexp;
  161. Unixmap u;
  162. Unixmap g;
  163. };
  164. struct Unixscmap
  165. {
  166. Unixscmap *next;
  167. char * server;
  168. ulong clientip;
  169. Unixidmap *map;
  170. };
  171. struct Xfile
  172. {
  173. Xfile * next; /* hash chain */
  174. Session *s;
  175. Qid qid; /* from stat */
  176. Xfile * parent;
  177. Xfile * child; /* if directory */
  178. Xfile * sib; /* siblings */
  179. char * name; /* path element */
  180. Xfid * users;
  181. };
  182. enum
  183. {
  184. Oread = 1,
  185. Owrite = 2,
  186. Open = 3,
  187. Trunc = 4
  188. };
  189. struct Xfid
  190. {
  191. Xfid * next; /* Xfile's user list */
  192. Xfile * xp;
  193. char * uid;
  194. Fid * urfid;
  195. Fid * opfid;
  196. ulong mode; /* open mode, if opfid is non-zero */
  197. ulong offset;
  198. };
  199. struct Fid
  200. {
  201. Fid ** owner; /* null for root fids */
  202. Fid * prev;
  203. Fid * next;
  204. long tstale; /* auto-clunk */
  205. };
  206. enum
  207. {
  208. Maxfdata = 8192,
  209. Maxstatdata = 2048,
  210. };
  211. struct Session
  212. {
  213. Session *next;
  214. char * service; /* for dial */
  215. int fd;
  216. #define CHALLEN 1
  217. char cchal[CHALLEN]; /* client challenge */
  218. char schal[CHALLEN]; /* server challenge */
  219. char authid[ANAMELEN]; /* server encryption uid */
  220. char authdom[DOMLEN]; /* server encryption domain */
  221. char * spec; /* for attach */
  222. Xfile * root; /* to answer mount rpc */
  223. ushort tag;
  224. Fcall f;
  225. uchar data[IOHDRSZ+Maxfdata];
  226. uchar statbuf[Maxstatdata];
  227. Fid * free; /* available */
  228. Fid list; /* active, most-recently-used order */
  229. Fid fids[1000];
  230. int noauth;
  231. };
  232. struct Chalstuff
  233. {
  234. Chalstuff *next;
  235. Xfid * xf;
  236. long tstale;
  237. Chalstate;
  238. };
  239. extern int rpcdebug;
  240. extern int p9debug;
  241. extern int chatty;
  242. extern void (*rpcalarm)(void);
  243. extern long starttime;
  244. extern long nfstime;
  245. extern char * config;
  246. extern int staletime;
  247. extern int messagesize;
  248. extern char * commonopts;