]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet/tcp.h
xnu-792.24.17.tar.gz
[apple/xnu.git] / bsd / netinet / tcp.h
index 30479bd881b9eb45bf003b35a67147e1ce7bae83..e6b102fda9b53aeb71f48b728c19167ab1320222 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 #ifndef _NETINET_TCP_H_
 #define _NETINET_TCP_H_
 #include <sys/appleapiopts.h>
 #ifndef _NETINET_TCP_H_
 #define _NETINET_TCP_H_
 #include <sys/appleapiopts.h>
+#include <sys/_types.h>
+#include <machine/endian.h>
 
 
-typedef        u_int32_t tcp_seq;
-typedef u_int32_t tcp_cc;              /* connection count per rfc1644 */
+#ifndef _POSIX_C_SOURCE
+typedef        __uint32_t tcp_seq;
+typedef __uint32_t tcp_cc;             /* connection count per rfc1644 */
 
 #define tcp6_seq       tcp_seq /* for KAME src sync over BSD*'s */
 #define tcp6hdr                tcphdr  /* for KAME src sync over BSD*'s */
 
 #define tcp6_seq       tcp_seq /* for KAME src sync over BSD*'s */
 #define tcp6hdr                tcphdr  /* for KAME src sync over BSD*'s */
@@ -70,19 +73,19 @@ typedef u_int32_t tcp_cc;           /* connection count per rfc1644 */
  * Per RFC 793, September, 1981.
  */
 struct tcphdr {
  * Per RFC 793, September, 1981.
  */
 struct tcphdr {
-       u_short th_sport;               /* source port */
-       u_short th_dport;               /* destination port */
+       unsigned short  th_sport;       /* source port */
+       unsigned short  th_dport;       /* destination port */
        tcp_seq th_seq;                 /* sequence number */
        tcp_seq th_ack;                 /* acknowledgement number */
        tcp_seq th_seq;                 /* sequence number */
        tcp_seq th_ack;                 /* acknowledgement number */
-#if BYTE_ORDER == LITTLE_ENDIAN
-       u_int   th_x2:4,                /* (unused) */
-               th_off:4;               /* data offset */
+#if __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN
+       unsigned int    th_x2:4,        /* (unused) */
+                       th_off:4;       /* data offset */
 #endif
 #endif
-#if BYTE_ORDER == BIG_ENDIAN
-       u_int   th_off:4,               /* data offset */
-               th_x2:4;                /* (unused) */
+#if __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN
+       unsigned int    th_off:4,       /* data offset */
+                       th_x2:4;        /* (unused) */
 #endif
 #endif
-       u_char  th_flags;
+       unsigned char   th_flags;
 #define        TH_FIN  0x01
 #define        TH_SYN  0x02
 #define        TH_RST  0x04
 #define        TH_FIN  0x01
 #define        TH_SYN  0x02
 #define        TH_RST  0x04
@@ -93,26 +96,29 @@ struct tcphdr {
 #define        TH_CWR  0x80
 #define        TH_FLAGS        (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
 
 #define        TH_CWR  0x80
 #define        TH_FLAGS        (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
 
-       u_short th_win;                 /* window */
-       u_short th_sum;                 /* checksum */
-       u_short th_urp;                 /* urgent pointer */
+       unsigned short  th_win;         /* window */
+       unsigned short  th_sum;         /* checksum */
+       unsigned short  th_urp;         /* urgent pointer */
 };
 
 #define        TCPOPT_EOL              0
 #define        TCPOPT_NOP              1
 #define        TCPOPT_MAXSEG           2
 };
 
 #define        TCPOPT_EOL              0
 #define        TCPOPT_NOP              1
 #define        TCPOPT_MAXSEG           2
-#define    TCPOLEN_MAXSEG              4
+#define TCPOLEN_MAXSEG         4
 #define TCPOPT_WINDOW          3
 #define TCPOPT_WINDOW          3
-#define    TCPOLEN_WINDOW              3
+#define TCPOLEN_WINDOW         3
 #define TCPOPT_SACK_PERMITTED  4               /* Experimental */
 #define TCPOPT_SACK_PERMITTED  4               /* Experimental */
-#define    TCPOLEN_SACK_PERMITTED      2
+#define TCPOLEN_SACK_PERMITTED 2
 #define TCPOPT_SACK            5               /* Experimental */
 #define TCPOPT_SACK            5               /* Experimental */
+#define TCPOLEN_SACK           8               /* len of sack block */
 #define TCPOPT_TIMESTAMP       8
 #define TCPOPT_TIMESTAMP       8
-#define    TCPOLEN_TIMESTAMP           10
-#define    TCPOLEN_TSTAMP_APPA         (TCPOLEN_TIMESTAMP+2) /* appendix A */
-#define    TCPOPT_TSTAMP_HDR           \
+#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)
 
     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
 
+#define        MAX_TCPOPTLEN           40      /* Absolute maximum TCP options len */
+
 #define        TCPOPT_CC               11              /* CC options: RFC-1644 */
 #define TCPOPT_CCNEW           12
 #define TCPOPT_CCECHO          13
 #define        TCPOPT_CC               11              /* CC options: RFC-1644 */
 #define TCPOPT_CCNEW           12
 #define TCPOPT_CCECHO          13
@@ -120,6 +126,17 @@ struct tcphdr {
 #define           TCPOLEN_CC_APPA              (TCPOLEN_CC+2)
 #define           TCPOPT_CC_HDR(ccopt)         \
     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC)
 #define           TCPOLEN_CC_APPA              (TCPOLEN_CC+2)
 #define           TCPOPT_CC_HDR(ccopt)         \
     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC)
