mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-08 23:30:18 +01:00
device: configure IPv6-only-preferred mode in the DHCP client
Configure the DHCP client to enable the IPv6-only-preferred mode based on the content of the profile and on global configuration.
This commit is contained in:
parent
022b7ac184
commit
03c01eae29
2 changed files with 46 additions and 6 deletions
|
|
@ -950,6 +950,10 @@ ipv6.ip6-privacy=0
|
|||
<term><varname>ipv4.dhcp-iaid</varname></term>
|
||||
<listitem><para>If left unspecified, it defaults to "ifname".</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>ipv4.dhcp-ipv6-only-preferred</varname></term>
|
||||
<listitem><para>If left unspecified, the "IPv6-only preferred" DHCPv4 option is disabled.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>ipv4.dhcp-hostname-flags</varname></term>
|
||||
<listitem><para>If left unspecified, the value 3 (fqdn-encoded,fqdn-serv-update) is used.</para></listitem>
|
||||
|
|
|
|||
|
|
@ -1827,6 +1827,29 @@ _prop_get_ipvx_may_fail_cached(NMDevice *self, int addr_family, NMTernary *cache
|
|||
return _CACHED_BOOL(cache, _prop_get_ipvx_may_fail(self, addr_family));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_prop_get_ipv4_dhcp_ipv6_only_preferred(NMDevice *self)
|
||||
{
|
||||
NMSettingIP4Config *s_ip4;
|
||||
NMSettingIP4DhcpIpv6OnlyPreferred ipv6_only;
|
||||
|
||||
s_ip4 = nm_device_get_applied_setting(self, NM_TYPE_SETTING_IP4_CONFIG);
|
||||
if (!s_ip4)
|
||||
return FALSE;
|
||||
|
||||
ipv6_only = nm_setting_ip4_config_get_dhcp_ipv6_only_preferred(s_ip4);
|
||||
if (ipv6_only != NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_DEFAULT)
|
||||
return ipv6_only;
|
||||
|
||||
return nm_config_data_get_connection_default_int64(
|
||||
NM_CONFIG_GET_DATA,
|
||||
NM_CON_DEFAULT("ipv4.dhcp-ipv6-only-preferred"),
|
||||
self,
|
||||
NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO,
|
||||
NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_YES,
|
||||
NM_SETTING_IP4_DHCP_IPV6_ONLY_PREFERRED_NO);
|
||||
}
|
||||
|
||||
/**
|
||||
* _prop_get_ipvx_dhcp_iaid:
|
||||
* @self: the #NMDevice
|
||||
|
|
@ -11263,7 +11286,8 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family)
|
|||
gboolean hostname_is_fqdn;
|
||||
gboolean send_client_id;
|
||||
guint8 dscp;
|
||||
gboolean dscp_explicit = FALSE;
|
||||
gboolean dscp_explicit = FALSE;
|
||||
gboolean ipv6_only_pref = FALSE;
|
||||
|
||||
client_id = _prop_get_ipv4_dhcp_client_id(self, connection, hwaddr, &send_client_id);
|
||||
dscp = _prop_get_ipv4_dhcp_dscp(self, &dscp_explicit);
|
||||
|
|
@ -11282,6 +11306,17 @@ _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 (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");
|
||||
ipv6_only_pref = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
config = (NMDhcpClientConfig) {
|
||||
.addr_family = AF_INET,
|
||||
.l3cfg = nm_device_get_l3cfg(self),
|
||||
|
|
@ -11302,11 +11337,12 @@ _dev_ipdhcpx_start(NMDevice *self, int addr_family)
|
|||
.reject_servers = reject_servers,
|
||||
.v4 =
|
||||
{
|
||||
.request_broadcast = request_broadcast,
|
||||
.acd_timeout_msec = _prop_get_ipv4_dad_timeout(self),
|
||||
.send_client_id = send_client_id,
|
||||
.dscp = dscp,
|
||||
.dscp_explicit = dscp_explicit,
|
||||
.request_broadcast = request_broadcast,
|
||||
.acd_timeout_msec = _prop_get_ipv4_dad_timeout(self),
|
||||
.send_client_id = send_client_id,
|
||||
.dscp = dscp,
|
||||
.dscp_explicit = dscp_explicit,
|
||||
.ipv6_only_preferred = ipv6_only_pref,
|
||||
},
|
||||
.previous_lease = priv->l3cds[L3_CONFIG_DATA_TYPE_DHCP_X(IS_IPv4)].d,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue