diff options
author | Thomas Haller <thaller@redhat.com> | 2018-02-09 20:48:11 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-02-09 21:07:57 +0100 |
commit | 3e9e51f1dda8b142f63fa9eace77e02208fb5113 (patch) | |
tree | 6793867c67835b8d9534693e218ad07fa922371a | |
parent | fa41e5852cebb3ba5f6dde880ef792d361cc7fe9 (diff) | |
download | NetworkManager-3e9e51f1dda8b142f63fa9eace77e02208fb5113.tar.gz |
core: distinguish between IFA_F_SECONDARY and IFA_F_TEMPORARY
While the numerical values of IFA_F_SECONDARY and IFA_F_TEMPORARY
are identical, their meaning is not.
IFA_F_SECONDARY is only relevant for IPv4 addresses, while
IFA_F_TEMPORARY is only relevant for IPv6 addresses.
IFA_F_TEMPORARY is automatically set by kernel for the addresses
that it generates as part of IFA_F_MANAGETEMPADDR. It cannot be
actively set by user-space.
IFA_F_SECONDARY is automatically set by kernel depending on the order
in which the addresses for the same subnet are added.
This essentially reverts 8b4f11927 (core: avoid IFA_F_TEMPORARY alias for
IFA_F_SECONDARY).
-rw-r--r-- | src/devices/nm-device.c | 4 | ||||
-rw-r--r-- | src/nm-ip6-config.c | 8 | ||||
-rw-r--r-- | src/platform/nm-platform.c | 4 | ||||
-rw-r--r-- | src/tests/test-ip6-config.c | 12 |
4 files changed, 14 insertions, 14 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 8b99fc0ba8..ae64229cda 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -11569,7 +11569,7 @@ queued_ip6_config_change (gpointer user_data) NMP_CACHE_ID_TYPE_OBJECT_TYPE, obj)); if ( addr2 - && ( NM_FLAGS_HAS (addr2->n_ifa_flags, IFA_F_SECONDARY) + && ( NM_FLAGS_HAS (addr2->n_ifa_flags, IFA_F_TEMPORARY) || !NM_FLAGS_HAS (addr2->n_ifa_flags, IFA_F_DADFAILED))) { /* the address still/again exists and is not in DADFAILED state. Skip it. */ continue; @@ -11652,7 +11652,7 @@ device_ipx_changed (NMPlatform *platform, case NMP_OBJECT_TYPE_IP6_ADDRESS: addr = platform_object; - if ( !NM_FLAGS_HAS (addr->n_ifa_flags, IFA_F_SECONDARY) + if ( !NM_FLAGS_HAS (addr->n_ifa_flags, IFA_F_TEMPORARY) && priv->state > NM_DEVICE_STATE_DISCONNECTED && priv->state < NM_DEVICE_STATE_DEACTIVATING && ( (change_type == NM_PLATFORM_SIGNAL_CHANGED && addr->n_ifa_flags & IFA_F_DADFAILED) diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 3fb1c8675a..8d2d9471a4 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -268,19 +268,19 @@ _addresses_sort_cmp (const NMPlatformIP6Address *a1, if (p1 != p2) return p1 > p2 ? -1 : 1; - ipv6_privacy1 = !!(a1->n_ifa_flags & (IFA_F_MANAGETEMPADDR | IFA_F_SECONDARY)); - ipv6_privacy2 = !!(a2->n_ifa_flags & (IFA_F_MANAGETEMPADDR | IFA_F_SECONDARY)); + ipv6_privacy1 = !!(a1->n_ifa_flags & (IFA_F_MANAGETEMPADDR | IFA_F_TEMPORARY)); + ipv6_privacy2 = !!(a2->n_ifa_flags & (IFA_F_MANAGETEMPADDR | IFA_F_TEMPORARY)); if (ipv6_privacy1 || ipv6_privacy2) { gboolean public1 = TRUE, public2 = TRUE; if (ipv6_privacy1) { - if (a1->n_ifa_flags & IFA_F_SECONDARY) + if (a1->n_ifa_flags & IFA_F_TEMPORARY) public1 = prefer_temp; else public1 = !prefer_temp; } if (ipv6_privacy2) { - if (a2->n_ifa_flags & IFA_F_SECONDARY) + if (a2->n_ifa_flags & IFA_F_TEMPORARY) public2 = prefer_temp; else public2 = !prefer_temp; diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c index 9ac6a646e1..e82c44bef4 100644 --- a/src/platform/nm-platform.c +++ b/src/platform/nm-platform.c @@ -3159,7 +3159,7 @@ _addr_array_clean_expired (int addr_family, int ifindex, GPtrArray *array, guint } #endif - if (NM_FLAGS_HAS (a->n_ifa_flags, IFA_F_SECONDARY)) { + if (NM_FLAGS_HAS (a->n_ifa_flags, IFA_F_TEMPORARY)) { /* temporary addresses are never added explicitly by NetworkManager but * kernel adds them via mngtempaddr flag. * @@ -3553,7 +3553,7 @@ nm_platform_ip6_address_sync (NMPlatform *self, const NMPObject *know_obj; const NMPlatformIP6Address *plat_addr = NMP_OBJECT_CAST_IP6_ADDRESS (plat_obj); - if ( NM_FLAGS_HAS (plat_addr->n_ifa_flags, IFA_F_SECONDARY) + if ( NM_FLAGS_HAS (plat_addr->n_ifa_flags, IFA_F_TEMPORARY) || IN6_IS_ADDR_LINKLOCAL (&plat_addr->address)) { if (!full_sync) { /* just mark as handled, without actually deleting the address. */ diff --git a/src/tests/test-ip6-config.c b/src/tests/test-ip6-config.c index 5a34547278..816a816f0b 100644 --- a/src/tests/test-ip6-config.c +++ b/src/tests/test-ip6-config.c @@ -298,9 +298,9 @@ test_nm_ip6_config_addresses_sort (void) ADDR_ADD("2607:f0d0:1002:51::4", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0); ADDR_ADD("2607:f0d0:1002:51::5", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0); ADDR_ADD("2607:f0d0:1002:51::6", NULL, 64, 0, NM_IP_CONFIG_SOURCE_NDISC, 0, 0, 0, IFA_F_MANAGETEMPADDR); - ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY); - ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY); - ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, IFA_F_SECONDARY); + ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_TEMPORARY); + ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_TEMPORARY); + ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, IFA_F_TEMPORARY); ADDR_ADD("fec0::1", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0); ADDR_ADD("fe80::208:74ff:feda:625c", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0); ADDR_ADD("fe80::208:74ff:feda:625d", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0); @@ -311,11 +311,11 @@ test_nm_ip6_config_addresses_sort (void) test_nm_ip6_config_addresses_sort_check (config, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR, 8); nm_ip6_config_reset_addresses (config); - ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY); + ADDR_ADD("2607:f0d0:1002:51::3", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_TEMPORARY); ADDR_ADD("2607:f0d0:1002:51::4", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0); ADDR_ADD("2607:f0d0:1002:51::5", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, 0); - ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_SECONDARY); - ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, IFA_F_SECONDARY); + ADDR_ADD("2607:f0d0:1002:51::8", NULL, 64, 0, NM_IP_CONFIG_SOURCE_USER, 0, 0, 0, IFA_F_TEMPORARY); + ADDR_ADD("2607:f0d0:1002:51::0", NULL, 64, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, IFA_F_TEMPORARY); ADDR_ADD("2607:f0d0:1002:51::6", NULL, 64, 0, NM_IP_CONFIG_SOURCE_NDISC, 0, 0, 0, IFA_F_MANAGETEMPADDR); ADDR_ADD("fec0::1", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0); ADDR_ADD("fe80::208:74ff:feda:625c", NULL, 128, 0, NM_IP_CONFIG_SOURCE_KERNEL, 0, 0, 0, 0); |