Merge branch 'ipv6-addrs-mobike'

Address enumeration on Linux now ignores deprecated addresses and
whether temporary or permanent IPv6 addresses are included now depends
on the charon.prefer_temporary_addrs setting.

Closes #3192.
This commit is contained in:
Tobias Brunner 2019-10-22 14:15:27 +02:00
commit b3db361727
2 changed files with 22 additions and 5 deletions

View File

@ -286,8 +286,16 @@ charon.prefer_configured_proposals = yes
notifies).
charon.prefer_temporary_addrs = no
By default public IPv6 addresses are preferred over temporary ones (RFC
4941), to make connections more stable. Enable this option to reverse this.
Controls whether permanent or temporary IPv6 addresses are used as source,
or announced as additional addresses if MOBIKE is used.
By default, permanent IPv6 source addresses are preferred over temporary
ones (RFC 4941), to make connections more stable. Enable this option to
reverse this.
It also affects which IPv6 addresses are announced as additional addresses
if MOBIKE is used. If the option is disabled, only permanent addresses are
sent, and only temporary ones if it is enabled.
charon.process_route = yes
Process RTM_NEWROUTE and RTM_DELROUTE events.

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2008-2018 Tobias Brunner
* Copyright (C) 2008-2019 Tobias Brunner
* Copyright (C) 2005-2008 Martin Willi
* HSR Hochschule fuer Technik Rapperswil
*
@ -1603,10 +1603,19 @@ CALLBACK(filter_addresses, bool,
{ /* address is regular, but not requested */
continue;
}
if (addr->scope >= RT_SCOPE_LINK)
{ /* skip addresses with a unusable scope */
if (addr->flags & IFA_F_DEPRECATED ||
addr->scope >= RT_SCOPE_LINK)
{ /* skip deprecated addresses or those with an unusable scope */
continue;
}
if (addr->ip->get_family(addr->ip) == AF_INET6)
{ /* handle temporary IPv6 addresses according to config */
bool temporary = (addr->flags & IFA_F_TEMPORARY) == IFA_F_TEMPORARY;
if (data->this->prefer_temporary_addrs != temporary)
{
continue;
}
}
*out = addr->ip;
return TRUE;
}