mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-06 09:40:17 +01:00
device: fix _dev_addrgenmode6_set()
If addrgenmode=0 is already set, the function should still toggle disable_ipv6 if needed, to stop the generation of temporary addresses. Also, it should store the last set value into 'previous_mode_val'. Fixes-test: @ipv6_keep_external_routes
This commit is contained in:
parent
bd7b5aa707
commit
cd65351d29
1 changed files with 15 additions and 13 deletions
|
|
@ -11442,24 +11442,26 @@ _dev_addrgenmode6_set(NMDevice *self, guint8 addr_gen_mode)
|
|||
nm_platform_link_inet6_addrgenmode2str(addr_gen_mode, sbuf, sizeof(sbuf)),
|
||||
(cur_addr_gen_mode == addr_gen_mode) ? " (already set)" : "");
|
||||
|
||||
if (cur_addr_gen_mode == addr_gen_mode)
|
||||
return;
|
||||
|
||||
r = nm_platform_link_set_inet6_addr_gen_mode(nm_device_get_platform(self),
|
||||
ifindex,
|
||||
addr_gen_mode);
|
||||
if (r < 0) {
|
||||
_NMLOG_ip(NM_IN_SET(r, -NME_PL_NOT_FOUND, -NME_PL_OPNOTSUPP) ? LOGL_DEBUG : LOGL_WARN,
|
||||
AF_INET6,
|
||||
"addrgenmode6: failed to set %s: (%s)",
|
||||
nm_platform_link_inet6_addrgenmode2str(addr_gen_mode, sbuf, sizeof(sbuf)),
|
||||
nm_strerror(r));
|
||||
if (cur_addr_gen_mode != addr_gen_mode) {
|
||||
r = nm_platform_link_set_inet6_addr_gen_mode(nm_device_get_platform(self),
|
||||
ifindex,
|
||||
addr_gen_mode);
|
||||
if (r < 0) {
|
||||
_NMLOG_ip(NM_IN_SET(r, -NME_PL_NOT_FOUND, -NME_PL_OPNOTSUPP) ? LOGL_DEBUG : LOGL_WARN,
|
||||
AF_INET6,
|
||||
"addrgenmode6: failed to set %s: (%s)",
|
||||
nm_platform_link_inet6_addrgenmode2str(addr_gen_mode, sbuf, sizeof(sbuf)),
|
||||
nm_strerror(r));
|
||||
} else {
|
||||
priv->addrgenmode6_data.previous_mode_val = addr_gen_mode;
|
||||
}
|
||||
}
|
||||
|
||||
if (addr_gen_mode == NM_IN6_ADDR_GEN_MODE_NONE) {
|
||||
gs_free char *value = NULL;
|
||||
|
||||
/* Bounce IPv6 to ensure the kernel stops IPv6LL address generation */
|
||||
/* Bounce IPv6 to ensure the kernel stops IPv6LL address and temporary
|
||||
* address generation */
|
||||
_LOGD_ip(AF_INET6,
|
||||
"addrgenmode6: toggle disable_ipv6 sysctl after disabling addr-gen-mode");
|
||||
value = nm_device_sysctl_ip_conf_get(self, AF_INET6, "disable_ipv6");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue