/****************************************************************************/ /* */ /* (c) Copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands */ /* */ /* This product is part of the Amoeba distributed operating system. */ /* */ /* Permission to use, sell, duplicate or disclose this software must be */ /* obtained in writing. Requests for such permissions may be sent to */ /* */ /* */ /* Dr. Andrew S. Tanenbaum */ /* Dept. of Mathematics and Computer Science */ /* Vrije Universiteit */ /* Postbus 7161 */ /* 1007 MC Amsterdam */ /* The Netherlands */ /* */ /****************************************************************************/ struct trans { char TS_state; /* see below */ char TS_flags; /* several flags - see below */ char TS_clident; /* ident number for client */ char TS_svident; /* ident number for server */ char TS_ident; /* transaction identifier */ char TS_seq; /* fragment sequence number */ char TS_count; /* max. number timer may expire */ char TS_signal; /* signal being sent to the server */ unshort TS_addr; /* network address of this task */ unshort TS_timer; /* timer, decremented every sweep */ unshort TS_cltim; /* client crash timer */ address TS_client; /* if serving: who's the client */ address TS_server; /* if in trans: who's the server */ port TS_portcache; /* this port was used the last time */ header *TS_rhdr; /* saved param in getreq or trans */ header *TS_xhdr; /* saved param in putrep or trans */ bufptr TS_rbuf; /* receiver buffer */ bufptr TS_xbuf; /* transmitter buffer */ unshort TS_rcnt; /* size of rbuf */ unshort TS_xcnt; /* size of xbuf */ unshort TS_offset; /* offset in buffer */ unshort TS_maxloc; /* max. location time in seconds */ long TS_totloc; /* total location time in ticks */ long TS_totsvr; /* total server time in ticks */ #ifdef BUFFERED address TS_sender; /* task that sent the buffer */ char *TS_savehdr; /* saved header pointer */ buffer TS_buffer; /* buffer */ unshort TS_bufcnt; /* buffer size */ unshort TS_what; /* REQUEST or REPLY */ #endif } tk_trans; #ifdef TRANS #define ts_state tk_trans.TS_state #define ts_flags tk_trans.TS_flags #define ts_clident tk_trans.TS_clident #define ts_svident tk_trans.TS_svident #define ts_ident tk_trans.TS_ident #define ts_seq tk_trans.TS_seq #define ts_timer tk_trans.TS_timer #define ts_count tk_trans.TS_count #define ts_signal tk_trans.TS_signal #define ts_addr tk_trans.TS_addr #define ts_cltim tk_trans.TS_cltim #define ts_client tk_trans.TS_client #define ts_server tk_trans.TS_server #define ts_portcache tk_trans.TS_portcache #define ts_rhdr tk_trans.TS_rhdr #define ts_xhdr tk_trans.TS_xhdr #define ts_rbuf tk_trans.TS_rbuf #define ts_xbuf tk_trans.TS_xbuf #define ts_rcnt tk_trans.TS_rcnt #define ts_xcnt tk_trans.TS_xcnt #define ts_offset tk_trans.TS_offset #define ts_maxloc tk_trans.TS_maxloc #define ts_totloc tk_trans.TS_totloc #define ts_totsvr tk_trans.TS_totsvr #define ts_sender tk_trans.TS_sender #define ts_savehdr tk_trans.TS_savehdr #define ts_buffer tk_trans.TS_buffer #define ts_bufcnt tk_trans.TS_bufcnt #define ts_what tk_trans.TS_what /* possible values of ts_state */ #define IDLE 0 #define SENDING 1 #define DONE 2 #define ACKED 3 #define NACKED 4 #define FAILED 5 #define WAITBUF 6 #define RECEIVING 7 #define ABORT 8 #define MEMFAULT 9 /* possible flags in ts_flags */ #define LOCATING bit(0) /* blocked in trans locating a port */ #define PUTREQ bit(1) /* blocked in trans sending a request */ #define GETREQ bit(2) /* blocked in getreq */ #define PUTREP bit(3) /* blocked in putrep */ #define GETREP bit(4) /* blocked in trans getting a reply */ #define SERVING bit(5) /* running between getreq and putrep */ #else #define tk_trans tk_dummy /* other modules must not touch it */ #endif