X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/53a5409ebc57f165caf4d645703d954ada29be2c..a2cdf9f6b08eceef2637b965669f0e87065b27fb:/usr/src/sys/netinet/tcp.h diff --git a/usr/src/sys/netinet/tcp.h b/usr/src/sys/netinet/tcp.h index 648ec8768b..b945f85de9 100644 --- a/usr/src/sys/netinet/tcp.h +++ b/usr/src/sys/netinet/tcp.h @@ -1,38 +1,87 @@ -/* tcp.h 1.15 81/11/14 */ - /* - * Tcp header. Fits over the ip header after option removed. + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * + * %sccs.include.redist.c% * - * SHOULD MAKE A CLEAN HEADER FOR USE BY USERS. + * @(#)tcp.h 8.1 (Berkeley) %G% */ -struct tcpiphdr { - struct tcpiphdr *t_next; /* -> next tcp on rcv chain */ - struct tcpiphdr *t_prev; /* -> prev tcp on rcv chain */ - u_char t_x1; /* (unused) */ - u_char t_pr; /* protocol */ -/* by rights, t_len should be a u_short, but this makes operations */ -/* on it very dangerous as comparisons become unsigned and comparing */ -/* against negative numbers then fails... we don't expect any > 32767 */ -/* byte segments, so pragmatically delcare it to be a short */ - short t_len; /* seg length */ - struct ip_addr t_s; /* source internet address */ - struct ip_addr 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 */ +#ifndef BYTE_ORDER +/* + * Definitions for byte order, + * according to byte significance from low address to high. + */ +#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) */ + +#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 header. + * Per RFC 793, September, 1981. + */ +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 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 */ +#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 TCPOPT_EOL 0 +#define TCPOPT_NOP 1 +#define TCPOPT_MAXSEG 2 +#define TCPOLEN_MAXSEG 4 +#define TCPOPT_WINDOW 3 +#define TCPOLEN_WINDOW 3 +#define TCPOPT_SACK_PERMITTED 4 /* Experimental */ +#define TCPOLEN_SACK_PERMITTED 2 +#define TCPOPT_SACK 5 /* Experimental */ +#define TCPOPT_TIMESTAMP 8 +#define TCPOLEN_TIMESTAMP 10 +#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ + +#define TCPOPT_TSTAMP_HDR \ + (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) + +/* + * 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 TCP_MAXWIN 65535 /* largest value for (unscaled) window */ + +#define TCP_MAX_WINSHIFT 14 /* maximum window shift */ + +/* + * 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 */