Index: python3.4-3.4.0/Modules/socketmodule.c =================================================================== --- python3.4-3.4.0.orig/Modules/socketmodule.c 2014-04-17 21:44:35.561072583 +0400 +++ python3.4-3.4.0/Modules/socketmodule.c 2014-04-17 22:36:10.333869200 +0400 @@ -1483,11 +1483,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 +1511,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 +1540,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) {