kernel-netlink: Set NODAD flag for virtual IPv6 addresses
The Optimistic Duplicate Address Detection (DAD) seems to fail in some cases (`dadfailed` in `ip addr`) rendering the virtual IP address unusable. Fixes #2183.
This commit is contained in:
@@ -2155,16 +2155,22 @@ static status_t manage_ipaddr(private_kernel_netlink_net_t *this, int nlmsg_type
|
|||||||
|
|
||||||
netlink_add_attribute(hdr, IFA_LOCAL, chunk, sizeof(request));
|
netlink_add_attribute(hdr, IFA_LOCAL, chunk, sizeof(request));
|
||||||
|
|
||||||
if (ip->get_family(ip) == AF_INET6 && this->rta_prefsrc_for_ipv6)
|
if (ip->get_family(ip) == AF_INET6)
|
||||||
{ /* if source routes are possible we let the virtual IP get deprecated
|
{
|
||||||
* immediately (but mark it as valid forever) so it gets only used if
|
msg->ifa_flags |= IFA_F_NODAD;
|
||||||
* forced by our route, and not by the default IPv6 address selection */
|
if (this->rta_prefsrc_for_ipv6)
|
||||||
struct ifa_cacheinfo cache = {
|
{
|
||||||
.ifa_valid = 0xFFFFFFFF,
|
/* if source routes are possible we let the virtual IP get
|
||||||
.ifa_prefered = 0,
|
* deprecated immediately (but mark it as valid forever) so it gets
|
||||||
};
|
* only used if forced by our route, and not by the default IPv6
|
||||||
netlink_add_attribute(hdr, IFA_CACHEINFO, chunk_from_thing(cache),
|
* address selection */
|
||||||
sizeof(request));
|
struct ifa_cacheinfo cache = {
|
||||||
|
.ifa_valid = 0xFFFFFFFF,
|
||||||
|
.ifa_prefered = 0,
|
||||||
|
};
|
||||||
|
netlink_add_attribute(hdr, IFA_CACHEINFO, chunk_from_thing(cache),
|
||||||
|
sizeof(request));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return this->socket->send_ack(this->socket, hdr);
|
return this->socket->send_ack(this->socket, hdr);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user