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.6-3.6.3~rc1/Modules/socketmodule.c
===================================================================
--- python3.6-3.6.3~rc1.orig/Modules/socketmodule.c
+++ python3.6-3.6.3~rc1/Modules/socketmodule.c
@@ -284,6 +284,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
@@ -1767,11 +1771,15 @@ getsockaddrarg(PySocketSockObject *s, Py
}
#endif
-#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
char *interfaceName;
int protoNumber;
int hatype = 0;
@@ -1790,6 +1798,15 @@ getsockaddrarg(PySocketSockObject *s, Py
&protoNumber, &pkttype, &hatype,
&haddr))
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) {
@@ -1797,6 +1814,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");
@@ -1813,7 +1831,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.6-3.6.3~rc1/configure.ac
===================================================================
--- python3.6-3.6.3~rc1.orig/configure.ac
+++ python3.6-3.6.3~rc1/configure.ac
@@ -2053,6 +2053,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 \
|