+#define        TCPOPT_SIGNATURE                19      /* Keyed MD5: RFC 2385 */
+#define           TCPOLEN_SIGNATURE            18
+
+/* Option definitions */
+#define TCPOPT_SACK_PERMIT_HDR \
+(TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_SACK_PERMITTED<<8|TCPOLEN_SACK_PERMITTED)
+#define        TCPOPT_SACK_HDR         (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_SACK<<8)
+/* Miscellaneous constants */
+#define        MAX_SACK_BLKS   6       /* Max # SACK blocks stored at sender side */
+#define        TCP_MAX_SACK    3       /* MAX # SACKs sent in any segment */
+
 
 /*
  * Default maximum segment size for TCP.
 
 /*
  * Default maximum segment size for TCP.
@@ -140,6 +157,15 @@ struct tcphdr {
  */
 #define        TCP_MINMSS 216
 
  */
 #define        TCP_MINMSS 216
 
+/*
+ * TCP_MINMSSOVERLOAD is defined to be 1000 which should cover any type
+ * of interactive TCP session.
+ * See tcp_subr.c tcp_minmssoverload SYSCTL declaration and tcp_input.c
+ * for more comments.
+ * Setting this to "0" disables the minmssoverload check.
+ */
+#define        TCP_MINMSSOVERLOAD 1000
+
 /*
  * Default maximum segment size for TCP6.
  * With an IP6 MSS of 1280, this is 1220,
 /*
  * Default maximum segment size for TCP6.
  * With an IP6 MSS of 1280, this is 1220,
@@ -158,14 +184,18 @@ struct tcphdr {
 #define TCP_MAXHLEN    (0xf<<2)        /* max length of header in bytes */
 #define TCP_MAXOLEN    (TCP_MAXHLEN - sizeof(struct tcphdr))
                                        /* max space left for options */
 #define TCP_MAXHLEN    (0xf<<2)        /* max length of header in bytes */
 #define TCP_MAXOLEN    (TCP_MAXHLEN - sizeof(struct tcphdr))
                                        /* max space left for options */
+#endif /* _POSIX_C_SOURCE */
 
 /*
  * User-settable options (used with setsockopt).
  */
 #define        TCP_NODELAY     0x01    /* don't delay send to coalesce packets */
 
 /*
  * 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 */
-#define TCP_NOPUSH     0x04    /* don't push last block of write */
-#define TCP_NOOPT      0x08    /* don't use TCP options */
+#ifndef _POSIX_C_SOURCE
+#define TCP_MAXSEG             0x02    /* set maximum segment size */
+#define TCP_NOPUSH             0x04    /* don't push last block of write */
+#define TCP_NOOPT              0x08    /* don't use TCP options */
 #define TCP_KEEPALIVE  0x10    /* idle time used when SO_KEEPALIVE is enabled */
 
 #define TCP_KEEPALIVE  0x10    /* idle time used when SO_KEEPALIVE is enabled */
 
+#endif /* _POSIX_C_SOURCE */
+
 #endif
 #endif