ratfs.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <auth.h>
  4. #include <fcall.h>
  5. #include <bio.h>
  6. enum {
  7. MAXRPC = 8192,
  8. Qroot = 1, /* fixed QID's */
  9. Qallow,
  10. Qdelay,
  11. Qblock,
  12. Qdial,
  13. Qdeny,
  14. Qtrusted,
  15. Qctl,
  16. Qdummy,
  17. Qaddr, /* Qid's for "ip" & "account" subdirs (Qaddr-99) */
  18. Qtrustedfile = 100, /* Qid's for trusted files (100-999)*/
  19. Qaddrfile = 1000, /* Qid's for address files (> 1000) */
  20. /* type codes in node.d.type */
  21. Directory = 0, /* normal directory */
  22. Addrdir, /* contains "ip" and "account" directories */
  23. IPaddr, /* contains IP address "files" */
  24. Acctaddr, /* contains Account address "files" */
  25. Trusted, /* contains trusted IP files */
  26. Trustedperm, /* permanently trusted IP pseudo-file */
  27. Trustedtemp, /* temporarily trusted IP pseudo-file */
  28. Ctlfile, /* ctl file under root */
  29. Dummynode, /* place holder for Address pseudo-files */
  30. };
  31. typedef struct Fid Fid;
  32. typedef struct Node Node;
  33. typedef struct Address Address;
  34. typedef struct Cidraddr Cidraddr;
  35. typedef struct Keyword Keyword;
  36. /* an active fid */
  37. struct Fid
  38. {
  39. int fid;
  40. int dirindex;
  41. Node *node; /* current position in path */
  42. int busy;
  43. int open; /* directories only */
  44. char *name;
  45. char *uid;
  46. Fid *next;
  47. };
  48. struct Cidraddr
  49. {
  50. ulong ipaddr; /* CIDR base addr */
  51. ulong mask; /* CIDR mask */
  52. };
  53. /* an address is either an account name (domain!user) or Ip address */
  54. struct Address
  55. {
  56. char *name; /* from the control file */
  57. Cidraddr ip; /* CIDR Address */
  58. };
  59. /* Fids point to either a directory or pseudo-file */
  60. struct Node
  61. {
  62. Dir d; /* d.name, d.uid, d.gid, d.muid are atoms */
  63. int count;
  64. int allocated; /* number of Address structs allocated */
  65. ulong baseqid; /* base of Qid's in this set */
  66. Node *parent; /* points to self in root node*/
  67. Node *sibs; /* 0 in Ipaddr and Acctaddr dirs */
  68. union {
  69. Node *children; /* type == Directory || Addrdir || Trusted */
  70. Address *addrs; /* type == Ipaddr || Acctaddr */
  71. Cidraddr ip; /* type == Trustedfile */
  72. };
  73. };
  74. struct Keyword {
  75. char *name;
  76. int code;
  77. };
  78. Node *root; /* root of directory tree */
  79. Node dummy; /* dummy node for fid's pointing to an Address */
  80. int srvfd; /* fd for 9fs */
  81. uchar rbuf[IOHDRSZ+MAXRPC+1];
  82. int debugfd;
  83. char *ctlfile;
  84. char *conffile;
  85. long lastconftime;
  86. long lastctltime;
  87. int trustedqid;
  88. char* atom(char*);
  89. void cidrparse(Cidraddr*, char*);
  90. void cleantrusted(void);
  91. Node* dirwalk(char*, Node*);
  92. int dread(Fid*, int);
  93. void fatal(char*, ...);
  94. Node* finddir(int);
  95. int findkey(char*, Keyword*);
  96. void getconf(void);
  97. int hread(Fid*, int);
  98. void io(void);
  99. Node* newnode(Node*, char*, ushort, int, ulong);
  100. void printfid(Fid*);
  101. void printnode(Node*);
  102. void printtree(Node*);
  103. void reload(void);
  104. char* subslash(char*);
  105. char* walk(char*, Fid*);