typedef struct Chan Chan; typedef struct Command Command; typedef struct Conf Conf; typedef struct Cons Cons; typedef struct Devcall Devcall; #define MAXBUFSIZE (16*1024) /* max. buffer size */ #include "portdat.h" struct Chan { int chan; /* fd request came in on */ QLock rlock, wlock; /* lock for reading/writing messages on chan */ int type; int flags; long whotime; File* flist; /* base of file structures */ Lock flock; /* manipulate flist */ RWLock reflock; /* lock for Tflush */ int msize; /* version */ int authed; /* someone other than ``none'' has authed */ /* 9p1 auth */ uchar chal[8]; uchar rchal[8]; int idoffset; int idvec; Lock idlock; }; /* * console cons.flag flags */ enum { Fchat = (1<<0), /* print out filesys rpc traffic */ Fuid = (1<<2), /* print out uids */ /* debugging flags for drivers */ }; struct Cons { int flags; /* overall flags for all channels */ int uid; /* botch -- used to get uid on cons_create */ int gid; /* botch -- used to get gid on cons_create */ int allow; /* no-protection flag */ long offset; /* used to read files, c.f. fchar */ char* arg; /* pointer to remaining line */ Chan *chan; /* console channel */ Chan *srvchan; /* local server channel */ Filter work; /* thruput in messages */ Filter rate; /* thruput in bytes */ Filter bhit; /* getbufs that hit */ Filter bread; /* getbufs that miss and read */ Filter binit; /* getbufs that miss and dont read */ Filter tags[MAXTAG]; /* reads of each type of block */ }; struct Conf { ulong niobuf; /* number of iobufs to allocate */ ulong nuid; /* distinct uids */ ulong uidspace; /* space for uid names -- derrived from nuid */ ulong gidspace; /* space for gid names -- derrived from nuid */ ulong nserve; /* server processes */ ulong nfile; /* number of fid -- system wide */ ulong nwpath; /* number of active paths, derrived from nfile */ ulong bootsize; /* number of bytes reserved for booting */ }; struct Command { char *string; void (*func)(void); char *args; }; struct Devcall { void (*init)(Device); void (*ream)(Device); int (*check)(Device); long (*super)(Device); long (*root)(Device); long (*size)(Device); int (*read)(Device, long, void*); int (*write)(Device, long, void*); }; /* * device types */ enum { Devnone = 0, Devwren, MAXDEV }; /* * file systems */ enum { MAXFILSYS = 4 }; /* * should be in portdat.h */ #define QPDIR 0x80000000L #define QPNONE 0 #define QPROOT 1 #define QPSUPER 2 /* * perm argument in p9 create */ #define PDIR (1L<<31) /* is a directory */ #define PAPND (1L<<30) /* is append only */ #define PLOCK (1L<<29) /* is locked on open */ #define NOF (-1) #define FID1 1 #define FID2 2 #define FID3 3 #define SECOND(n) (n) #define MINUTE(n) (n*SECOND(60)) #define HOUR(n) (n*MINUTE(60)) #define DAY(n) (n*HOUR(24)) #define TLOCK MINUTE(5) #define CHAT(cp) (chat) #define QID9P1(a,b) (Qid9p1){a,b} extern Uid* uid; extern char* uidspace; extern short* gidspace; extern char* errstring[MAXERR]; extern Chan* chans; extern RWLock mainlock; extern long boottime; extern Tlock *tlocks; extern Device devnone; extern Filsys filesys[]; extern char service[]; extern char* tagnames[]; extern Conf conf; extern Cons cons; extern Command command[]; extern Chan *chan; extern Devcall devcall[]; extern char *progname; extern char *procname; extern long niob; extern long nhiob; extern Hiob *hiob; extern int chat; extern int writeallow; extern int wstatallow; extern int allownone; extern int noatime; extern int writegroup; extern Lock wpathlock;