--- embedaddon/libnet/src/libnet_link_bpf.c 2013/07/22 11:54:42 1.1.1.2 +++ embedaddon/libnet/src/libnet_link_bpf.c 2016/10/18 13:11:47 1.1.1.2.2.1 @@ -1,5 +1,5 @@ /* - * $Id: libnet_link_bpf.c,v 1.1.1.2 2013/07/22 11:54:42 misho Exp $ + * $Id: libnet_link_bpf.c,v 1.1.1.2.2.1 2016/10/18 13:11:47 misho Exp $ * * libnet * libnet_link_bpf.c - low-level bpf routines @@ -316,7 +316,11 @@ libnet_get_hwaddr(libnet_t *l) if (ifm->ifm_type == RTM_IFINFO) { sdl = (struct sockaddr_dl *)(ifm + 1); - if (sdl->sdl_type != IFT_ETHER) + if (sdl->sdl_type != IFT_ETHER + && sdl->sdl_type != IFT_FASTETHER + && sdl->sdl_type != IFT_FASTETHERFX + && sdl->sdl_type != IFT_GIGABITETHERNET + && sdl->sdl_type != IFT_L2VLAN) continue; if (strncmp(&sdl->sdl_data[0], l->device, sdl->sdl_nlen) == 0) { @@ -326,6 +330,12 @@ libnet_get_hwaddr(libnet_t *l) } } free(buf); + if (next == end) { + snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, + "%s(): interface %s of known type not found.", + __func__, l->device); + return NULL; + } return (&ea); }