diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/exportfs/exportfs.h |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/exportfs/exportfs.h')
-rwxr-xr-x | sys/src/cmd/exportfs/exportfs.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/sys/src/cmd/exportfs/exportfs.h b/sys/src/cmd/exportfs/exportfs.h new file mode 100755 index 000000000..0f7ba3e71 --- /dev/null +++ b/sys/src/cmd/exportfs/exportfs.h @@ -0,0 +1,144 @@ +/* + * exportfs.h - definitions for exporting file server + */ + +#define DEBUG if(!dbg){}else fprint +#define DFD 9 +#define fidhash(s) fhash[s%FHASHSIZE] + +typedef struct Fsrpc Fsrpc; +typedef struct Fid Fid; +typedef struct File File; +typedef struct Proc Proc; +typedef struct Qidtab Qidtab; + +struct Fsrpc +{ + int busy; /* Work buffer has pending rpc to service */ + uintptr pid; /* Pid of slave process executing the rpc */ + int canint; /* Interrupt gate */ + int flushtag; /* Tag on which to reply to flush */ + Fcall work; /* Plan 9 incoming Fcall */ + uchar *buf; /* Data buffer */ +}; + +struct Fid +{ + int fid; /* system fd for i/o */ + File *f; /* File attached to this fid */ + int mode; + int nr; /* fid number */ + int mid; /* Mount id */ + Fid *next; /* hash link */ + + /* for preaddir -- ARRGH! */ + Dir *dir; /* buffer for reading directories */ + int ndir; /* number of entries in dir */ + int cdir; /* number of consumed entries in dir */ + int gdir; /* glue index */ + vlong offset; /* offset in virtual directory */ +}; + +struct File +{ + char *name; + int ref; + Qid qid; + Qidtab *qidt; + int inval; + File *parent; + File *child; + File *childlist; +}; + +struct Proc +{ + uintptr pid; + int busy; + Proc *next; +}; + +struct Qidtab +{ + int ref; + int type; + int dev; + vlong path; + vlong uniqpath; + Qidtab *next; +}; + +enum +{ + MAXPROC = 50, + FHASHSIZE = 64, + Nr_workbufs = 50, + Fidchunk = 1000, + Npsmpt = 32, + Nqidbits = 5, + Nqidtab = (1<<Nqidbits), +}; + +char Ebadfid[]; +char Enotdir[]; +char Edupfid[]; +char Eopen[]; +char Exmnt[]; +char Enomem[]; +char Emip[]; +char Enopsmt[]; + +Extern Fsrpc *Workq; +Extern int dbg; +Extern File *root; +Extern File *psmpt; +Extern Fid **fhash; +Extern Fid *fidfree; +Extern Proc *Proclist; +Extern char psmap[Npsmpt]; +Extern Qidtab *qidtab[Nqidtab]; +Extern ulong messagesize; +Extern char Enomem[]; +Extern int srvfd; +Extern char* patternfile; + +/* File system protocol service procedures */ +void Xattach(Fsrpc*); +void Xauth(Fsrpc*); +void Xclunk(Fsrpc*); +void Xcreate(Fsrpc*); +void Xflush(Fsrpc*); +void Xnop(Fsrpc*); +void Xremove(Fsrpc*); +void Xstat(Fsrpc*); +void Xversion(Fsrpc*); +void Xwalk(Fsrpc*); +void Xwstat(Fsrpc*); +void slave(Fsrpc*); + +void reply(Fcall*, Fcall*, char*); +Fid *getfid(int); +int freefid(int); +Fid *newfid(int); +Fsrpc *getsbuf(void); +void initroot(void); +void fatal(char*, ...); +char* makepath(File*, char*); +File *file(File*, char*); +void freefile(File*); +void slaveopen(Fsrpc*); +void slaveread(Fsrpc*); +void slavewrite(Fsrpc*); +void blockingslave(void); +void reopen(Fid *f); +void noteproc(int, char*); +void flushaction(void*, char*); +void pushfcall(char*); +Qidtab* uniqueqid(Dir*); +void freeqid(Qidtab*); +char* estrdup(char*); +void* emallocz(uint); +int readmessage(int, char*, int); +void exclusions(void); +int excludefile(char*); +int preaddir(Fid*, uchar*, int, vlong); |