diff mbox series

Update netinet/tcp.h from Linux 4.18

Message ID alpine.DEB.2.20.1808171622280.14945@digraph.polyomino.org.uk
State New
Headers show
Series Update netinet/tcp.h from Linux 4.18 | expand

Commit Message

Joseph Myers Aug. 17, 2018, 4:22 p.m. UTC
This patch adds constants from netinet/tcp.h in Linux 4.18, and an
associated struct tcp_zerocopy_receive, to sysdeps/gnu/netinet/tcp.h.
The new TCP_REPAIR_* constants seemed sufficiently related to those
already present to include them.

Note that this patch does not include additions to struct tcp_info;
there are many other elements in this structure in the Linux kernel
that are not included in the glibc version (which was last extended in
2007, it seems).  Such additions to the end of the structure may be OK
with the expected way it is used (size passed explicitly to the kernel
with getsockopt), but in principle any change to the size of a type
provided by glibc is an ABI change for external applications /
libraries using that type in their ABIs, and has the associated risks
of such a change.

Tested for x86_64.

2018-08-17  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/gnu/netinet/tcp.h (TCP_ZEROCOPY_RECEIVE): New macro.
	(TCP_INQ): Likewise.
	(TCP_CM_INQ): Likewise.
	(TCP_REPAIR_ON): Likewise.
	(TCP_REPAIR_OFF): Likewise.
	(TCP_REPAIR_OFF_NO_WP): Likewise.
	(struct tcp_zerocopy_receive): New type.

Comments

Joseph Myers Aug. 20, 2018, 11:27 a.m. UTC | #1
Ping.  This patch 
<https://sourceware.org/ml/libc-alpha/2018-08/msg00399.html> is pending 
review.
Florian Weimer Aug. 20, 2018, 12:37 p.m. UTC | #2
On 08/17/2018 06:22 PM, Joseph Myers wrote:
> 2018-08-17  Joseph Myers<joseph@codesourcery.com>
> 
> 	* sysdeps/gnu/netinet/tcp.h (TCP_ZEROCOPY_RECEIVE): New macro.
> 	(TCP_INQ): Likewise.
> 	(TCP_CM_INQ): Likewise.
> 	(TCP_REPAIR_ON): Likewise.
> 	(TCP_REPAIR_OFF): Likewise.
> 	(TCP_REPAIR_OFF_NO_WP): Likewise.
> 	(struct tcp_zerocopy_receive): New type.

The definitions are okay.

> +struct tcp_zerocopy_receive
> +{
> +  uint64_t address; /* Address of mapping.  */
> +  uint32_t length; /* Number of bytes to map/mapped.  */
> +  uint32_t recv_skip_hint; /* Amount of bytes to skip.  */
> +};

I'm not sure if the field comments are helpful because the in/out 
information is missing.

Thanks,
Florian
Joseph Myers Aug. 20, 2018, 8:21 p.m. UTC | #3
On Mon, 20 Aug 2018, Florian Weimer wrote:

> > +struct tcp_zerocopy_receive
> > +{
> > +  uint64_t address; /* Address of mapping.  */
> > +  uint32_t length; /* Number of bytes to map/mapped.  */
> > +  uint32_t recv_skip_hint; /* Amount of bytes to skip.  */
> > +};
> 
> I'm not sure if the field comments are helpful because the in/out information
> is missing.

How about this patch version which includes that information?


Update netinet/tcp.h from Linux 4.18.

This patch adds constants from netinet/tcp.h in Linux 4.18, and an
associated struct tcp_zerocopy_receive, to sysdeps/gnu/netinet/tcp.h.
The new TCP_REPAIR_* constants seemed sufficiently related to those
already present to include them.

Note that this patch does not include additions to struct tcp_info;
there are many other elements in this structure in the Linux kernel
that are not included in the glibc version (which was last extended in
2007, it seems).  Such additions to the end of the structure may be OK
with the expected way it is used (size passed explicitly to the kernel
with getsockopt), but in principle any change to the size of a type
provided by glibc is an ABI change for external applications /
libraries using that type in their ABIs, and has the associated risks
of such a change.

Tested for x86_64.

