Merge in T/TCP TCP header file changes.
This commit is contained in:
parent
b185266a8a
commit
eb6ad69646
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=6247
@ -31,13 +31,17 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcp.h 8.1 (Berkeley) 6/10/93
|
||||
* $Id: tcp.h,v 1.2 1994/08/02 07:48:52 davidg Exp $
|
||||
* $Id: tcp.h,v 1.3 1994/08/21 05:27:34 paul Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_TCP_H_
|
||||
#define _NETINET_TCP_H_
|
||||
|
||||
typedef u_long tcp_seq;
|
||||
#ifdef TTCP
|
||||
typedef u_long tcp_cc; /* connection count per rfc1644 */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TCP header.
|
||||
* Per RFC 793, September, 1981.
|
||||
@ -62,6 +66,9 @@ struct tcphdr {
|
||||
#define TH_PUSH 0x08
|
||||
#define TH_ACK 0x10
|
||||
#define TH_URG 0x20
|
||||
#ifdef TTCP
|
||||
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG)
|
||||
#endif
|
||||
u_short th_win; /* window */
|
||||
u_short th_sum; /* checksum */
|
||||
u_short th_urp; /* urgent pointer */
|
||||
@ -79,10 +86,19 @@ struct tcphdr {
|
||||
#define TCPOPT_TIMESTAMP 8
|
||||
#define TCPOLEN_TIMESTAMP 10
|
||||
#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */
|
||||
|
||||
#define TCPOPT_TSTAMP_HDR \
|
||||
#define TCPOPT_TSTAMP_HDR \
|
||||
(TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
|
||||
|
||||
#ifdef TTCP
|
||||
#define TCPOPT_CC 11 /* CC options: RFC-1644 */
|
||||
#define TCPOPT_CCNEW 12
|
||||
#define TCPOPT_CCECHO 13
|
||||
#define TCPOLEN_CC 6
|
||||
#define TCPOLEN_CC_APPA (TCPOLEN_CC+2)
|
||||
#define TCPOPT_CC_HDR(ccopt) \
|
||||
(TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Default maximum segment size for TCP.
|
||||
* With an IP MSS of 576, this is 536,
|
||||
@ -92,13 +108,24 @@ struct tcphdr {
|
||||
#define TCP_MSS 512
|
||||
|
||||
#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */
|
||||
#ifdef TTCP
|
||||
#define TTCP_CLIENT_SND_WND 4096 /* dflt send window for T/TCP client */
|
||||
#endif
|
||||
|
||||
#define TCP_MAX_WINSHIFT 14 /* maximum window shift */
|
||||
|
||||
#define TCP_MAXHLEN (0xf<<2) /* max length of header in bytes */
|
||||
#define TCP_MAXOLEN (TCP_MAXHLEN - sizeof(struct tcphdr))
|
||||
/* max space left for options */
|
||||
|
||||
/*
|
||||
* User-settable options (used with setsockopt).
|
||||
*/
|
||||
#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */
|
||||
#define TCP_MAXSEG 0x02 /* set maximum segment size */
|
||||
#ifdef TTCP
|
||||
#define TCP_NOPUSH 0x04 /* don't push last block of write */
|
||||
#define TCP_NOOPT 0x08 /* don't use TCP options */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcp_seq.h 8.1 (Berkeley) 6/10/93
|
||||
* $Id: tcp_seq.h,v 1.2 1994/08/02 07:49:06 davidg Exp $
|
||||
* $Id: tcp_seq.h,v 1.3 1994/08/21 05:27:37 paul Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_TCP_SEQ_H_
|
||||
@ -46,6 +46,25 @@
|
||||
#define SEQ_GT(a,b) ((int)((a)-(b)) > 0)
|
||||
#define SEQ_GEQ(a,b) ((int)((a)-(b)) >= 0)
|
||||
|
||||
/* for modulo comparisons of timestamps */
|
||||
#define TSTMP_LT(a,b) ((int)((a)-(b)) < 0)
|
||||
#define TSTMP_GEQ(a,b) ((int)((a)-(b)) >= 0)
|
||||
|
||||
#ifdef TTCP
|
||||
/*
|
||||
* TCP connection counts are 32 bit integers operated
|
||||
* on with modular arithmetic. These macros can be
|
||||
* used to compare such integers.
|
||||
*/
|
||||
#define CC_LT(a,b) ((int)((a)-(b)) < 0)
|
||||
#define CC_LEQ(a,b) ((int)((a)-(b)) <= 0)
|
||||
#define CC_GT(a,b) ((int)((a)-(b)) > 0)
|
||||
#define CC_GEQ(a,b) ((int)((a)-(b)) >= 0)
|
||||
|
||||
/* Macro to increment a CC: skip 0 which has a special meaning */
|
||||
#define CC_INC(c) (++(c) == 0 ? ++(c) : (c))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macros to initialize tcp sequence numbers for
|
||||
* send and receive from initial send and receive
|
||||
@ -60,7 +79,13 @@
|
||||
|
||||
#define TCP_ISSINCR (125*1024) /* increment for tcp_iss each second */
|
||||
|
||||
#define TCP_PAWS_IDLE (24 * 24 * 60 * 60 * PR_SLOWHZ)
|
||||
/* timestamp wrap-around time */
|
||||
|
||||
#ifdef KERNEL
|
||||
tcp_seq tcp_iss; /* tcp initial send seq # */
|
||||
#ifdef TTCP
|
||||
tcp_cc tcp_ccgen; /* global connection count */
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcp_timer.h 8.1 (Berkeley) 6/10/93
|
||||
* $Id: tcp_timer.h,v 1.3 1994/08/02 07:49:12 davidg Exp $
|
||||
* $Id: tcp_timer.h,v 1.4 1994/08/21 05:27:38 paul Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_TCP_TIMER_H_
|
||||
@ -103,6 +103,10 @@
|
||||
#define TCPTV_MIN ( 1*PR_SLOWHZ) /* minimum allowable value */
|
||||
#define TCPTV_REXMTMAX ( 64*PR_SLOWHZ) /* max allowable REXMT value */
|
||||
|
||||
#ifdef TTCP
|
||||
#define TCPTV_TWTRUNC 8 /* RTO factor to truncate TW */
|
||||
#endif
|
||||
|
||||
#define TCP_LINGERTIME 120 /* linger at most 2 minutes */
|
||||
|
||||
#define TCP_MAXRXTSHIFT 12 /* maximum retransmits */
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcp_var.h 8.3 (Berkeley) 4/10/94
|
||||
* $Id: tcp_var.h,v 1.2 1994/08/02 07:49:17 davidg Exp $
|
||||
* $Id: tcp_var.h,v 1.3 1994/08/21 05:27:39 paul Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_TCP_VAR_H_
|
||||
@ -52,6 +52,7 @@ struct tcpcb {
|
||||
short t_rxtcur; /* current retransmit value */
|
||||
short t_dupacks; /* consecutive dup acks recd */
|
||||
u_short t_maxseg; /* maximum segment size */
|
||||
u_short t_maxopd; /* mss plus options */
|
||||
char t_force; /* 1 if forcing out a byte */
|
||||
u_short t_flags;
|
||||
#define TF_ACKNOW 0x0001 /* ack peer immediately */
|
||||
@ -64,6 +65,13 @@ struct tcpcb {
|
||||
#define TF_REQ_TSTMP 0x0080 /* have/will request timestamps */
|
||||
#define TF_RCVD_TSTMP 0x0100 /* a timestamp was received in SYN */
|
||||
#define TF_SACK_PERMIT 0x0200 /* other side said I could SACK */
|
||||
#ifdef TTCP
|
||||
#define TF_NEEDSYN 0x0400 /* send SYN (implicit state) */
|
||||
#define TF_NEEDFIN 0x0800 /* send FIN (implicit state) */
|
||||
#define TF_NOPUSH 0x1000 /* don't push */
|
||||
#define TF_REQ_CC 0x2000 /* have/will request CC */
|
||||
#define TF_RCVD_CC 0x4000 /* a CC was received in SYN */
|
||||
#endif
|
||||
|
||||
struct tcpiphdr *t_template; /* skeletal packet for transmit */
|
||||
struct inpcb *t_inpcb; /* back pointer to internet pcb */
|
||||
@ -126,11 +134,54 @@ struct tcpcb {
|
||||
u_long ts_recent; /* timestamp echo data */
|
||||
u_long ts_recent_age; /* when last updated */
|
||||
tcp_seq last_ack_sent;
|
||||
#ifdef TTCP
|
||||
/* RFC 1644 variables */
|
||||
tcp_cc cc_send; /* send connection count */
|
||||
tcp_cc cc_recv; /* receive connection count */
|
||||
u_long t_duration; /* connection duration */
|
||||
#endif /* TTCP */
|
||||
|
||||
/* TUBA stuff */
|
||||
caddr_t t_tuba_pcb; /* next level down pcb for TCP over z */
|
||||
};
|
||||
|
||||
#ifdef TTCP
|
||||
/*
|
||||
* Structure to hold TCP options that are only used during segment
|
||||
* processing (in tcp_input), but not held in the tcpcb.
|
||||
* It's basically used to reduce the number of parameters
|
||||
* to tcp_dooptions.
|
||||
*/
|
||||
struct tcpopt {
|
||||
u_long to_flag; /* which options are present */
|
||||
#define TOF_TS 0x0001 /* timestamp */
|
||||
#define TOF_CC 0x0002 /* CC and CCnew are exclusive */
|
||||
#define TOF_CCNEW 0x0004
|
||||
#define TOF_CCECHO 0x0008
|
||||
u_long to_tsval;
|
||||
u_long to_tsecr;
|
||||
tcp_cc to_cc; /* holds CC or CCnew */
|
||||
tcp_cc to_ccecho;
|
||||
};
|
||||
|
||||
/*
|
||||
* The TAO cache entry which is stored in the protocol family specific
|
||||
* portion of the route metrics.
|
||||
*/
|
||||
struct rmxp_tao {
|
||||
tcp_cc tao_cc; /* latest CC in valid SYN */
|
||||
tcp_cc tao_ccsent; /* latest CC sent to peer */
|
||||
u_short tao_mssopt; /* peer's cached MSS */
|
||||
#ifdef notyet
|
||||
u_short tao_flags; /* cache status flags */
|
||||
#define TAOF_DONT 0x0001 /* peer doesn't understand rfc1644 */
|
||||
#define TAOF_OK 0x0002 /* peer does understand rfc1644 */
|
||||
#define TAOF_UNDEF 0 /* we don't know yet */
|
||||
#endif /* notyet */
|
||||
};
|
||||
#define rmx_taop(r) ((struct rmxp_tao *)&(r).rmx_pspec)
|
||||
#endif /* TTCP */
|
||||
|
||||
#define intotcpcb(ip) ((struct tcpcb *)(ip)->inp_ppcb)
|
||||
#define sototcpcb(so) (intotcpcb(sotoinpcb(so)))
|
||||
|
||||
@ -146,7 +197,7 @@ struct tcpcb {
|
||||
#define TCP_RTT_SCALE 8 /* multiplier for srtt; 3 bits frac. */
|
||||
#define TCP_RTT_SHIFT 3 /* shift for srtt; 3 bits frac. */
|
||||
#define TCP_RTTVAR_SCALE 4 /* multiplier for rttvar; 2 bits */
|
||||
#define TCP_RTTVAR_SHIFT 2 /* multiplier for rttvar; 2 bits */
|
||||
#define TCP_RTTVAR_SHIFT 2 /* shift for rttvar; 2 bits */
|
||||
|
||||
/*
|
||||
* The initial retransmission should happen at rtt + 4 * rttvar.
|
||||
@ -234,6 +285,21 @@ struct tcpstat {
|
||||
u_long tcps_pcbcachemiss;
|
||||
};
|
||||
|
||||
/*
|
||||
* Names for TCP sysctl objects
|
||||
*/
|
||||
#define TCPCTL_DO_RFC1323 1 /* use RFC-1323 extensions */
|
||||
#define TCPCTL_DO_RFC1644 2 /* use RFC-1644 extensions */
|
||||
#define TCPCTL_MSSDFLT 3 /* MSS default */
|
||||
#define TCPCTL_MAXID 4
|
||||
|
||||
#define TCPCTL_NAMES { \
|
||||
{ 0, 0 }, \
|
||||
{ "do_rfc1323", CTLTYPE_INT }, \
|
||||
{ "do_rfc1644", CTLTYPE_INT }, \
|
||||
{ "mssdflt", CTLTYPE_INT }, \
|
||||
}
|
||||
|
||||
#ifdef KERNEL
|
||||
struct inpcb tcb; /* head of queue of active tcpcb's */
|
||||
struct tcpstat tcpstat; /* tcp statistics */
|
||||
@ -243,19 +309,32 @@ int tcp_attach __P((struct socket *));
|
||||
void tcp_canceltimers __P((struct tcpcb *));
|
||||
struct tcpcb *
|
||||
tcp_close __P((struct tcpcb *));
|
||||
#ifdef TTCP
|
||||
int tcp_connect __P((struct tcpcb *, struct mbuf *));
|
||||
#endif
|
||||
void tcp_ctlinput __P((int, struct sockaddr *, struct ip *));
|
||||
int tcp_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
|
||||
struct tcpcb *
|
||||
tcp_disconnect __P((struct tcpcb *));
|
||||
struct tcpcb *
|
||||
tcp_drop __P((struct tcpcb *, int));
|
||||
#ifdef TTCP
|
||||
void tcp_dooptions __P((struct tcpcb *,
|
||||
u_char *, int, struct tcpiphdr *, struct tcpopt *));
|
||||
#else
|
||||
void tcp_dooptions __P((struct tcpcb *,
|
||||
u_char *, int, struct tcpiphdr *, int *, u_long *, u_long *));
|
||||
#endif
|
||||
void tcp_drain __P((void));
|
||||
void tcp_fasttimo __P((void));
|
||||
#ifdef TTCP
|
||||
struct rmxp_tao *
|
||||
tcp_gettaocache __P((struct inpcb *));
|
||||
#endif
|
||||
void tcp_init __P((void));
|
||||
void tcp_input __P((struct mbuf *, int));
|
||||
int tcp_mss __P((struct tcpcb *, u_int));
|
||||
void tcp_mss __P((struct tcpcb *, int));
|
||||
int tcp_mssopt __P((struct tcpcb *));
|
||||
struct tcpcb *
|
||||
tcp_newtcpcb __P((struct inpcb *));
|
||||
void tcp_notify __P((struct inpcb *, int));
|
||||
@ -266,8 +345,11 @@ void tcp_quench __P((struct inpcb *, int));
|
||||
int tcp_reass __P((struct tcpcb *, struct tcpiphdr *, struct mbuf *));
|
||||
void tcp_respond __P((struct tcpcb *,
|
||||
struct tcpiphdr *, struct mbuf *, u_long, u_long, int));
|
||||
struct rtentry *
|
||||
tcp_rtlookup __P((struct inpcb *));
|
||||
void tcp_setpersist __P((struct tcpcb *));
|
||||
void tcp_slowtimo __P((void));
|
||||
int tcp_sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
|
||||
struct tcpiphdr *
|
||||
tcp_template __P((struct tcpcb *));
|
||||
struct tcpcb *
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcpip.h 8.1 (Berkeley) 6/10/93
|
||||
* $Id: tcpip.h,v 1.2 1994/08/02 07:49:19 davidg Exp $
|
||||
* $Id: tcpip.h,v 1.3 1994/08/21 05:27:40 paul Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_TCPIP_H_
|
||||
@ -44,6 +44,16 @@ struct tcpiphdr {
|
||||
struct ipovly ti_i; /* overlaid ip structure */
|
||||
struct tcphdr ti_t; /* tcp header */
|
||||
};
|
||||
#ifdef notyet
|
||||
/*
|
||||
* Tcp+ip header, after ip options removed but including TCP options.
|
||||
*/
|
||||
struct full_tcpiphdr {
|
||||
struct ipovly ti_i; /* overlaid ip structure */
|
||||
struct tcphdr ti_t; /* tcp header */
|
||||
char ti_o[TCP_MAXOLEN]; /* space for tcp options */
|
||||
};
|
||||
#endif /* notyet */
|
||||
#define ti_next ti_i.ih_next
|
||||
#define ti_prev ti_i.ih_prev
|
||||
#define ti_x1 ti_i.ih_x1
|
||||
|
Loading…
Reference in New Issue
Block a user