From aea73374d2ac668cab109d79f4137eb6e071f249 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Wed, 1 Aug 2012 17:17:01 -0700 Subject: Bug #2974: always write 17 bytes or more so link doesn't reset --- libnet/src/libnet_link_linux.c | 13 +++++++++++-- 1 file 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, -- cgit v1.2.1