core: add nm_ip_config_find_first_address()

Replace nm_ip6_config_find_first_address() with a version generic for
IPv4 and IPv6.

(cherry picked from commit ca31cbbc74)
This commit is contained in:
Beniamino Galvani 2021-06-10 22:48:43 +02:00
parent 786ab294db
commit a3a282677b
5 changed files with 39 additions and 40 deletions

View file

@ -9893,9 +9893,9 @@ dhcp6_start_with_link_ready(NMDevice *self, NMConnection *connection)
nm_assert(s_con);
if (priv->ext_ip6_config_captured) {
ll_addr = nm_ip6_config_find_first_address(priv->ext_ip6_config_captured,
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL);
ll_addr = nm_ip_config_find_first_address(NM_IP_CONFIG(priv->ext_ip6_config_captured),
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL);
}
if (!ll_addr) {
@ -10134,9 +10134,9 @@ linklocal6_check_complete(NMDevice *self)
}
if (!priv->ext_ip6_config_captured
|| !nm_ip6_config_find_first_address(priv->ext_ip6_config_captured,
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL)) {
|| !nm_ip_config_find_first_address(NM_IP_CONFIG(priv->ext_ip6_config_captured),
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL)) {
/* we don't have a non-tentative link local address yet. Wait longer. */
return;
}
@ -10182,10 +10182,10 @@ check_and_add_ipv6ll_addr(NMDevice *self)
return;
if (priv->ext_ip6_config_captured
&& nm_ip6_config_find_first_address(priv->ext_ip6_config_captured,
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE)) {
&& nm_ip_config_find_first_address(NM_IP_CONFIG(priv->ext_ip6_config_captured),
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE)) {
/* Already have an LL address, nothing to do */
return;
}
@ -10255,9 +10255,9 @@ linklocal6_start(NMDevice *self)
nm_clear_g_source(&priv->linklocal6_timeout_id);
if (priv->ext_ip6_config_captured
&& nm_ip6_config_find_first_address(priv->ext_ip6_config_captured,
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL))
&& nm_ip_config_find_first_address(NM_IP_CONFIG(priv->ext_ip6_config_captured),
NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL))
return TRUE;
_LOGD(LOGD_DEVICE,
@ -10836,9 +10836,9 @@ ndisc_ra_timeout(NMNDisc *ndisc, NMDevice *self)
* addresses we find inside priv->ip_config_6.
*/
if (priv->ip_config_6
&& nm_ip6_config_find_first_address(priv->ip_config_6,
NM_PLATFORM_MATCH_WITH_ADDRTYPE_NORMAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY))
&& nm_ip_config_find_first_address(NM_IP_CONFIG(priv->ip_config_6),
NM_PLATFORM_MATCH_WITH_ADDRTYPE_NORMAL
| NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY))
nm_device_activate_schedule_ip_config_result(self, AF_INET6, NULL);
else
nm_device_activate_schedule_ip_config_timeout(self, AF_INET6);

View file

@ -1977,6 +1977,26 @@ nm_ip_config_dump(const NMIPConfig *self, const char *detail, NMLogLevel level,
/*****************************************************************************/
gconstpointer
nm_ip_config_find_first_address(const NMIPConfig *self, NMPlatformMatchFlags match_flag)
{
NMDedupMultiIter iter;
const NMPlatformIPAddress *address;
g_return_val_if_fail(NM_IS_IP_CONFIG(self), NULL);
nm_assert(!NM_FLAGS_ANY(
match_flag,
~(NM_PLATFORM_MATCH_WITH_ADDRTYPE__ANY | NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY)));
nm_ip_config_iter_ip_address_for_each (&iter, self, &address) {
if (nm_platform_ip_address_match(nm_ip_config_get_addr_family(self), address, match_flag))
return address;
}
return NULL;
}
void
nm_ip4_config_reset_addresses(NMIP4Config *self)
{

View file

@ -664,4 +664,7 @@ nm_ip_config_intersect_alloc(const NMIPConfig *a,
}
}
gconstpointer nm_ip_config_find_first_address(const NMIPConfig * self,
NMPlatformMatchFlags match_flag);
#endif /* __NETWORKMANAGER_IP4_CONFIG_H__ */

View file

@ -1628,28 +1628,6 @@ nm_ip6_config_lookup_address(const NMIP6Config *self, const struct in6_addr *add
return entry ? NMP_OBJECT_CAST_IP6_ADDRESS(entry->obj) : NULL;
}
const NMPlatformIP6Address *
nm_ip6_config_find_first_address(const NMIP6Config *self, NMPlatformMatchFlags match_flag)
{
const NMPlatformIP6Address *addr;
NMDedupMultiIter iter;
g_return_val_if_fail(NM_IS_IP6_CONFIG(self), NULL);
nm_assert(!NM_FLAGS_ANY(
match_flag,
~(NM_PLATFORM_MATCH_WITH_ADDRTYPE__ANY | NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY)));
nm_assert(NM_FLAGS_ANY(match_flag, NM_PLATFORM_MATCH_WITH_ADDRTYPE__ANY));
nm_assert(NM_FLAGS_ANY(match_flag, NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY));
nm_ip_config_iter_ip6_address_for_each (&iter, self, &addr) {
if (nm_platform_ip_address_match(AF_INET6, (NMPlatformIPAddress *) addr, match_flag))
return addr;
}
return NULL;
}
/**
* nm_ip6_config_has_dad_pending_addresses
* @self: configuration containing the addresses to check

View file

@ -125,8 +125,6 @@ void _nmtst_ip6_config_del_address(NMIP6Config *self, guint i);
guint nm_ip6_config_get_num_addresses(const NMIP6Config *self);
const NMPlatformIP6Address *nm_ip6_config_get_first_address(const NMIP6Config *self);
const NMPlatformIP6Address *_nmtst_ip6_config_get_address(const NMIP6Config *self, guint i);
const NMPlatformIP6Address *nm_ip6_config_find_first_address(const NMIP6Config * self,
NMPlatformMatchFlags match_flag);
gboolean nm_ip6_config_address_exists(const NMIP6Config *self, const NMPlatformIP6Address *address);
const NMPlatformIP6Address *nm_ip6_config_lookup_address(const NMIP6Config * self,
const struct in6_addr *addr);