mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	gh-95389: expose popular ETHERTYPE_* constants in the socket module (#95390)
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
This commit is contained in:
		
							parent
							
								
									6168e714be
								
							
						
					
					
						commit
						80c08d1cd6
					
				
					 6 changed files with 65 additions and 4 deletions
				
			
		| 
						 | 
					@ -189,8 +189,11 @@ created.  Socket addresses are represented as follows:
 | 
				
			||||||
  ``(ifname, proto[, pkttype[, hatype[, addr]]])`` where:
 | 
					  ``(ifname, proto[, pkttype[, hatype[, addr]]])`` where:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - *ifname* - String specifying the device name.
 | 
					  - *ifname* - String specifying the device name.
 | 
				
			||||||
  - *proto* - An in network-byte-order integer specifying the Ethernet
 | 
					  - *proto* - The Ethernet protocol number.
 | 
				
			||||||
    protocol number.
 | 
					    May be :data:`ETH_P_ALL` to capture all protocols,
 | 
				
			||||||
 | 
					    one of the :ref:`ETHERTYPE_* constants <socket-ethernet-types>`
 | 
				
			||||||
 | 
					    or any other Ethernet protocol number.
 | 
				
			||||||
 | 
					    Value must be in network-byte-order.
 | 
				
			||||||
  - *pkttype* - Optional integer specifying the packet type:
 | 
					  - *pkttype* - Optional integer specifying the packet type:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - ``PACKET_HOST`` (the default) - Packet addressed to the local host.
 | 
					    - ``PACKET_HOST`` (the default) - Packet addressed to the local host.
 | 
				
			||||||
| 
						 | 
					@ -508,6 +511,19 @@ Constants
 | 
				
			||||||
   .. availability:: Linux >= 2.2.
 | 
					   .. availability:: Linux >= 2.2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. data:: ETH_P_ALL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   :data:`!ETH_P_ALL` can be used in the :class:`~socket.socket`
 | 
				
			||||||
 | 
					   constructor as *proto* for the :const:`AF_PACKET` family in order to
 | 
				
			||||||
 | 
					   capture every packet, regardless of protocol.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   For more information, see the :manpage:`packet(7)` manpage.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   .. availability:: Linux.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   .. versionadded:: 3.12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. data:: AF_RDS
 | 
					.. data:: AF_RDS
 | 
				
			||||||
          PF_RDS
 | 
					          PF_RDS
 | 
				
			||||||
          SOL_RDS
 | 
					          SOL_RDS
 | 
				
			||||||
| 
						 | 
					@ -638,6 +654,22 @@ Constants
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   .. versionadded:: 3.12
 | 
					   .. versionadded:: 3.12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. _socket-ethernet-types:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. data:: ETHERTYPE_ARP
 | 
				
			||||||
 | 
					          ETHERTYPE_IP
 | 
				
			||||||
 | 
					          ETHERTYPE_IPV6
 | 
				
			||||||
 | 
					          ETHERTYPE_VLAN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   `IEEE 802.3 protocol number
 | 
				
			||||||
 | 
					   <https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.txt>`_.
 | 
				
			||||||
 | 
					   constants.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   .. availability:: Linux, FreeBSD, macOS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   .. versionadded:: 3.12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Functions
 | 
					Functions
 | 
				
			||||||
^^^^^^^^^
 | 
					^^^^^^^^^
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					Expose :data:`~socket.ETH_P_ALL` and some of the
 | 
				
			||||||
 | 
					:ref:`ETHERTYPE_* constants <socket-ethernet-types>` in :mod:`socket`.
 | 
				
			||||||
 | 
					Patch by Noam Cohen.
 | 
				
			||||||
| 
						 | 
					@ -247,6 +247,10 @@ shutdown(how) -- shut down traffic in one or both directions\n\
 | 
				
			||||||
#include <net/if.h>
 | 
					#include <net/if.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_NET_ETHERNET_H
 | 
				
			||||||
 | 
					#include <net/ethernet.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Generic socket object definitions and includes */
 | 
					/* Generic socket object definitions and includes */
 | 
				
			||||||
#define PySocket_BUILDING_SOCKET
 | 
					#define PySocket_BUILDING_SOCKET
 | 
				
			||||||
#include "socketmodule.h"
 | 
					#include "socketmodule.h"
 | 
				
			||||||
| 
						 | 
					@ -7711,6 +7715,25 @@ PyInit__socket(void)
 | 
				
			||||||
    PyModule_AddIntMacro(m, ALG_OP_VERIFY);
 | 
					    PyModule_AddIntMacro(m, ALG_OP_VERIFY);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* IEEE 802.3 protocol numbers required for a standard TCP/IP network stack */
 | 
				
			||||||
 | 
					#ifdef ETHERTYPE_ARP
 | 
				
			||||||
 | 
					    PyModule_AddIntMacro(m, ETHERTYPE_ARP);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef ETHERTYPE_IP
 | 
				
			||||||
 | 
					    PyModule_AddIntMacro(m, ETHERTYPE_IP);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef ETHERTYPE_IPV6
 | 
				
			||||||
 | 
					    PyModule_AddIntMacro(m, ETHERTYPE_IPV6);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef ETHERTYPE_VLAN
 | 
				
			||||||
 | 
					    PyModule_AddIntMacro(m, ETHERTYPE_VLAN);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Linux pseudo-protocol for sniffing every packet */
 | 
				
			||||||
 | 
					#ifdef ETH_P_ALL
 | 
				
			||||||
 | 
					    PyModule_AddIntMacro(m, ETH_P_ALL);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Socket types */
 | 
					    /* Socket types */
 | 
				
			||||||
    PyModule_AddIntMacro(m, SOCK_STREAM);
 | 
					    PyModule_AddIntMacro(m, SOCK_STREAM);
 | 
				
			||||||
    PyModule_AddIntMacro(m, SOCK_DGRAM);
 | 
					    PyModule_AddIntMacro(m, SOCK_DGRAM);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								configure
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								configure
									
										
									
										generated
									
									
										vendored
									
									
								
							| 
						 | 
					@ -9446,7 +9446,7 @@ for ac_header in  \
 | 
				
			||||||
  alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
 | 
					  alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
 | 
				
			||||||
  ieeefp.h io.h langinfo.h libintl.h libutil.h linux/auxvec.h sys/auxv.h linux/fs.h linux/memfd.h \
 | 
					  ieeefp.h io.h langinfo.h libintl.h libutil.h linux/auxvec.h sys/auxv.h linux/fs.h linux/memfd.h \
 | 
				
			||||||
  linux/random.h linux/soundcard.h \
 | 
					  linux/random.h linux/soundcard.h \
 | 
				
			||||||
  linux/tipc.h linux/wait.h netdb.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
 | 
					  linux/tipc.h linux/wait.h netdb.h net/ethernet.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
 | 
				
			||||||
  sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
 | 
					  sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
 | 
				
			||||||
  sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
 | 
					  sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
 | 
				
			||||||
  sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
 | 
					  sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2708,7 +2708,7 @@ AC_CHECK_HEADERS([ \
 | 
				
			||||||
  alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
 | 
					  alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
 | 
				
			||||||
  ieeefp.h io.h langinfo.h libintl.h libutil.h linux/auxvec.h sys/auxv.h linux/fs.h linux/memfd.h \
 | 
					  ieeefp.h io.h langinfo.h libintl.h libutil.h linux/auxvec.h sys/auxv.h linux/fs.h linux/memfd.h \
 | 
				
			||||||
  linux/random.h linux/soundcard.h \
 | 
					  linux/random.h linux/soundcard.h \
 | 
				
			||||||
  linux/tipc.h linux/wait.h netdb.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
 | 
					  linux/tipc.h linux/wait.h netdb.h net/ethernet.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
 | 
				
			||||||
  sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
 | 
					  sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
 | 
				
			||||||
  sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
 | 
					  sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
 | 
				
			||||||
  sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
 | 
					  sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -844,6 +844,9 @@
 | 
				
			||||||
/* Define to 1 if you have the <netpacket/packet.h> header file. */
 | 
					/* Define to 1 if you have the <netpacket/packet.h> header file. */
 | 
				
			||||||
#undef HAVE_NETPACKET_PACKET_H
 | 
					#undef HAVE_NETPACKET_PACKET_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Define to 1 if you have the <net/ethernet.h> header file. */
 | 
				
			||||||
 | 
					#undef HAVE_NET_ETHERNET_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Define to 1 if you have the <net/if.h> header file. */
 | 
					/* Define to 1 if you have the <net/if.h> header file. */
 | 
				
			||||||
#undef HAVE_NET_IF_H
 | 
					#undef HAVE_NET_IF_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue