10 Qroot = 1, /* fixed QID's */
19 Qaddr, /* Qid's for "ip" & "account" subdirs (Qaddr-99) */
21 Qtrustedfile = 100, /* Qid's for trusted files (100-999)*/
22 Qaddrfile = 1000, /* Qid's for address files (> 1000) */
24 /* type codes in node.d.type */
25 Directory = 0, /* normal directory */
26 Addrdir, /* contains "ip" and "account" directories */
27 IPaddr, /* contains IP address "files" */
28 Acctaddr, /* contains Account address "files" */
29 Trusted, /* contains trusted IP files */
30 Trustedperm, /* permanently trusted IP pseudo-file */
31 Trustedtemp, /* temporarily trusted IP pseudo-file */
32 Ctlfile, /* ctl file under root */
33 Dummynode, /* place holder for Address pseudo-files */
36 typedef struct Fid Fid;
37 typedef struct Node Node;
38 typedef struct Address Address;
39 typedef struct Cidraddr Cidraddr;
40 typedef struct Keyword Keyword;
47 Node *node; /* current position in path */
49 int open; /* directories only */
57 ulong ipaddr; /* CIDR base addr */
58 ulong mask; /* CIDR mask */
61 /* an address is either an account name (domain!user) or Ip address */
64 char *name; /* from the control file */
65 Cidraddr ip; /* CIDR Address */
68 /* Fids point to either a directory or pseudo-file */
71 Dir d; /* d.name, d.uid, d.gid, d.muid are atoms */
73 int allocated; /* number of Address structs allocated */
74 ulong baseqid; /* base of Qid's in this set */
75 Node *parent; /* points to self in root node*/
76 Node *sibs; /* 0 in Ipaddr and Acctaddr dirs */
78 Node *children; /* type == Directory || Addrdir || Trusted */
79 Address *addrs; /* type == Ipaddr || Acctaddr */
80 Cidraddr ip; /* type == Trustedfile */
89 Node *root; /* root of directory tree */
90 Node dummy; /* dummy node for fid's pointing to an Address */
91 int srvfd; /* fd for 9fs */
92 uchar rbuf[IOHDRSZ+MAXRPC+1];
101 void cidrparse(Cidraddr*, char*);
102 void cleantrusted(void);
103 Node* dirwalk(char*, Node*);
104 int dread(Fid*, int);
105 void fatal(char*, ...);
107 int findkey(char*, Keyword*);
109 int hread(Fid*, int);
111 Node* newnode(Node*, char*, ushort, int, ulong);
113 void printnode(Node*);
114 void printtree(Node*);
116 char* subslash(char*);
117 char* walk(char*, Fid*);