@@ -309,6 +309,40 @@ if_indextoname(index) -- return the corresponding interface name\n\
309309# include <fcntl.h>
310310# endif
311311
312+ /* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */
313+ #ifdef MS_WINDOWS
314+ #define IPPROTO_ICMP IPPROTO_ICMP
315+ #define IPPROTO_IGMP IPPROTO_IGMP
316+ #define IPPROTO_GGP IPPROTO_GGP
317+ #define IPPROTO_TCP IPPROTO_TCP
318+ #define IPPROTO_PUP IPPROTO_PUP
319+ #define IPPROTO_UDP IPPROTO_UDP
320+ #define IPPROTO_IDP IPPROTO_IDP
321+ #define IPPROTO_ND IPPROTO_ND
322+ #define IPPROTO_RAW IPPROTO_RAW
323+ #define IPPROTO_MAX IPPROTO_MAX
324+ #define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
325+ #define IPPROTO_IPV4 IPPROTO_IPV4
326+ #define IPPROTO_IPV6 IPPROTO_IPV6
327+ #define IPPROTO_ROUTING IPPROTO_ROUTING
328+ #define IPPROTO_FRAGMENT IPPROTO_FRAGMENT
329+ #define IPPROTO_ESP IPPROTO_ESP
330+ #define IPPROTO_AH IPPROTO_AH
331+ #define IPPROTO_ICMPV6 IPPROTO_ICMPV6
332+ #define IPPROTO_NONE IPPROTO_NONE
333+ #define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
334+ #define IPPROTO_EGP IPPROTO_EGP
335+ #define IPPROTO_PIM IPPROTO_PIM
336+ #define IPPROTO_ICLFXBM IPPROTO_ICLFXBM // WinSock2 only
337+ #define IPPROTO_ST IPPROTO_ST // WinSock2 only
338+ #define IPPROTO_CBT IPPROTO_CBT // WinSock2 only
339+ #define IPPROTO_IGP IPPROTO_IGP // WinSock2 only
340+ #define IPPROTO_RDP IPPROTO_RDP // WinSock2 only
341+ #define IPPROTO_PGM IPPROTO_PGM // WinSock2 only
342+ #define IPPROTO_L2TP IPPROTO_L2TP // WinSock2 only
343+ #define IPPROTO_SCTP IPPROTO_SCTP // WinSock2 only
344+ #endif /* MS_WINDOWS */
345+
312346/* Provides the IsWindows7SP1OrGreater() function */
313347#include <versionhelpers.h>
314348
@@ -356,7 +390,7 @@ remove_unusable_flags(PyObject *m)
356390
357391 for (int i = 0 ; i < sizeof (win_runtime_flags )/sizeof (FlagRuntimeInfo ); i ++ ) {
358392 info .dwBuildNumber = win_runtime_flags [i ].build_number ;
359- /* greater than or equal to the specified version?
393+ /* greater than or equal to the specified version?
360394 Compatibility Mode will not cheat VerifyVersionInfo(...) */
361395 if (VerifyVersionInfo (
362396 & info ,
@@ -7659,6 +7693,17 @@ PyInit__socket(void)
76597693 PyModule_AddIntMacro (m , IPPROTO_MAX );
76607694#endif
76617695
7696+ #ifdef MS_WINDOWS
7697+ PyModule_AddIntMacro (m , IPPROTO_ICLFXBM );
7698+ PyModule_AddIntMacro (m , IPPROTO_ST );
7699+ PyModule_AddIntMacro (m , IPPROTO_CBT );
7700+ PyModule_AddIntMacro (m , IPPROTO_IGP );
7701+ PyModule_AddIntMacro (m , IPPROTO_RDP );
7702+ PyModule_AddIntMacro (m , IPPROTO_PGM );
7703+ PyModule_AddIntMacro (m , IPPROTO_L2TP );
7704+ PyModule_AddIntMacro (m , IPPROTO_SCTP );
7705+ #endif
7706+
76627707#ifdef SYSPROTO_CONTROL
76637708 PyModule_AddIntMacro (m , SYSPROTO_CONTROL );
76647709#endif
0 commit comments