X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/6124afca958210114435f8c29e9d812fdce9d560..c59af027e112b534ee7b9ff495682274cc16e205:/usr/src/sys/netinet/tcp.h diff --git a/usr/src/sys/netinet/tcp.h b/usr/src/sys/netinet/tcp.h index 899cab814f..eae3c64bbc 100644 --- a/usr/src/sys/netinet/tcp.h +++ b/usr/src/sys/netinet/tcp.h @@ -1,151 +1,73 @@ -/* tcp.h 1.6 81/10/25 */ - /* - * Tcp header (fits over ip header). + * Copyright (c) 1982, 1986 Regents of the University of California. + * All rights reserved. + * + * %sccs.include.redist.c% + * + * @(#)tcp.h 7.7 (Berkeley) %G% */ -struct th { - struct th *t_next; /* -> next tcp on rcv chain */ - struct th *t_prev; /* -> prev tcp on rcv chain */ - u_char t_x1; /* (unused) */ - u_char t_pr; /* protocol */ - u_short t_len; /* seg length */ - struct socket t_s; /* source internet address */ - struct socket t_d; /* destination internet address */ - u_short t_src; /* source port */ - u_short t_dst; /* destination port */ - seq_t t_seq; /* sequence number */ - seq_t t_ackno; /* acknowledgement number */ -#define t_end(x) (x->t_seq + x->t_len - 1) - u_char - t_x2:4, /* (unused) */ - t_off:4; /* data offset */ - u_char th_flags; -#define TH_FIN 001 -#define TH_SYN 002 -#define TH_RST 004 -#define TH_EOL 010 -#define TH_ACK 020 -#define TH_URG 040 - u_short t_win; /* window */ - u_short t_sum; /* checksum */ - u_short t_urp; /* urgent pointer */ -}; - +#ifndef BYTE_ORDER /* - * Tcp control block. + * Definitions for byte order, + * according to byte significance from low address to high. */ -struct tcb { - struct th *t_rcv_next; /* first el on rcv queue */ - struct th *t_rcv_prev; /* last el on rcv queue */ - struct tcb *t_tcb_next; /* next tcb */ - struct tcb *t_tcb_prev; /* next tcb */ - struct ucb *t_ucb; /* ucb */ - struct mbuf *t_rcv_unack; /* unacked message queue */ - seq_t iss; /* initial send seq # */ - seq_t irs; /* initial recv seq # */ - seq_t rcv_urp; /* rcv urgent pointer */ - seq_t rcv_nxt; /* next seq # to rcv */ - seq_t rcv_end; /* rcv eol pointer */ - seq_t snd_off; /* seq # of first datum in send buf */ - seq_t seq_fin; /* seq # of FIN sent */ - seq_t snd_end; /* send eol pointer */ - seq_t snd_urp; /* snd urgent pointer */ - seq_t snd_lst; /* seq # of last sent datum */ - seq_t snd_nxt; /* seq # of next datum to send */ - seq_t snd_una; /* seq # of first unacked datum */ - seq_t snd_wl; /* seq # of last sent window */ - seq_t snd_hi; /* highest seq # sent */ - seq_t snd_wnd; /* send window max */ - seq_t t_rexmt_val; /* val saved in rexmt timer */ - seq_t t_rtl_val; /* val saved in rexmt too long timer */ - seq_t t_xmt_val; /* seq # sent when xmt timer started */ - - /* various flags and state variables */ +#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */ +#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ +#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */ - u_short tc_flags; -#define TC_ACK_DUE 0x0001 /* must we send ACK */ -#define TC_CANCELLED 0x0002 /* retransmit timer cancelled */ -#define TC_DROPPED_TXT 0x0004 /* dropped incoming data */ -#define TC_FIN_RCVD 0x0008 /* FIN received */ -#define TC_FORCE_ONE 0x0010 /* force sending of one byte */ -#define TC_NEW_WINDOW 0x0020 /* received new window size */ -#define TC_REXMT 0x0040 /* this msg is a retransmission */ -#define TC_SND_FIN 0x0080 /* FIN should be sent */ -#define TC_SND_RST 0x0100 /* RST should be sent */ -#define TC_SND_URG 0x0200 /* urgent data to send */ -#define TC_SYN_ACKED 0x0400 /* SYN has been ACKed */ -#define TC_SYN_RCVD 0x0800 /* SYN has been received */ -#define TC_USR_CLOSED 0x1000 /* user has closed connection */ -#define TC_WAITED_2_ML 0x2000 /* wait time for FIN ACK is up */ -#define TC_NET_KEEP 0x4000 /* don't free this net input */ -#define TC_USR_ABORT 0x8000 /* user has closed and does not expect - to receive any more data */ - - u_short t_lport; /* local port */ - u_short t_fport; /* foreign port */ - u_char t_state; /* state of this connection */ - u_char t_xmtime; /* current rexmt time */ - - /* timers */ - - u_char t_init; /* initialization too long */ - u_char t_rexmt; /* retransmission */ - u_char t_rexmttl; /* retransmit too long */ - u_char t_persist; /* retransmit persistance */ - u_char t_finack; /* fin acknowledged */ - u_char t_xmt; /* round trip transmission time */ -}; +#ifdef vax +#define BYTE_ORDER LITTLE_ENDIAN +#else +#define BYTE_ORDER BIG_ENDIAN /* mc68000, tahoe, most others */ +#endif +#endif BYTE_ORDER +typedef u_long tcp_seq; /* - * Tcp machine predicates + * TCP header. + * Per RFC 793, September, 1981. */ -#define ack_ok(x, y) \ - (((y)->th_flags&TH_ACK)==0 || \ - ((x)->iss < (y)->t_ackno && (y)->t_ackno <= (x)->snd_hi)) - -#define syn_ok(x, y) \ - ((y)->th_flags&TH_SYN) +struct tcphdr { + u_short th_sport; /* source port */ + u_short th_dport; /* destination port */ + tcp_seq th_seq; /* sequence number */ + tcp_seq th_ack; /* acknowledgement number */ +#if BYTE_ORDER == LITTLE_ENDIAN + u_char th_x2:4, /* (unused) */ + th_off:4; /* data offset */ +#endif +#if BYTE_ORDER == BIG_ENDIAN + u_char th_off:4, /* data offset */ + th_x2:4; /* (unused) */ +#endif + u_char th_flags; +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PUSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 + u_short th_win; /* window */ + u_short th_sum; /* checksum */ + u_short th_urp; /* urgent pointer */ +}; -#define ack_fin(x, y) \ - ((x)->seq_fin > (x)->iss && (y)->t_ackno > (x)->seq_fin) +#define TCPOPT_EOL 0 +#define TCPOPT_NOP 1 +#define TCPOPT_MAXSEG 2 -#define rcv_empty(x) \ - (((x)->tc_flags&TC_USR_ABORT) || \ - ((x)->t_ucb->uc_rbuf == NULL && (x)->t_rcv_next == (x)->t_rcv_prev)) +/* + * Default maximum segment size for TCP. + * With an IP MSS of 576, this is 536, + * but 512 is probably more convenient. + * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). + */ +#define TCP_MSS 512 -#define ISSINCR 128 /* increment for iss each second */ -#define TCPROTO 6 /* TCP-4 protocol number */ -#define TCPSIZE 20 /* size of TCP leader (bytes) */ -#define T_2ML 10 /* 2*maximum packet lifetime */ -#define T_PERS 5 /* persist time */ -#define T_INIT 30 /* init too long timeout */ -#define T_REXMT 1 /* base for retransmission time */ -#define T_REXMTTL 30 /* retransmit too long timeout */ -#define T_REMAX 30 /* maximum retransmission time */ -#define ACTIVE 1 /* active open */ -#define PASSIVE 0 /* passive open */ +#define TCP_MAXWIN 65535 /* largest value for window */ -#ifdef TCPDEBUG -#define TDBSIZE 50 /* - * Tcp debugging record. + * User-settable options (used with setsockopt). */ -struct tcp_debug { - long td_tod; /* time of day */ - struct tcb *td_tcb; /* -> tcb */ - char td_old; /* old state */ - char td_inp; /* input */ - char td_tim; /* timer id */ - char td_new; /* new state */ - seq_t td_sno; /* seq_t number */ - seq_t td_ano; /* acknowledgement */ - u_short td_wno; /* window */ - u_short td_lno; /* length */ - u_char td_flg; /* message flags */ -}; -#ifdef KERNEL -int tcpconsdebug; /* set to 1 traces on console */ -struct tcp_debug tcp_debug[TDBSIZE]; -int tdbx; /* rotating index into tcp_debug */ -#endif -#endif +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_MAXSEG 0x02 /* set maximum segment size */