summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libnet/src/libnet_link_linux.c13
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,