Index: python3.4-3.4.0/Modules/socketmodule.c =================================================================== --- python3.4-3.4.0.orig/Modules/socketmodule.c 2014-04-17 23:08:37.394687694 +0400 +++ python3.4-3.4.0/Modules/socketmodule.c 2014-04-18 08:24:41.386961971 +0400 @@ -256,6 +256,10 @@ #include #endif +#ifdef HAVE_SYS_SOCKIO_H +#include +#endif + #ifdef HAVE_NET_IF_H #include #endif @@ -1483,11 +1487,15 @@ } #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; @@ -1507,12 +1515,21 @@ &protoNumber, &pkttype, &hatype, &haddr, &halen)) 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(); + 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) { s->errorhandler(); return 0; } +#endif if (halen > 8) { PyErr_SetString(PyExc_ValueError, "Hardware address must be 8 bytes or less"); @@ -1527,7 +1544,11 @@ 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 (halen != 0) { Index: python3.4-3.4.0/configure.ac =================================================================== --- python3.4-3.4.0.orig/configure.ac 2014-04-17 23:08:41.838746243 +0400 +++ python3.4-3.4.0/configure.ac 2014-04-18 08:23:20.498952635 +0400 @@ -1546,6 +1546,7 @@ 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/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 \