Fix for GitHub issue #36 on OSX... results in a duplicate entry for IPv6 link-local but seems okay... need to test on OSX 10.6 though.

This commit is contained in:
Adam Ierymenko 2014-01-31 15:55:45 -08:00
parent 117e6fb356
commit 64231aa3f0
3 changed files with 102 additions and 21 deletions

View file

@ -36,6 +36,7 @@
#include "Constants.hpp"
#include "Utils.hpp"
#include "MAC.hpp"
#ifdef __WINDOWS__
#include <WinSock2.h>
@ -387,6 +388,35 @@ public:
_sa.saddr.sa_family = 0;
}
/**
* @param mac MAC address seed
* @return IPv6 link-local address
*/
static inline InetAddress makeIpv6LinkLocal(const MAC &mac)
throw()
{
InetAddress ip;
ip._sa.saddr.sa_family = AF_INET6;
ip._sa.sin6.sin6_addr.s6_addr[0] = 0xfe;
ip._sa.sin6.sin6_addr.s6_addr[1] = 0x80;
ip._sa.sin6.sin6_addr.s6_addr[2] = 0x00;
ip._sa.sin6.sin6_addr.s6_addr[3] = 0x00;
ip._sa.sin6.sin6_addr.s6_addr[4] = 0x00;
ip._sa.sin6.sin6_addr.s6_addr[5] = 0x00;
ip._sa.sin6.sin6_addr.s6_addr[6] = 0x00;
ip._sa.sin6.sin6_addr.s6_addr[7] = 0x00;
ip._sa.sin6.sin6_addr.s6_addr[8] = mac.data[0] & 0xfd;
ip._sa.sin6.sin6_addr.s6_addr[9] = mac.data[1];
ip._sa.sin6.sin6_addr.s6_addr[10] = mac.data[2];
ip._sa.sin6.sin6_addr.s6_addr[11] = 0xff;
ip._sa.sin6.sin6_addr.s6_addr[12] = 0xfe;
ip._sa.sin6.sin6_addr.s6_addr[13] = mac.data[3];
ip._sa.sin6.sin6_addr.s6_addr[14] = mac.data[4];
ip._sa.sin6.sin6_addr.s6_addr[15] = mac.data[5];
ip._sa.sin6.sin6_port = Utils::hton((uint16_t)64);
return ip;
}
private:
union {
struct sockaddr saddr;