mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Handle firewire and EUI-64 addresses in the SLAAC code.
This commit is contained in:
24
src/lease.c
24
src/lease.c
@@ -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)
|
|||||||
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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user