summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWen Liang <liangwen12year@gmail.com>2024-03-05 13:26:57 -0500
committerBeniamino Galvani <bgalvani@redhat.com>2024-05-02 15:02:36 +0200
commit546dd7017857611e93531c1f67ed6dfedcf126f2 (patch)
treeefb254c28b1f00ad8f901b4f114d2a56eaedb985
parent8d32bd388317f766d5e59f201fa76653334a6937 (diff)
device: use subnet when the applied connection has IPv6 method sharednm-1-44
We should use the IPv6 subnet when we have an applied connection stored on the downlink device, and the IPv6 method should be "shared" for that applied connection. It does not make sense to register l3cd and set router config for ndisc instance when the downlink device is already deactivated. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1880 Resolves: https://issues.redhat.com/browse/RHEL-17350 Signed-off-by: Wen Liang <liangwen12year@gmail.com> (cherry picked from commit 15901a74892e460721604ddfa5a70e7826bbff8d) (cherry picked from commit 86fbfb3806857335da35851563f0b174ea556a8c)
-rw-r--r--src/core/devices/nm-device.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index fd76b6ff42..0c1720e033 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -11066,25 +11066,32 @@ nm_device_needs_ip6_subnet(NMDevice *self)
void
nm_device_use_ip6_subnet(NMDevice *self, const NMPlatformIP6Address *subnet)
{
- nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL;
- char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE];
- NMPlatformIP6Address address;
+ NMConnection *connection = nm_device_get_applied_connection(self);
- l3cd = nm_device_create_l3_config_data(self, NM_IP_CONFIG_SOURCE_SHARED);
+ if (connection) {
+ NMSettingIPConfig *s_ip6 = nm_connection_get_setting_ip6_config(connection);
- /* Assign a ::1 address in the subnet for us. */
- address = *subnet;
- address.address.s6_addr32[3] |= htonl(1);
+ if (nm_streq(nm_setting_ip_config_get_method(s_ip6), NM_SETTING_IP6_CONFIG_METHOD_SHARED)) {
+ nm_auto_unref_l3cd_init NML3ConfigData *l3cd = NULL;
+ char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE];
+ NMPlatformIP6Address address;
+ l3cd = nm_device_create_l3_config_data(self, NM_IP_CONFIG_SOURCE_SHARED);
- nm_l3_config_data_add_address_6(l3cd, &address);
+ /* Assign a ::1 address in the subnet for us. */
+ address = *subnet;
+ address.address.s6_addr32[3] |= htonl(1);
- _LOGD(LOGD_IP6,
- "ipv6-pd: using %s",
- nm_platform_ip6_address_to_string(&address, sbuf, sizeof(sbuf)));
+ nm_l3_config_data_add_address_6(l3cd, &address);
- _dev_l3_register_l3cds_set_one(self, L3_CONFIG_DATA_TYPE_PD_6, l3cd, FALSE);
- _dev_l3_cfg_commit(self, TRUE);
- _dev_ipac6_ndisc_set_router_config(self);
+ _LOGD(LOGD_IP6,
+ "ipv6-pd: using %s",
+ nm_platform_ip6_address_to_string(&address, sbuf, sizeof(sbuf)));
+
+ _dev_l3_register_l3cds_set_one(self, L3_CONFIG_DATA_TYPE_PD_6, l3cd, FALSE);
+ _dev_l3_cfg_commit(self, TRUE);
+ _dev_ipac6_ndisc_set_router_config(self);
+ }
+ }
}
/*