Commit bc26f9a0 authored by Simon Kelley's avatar Simon Kelley

Handle firewire and EUI-64 addresses in the SLAAC code.

parent f444cddb
...@@ -417,7 +417,9 @@ void lease_update_dns(void) ...@@ -417,7 +417,9 @@ void lease_update_dns(void)
if (lease->last_interface == map->iface) if (lease->last_interface == map->iface)
{ {
struct in6_addr addr = map->subnet; struct in6_addr addr = map->subnet;
if (lease->hwaddr_len == 6) if (lease->hwaddr_len == 6 &&
(lease->hwaddr_type == ARPHRD_ETHER ||
lease->hwaddr_type == ARPHRD_IEEE802))
{ {
/* convert MAC address to EUI-64 */ /* convert MAC address to EUI-64 */
memcpy(&addr.s6_addr[8], lease->hwaddr, 3); memcpy(&addr.s6_addr[8], lease->hwaddr, 3);
...@@ -426,8 +428,24 @@ void lease_update_dns(void) ...@@ -426,8 +428,24 @@ void lease_update_dns(void)
addr.s6_addr[12] = 0xfe; addr.s6_addr[12] = 0xfe;
addr.s6_addr[8] ^= 0x02; addr.s6_addr[8] ^= 0x02;
} }
else if (lease->hwaddr_len == 8) #if defined(ARPHRD_EUI64)
memcpy(&addr.s6_addr[8], lease->hwaddr, 8); else if (lease->hwaddr_len == 8 &&
lease->hwaddr_type == ARPHRD_EUI64)
{
memcpy(&addr.s6_addr[8], &lease->hwaddr, 8);
addr.s6_addr[8] ^= 0x02;
}
#endif
#if defined(ARPHRD_IEEE1394) && defined(ARPHRD_EUI64)
else if (lease->clid_len == 9 &&
lease->clid[0] == ARPHRD_EUI64 &&
lease->hwaddr_type == ARPHRD_IEEE1394)
{
/* firewire has EUI-64 identifier as clid */
memcpy(&addr.s6_addr[8], &lease->clid[1], 8);
addr.s6_addr[8] ^= 0x02;
}
#endif
else else
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment