]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/exportfs/exportfs.h
exportfs, oexportfs, iostats: make -d log to stderr
[plan9front.git] / sys / src / cmd / exportfs / exportfs.h
1 /*
2  * exportfs.h - definitions for exporting file server
3  */
4
5 #define DEBUG           if(!dbg){}else fprint
6 #define fidhash(s)      fhash[s%FHASHSIZE]
7
8 typedef struct Fsrpc Fsrpc;
9 typedef struct Fid Fid;
10 typedef struct File File;
11 typedef struct Proc Proc;
12 typedef struct Qidtab Qidtab;
13
14 struct Fsrpc
15 {
16         Fsrpc   *next;          /* freelist */
17         int     flushtag;       /* Tag on which to reply to flush */
18         Fcall   work;           /* Plan 9 incoming Fcall */
19         uchar   buf[];          /* Data buffer */
20 };
21
22 struct Fid
23 {
24         int     fid;            /* system fd for i/o */
25         File    *f;             /* File attached to this fid */
26         int     mode;
27         int     nr;             /* fid number */
28         int     mid;            /* Mount id */
29         Fid     *next;          /* hash link */
30
31         /* for preaddir -- ARRGH! */
32         Dir     *dir;           /* buffer for reading directories */
33         int     ndir;           /* number of entries in dir */
34         int     cdir;           /* number of consumed entries in dir */
35         int     gdir;           /* glue index */
36         vlong   offset;         /* offset in virtual directory */
37 };
38
39 struct File
40 {
41         char    *name;
42         int     ref;
43         Qid     qid;
44         Qidtab  *qidt;
45         int     inval;
46         File    *parent;
47         File    *child;
48         File    *childlist;
49 };
50
51 struct Proc
52 {
53         Lock;
54         Fsrpc   *busy;
55         Proc    *next;
56         int     pid;
57 };
58
59 struct Qidtab
60 {
61         int     ref;
62         int     type;
63         int     dev;
64         vlong   path;
65         vlong   uniqpath;
66         Qidtab  *next;
67 };
68
69 enum
70 {
71         FHASHSIZE       = 64,
72         Fidchunk        = 1000,
73         Npsmpt          = 32,
74         Nqidbits                = 5,
75         Nqidtab         = (1<<Nqidbits),
76 };
77
78 char Ebadfid[];
79 char Enotdir[];
80 char Edupfid[];
81 char Eopen[];
82 char Exmnt[];
83 char Enomem[];
84 char Emip[];
85 char Enopsmt[];
86
87 Extern int      dbg;
88 Extern File     *root;
89 Extern File     *psmpt;
90 Extern Fid      **fhash;
91 Extern Fid      *fidfree;
92 Extern Proc     *Proclist;
93 Extern char     psmap[Npsmpt];
94 Extern Qidtab   *qidtab[Nqidtab];
95 Extern ulong    messagesize;
96 Extern char     Enomem[];
97 Extern int      srvfd;
98 Extern char*    patternfile;
99
100 /* File system protocol service procedures */
101 void Xattach(Fsrpc*);
102 void Xauth(Fsrpc*);
103 void Xclunk(Fsrpc*); 
104 void Xcreate(Fsrpc*);
105 void Xflush(Fsrpc*); 
106 void Xnop(Fsrpc*);
107 void Xremove(Fsrpc*);
108 void Xstat(Fsrpc*);
109 void Xversion(Fsrpc*);
110 void Xwalk(Fsrpc*);
111 void Xwstat(Fsrpc*);
112 void slave(Fsrpc*);
113
114 void    io(void);
115 void    reply(Fcall*, Fcall*, char*);
116 void    mounterror(char*);
117
118 Fid     *getfid(int);
119 int     freefid(int);
120 Fid     *newfid(int);
121 Fsrpc   *getsbuf(void);
122 void    putsbuf(Fsrpc*);
123 void    initroot(void);
124 void    fatal(char*, ...);
125 char*   makepath(File*, char*);
126 File    *file(File*, char*);
127 void    freefile(File*);
128 void    slaveopen(Fsrpc*);
129 void    slaveread(Fsrpc*);
130 void    slavewrite(Fsrpc*);
131 void    blockingslave(Proc*);
132 void    reopen(Fid *f);
133 void    noteproc(int, char*);
134 void    flushaction(void*, char*);
135 void    pushfcall(char*);
136 Qidtab* uniqueqid(Dir*);
137 void    freeqid(Qidtab*);
138 char*   estrdup(char*);
139 void*   emallocz(uint);
140 int     readmessage(int, char*, int);
141 void    exclusions(void);
142 int     excludefile(char*);
143 int     preaddir(Fid*, uchar*, int, vlong);