[Python-checkins] gh-98030: socket: add missing TCP socket options (#98031)

gpshead webhook-mailer at python.org
Wed Dec 7 23:59:43 EST 2022


https://github.com/python/cpython/commit/cce836296016463032495c6ca739ab469ed13d3c
commit: cce836296016463032495c6ca739ab469ed13d3c
branch: main
author: Matthieu Baerts <matttbe at gmail.com>
committer: gpshead <greg at krypto.org>
date: 2022-12-07T20:59:37-08:00
summary:

gh-98030: socket: add missing TCP socket options (#98031)

A few TCP socket options have been added to the Linux kernel these last
few years.

This commit adds all the ones available in Linux 6.0:

  https://elixir.bootlin.com/linux/v6.0/source/include/uapi/linux/tcp.h#L91

While at it, the TCP_FASTOPEN option has been moved lower in the list
just to keep the same order as in tcp.h to ease future synchronisations.

Signed-off-by: Matthieu Baerts <matthieu.baerts at tessares.net>

files:
A Misc/NEWS.d/next/Library/2022-10-07-18-16-00.gh-issue-98030.2oQCZy.rst
M Doc/library/socket.rst
M Modules/socketmodule.c

diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst
index c946407ea1d8..de2e1aa3868b 100644
--- a/Doc/library/socket.rst
+++ b/Doc/library/socket.rst
@@ -428,7 +428,14 @@ Constants
    .. versionchanged:: 3.12
       Added ``SO_RTABLE`` and ``SO_USER_COOKIE``. On OpenBSD
       and FreeBSD respectively those constants can be used in the same way that
-      ``SO_MARK`` is used on Linux.
+      ``SO_MARK`` is used on Linux. Also added missing TCP socket options from
+      Linux: ``TCP_MD5SIG``, ``TCP_THIN_LINEAR_TIMEOUTS``, ``TCP_THIN_DUPACK``,
+      ``TCP_REPAIR``, ``TCP_REPAIR_QUEUE``, ``TCP_QUEUE_SEQ``,
+      ``TCP_REPAIR_OPTIONS``, ``TCP_TIMESTAMP``, ``TCP_CC_INFO``,
+      ``TCP_SAVE_SYN``, ``TCP_SAVED_SYN``, ``TCP_REPAIR_WINDOW``,
+      ``TCP_FASTOPEN_CONNECT``, ``TCP_ULP``, ``TCP_MD5SIG_EXT``,
+      ``TCP_FASTOPEN_KEY``, ``TCP_FASTOPEN_NO_COOKIE``,
+      ``TCP_ZEROCOPY_RECEIVE``, ``TCP_INQ``, ``TCP_TX_DELAY``.
 
 .. data:: AF_CAN
           PF_CAN
diff --git a/Misc/NEWS.d/next/Library/2022-10-07-18-16-00.gh-issue-98030.2oQCZy.rst b/Misc/NEWS.d/next/Library/2022-10-07-18-16-00.gh-issue-98030.2oQCZy.rst
new file mode 100644
index 000000000000..7768ed0817e8
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-10-07-18-16-00.gh-issue-98030.2oQCZy.rst
@@ -0,0 +1,7 @@
+Add missing TCP socket options from Linux: ``TCP_MD5SIG``,
+``TCP_THIN_LINEAR_TIMEOUTS``, ``TCP_THIN_DUPACK``, ``TCP_REPAIR``,
+``TCP_REPAIR_QUEUE``, ``TCP_QUEUE_SEQ``, ``TCP_REPAIR_OPTIONS``,
+``TCP_TIMESTAMP``, ``TCP_CC_INFO``, ``TCP_SAVE_SYN``, ``TCP_SAVED_SYN``,
+``TCP_REPAIR_WINDOW``, ``TCP_FASTOPEN_CONNECT``, ``TCP_ULP``,
+``TCP_MD5SIG_EXT``, ``TCP_FASTOPEN_KEY``, ``TCP_FASTOPEN_NO_COOKIE``,
+``TCP_ZEROCOPY_RECEIVE``, ``TCP_INQ``, ``TCP_TX_DELAY``.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 7d438448ef36..2c59c2f2c89b 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -8484,18 +8484,78 @@ PyInit__socket(void)
 #ifdef  TCP_QUICKACK
     PyModule_AddIntMacro(m, TCP_QUICKACK);
 #endif
-#ifdef  TCP_FASTOPEN
-    PyModule_AddIntMacro(m, TCP_FASTOPEN);
-#endif
 #ifdef  TCP_CONGESTION
     PyModule_AddIntMacro(m, TCP_CONGESTION);
 #endif
+#ifdef  TCP_MD5SIG
+    PyModule_AddIntMacro(m, TCP_MD5SIG);
+#endif
+#ifdef  TCP_THIN_LINEAR_TIMEOUTS
+    PyModule_AddIntMacro(m, TCP_THIN_LINEAR_TIMEOUTS);
+#endif
+#ifdef  TCP_THIN_DUPACK
+    PyModule_AddIntMacro(m, TCP_THIN_DUPACK);
+#endif
 #ifdef  TCP_USER_TIMEOUT
     PyModule_AddIntMacro(m, TCP_USER_TIMEOUT);
 #endif
+#ifdef  TCP_REPAIR
+    PyModule_AddIntMacro(m, TCP_REPAIR);
+#endif
+#ifdef  TCP_REPAIR_QUEUE
+    PyModule_AddIntMacro(m, TCP_REPAIR_QUEUE);
+#endif
+#ifdef  TCP_QUEUE_SEQ
+    PyModule_AddIntMacro(m, TCP_QUEUE_SEQ);
+#endif
+#ifdef  TCP_REPAIR_OPTIONS
+    PyModule_AddIntMacro(m, TCP_REPAIR_OPTIONS);
+#endif
+#ifdef  TCP_FASTOPEN
+    PyModule_AddIntMacro(m, TCP_FASTOPEN);
+#endif
+#ifdef  TCP_TIMESTAMP
+    PyModule_AddIntMacro(m, TCP_TIMESTAMP);
+#endif
 #ifdef  TCP_NOTSENT_LOWAT
     PyModule_AddIntMacro(m, TCP_NOTSENT_LOWAT);
 #endif
+#ifdef  TCP_CC_INFO
+    PyModule_AddIntMacro(m, TCP_CC_INFO);
+#endif
+#ifdef  TCP_SAVE_SYN
+    PyModule_AddIntMacro(m, TCP_SAVE_SYN);
+#endif
+#ifdef  TCP_SAVED_SYN
+    PyModule_AddIntMacro(m, TCP_SAVED_SYN);
+#endif
+#ifdef  TCP_REPAIR_WINDOW
+    PyModule_AddIntMacro(m, TCP_REPAIR_WINDOW);
+#endif
+#ifdef  TCP_FASTOPEN_CONNECT
+    PyModule_AddIntMacro(m, TCP_FASTOPEN_CONNECT);
+#endif
+#ifdef  TCP_ULP
+    PyModule_AddIntMacro(m, TCP_ULP);
+#endif
+#ifdef  TCP_MD5SIG_EXT
+    PyModule_AddIntMacro(m, TCP_MD5SIG_EXT);
+#endif
+#ifdef  TCP_FASTOPEN_KEY
+    PyModule_AddIntMacro(m, TCP_FASTOPEN_KEY);
+#endif
+#ifdef  TCP_FASTOPEN_NO_COOKIE
+    PyModule_AddIntMacro(m, TCP_FASTOPEN_NO_COOKIE);
+#endif
+#ifdef  TCP_ZEROCOPY_RECEIVE
+    PyModule_AddIntMacro(m, TCP_ZEROCOPY_RECEIVE);
+#endif
+#ifdef  TCP_INQ
+    PyModule_AddIntMacro(m, TCP_INQ);
+#endif
+#ifdef  TCP_TX_DELAY
+    PyModule_AddIntMacro(m, TCP_TX_DELAY);
+#endif
 
     /* IPX options */
 #ifdef  IPX_TYPE



More information about the Python-checkins mailing list