[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#705630: libc6-dev: Defines missing for TCP options



Package: libc6-dev
Version: 2.13-38
Severity: wishlist
Tags: upstream patch

(submitting this on behalf of the CC target, since it blocks his email?)

Though supported in the default kernel, the defines for the TCP_THIN* and several
other fully supported TCP socket options are missing from tcp.h. This makes it
very hard to build applications that utilize these features.

I have backported the relevant patch from upstream eglibc and included it below.

diff -urB eglibc-2.13.orig/sysdeps/gnu/netinet/tcp.h eglibc-2.13/sysdeps/gnu/netinet/tcp.h
--- eglibc-2.13.orig/sysdeps/gnu/netinet/tcp.h  2007-10-15 16:14:17.000000000 -0400
+++ eglibc-2.13/sysdeps/gnu/netinet/tcp.h       2013-04-16 15:10:29.000000000 -0400
@@ -37,20 +37,24 @@
 /*
  * User-settable options (used with setsockopt).
  */
-#define        TCP_NODELAY      1      /* Don't delay send to coalesce packets  */
-#define        TCP_MAXSEG       2      /* Set maximum segment size  */
-#define TCP_CORK        3      /* Control sending of partial frames  */
-#define TCP_KEEPIDLE    4      /* Start keeplives after this period */
-#define TCP_KEEPINTVL   5      /* Interval between keepalives */
-#define TCP_KEEPCNT     6      /* Number of keepalives before death */
-#define TCP_SYNCNT      7      /* Number of SYN retransmits */
-#define TCP_LINGER2     8      /* Life time of orphaned FIN-WAIT-2 state */
-#define TCP_DEFER_ACCEPT 9     /* Wake up listener only when data arrive */
-#define TCP_WINDOW_CLAMP 10    /* Bound advertised window */
-#define TCP_INFO        11     /* Information about this connection. */
-#define        TCP_QUICKACK     12     /* Bock/reenable quick ACKs.  */
-#define TCP_CONGESTION  13     /* Congestion control algorithm.  */
-#define TCP_MD5SIG      14     /* TCP MD5 Signature (RFC2385) */
+#define        TCP_NODELAY              1  /* Don't delay send to coalesce packets  */
+#define        TCP_MAXSEG               2  /* Set maximum segment size  */
+#define TCP_CORK                3  /* Control sending of partial frames  */
+#define TCP_KEEPIDLE            4  /* Start keeplives after this period */
+#define TCP_KEEPINTVL           5  /* Interval between keepalives */
+#define TCP_KEEPCNT             6  /* Number of keepalives before death */
+#define TCP_SYNCNT              7  /* Number of SYN retransmits */
+#define TCP_LINGER2             8  /* Life time of orphaned FIN-WAIT-2 state */
+#define TCP_DEFER_ACCEPT        9  /* Wake up listener only when data arrive */
+#define TCP_WINDOW_CLAMP        10 /* Bound advertised window */
+#define TCP_INFO                11 /* Information about this connection. */
+#define        TCP_QUICKACK             12 /* Bock/reenable quick ACKs.  */
+#define TCP_CONGESTION          13 /* Congestion control algorithm.  */
+#define TCP_MD5SIG              14 /* TCP MD5 Signature (RFC2385) */
+#define TCP_COOKIE_TRANSACTIONS         15 /* TCP Cookie Transactions */
+#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/
+#define TCP_THIN_DUPACK                 17 /* Fast retrans. after 1 dupack */
+#define TCP_USER_TIMEOUT        18 /* How long for loss retry before timeout */

 #ifdef __USE_MISC
 # include <sys/types.h>
@@ -173,7 +177,8 @@
 # define TCPI_OPT_TIMESTAMPS   1
 # define TCPI_OPT_SACK         2
 # define TCPI_OPT_WSCALE       4
-# define TCPI_OPT_ECN          8
+# define TCPI_OPT_ECN          8  /* ECN was negociated at TCP session init */
+# define TCPI_OPT_ECN_SEEN     16 /* we received at least one packet with ECT */

 /* Values for tcpi_state.  */
 enum tcp_ca_state
@@ -241,6 +246,33 @@
   u_int8_t     tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* Key (binary).  */
 };

+/* For cookie transactions socket options.  */
+#define TCP_COOKIE_MIN         8               /*  64-bits */
+#define TCP_COOKIE_MAX         16              /* 128-bits */
+#define TCP_COOKIE_PAIR_SIZE   (2*TCP_COOKIE_MAX)
+
+/* Flags for both getsockopt and setsockopt */
+#define TCP_COOKIE_IN_ALWAYS   (1 << 0)        /* Discard SYN without cookie */
+#define TCP_COOKIE_OUT_NEVER   (1 << 1)        /* Prohibit outgoing cookies,
+                                                * supercedes everything. */
+
+/* Flags for getsockopt */
+#define TCP_S_DATA_IN          (1 << 2)        /* Was data received? */
+#define TCP_S_DATA_OUT         (1 << 3)        /* Was data sent? */
+
+#define TCP_MSS_DEFAULT                 536U   /* IPv4 (RFC1122, RFC2581) */
+#define TCP_MSS_DESIRED                1220U   /* IPv6 (tunneled), EDNS0 (RFC3226) */
+
+struct tcp_cookie_transactions
+{
+  u_int16_t    tcpct_flags;
+  u_int8_t     __tcpct_pad1;
+  u_int8_t     tcpct_cookie_desired;
+  u_int16_t    tcpct_s_data_desired;
+  u_int16_t    tcpct_used;
+  u_int8_t     tcpct_value[TCP_MSS_DEFAULT];
+};
+
 #endif /* Misc.  */

 #endif /* netinet/tcp.h */


Reply to: