diff options
Diffstat (limited to 'libnet/src/libnet_link_linux.c')
-rw-r--r-- | libnet/src/libnet_link_linux.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libnet/src/libnet_link_linux.c b/libnet/src/libnet_link_linux.c index 054458d..f6b1cb6 100644 --- a/libnet/src/libnet_link_linux.c +++ b/libnet/src/libnet_link_linux.c @@ -237,8 +237,17 @@ libnet_write_link(libnet_t *l, const uint8_t *packet, uint32_t size) sa.sa_data[sizeof (sa.sa_data) - 1] = 0; #endif - c = sendto(l->fd, packet, size, 0, - (struct sockaddr *)&sa, sizeof (sa)); + /* FIXME horrid hack, intel nics crash if size is less than 17, so pad to 17 bytes */ + if(size >= 17) { + c = sendto(l->fd, packet, size, 0, + (struct sockaddr *)&sa, sizeof (sa)); + } else { + uint8_t padded[17] = { 0 }; + memcpy(padded, packet, size); + c = sendto(l->fd, padded, sizeof(padded), 0, + (struct sockaddr *)&sa, sizeof (sa)); + } + if (c != size) { snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |