tcb.h,v

来自「TCP-IP红宝书源代码」· H,V 代码 · 共 267 行

H,V
267
字号
head	1.3;
access;
symbols;
locks
	dls:1.3; strict;
comment	@ * @;


1.3
date	97.09.21.19.26.19;	author dls;	state Dist;
branches;
next	1.2;

1.2
date	94.05.10.20.48.46;	author dls;	state Old;
branches;
next	1.1;

1.1
date	94.01.14.03.54.06;	author dls;	state v2e1;
branches;
next	;


desc
@@


1.3
log
@pre-3e code
@
text
@/* tcb.h */

/* TCP endpoint types */

#define	TCPT_SERVER		1
#define	TCPT_CONNECTION		2
#define	TCPT_MASTER		3

/* TCP process info */
extern	PROCESS		tcpinp();
#define	TCPISTK		1024		/* stack size for TCP input	*/
#define	TCPIPRI		100		/* TCP runs at high priority	*/
#define	TCPINAM		"tcpinp"	/* name of TCP input process	*/
#define	TCPIARGC	0		/* count of args to tcpin 	*/

extern	PROCESS		tcpout();
#define	TCPOSTK		1024		/* stack size for TCP output	*/
#define	TCPOPRI		100		/* TCP runs at high priority	*/
#define	TCPONAM		"tcpout"	/* name of TCP output process	*/
#define	TCPOARGC	0		/* count of args to tcpout 	*/

#define	TCPQLEN		20	/* TCP process port queue length	*/

/* TCP exceptional conditions */

#define	TCPE_RESET		-1
#define	TCPE_REFUSED		-2
#define	TCPE_TOOBIG		-3
#define	TCPE_TIMEDOUT		-4
#define	TCPE_URGENTMODE		-5
#define	TCPE_NORMALMODE		-6

/* string equivalents of TCPE_*, in "tcpswitch.c" */
extern	char	*tcperror[];

#define	READERS		1
#define	WRITERS		2

/* tcb_flags */

#define	TCBF_NEEDOUT	0x01	/* we need output			*/
#define	TCBF_FIRSTSEND	0x02	/* no data to ACK			*/
#define	TCBF_GOTFIN	0x04	/* no more to receive			*/
#define	TCBF_RDONE	0x08	/* no more receive data to process	*/
#define	TCBF_SDONE	0x10	/* no more send data allowed		*/
#define	TCBF_DELACK	0x20	/* do delayed ACK's			*/
#define	TCBF_BUFFER	0x40	/* do TCP buffering (default no)	*/
#define	TCBF_PUSH	0x80	/* got a push; deliver what we have	*/
#define	TCBF_SNDFIN	0x100	/* user process has closed; send a FIN	*/
#define	TCBF_RUPOK	0x200	/* receive urgent pointer is valid	*/
#define	TCBF_SUPOK	0x400	/* send urgent pointer is valid		*/

/* aliases, for user programs */

#define	TCP_BUFFER	TCBF_BUFFER
#define	TCP_DELACK	TCBF_DELACK

/* receive segment reassembly data */

#define	NTCPFRAG	10

struct tcb {
	short	tcb_state;	/* TCP state				*/
	short	tcb_ostate;	/* output state				*/
	short	tcb_type;	/* TCP type (SERVER, CLIENT)		*/
	int	tcb_mutex;	/* tcb mutual exclusion			*/
	short	tcb_code;	/* TCP code for next packet		*/
	short	tcb_flags;	/* various TCB state flags		*/
	short	tcb_error;	/* return error for user side		*/

	IPaddr	tcb_rip;	/* remote IP address			*/
	u_short	tcb_rport;	/* remote TCP port			*/
	IPaddr	tcb_lip;	/* local IP address			*/
	u_short	tcb_lport;	/* local TCP port			*/
	struct	netif	*tcb_pni; /* pointer to our interface		*/

	tcpseq	tcb_suna;	/* send unacked				*/
	tcpseq	tcb_snext;	/* send next				*/
	tcpseq	tcb_slast;	/* sequence of FIN, if TCBF_SNDFIN	*/
	long	tcb_swindow;	/* send window size (octets)		*/
	tcpseq	tcb_lwseq;	/* sequence of last window update	*/
	tcpseq	tcb_lwack;	/* ack seq of last window update	*/
	int	tcb_cwnd;	/* congestion window size (octets)	*/
	int	tcb_ssthresh;	/* slow start threshold (octets)	*/
	int	tcb_smss;	/* send max segment size (octets)	*/
	tcpseq	tcb_iss;	/* initial send sequence		*/

	int	tcb_srt;	/* smoothed Round Trip Time		*/
	int	tcb_rtde;	/* Round Trip deviation estimator	*/
	int	tcb_persist;	/* persist timeout value		*/
	int	tcb_keep;	/* keepalive timeout value		*/
	int	tcb_rexmt;	/* retransmit timeout value		*/
	int	tcb_rexmtcount;	/* number of rexmts sent		*/

	tcpseq	tcb_rnext;	/* receive next				*/
	tcpseq	tcb_rupseq;	/* receive urgent pointer		*/
	tcpseq	tcb_supseq;	/* send urgent pointer			*/

