xref: /plan9/sys/src/cmd/9nfs/dat.h (revision 883a8c51bed350ea85a0220461d31e311550db04)
17dd7cddfSDavid du Colombier enum
27dd7cddfSDavid du Colombier {
37dd7cddfSDavid du Colombier 	FHSIZE	= 32
47dd7cddfSDavid du Colombier };
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier typedef struct Accept	Accept;
77dd7cddfSDavid du Colombier typedef struct Auth	Auth;
87dd7cddfSDavid du Colombier typedef struct Authunix	Authunix;
97dd7cddfSDavid du Colombier typedef struct Chalstuff Chalstuff;
107dd7cddfSDavid du Colombier typedef uchar		Fhandle[FHSIZE];
117dd7cddfSDavid du Colombier typedef struct Fid	Fid;
127dd7cddfSDavid du Colombier typedef struct Procmap	Procmap;
137dd7cddfSDavid du Colombier typedef struct Progmap	Progmap;
147dd7cddfSDavid du Colombier typedef struct Reject	Reject;
157dd7cddfSDavid du Colombier typedef struct Rpccall	Rpccall;
167dd7cddfSDavid du Colombier typedef struct Rpccache	Rpccache;
177dd7cddfSDavid du Colombier typedef struct Sattr	Sattr;
187dd7cddfSDavid du Colombier typedef struct Session	Session;
197dd7cddfSDavid du Colombier typedef struct String	String;
207dd7cddfSDavid du Colombier typedef struct Strnode	Strnode;
217dd7cddfSDavid du Colombier typedef struct Unixid	Unixid;
227dd7cddfSDavid du Colombier typedef struct Unixidmap Unixidmap;
237dd7cddfSDavid du Colombier typedef struct Unixmap	Unixmap;
247dd7cddfSDavid du Colombier typedef struct Unixscmap Unixscmap;
257dd7cddfSDavid du Colombier typedef struct Xfid	Xfid;
267dd7cddfSDavid du Colombier typedef struct Xfile	Xfile;
277dd7cddfSDavid du Colombier 
287dd7cddfSDavid du Colombier struct String
297dd7cddfSDavid du Colombier {
307dd7cddfSDavid du Colombier 	ulong	n;
317dd7cddfSDavid du Colombier 	char *	s;
327dd7cddfSDavid du Colombier };
337dd7cddfSDavid du Colombier 
347dd7cddfSDavid du Colombier struct Progmap
357dd7cddfSDavid du Colombier {
367dd7cddfSDavid du Colombier 	int	progno;
377dd7cddfSDavid du Colombier 	int	vers;
387dd7cddfSDavid du Colombier 	void	(*init)(int, char**);
397dd7cddfSDavid du Colombier 	Procmap *pmap;
407dd7cddfSDavid du Colombier };
417dd7cddfSDavid du Colombier 
427dd7cddfSDavid du Colombier struct Procmap
437dd7cddfSDavid du Colombier {
447dd7cddfSDavid du Colombier 	int	procno;
457dd7cddfSDavid du Colombier 	int	(*procp)(int, Rpccall*, Rpccall*);
467dd7cddfSDavid du Colombier };
477dd7cddfSDavid du Colombier 
487dd7cddfSDavid du Colombier struct Auth
497dd7cddfSDavid du Colombier {
507dd7cddfSDavid du Colombier 	ulong	flavor;
517dd7cddfSDavid du Colombier 	ulong	count;
527dd7cddfSDavid du Colombier 	void *	data;
537dd7cddfSDavid du Colombier };
547dd7cddfSDavid du Colombier 
557dd7cddfSDavid du Colombier struct Authunix
567dd7cddfSDavid du Colombier {
577dd7cddfSDavid du Colombier 	ulong	stamp;
587dd7cddfSDavid du Colombier 	String	mach;
597dd7cddfSDavid du Colombier 	ulong	uid;
607dd7cddfSDavid du Colombier 	ulong	gid;
617dd7cddfSDavid du Colombier 	int	gidlen;
627dd7cddfSDavid du Colombier 	ulong	gids[10];
637dd7cddfSDavid du Colombier };
647dd7cddfSDavid du Colombier 
657dd7cddfSDavid du Colombier struct Accept
667dd7cddfSDavid du Colombier {
677dd7cddfSDavid du Colombier 	Auth	averf;
687dd7cddfSDavid du Colombier 	ulong	astat;
697dd7cddfSDavid du Colombier 	union{
707dd7cddfSDavid du Colombier 		void *	results;	/* SUCCESS */
717dd7cddfSDavid du Colombier 		struct{			/* PROG_MISMATCH */
727dd7cddfSDavid du Colombier 			ulong	plow;	/* acceptable version numbers */
737dd7cddfSDavid du Colombier 			ulong	phigh;
747dd7cddfSDavid du Colombier 		};
757dd7cddfSDavid du Colombier 	};
767dd7cddfSDavid du Colombier };
777dd7cddfSDavid du Colombier 
787dd7cddfSDavid du Colombier struct Reject
797dd7cddfSDavid du Colombier {
807dd7cddfSDavid du Colombier 	ulong	rstat;
817dd7cddfSDavid du Colombier 	union{
827dd7cddfSDavid du Colombier 		struct{			/* RPC_MISMATCH */
837dd7cddfSDavid du Colombier 			ulong	rlow;	/* acceptable  rpc version numbers */
847dd7cddfSDavid du Colombier 			ulong	rhigh;
857dd7cddfSDavid du Colombier 		};
867dd7cddfSDavid du Colombier 		ulong	authstat;	/* AUTH_ERROR */
877dd7cddfSDavid du Colombier 	};
887dd7cddfSDavid du Colombier };
897dd7cddfSDavid du Colombier 
907dd7cddfSDavid du Colombier struct Rpccall
917dd7cddfSDavid du Colombier {
92*883a8c51SDavid du Colombier 	/* corresponds to Udphdr */
937dd7cddfSDavid du Colombier 	uchar	prefix0[12];
94*883a8c51SDavid du Colombier 	ulong	host;		/* ipv4 subset: prefixed to RPC message */
957dd7cddfSDavid du Colombier 	uchar	prefix1[12];
96*883a8c51SDavid du Colombier 	ulong	lhost;		/* ipv4 subset: prefixed to RPC message */
97*883a8c51SDavid du Colombier 	/* ignore ifcaddr */
987dd7cddfSDavid du Colombier 	ulong	port;		/* prefixed to RPC message */
997dd7cddfSDavid du Colombier 	ulong	lport;		/* prefixed to RPC message */
100*883a8c51SDavid du Colombier 
1017dd7cddfSDavid du Colombier 	ulong	xid;		/* transaction id */
1027dd7cddfSDavid du Colombier 	ulong	mtype;		/* CALL or REPLY */
1037dd7cddfSDavid du Colombier 	union{
1047dd7cddfSDavid du Colombier 		struct{		/* CALL */
1057dd7cddfSDavid du Colombier 			ulong	rpcvers;	/* must be equal to two (2) */
1067dd7cddfSDavid du Colombier 			ulong	prog;		/* program number */
1077dd7cddfSDavid du Colombier 			ulong	vers;		/* program version */
1087dd7cddfSDavid du Colombier 			ulong	proc;		/* procedure number */
1097dd7cddfSDavid du Colombier 			Auth	cred;		/* authentication credentials */
1107dd7cddfSDavid du Colombier 			Auth	verf;		/* authentication verifier */
1117dd7cddfSDavid du Colombier 			Unixidmap *up;
1127dd7cddfSDavid du Colombier 			char *	user;
1137dd7cddfSDavid du Colombier 			void *	args;		/* procedure-specific */
1147dd7cddfSDavid du Colombier 		};
1157dd7cddfSDavid du Colombier 		struct{		/* REPLY */
1167dd7cddfSDavid du Colombier 			ulong	stat;		/* MSG_ACCEPTED or MSG_DENIED */
1177dd7cddfSDavid du Colombier 			union{
1187dd7cddfSDavid du Colombier 				Accept;
1197dd7cddfSDavid du Colombier 				Reject;
1207dd7cddfSDavid du Colombier 			};
1217dd7cddfSDavid du Colombier 		};
1227dd7cddfSDavid du Colombier 	};
1237dd7cddfSDavid du Colombier };
1247dd7cddfSDavid du Colombier 
1257dd7cddfSDavid du Colombier struct Rpccache
1267dd7cddfSDavid du Colombier {
1277dd7cddfSDavid du Colombier 	Rpccache *prev;
1287dd7cddfSDavid du Colombier 	Rpccache *next;
1297dd7cddfSDavid du Colombier 	ulong	host;
1307dd7cddfSDavid du Colombier 	ulong	port;
1317dd7cddfSDavid du Colombier 	ulong	xid;
1327dd7cddfSDavid du Colombier 	int	n;
1337dd7cddfSDavid du Colombier 	uchar	data[4];
1347dd7cddfSDavid du Colombier };
1357dd7cddfSDavid du Colombier 
1367dd7cddfSDavid du Colombier struct Sattr
1377dd7cddfSDavid du Colombier {
1387dd7cddfSDavid du Colombier 	ulong	mode;
1397dd7cddfSDavid du Colombier 	ulong	uid;
1407dd7cddfSDavid du Colombier 	ulong	gid;
1417dd7cddfSDavid du Colombier 	ulong	size;
1427dd7cddfSDavid du Colombier 	ulong	atime;		/* sec's */
1437dd7cddfSDavid du Colombier 	ulong	ausec;		/* microsec's */
1447dd7cddfSDavid du Colombier 	ulong	mtime;
1457dd7cddfSDavid du Colombier 	ulong	musec;
1467dd7cddfSDavid du Colombier };
1477dd7cddfSDavid du Colombier 
1487dd7cddfSDavid du Colombier struct Strnode
1497dd7cddfSDavid du Colombier {
1507dd7cddfSDavid du Colombier 	Strnode *next;	/* in hash bucket */
1517dd7cddfSDavid du Colombier 	char	str[4];
1527dd7cddfSDavid du Colombier };
1537dd7cddfSDavid du Colombier 
1547dd7cddfSDavid du Colombier struct Unixid
1557dd7cddfSDavid du Colombier {
1567dd7cddfSDavid du Colombier 	Unixid *next;
1577dd7cddfSDavid du Colombier 	char *	name;
1587dd7cddfSDavid du Colombier 	int	id;
1597dd7cddfSDavid du Colombier };
1607dd7cddfSDavid du Colombier 
1617dd7cddfSDavid du Colombier struct Unixmap
1627dd7cddfSDavid du Colombier {
1637dd7cddfSDavid du Colombier 	char *	file;
1647dd7cddfSDavid du Colombier 	int	style;
1657dd7cddfSDavid du Colombier 	long	timestamp;
1667dd7cddfSDavid du Colombier 	Unixid *ids;
1677dd7cddfSDavid du Colombier };
1687dd7cddfSDavid du Colombier 
1697dd7cddfSDavid du Colombier struct Unixidmap
1707dd7cddfSDavid du Colombier {
1717dd7cddfSDavid du Colombier 	Unixidmap *next;
1727dd7cddfSDavid du Colombier 	int	flag;
1737dd7cddfSDavid du Colombier 	char *	server;
1747dd7cddfSDavid du Colombier 	char *	client;
1757dd7cddfSDavid du Colombier 	Reprog *sexp;
1767dd7cddfSDavid du Colombier 	Reprog *cexp;
1777dd7cddfSDavid du Colombier 	Unixmap	u;
1787dd7cddfSDavid du Colombier 	Unixmap	g;
1797dd7cddfSDavid du Colombier };
1807dd7cddfSDavid du Colombier 
1817dd7cddfSDavid du Colombier struct Unixscmap
1827dd7cddfSDavid du Colombier {
1837dd7cddfSDavid du Colombier 	Unixscmap *next;
1847dd7cddfSDavid du Colombier 	char *	server;
1857dd7cddfSDavid du Colombier 	ulong	clientip;
1867dd7cddfSDavid du Colombier 	Unixidmap *map;
1877dd7cddfSDavid du Colombier };
1887dd7cddfSDavid du Colombier 
1897dd7cddfSDavid du Colombier struct Xfile
1907dd7cddfSDavid du Colombier {
1917dd7cddfSDavid du Colombier 	Xfile *	next;		/* hash chain */
1927dd7cddfSDavid du Colombier 	Session	*s;
1939a747e4fSDavid du Colombier 	Qid		qid;	/* from stat */
1947dd7cddfSDavid du Colombier 	Xfile *	parent;
1957dd7cddfSDavid du Colombier 	Xfile *	child;		/* if directory */
1967dd7cddfSDavid du Colombier 	Xfile *	sib;		/* siblings */
1977dd7cddfSDavid du Colombier 	char *	name;		/* path element */
1987dd7cddfSDavid du Colombier 	Xfid *	users;
1997dd7cddfSDavid du Colombier };
2007dd7cddfSDavid du Colombier 
2017dd7cddfSDavid du Colombier enum
2027dd7cddfSDavid du Colombier {
2037dd7cddfSDavid du Colombier 	Oread	= 1,
2047dd7cddfSDavid du Colombier 	Owrite	= 2,
2057dd7cddfSDavid du Colombier 	Open	= 3,
2067dd7cddfSDavid du Colombier 	Trunc	= 4
2077dd7cddfSDavid du Colombier };
2087dd7cddfSDavid du Colombier 
2097dd7cddfSDavid du Colombier struct Xfid
2107dd7cddfSDavid du Colombier {
2117dd7cddfSDavid du Colombier 	Xfid *	next;		/* Xfile's user list */
2127dd7cddfSDavid du Colombier 	Xfile *	xp;
2137dd7cddfSDavid du Colombier 	char *	uid;
2147dd7cddfSDavid du Colombier 	Fid *	urfid;
2157dd7cddfSDavid du Colombier 	Fid *	opfid;
2167dd7cddfSDavid du Colombier 	ulong	mode;		/* open mode, if opfid is non-zero */
2177dd7cddfSDavid du Colombier 	ulong	offset;
2187dd7cddfSDavid du Colombier };
2197dd7cddfSDavid du Colombier 
2207dd7cddfSDavid du Colombier struct Fid
2217dd7cddfSDavid du Colombier {
2227dd7cddfSDavid du Colombier 	Fid **	owner;		/* null for root fids */
2237dd7cddfSDavid du Colombier 	Fid *	prev;
2247dd7cddfSDavid du Colombier 	Fid *	next;
2257dd7cddfSDavid du Colombier 	long	tstale;		/* auto-clunk */
2267dd7cddfSDavid du Colombier };
2277dd7cddfSDavid du Colombier 
2289a747e4fSDavid du Colombier enum
2299a747e4fSDavid du Colombier {
2309a747e4fSDavid du Colombier 	Maxfdata = 8192,
2319a747e4fSDavid du Colombier 	Maxstatdata = 2048,
2329a747e4fSDavid du Colombier };
2339a747e4fSDavid du Colombier 
2347dd7cddfSDavid du Colombier struct Session
2357dd7cddfSDavid du Colombier {
2367dd7cddfSDavid du Colombier 	Session *next;
2377dd7cddfSDavid du Colombier 	char *	service;		/* for dial */
2387dd7cddfSDavid du Colombier 	int	fd;
2399a747e4fSDavid du Colombier #define CHALLEN 1
2407dd7cddfSDavid du Colombier 	char	cchal[CHALLEN];		/* client challenge */
2417dd7cddfSDavid du Colombier 	char	schal[CHALLEN];		/* server challenge */
2429a747e4fSDavid du Colombier 	char	authid[ANAMELEN];	/* server encryption uid */
2437dd7cddfSDavid du Colombier 	char	authdom[DOMLEN];	/* server encryption domain */
2447dd7cddfSDavid du Colombier 	char *	spec;			/* for attach */
2457dd7cddfSDavid du Colombier 	Xfile *	root;			/* to answer mount rpc */
2467dd7cddfSDavid du Colombier 	ushort	tag;
2477dd7cddfSDavid du Colombier 	Fcall	f;
2489a747e4fSDavid du Colombier 	uchar	data[IOHDRSZ+Maxfdata];
2499a747e4fSDavid du Colombier 	uchar	statbuf[Maxstatdata];
2507dd7cddfSDavid du Colombier 	Fid *	free;			/* available */
2517dd7cddfSDavid du Colombier 	Fid	list;			/* active, most-recently-used order */
2527dd7cddfSDavid du Colombier 	Fid	fids[1000];
2537dd7cddfSDavid du Colombier 	int	noauth;
2547dd7cddfSDavid du Colombier };
2557dd7cddfSDavid du Colombier 
2567dd7cddfSDavid du Colombier struct Chalstuff
2577dd7cddfSDavid du Colombier {
2587dd7cddfSDavid du Colombier 	Chalstuff *next;
2597dd7cddfSDavid du Colombier 	Xfid *	xf;
2607dd7cddfSDavid du Colombier 	long	tstale;
2617dd7cddfSDavid du Colombier 	Chalstate;
2627dd7cddfSDavid du Colombier };
2637dd7cddfSDavid du Colombier 
2647dd7cddfSDavid du Colombier extern int	rpcdebug;
2659a747e4fSDavid du Colombier extern int	p9debug;
2667dd7cddfSDavid du Colombier extern int	chatty;
2677dd7cddfSDavid du Colombier extern void	(*rpcalarm)(void);
2687dd7cddfSDavid du Colombier extern long	starttime;
2697dd7cddfSDavid du Colombier extern long	nfstime;
2707dd7cddfSDavid du Colombier extern char *	config;
2717dd7cddfSDavid du Colombier extern int	staletime;
2729a747e4fSDavid du Colombier extern int	messagesize;
273363b328dSDavid du Colombier extern char *	commonopts;
274