fix bug that can cause recursive .forward files to fail
[unix-history] / usr / src / sys / netinet / tcp.h
index 648ec87..b945f85 100644 (file)
@@ -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;
        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 */