From 534d32cf810cbdfc771ced5db0d5b208c4cf679b Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Sun, 5 Oct 2025 12:03:08 +0200 Subject: [PATCH] ipv4: improve logging for ipv4.dhcp-ipv6-only-preferred --- src/core/devices/nm-device.c | 17 ++++++++++++----- src/core/dhcp/nm-dhcp-client.c | 4 +++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 4f0ea9c1e4..143ac587c5 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -1944,12 +1944,14 @@ _prop_get_ipvx_may_fail_cached(NMDevice *self, int addr_family, NMTernary *cache } static gboolean -_prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self) +_prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self, gboolean *out_is_auto) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); NMSettingIP4Config *s_ip4; NMSettingIP4DhcpIpv6OnlyPreferred ipv6_only; + NM_SET_OUT(out_is_auto, FALSE); + s_ip4 = nm_device_get_applied_setting(self, NM_TYPE_SETTING_IP4_CONFIG); if (!s_ip4) return FALSE; @@ -1976,6 +1978,8 @@ _prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self) return ipv6_only == NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES; /* auto */ + NM_SET_OUT(out_is_auto, TRUE); + if (nm_streq0(priv->ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) && _prop_get_ipv6_clat(self, nm_device_get_applied_connection(self)) != NM_SETTING_IP6_CONFIG_CLAT_NO) { @@ -11833,8 +11837,9 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family) gboolean hostname_is_fqdn; gboolean send_client_id; guint8 dscp; - gboolean dscp_explicit = FALSE; - gboolean ipv6_only_pref = FALSE; + gboolean dscp_explicit = FALSE; + gboolean ipv6_only_pref = FALSE; + gboolean ipv6_only_pref_auto = FALSE; client_id = _prop_get_ipv4_dhcp_client_id(self, connection, hwaddr, &send_client_id); dscp = _prop_get_ipv4_dhcp_dscp(self, &dscp_explicit); @@ -11853,13 +11858,15 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family) hostname = nm_setting_ip_config_get_dhcp_hostname(s_ip); } - if (_prop_get_ipv4_dhcp_ipv6_only_preferred(self)) { + if (_prop_get_ipv4_dhcp_ipv6_only_preferred(self, &ipv6_only_pref_auto)) { if (nm_streq0(priv->ipv6_method, NM_SETTING_IP6_CONFIG_METHOD_DISABLED)) { _LOGI_ipdhcp( addr_family, "not requesting the \"IPv6-only preferred\" option because IPv6 is disabled"); } else { - _LOGD_ipdhcp(addr_family, "requesting the \"IPv6-only preferred\" option"); + _LOGD_ipdhcp(addr_family, + "requesting the \"IPv6-only preferred\" option (%s enabled)", + ipv6_only_pref_auto ? "automatically" : "explicitly"); ipv6_only_pref = TRUE; } } diff --git a/src/core/dhcp/nm-dhcp-client.c b/src/core/dhcp/nm-dhcp-client.c index 18ad4024b4..cc6dccdfa4 100644 --- a/src/core/dhcp/nm-dhcp-client.c +++ b/src/core/dhcp/nm-dhcp-client.c @@ -1460,7 +1460,9 @@ nm_dhcp_client_schedule_ipv6_only_restart(NMDhcpClient *self, guint timeout) nm_assert(!priv->is_stopped); timeout = NM_MAX(priv->v4.ipv6_only_min_wait, timeout); - _LOGI("received option \"ipv6-only-preferred\": stopping DHCPv4 for %u seconds", timeout); + _LOGI("received option \"ipv6-only-preferred\": stopping DHCPv4 for %u seconds. Set " + "ipv4.dhcp-ipv6-only-preferred=no to force the use of IPv4 on this IPv6-mostly network", + timeout); nm_dhcp_client_stop(self, FALSE); nm_clear_g_source_inst(&priv->no_lease_timeout_source);