2018-08-20  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/gnu/netinet/tcp.h (TCP_ZEROCOPY_RECEIVE): New macro.
	(TCP_INQ): Likewise.
	(TCP_CM_INQ): Likewise.
	(TCP_REPAIR_ON): Likewise.
	(TCP_REPAIR_OFF): Likewise.
	(TCP_REPAIR_OFF_NO_WP): Likewise.
	(struct tcp_zerocopy_receive): New type.

diff --git a/sysdeps/gnu/netinet/tcp.h b/sysdeps/gnu/netinet/tcp.h
index 44a72e929e..1a164a9649 100644
--- a/sysdeps/gnu/netinet/tcp.h
+++ b/sysdeps/gnu/netinet/tcp.h
@@ -75,6 +75,14 @@
 #define TCP_MD5SIG_EXT		 32 /* TCP MD5 Signature with extensions.  */
 #define TCP_FASTOPEN_KEY	 33 /* Set the key for Fast Open (cookie).  */
 #define TCP_FASTOPEN_NO_COOKIE	 34 /* Enable TFO without a TFO cookie.  */
+#define TCP_ZEROCOPY_RECEIVE	 35
+#define TCP_INQ			 36 /* Notify bytes available to read
+				       as a cmsg on read.  */
+#define TCP_CM_INQ		 TCP_INQ
+
+#define TCP_REPAIR_ON		 1
+#define TCP_REPAIR_OFF		 0
+#define TCP_REPAIR_OFF_NO_WP	 -1
 
 #ifdef __USE_MISC
 # include <sys/types.h>
@@ -327,6 +335,14 @@ struct tcp_repair_window
   uint32_t rcv_wup;
 };
 
+/* For use with TCP_ZEROCOPY_RECEIVE.  */
+struct tcp_zerocopy_receive
+{
+  uint64_t address; /* In: address of mapping.  */
+  uint32_t length; /* In/out: number of bytes to map/mapped.  */
+  uint32_t recv_skip_hint; /* Out: amount of bytes to skip.  */
+};
+
 #endif /* Misc.  */
 
 #endif /* netinet/tcp.h */
Florian Weimer Aug. 21, 2018, 12:57 p.m. UTC | #4
On 08/20/2018 10:21 PM, Joseph Myers wrote:
> +/* For use with TCP_ZEROCOPY_RECEIVE.  */
> +struct tcp_zerocopy_receive
> +{
> +  uint64_t address; /* In: address of mapping.  */
> +  uint32_t length; /* In/out: number of bytes to map/mapped.  */
> +  uint32_t recv_skip_hint; /* Out: amount of bytes to skip.  */
> +};

Works for me.

Thanks,
Florian
diff mbox series

Patch

diff --git a/sysdeps/gnu/netinet/tcp.h b/sysdeps/gnu/netinet/tcp.h
index 44a72e9..1be2dc7 100644
--- a/sysdeps/gnu/netinet/tcp.h
+++ b/sysdeps/gnu/netinet/tcp.h
@@ -75,6 +75,14 @@ 
 #define TCP_MD5SIG_EXT		 32 /* TCP MD5 Signature with extensions.  */
 #define TCP_FASTOPEN_KEY	 33 /* Set the key for Fast Open (cookie).  */
 #define TCP_FASTOPEN_NO_COOKIE	 34 /* Enable TFO without a TFO cookie.  */
+#define TCP_ZEROCOPY_RECEIVE	 35
+#define TCP_INQ			 36 /* Notify bytes available to read
+				       as a cmsg on read.  */
+#define TCP_CM_INQ		 TCP_INQ
+
+#define TCP_REPAIR_ON		 1
+#define TCP_REPAIR_OFF		 0
+#define TCP_REPAIR_OFF_NO_WP	 -1
 
 #ifdef __USE_MISC
 # include <sys/types.h>
@@ -327,6 +335,14 @@  struct tcp_repair_window
   uint32_t rcv_wup;
 };
 
+/* For use with TCP_ZEROCOPY_RECEIVE.  */
+struct tcp_zerocopy_receive
+{
+  uint64_t address; /* Address of mapping.  */
+  uint32_t length; /* Number of bytes to map/mapped.  */
+  uint32_t recv_skip_hint; /* Amount of bytes to skip.  */
+};
+
 #endif /* Misc.  */
 
 #endif /* netinet/tcp.h */