Skip to content

Commit cce8362

Browse files
authored
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 <[email protected]>
1 parent 90d5c9b commit cce8362

File tree

3 files changed

+78
-4
lines changed

3 files changed

+78
-4
lines changed

Doc/library/socket.rst

+8-1
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,14 @@ Constants
428428
.. versionchanged:: 3.12
429429
Added ``SO_RTABLE`` and ``SO_USER_COOKIE``. On OpenBSD
430430
and FreeBSD respectively those constants can be used in the same way that
431-
``SO_MARK`` is used on Linux.
431+
``SO_MARK`` is used on Linux. Also added missing TCP socket options from
432+
Linux: ``TCP_MD5SIG``, ``TCP_THIN_LINEAR_TIMEOUTS``, ``TCP_THIN_DUPACK``,
433+
``TCP_REPAIR``, ``TCP_REPAIR_QUEUE``, ``TCP_QUEUE_SEQ``,
434+
``TCP_REPAIR_OPTIONS``, ``TCP_TIMESTAMP``, ``TCP_CC_INFO``,
435+
``TCP_SAVE_SYN``, ``TCP_SAVED_SYN``, ``TCP_REPAIR_WINDOW``,
436+
``TCP_FASTOPEN_CONNECT``, ``TCP_ULP``, ``TCP_MD5SIG_EXT``,
437+
``TCP_FASTOPEN_KEY``, ``TCP_FASTOPEN_NO_COOKIE``,
438+
``TCP_ZEROCOPY_RECEIVE``, ``TCP_INQ``, ``TCP_TX_DELAY``.
432439

433440
.. data:: AF_CAN
434441
PF_CAN
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Add missing TCP socket options from Linux: ``TCP_MD5SIG``,
2+
``TCP_THIN_LINEAR_TIMEOUTS``, ``TCP_THIN_DUPACK``, ``TCP_REPAIR``,
3+
``TCP_REPAIR_QUEUE``, ``TCP_QUEUE_SEQ``, ``TCP_REPAIR_OPTIONS``,
4+
``TCP_TIMESTAMP``, ``TCP_CC_INFO``, ``TCP_SAVE_SYN``, ``TCP_SAVED_SYN``,
5+
``TCP_REPAIR_WINDOW``, ``TCP_FASTOPEN_CONNECT``, ``TCP_ULP``,
6+
``TCP_MD5SIG_EXT``, ``TCP_FASTOPEN_KEY``, ``TCP_FASTOPEN_NO_COOKIE``,
7+
``TCP_ZEROCOPY_RECEIVE``, ``TCP_INQ``, ``TCP_TX_DELAY``.

Modules/socketmodule.c

+63-3
Original file line numberDiff line numberDiff line change
@@ -8484,18 +8484,78 @@ PyInit__socket(void)
84848484
#ifdef TCP_QUICKACK
84858485
PyModule_AddIntMacro(m, TCP_QUICKACK);
84868486
#endif
8487-
#ifdef TCP_FASTOPEN
8488-
PyModule_AddIntMacro(m, TCP_FASTOPEN);
8489-
#endif
84908487
#ifdef TCP_CONGESTION
84918488
PyModule_AddIntMacro(m, TCP_CONGESTION);
84928489
#endif
8490+
#ifdef TCP_MD5SIG
8491+
PyModule_AddIntMacro(m, TCP_MD5SIG);
8492+
#endif
8493+
#ifdef TCP_THIN_LINEAR_TIMEOUTS
8494+
PyModule_AddIntMacro(m, TCP_THIN_LINEAR_TIMEOUTS);
8495+
#endif
8496+
#ifdef TCP_THIN_DUPACK
8497+
PyModule_AddIntMacro(m, TCP_THIN_DUPACK);
8498+
#endif
84938499
#ifdef TCP_USER_TIMEOUT
84948500
PyModule_AddIntMacro(m, TCP_USER_TIMEOUT);
84958501
#endif
8502+
#ifdef TCP_REPAIR
8503+
PyModule_AddIntMacro(m, TCP_REPAIR);
8504+
#endif
8505+
#ifdef TCP_REPAIR_QUEUE
8506+
PyModule_AddIntMacro(m, TCP_REPAIR_QUEUE);
8507+
#endif
8508+
#ifdef TCP_QUEUE_SEQ
8509+
PyModule_AddIntMacro(m, TCP_QUEUE_SEQ);
8510+
#endif
8511+
#ifdef TCP_REPAIR_OPTIONS
8512+
PyModule_AddIntMacro(m, TCP_REPAIR_OPTIONS);
8513+
#endif
8514+
#ifdef TCP_FASTOPEN
8515+
PyModule_AddIntMacro(m, TCP_FASTOPEN);
8516+
#endif
8517+
#ifdef TCP_TIMESTAMP
8518+
PyModule_AddIntMacro(m, TCP_TIMESTAMP);
8519+
#endif
84968520
#ifdef TCP_NOTSENT_LOWAT
84978521
PyModule_AddIntMacro(m, TCP_NOTSENT_LOWAT);
84988522
#endif
8523+
#ifdef TCP_CC_INFO
8524+
PyModule_AddIntMacro(m, TCP_CC_INFO);
8525+
#endif
8526+
#ifdef TCP_SAVE_SYN
8527+
PyModule_AddIntMacro(m, TCP_SAVE_SYN);
8528+
#endif
8529+
#ifdef TCP_SAVED_SYN
8530+
PyModule_AddIntMacro(m, TCP_SAVED_SYN);
8531+
#endif
8532+
#ifdef TCP_REPAIR_WINDOW
8533+
PyModule_AddIntMacro(m, TCP_REPAIR_WINDOW);
8534+
#endif
8535+
#ifdef TCP_FASTOPEN_CONNECT
8536+
PyModule_AddIntMacro(m, TCP_FASTOPEN_CONNECT);
8537+
#endif
8538+
#ifdef TCP_ULP
8539+
PyModule_AddIntMacro(m, TCP_ULP);
8540+
#endif
8541+
#ifdef TCP_MD5SIG_EXT
8542+
PyModule_AddIntMacro(m, TCP_MD5SIG_EXT);
8543+
#endif
8544+
#ifdef TCP_FASTOPEN_KEY
8545+
PyModule_AddIntMacro(m, TCP_FASTOPEN_KEY);
8546+
#endif
8547+
#ifdef TCP_FASTOPEN_NO_COOKIE
8548+
PyModule_AddIntMacro(m, TCP_FASTOPEN_NO_COOKIE);
8549+
#endif
8550+
#ifdef TCP_ZEROCOPY_RECEIVE
8551+
PyModule_AddIntMacro(m, TCP_ZEROCOPY_RECEIVE);
8552+
#endif
8553+
#ifdef TCP_INQ
8554+
PyModule_AddIntMacro(m, TCP_INQ);
8555+
#endif
8556+
#ifdef TCP_TX_DELAY
8557+
PyModule_AddIntMacro(m, TCP_TX_DELAY);
8558+
#endif
84998559

85008560
/* IPX options */
85018561
#ifdef IPX_TYPE

0 commit comments

Comments
 (0)