	int	tcb_lqsize;	/* listen queue size (SERVERs)		*/
	int	tcb_listenq;	/* listen queue port (SERVERs)		*/
	struct tcb *tcb_pptcb;	/* pointer to parent TCB (for ACCEPT)	*/
	int	tcb_ocsem;	/* open/close semaphore 		*/
	int	tcb_dvnum;	/* TCP slave pseudo device number	*/

	int	tcb_ssema;	/* send semaphore			*/
	u_char	*tcb_sndbuf;	/* send buffer				*/
	int	tcb_sbstart;	/* start of valid data			*/
	int	tcb_sbcount;	/* data character count			*/
	int	tcb_sbsize;	/* send buffer size (bytes)		*/

	int	tcb_rsema;	/* receive semaphore			*/
	u_char	*tcb_rcvbuf;	/* receive buffer (circular)		*/
	int	tcb_rbstart;	/* start of valid data			*/
	int	tcb_rbcount;	/* data character count			*/
	int	tcb_rbsize;	/* receive buffer size (bytes)		*/
	int	tcb_rmss;	/* receive max segment size		*/
	tcpseq	tcb_cwin;	/* seq of currently advertised window	*/
	int	tcb_rsegq;	/* segment fragment queue		*/
	tcpseq	tcb_finseq;	/* FIN sequence number, or 0		*/
	tcpseq	tcb_pushseq;	/* PUSH sequence number, or 0		*/
};
/* TCP fragment structure */

struct tcpfrag {
	tcpseq	tf_seq;
	int	tf_len;
};
/* TCP control() functions */

#define	TCPC_LISTENQ	0x01	/* set the listen queue length		*/
#define	TCPC_ACCEPT	0x02	/* wait for connect after passive open	*/
#define	TCPC_STATUS	0x03	/* return status info (all, for master)	*/
#define	TCPC_SOPT	0x04	/* set user-selectable options		*/
#define	TCPC_COPT	0x05	/* clear user-selectable options	*/
#define	TCPC_SENDURG	0x06	/* write urgent data			*/

/* global state information */

extern int tcps_oport;	/* Xinu port to start TCP output		*/
extern int tcps_iport;	/* Xinu port to send TCP input packets		*/
extern int tcps_lqsize;	/* default SERVER queue size			*/
extern int tcps_tmutex;	/* tcb table mutex				*/

extern int	(*tcpswitch[])(), (*tcposwitch[])();

#ifdef	Ntcp
extern struct	tcb	tcbtab[];
#endif
@


1.2
log
@*** empty log message ***
@
text
@d11 1
a11 1
#define	TCPISTK		4096		/* stack size for TCP input	*/
d17 1
a17 1
#define	TCPOSTK		4096		/* stack size for TCP output	*/
d72 1
a72 1
	short	tcb_rport;	/* remote TCP port			*/
d74 1
a74 1
	short	tcb_lport;	/* local TCP port			*/
@


1.1
log
@Initial revision
@
text
@d1 1
a1 1
/* tcb.h - RUDK, SUDK, RUHK, SUHK */
d10 1
a10 1
extern	int		tcpinp();
d16 1
a16 1
extern	int		tcpout();
a23 3
#define	TCPMAXURG  MAXNETBUF	/* maximum urgent data buffer size	*/
#define	TCPUQLEN	5	/* TCP urgent queue lengths		*/

d50 2
a61 24
/* URG queue element data */

#define	UQTSIZE	(2*Ntcp)	/* (total) max # pending urgent segs	*/

#define	UQS_FREE	0
#define	UQS_ALLOC	1

struct	uqe {
	int	uq_state;	/* UQS_* above				*/
	tcpseq	uq_seq;		/* start sequence of this buffer	*/
	int	uq_len;		/* length of this buffer		*/
	char	*uq_data;	/* data (0 if on urgent hole queue)	*/
};

/* compute urgent data send and receive queue keys			*/
#define	SUDK(ptcb, seq)	(ptcb->tcb_sudseq - (seq))
#define	SUHK(ptcb, seq)	(ptcb->tcb_suhseq - (seq))
#define	RUDK(ptcb, seq)	(ptcb->tcb_rudseq - (seq))
#define	RUHK(ptcb, seq)	(ptcb->tcb_ruhseq - (seq))

extern	Bool	uqidone;
extern	struct	uqe uqtab[];
extern	int	uqmutex;

d96 2
a97 9

	tcpseq	tcb_rudseq;	/* base sequence for rudq entries	*/
	int	tcb_rudq;	/* receive urgent data queue		*/
	tcpseq	tcb_ruhseq;	/* base sequence for ruhq entries	*/
	int	tcb_ruhq;	/* receive urgent hole queue		*/
	int	tcb_sudseq;	/* base sequence for sudq entries	*/
	int	tcb_sudq;	/* send urgent data queue		*/
	int	tcb_suhseq;	/* base sequence for suhq entries	*/
	int	tcb_suhq;	/* send urgent hole queue		*/
d106 1
a106 1
	char	*tcb_sndbuf;	/* send buffer				*/
d112 1
a112 1
	char	*tcb_rcvbuf;	/* receive buffer (circular)		*/
@

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?