mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-09 17:00:40 +01:00
device: use subnet when the applied connection has IPv6 method shared
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 commit15901a7489) (cherry picked from commit86fbfb3806) (cherry picked from commit546dd70178)
This commit is contained in:
parent
5d95a12f42
commit
74f2c591ec
1 changed files with 29 additions and 20 deletions
|
|
@ -10766,25 +10766,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -12183,13 +12190,15 @@ activate_stage3_ip_config(NMDevice *self)
|
|||
|
||||
ipv6_method = nm_device_get_effective_ip_config_method(self, AF_INET6);
|
||||
if (!g_file_test("/proc/sys/net/ipv6", G_FILE_TEST_IS_DIR)) {
|
||||
_NMLOG_ip((nm_device_sys_iface_state_is_external(self) ||
|
||||
NM_IN_STRSET(ipv6_method,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_AUTO,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_DISABLED,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) ? LOGL_DEBUG : LOGL_WARN,
|
||||
_NMLOG_ip((nm_device_sys_iface_state_is_external(self)
|
||||
|| NM_IN_STRSET(ipv6_method,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_AUTO,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_DISABLED,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_IGNORE))
|
||||
? LOGL_DEBUG
|
||||
: LOGL_WARN,
|
||||
AF_INET6,
|
||||
"IPv6 not supported by kernel resulting in \"ipv6.method=disabled\"");
|
||||
"IPv6 not supported by kernel resulting in \"ipv6.method=disabled\"");
|
||||
ipv6_method = NM_SETTING_IP6_CONFIG_METHOD_DISABLED;
|
||||
} else if (nm_streq(ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
|
||||
ipv6_method = klass->get_ip_method_auto(self, AF_INET6);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue