summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Roberts <vieuxtech@gmail.com>2012-08-01 17:17:01 -0700
committerSam Roberts <vieuxtech@gmail.com>2013-03-11 10:18:37 -0700
commitaea73374d2ac668cab109d79f4137eb6e071f249 (patch)
treeb681ec6c05d38b40b063e3fcb270fc22febd500e
parentf5d853f4f269849cb2d4155d7d7db902be3d1543 (diff)
downloadlibnet-fix-short-packets-reset-adapters.tar.gz
Bug #2974: always write 17 bytes or more so link doesn't resetfix-short-packets-reset-adapters
-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,