diff options
author | Sam Roberts <vieuxtech@gmail.com> | 2012-08-01 17:17:01 -0700 |
---|---|---|
committer | Sam Roberts <vieuxtech@gmail.com> | 2013-03-11 10:18:37 -0700 |
commit | aea73374d2ac668cab109d79f4137eb6e071f249 (patch) | |
tree | b681ec6c05d38b40b063e3fcb270fc22febd500e | |
parent | f5d853f4f269849cb2d4155d7d7db902be3d1543 (diff) | |
download | libnet-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.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, |