1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
Index: python3.8.git/Modules/socketmodule.c
===================================================================
--- python3.8.git.orig/Modules/socketmodule.c
+++ python3.8.git/Modules/socketmodule.c
@@ -281,6 +281,10 @@ http://cvsweb.netbsd.org/bsdweb.cgi/src/
#include <sys/socket.h>
#endif
+#ifdef HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
@@ -1983,11 +1987,15 @@ getsockaddrarg(PySocketSockObject *s, Py
}
#endif /* USE_BLUETOOTH */
-#if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX)
+#if defined(HAVE_NETPACKET_PACKET_H)
case AF_PACKET:
{
struct sockaddr_ll* addr;
+#ifdef SIOCGLIFINDEX
+ struct lifreq lifr;
+#else
struct ifreq ifr;
+#endif
const char *interfaceName;
int protoNumber;
int hatype = 0;
@@ -2017,6 +2025,15 @@ getsockaddrarg(PySocketSockObject *s, Py
}
return 0;
}
+#ifdef SIOCGLIFINDEX
+ strncpy(lifr.lifr_name, interfaceName, sizeof(lifr.lifr_name));
+ lifr.lifr_name[(sizeof(lifr.lifr_name))-1] = '\0';
+ if (ioctl(s->sock_fd, SIOCGLIFINDEX, &lifr) < 0) {
+ s->errorhandler();
+ PyBuffer_Release(&haddr);
+ return 0;
+ }
+#else
strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name));
ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0';
if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) {
@@ -2024,6 +2041,7 @@ getsockaddrarg(PySocketSockObject *s, Py
PyBuffer_Release(&haddr);
return 0;
}
+#endif
if (haddr.buf && haddr.len > 8) {
PyErr_SetString(PyExc_ValueError,
"Hardware address must be 8 bytes or less");
@@ -2040,7 +2058,11 @@ getsockaddrarg(PySocketSockObject *s, Py
addr = (struct sockaddr_ll*)addr_ret;
addr->sll_family = AF_PACKET;
addr->sll_protocol = htons((short)protoNumber);
+#ifdef SIOCGLIFINDEX
+ addr->sll_ifindex = lifr.lifr_index;
+#else
addr->sll_ifindex = ifr.ifr_ifindex;
+#endif
addr->sll_pkttype = pkttype;
addr->sll_hatype = hatype;
if (haddr.buf) {
Index: python3.8.git/configure.ac
===================================================================
--- python3.8.git.orig/configure.ac
+++ python3.8.git/configure.ac
@@ -2126,6 +2126,7 @@ poll.h sys/devpoll.h sys/epoll.h sys/pol
sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \
sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \
sys/param.h sys/random.h sys/select.h sys/sendfile.h sys/socket.h sys/statvfs.h \
+sys/sockio.h \
sys/stat.h sys/syscall.h sys/sys_domain.h sys/termio.h sys/time.h \
sys/times.h sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h pty.h \
libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
|