summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2021-06-10 22:53:31 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2021-06-21 10:08:27 +0200
commitff84a4736d5b9f075105723fa9add14255b3189a (patch)
treef03efb0775bc03779cdaa6856c214b9505cec308
parentca31cbbc7478230b35aa0fd7acfccd09aa1572fc (diff)
libnm-platform: add NM_PLATFORM_MATCH_WITH_ADDRSTATE_DEPRECATED
Add a new flag to match deprecated addresses. An address is deprecated when its preferred lifetime has expired but its valid lifetime has not. Address deprecation is one of the criteria for source address selection in IPv6. For IPv4 the deprecation doesn't have any real effect. Note that this commit changes the behavior of nm_ip_config_get_first_address(WITH_ADDRSTATE_NORMAL), since now deprecated addresses are not returned. However this should not impact existing callers since they either: - request a IPv6 (WITH_ADDRTYPE_LINKLOCAL | WITH_ADDRSTATE_NORMAL) address; IPv6 link-local addresses are supposed to have infinite lifetimes; or - request a IPv6 (WITH_ADDRTYPE_NORMAL | WITH_ADDRSTATE__ANY) address.
-rw-r--r--src/libnm-platform/nm-platform.c3
-rw-r--r--src/libnm-platform/nm-platform.h13
2 files changed, 10 insertions, 6 deletions
diff --git a/src/libnm-platform/nm-platform.c b/src/libnm-platform/nm-platform.c
index 98c8733653..089d0d42c1 100644
--- a/src/libnm-platform/nm-platform.c
+++ b/src/libnm-platform/nm-platform.c
@@ -3448,6 +3448,9 @@ nm_platform_ip_address_match(int addr_family,
&& !NM_FLAGS_HAS(address->n_ifa_flags, IFA_F_OPTIMISTIC)) {
if (!NM_FLAGS_HAS(match_flag, NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE))
return FALSE;
+ } else if (NM_FLAGS_HAS(address->n_ifa_flags, IFA_F_DEPRECATED)) {
+ if (!NM_FLAGS_HAS(match_flag, NM_PLATFORM_MATCH_WITH_ADDRSTATE_DEPRECATED))
+ return FALSE;
} else {
if (!NM_FLAGS_HAS(match_flag, NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL))
return FALSE;
diff --git a/src/libnm-platform/nm-platform.h b/src/libnm-platform/nm-platform.h
index 096851b160..e627917698 100644
--- a/src/libnm-platform/nm-platform.h
+++ b/src/libnm-platform/nm-platform.h
@@ -176,12 +176,13 @@ typedef enum {
NM_PLATFORM_MATCH_WITH_ADDRTYPE__ANY =
NM_PLATFORM_MATCH_WITH_ADDRTYPE_NORMAL | NM_PLATFORM_MATCH_WITH_ADDRTYPE_LINKLOCAL,
- NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL = (1LL << 2),
- NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE = (1LL << 3),
- NM_PLATFORM_MATCH_WITH_ADDRSTATE_DADFAILED = (1LL << 4),
- NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY = NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL
- | NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE
- | NM_PLATFORM_MATCH_WITH_ADDRSTATE_DADFAILED,
+ NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL = (1LL << 2),
+ NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE = (1LL << 3),
+ NM_PLATFORM_MATCH_WITH_ADDRSTATE_DADFAILED = (1LL << 4),
+ NM_PLATFORM_MATCH_WITH_ADDRSTATE_DEPRECATED = (1LL << 5),
+ NM_PLATFORM_MATCH_WITH_ADDRSTATE__ANY =
+ NM_PLATFORM_MATCH_WITH_ADDRSTATE_NORMAL | NM_PLATFORM_MATCH_WITH_ADDRSTATE_TENTATIVE
+ | NM_PLATFORM_MATCH_WITH_ADDRSTATE_DADFAILED | NM_PLATFORM_MATCH_WITH_ADDRSTATE_DEPRECATED,
} NMPlatformMatchFlags;
#define NM_PLATFORM_LINK_OTHER_NETNS (-1)