From 9a45bfe6f4aedd2a9d94cb12aa276057b15d8b63 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Sun, 17 May 2020 08:32:46 +0200 Subject: bpo-35569: Expose RFC 3542 IPv6 socket options on macOS (GH-19526) --- Lib/test/test_socket.py | 31 ++++++++++++++++++++++ .../macOS/2020-04-15-00-02-47.bpo-35569.02_1MV.rst | 1 + setup.py | 8 ++++-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/macOS/2020-04-15-00-02-47.bpo-35569.02_1MV.rst diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 4a436cf..aefba4f 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -959,6 +959,37 @@ class GeneralModuleTests(unittest.TestCase): socket.IPPROTO_L2TP socket.IPPROTO_SCTP + @unittest.skipUnless(sys.platform == 'darwin', 'macOS specific test') + @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'IPv6 required for this test') + def test3542SocketOptions(self): + # Ref. issue #35569 and https://tools.ietf.org/html/rfc3542 + opts = { + 'IPV6_CHECKSUM', + 'IPV6_DONTFRAG', + 'IPV6_DSTOPTS', + 'IPV6_HOPLIMIT', + 'IPV6_HOPOPTS', + 'IPV6_NEXTHOP', + 'IPV6_PATHMTU', + 'IPV6_PKTINFO', + 'IPV6_RECVDSTOPTS', + 'IPV6_RECVHOPLIMIT', + 'IPV6_RECVHOPOPTS', + 'IPV6_RECVPATHMTU', + 'IPV6_RECVPKTINFO', + 'IPV6_RECVRTHDR', + 'IPV6_RECVTCLASS', + 'IPV6_RTHDR', + 'IPV6_RTHDRDSTOPTS', + 'IPV6_RTHDR_TYPE_0', + 'IPV6_TCLASS', + 'IPV6_USE_MIN_MTU', + } + for opt in opts: + self.assertTrue( + hasattr(socket, opt), f"Missing RFC3542 socket option '{opt}'" + ) + def testHostnameRes(self): # Testing hostname resolution mechanisms hostname = socket.gethostname() diff --git a/Misc/NEWS.d/next/macOS/2020-04-15-00-02-47.bpo-35569.02_1MV.rst b/Misc/NEWS.d/next/macOS/2020-04-15-00-02-47.bpo-35569.02_1MV.rst new file mode 100644 index 0000000..ed48efd --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2020-04-15-00-02-47.bpo-35569.02_1MV.rst @@ -0,0 +1 @@ +Expose RFC 3542 IPv6 socket options. diff --git a/setup.py b/setup.py index 68fc312..0f92a9c 100644 --- a/setup.py +++ b/setup.py @@ -1116,8 +1116,12 @@ class PyBuildExt(build_ext): def detect_socket(self): # socket(2) if not VXWORKS: - self.add(Extension('_socket', ['socketmodule.c'], - depends=['socketmodule.h'])) + kwargs = {'depends': ['socketmodule.h']} + if MACOS: + # Issue #35569: Expose RFC 3542 socket options. + kwargs['extra_compile_args'] = ['-D__APPLE_USE_RFC_3542'] + + self.add(Extension('_socket', ['socketmodule.c'], **kwargs)) elif self.compiler.find_library_file(self.lib_dirs, 'net'): libs = ['net'] self.add(Extension('_socket', ['socketmodule.c'], -- cgit v0.12