summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Henrie <alexhenrie24@gmail.com>2024-02-22 09:19:23 -0700
committerAlex Henrie <alexhenrie24@gmail.com>2024-03-20 23:42:22 -0600
commit797f3cafeece5162c5a59ebb35449b779a394dd5 (patch)
tree7516b26389b4f768a34d6431a959f29b23b7aca2
parentea43ae964396b6db7cb7a88ae7cd980efeca5ec5 (diff)
device: fall back to saved use_tempaddr value instead of rereading /proc
There may be a per-interface default set by the sysctl net.ipv6.conf.<iface>.use_tempaddr that is different than net.ipv6.conf.default.use_tempaddr.
-rw-r--r--man/NetworkManager.conf.xml5
-rw-r--r--src/core/devices/nm-device.c19
-rw-r--r--src/libnm-core-impl/nm-setting-ip6-config.c10
-rw-r--r--src/libnmc-setting/settings-docs.h.in2
-rw-r--r--src/nmcli/gen-metadata-nm-settings-nmcli.xml.in2
5 files changed, 19 insertions, 19 deletions
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml
index b746727752..3c5357ce1e 100644
--- a/man/NetworkManager.conf.xml
+++ b/man/NetworkManager.conf.xml
@@ -1023,8 +1023,9 @@ ipv6.ip6-privacy=0
</varlistentry>
<varlistentry>
<term><varname>ipv6.ip6-privacy</varname></term>
- <listitem><para>If <literal>ipv6.ip6-privacy</literal> is unset, use the content of
- "/proc/sys/net/ipv6/conf/default/use_tempaddr" as last fallback.
+ <listitem><para>If <literal>ipv6.ip6-privacy</literal> is unset, fall back to the original
+ value of "/proc/sys/net/ipv6/conf/&lt;iface&gt;/use_tempaddr" from before NetworkManager
+ started.
</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index 7f26bc4156..708ac318a6 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -2270,6 +2270,7 @@ _prop_get_ipv4_dhcp_vendor_class_identifier(NMDevice *self, NMSettingIP4Config *
static NMSettingIP6ConfigPrivacy
_prop_get_ipv6_ip6_privacy(NMDevice *self)
{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
NMSettingIP6ConfigPrivacy ip6_privacy;
NMConnection *connection;
@@ -2303,16 +2304,14 @@ _prop_get_ipv6_ip6_privacy(NMDevice *self)
if (!nm_device_get_ip_ifindex(self))
return NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
- /* 3.) No valid default-value configured. Fallback to reading sysctl.
- *
- * Instead of reading static config files in /etc, just read the current sysctl value.
- * This works as NM only writes to "/proc/sys/net/ipv6/conf/IFNAME/use_tempaddr", but leaves
- * the "default" entry untouched. */
- ip6_privacy = nm_platform_sysctl_get_int32(
- nm_device_get_platform(self),
- NMP_SYSCTL_PATHID_ABSOLUTE("/proc/sys/net/ipv6/conf/default/use_tempaddr"),
- NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
- return _ip6_privacy_clamp(ip6_privacy);
+ /* 3.) No valid default value configured. Fall back to the original value
+ * from before NM started. */
+ return _ip6_privacy_clamp(_nm_utils_ascii_str_to_int64(
+ g_hash_table_lookup(priv->ip6_saved_properties, "use_tempaddr"),
+ 10,
+ G_MININT32,
+ G_MAXINT32,
+ NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN));
}
static NMSettingIP6ConfigAddrGenMode
diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c
index 42bb25710f..450dcea396 100644
--- a/src/libnm-core-impl/nm-setting-ip6-config.c
+++ b/src/libnm-core-impl/nm-setting-ip6-config.c
@@ -921,11 +921,11 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass)
* 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary
* addresses).
*
- * Having a per-connection setting set to "-1" (unknown) means fallback to
- * global configuration "ipv6.ip6-privacy".
- *
- * If also global configuration is unspecified or set to "-1", fallback to read
- * "/proc/sys/net/ipv6/conf/default/use_tempaddr".
+ * If set to "-1" (unknown) for a connection, the value is taken from the
+ * global "ipv6.ip6-privacy" setting. If the global setting is unspecified
+ * or also set to "-1", the value is set from the original value of
+ * "/proc/sys/net/ipv6/conf/<iface>/use_tempaddr" from before NetworkManager
+ * started.
*
* Note that this setting is distinct from the Stable Privacy addresses
* that can be enabled with the "addr-gen-mode" property's "stable-privacy"
diff --git a/src/libnmc-setting/settings-docs.h.in b/src/libnmc-setting/settings-docs.h.in
index 7b2694d4e9..a75a525177 100644
--- a/src/libnmc-setting/settings-docs.h.in
+++ b/src/libnmc-setting/settings-docs.h.in
@@ -216,7 +216,7 @@
#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_GATEWAY N_("The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set. Setting the gateway causes NetworkManager to configure a standard default route with the gateway as next hop. This is ignored if \"never-default\" is set. An alternative is to configure the default route explicitly with a manual route and /0 as prefix length. Note that the gateway usually conflicts with routing that NetworkManager configures for WireGuard interfaces, so usually it should not be set in that case. See \"ip4-auto-default-route\".")
#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS N_("When \"method\" is set to \"auto\" and this property to TRUE, automatically configured name servers and search domains are ignored and only name servers and search domains specified in the \"dns\" and \"dns-search\" properties, if any, are used.")
#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES N_("When \"method\" is set to \"auto\" and this property to TRUE, automatically configured routes are ignored and only routes specified in the \"routes\" property, if any, are used.")
-#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IP6_PRIVACY N_("Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to \"-1\" (unknown) means fallback to global configuration \"ipv6.ip6-privacy\". If also global configuration is unspecified or set to \"-1\", fallback to read \"/proc/sys/net/ipv6/conf/default/use_tempaddr\". Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the \"addr-gen-mode\" property's \"stable-privacy\" setting as another way of avoiding host tracking with IPv6 addresses.")
+#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_IP6_PRIVACY N_("Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). If set to \"-1\" (unknown) for a connection, the value is taken from the global \"ipv6.ip6-privacy\" setting. If the global setting is unspecified or also set to \"-1\", the value is set from the original value of \"/proc/sys/net/ipv6/conf/<iface>/use_tempaddr\" from before NetworkManager started. Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the \"addr-gen-mode\" property's \"stable-privacy\" setting as another way of avoiding host tracking with IPv6 addresses.")
#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_MAY_FAIL N_("If TRUE, allow overall network configuration to proceed even if the configuration specified by this property times out. Note that at least one IP configuration must succeed or overall network configuration will still fail. For example, in IPv6-only networks, setting this property to TRUE on the NMSettingIP4Config allows the overall network configuration to succeed if IPv4 configuration fails but IPv6 configuration completes successfully.")
#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_METHOD N_("The IPv6 connection method.")
#define DESCRIBE_DOC_NM_SETTING_IP6_CONFIG_MTU N_("Maximum transmission unit size, in bytes. If zero (the default), the MTU is set automatically from router advertisements or is left equal to the link-layer MTU. If greater than the link-layer MTU, or greater than zero but less than the minimum IPv6 MTU of 1280, this value has no effect.")
diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
index 3b9d6376a6..0a5c025a9a 100644
--- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
+++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in
@@ -1454,7 +1454,7 @@
values="-1 - 2147483647"
special-values="default (-1), infinity (2147483647)" />
<property name="ip6-privacy"
- nmcli-description="Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). Having a per-connection setting set to &quot;-1&quot; (unknown) means fallback to global configuration &quot;ipv6.ip6-privacy&quot;. If also global configuration is unspecified or set to &quot;-1&quot;, fallback to read &quot;/proc/sys/net/ipv6/conf/default/use_tempaddr&quot;. Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the &quot;addr-gen-mode&quot; property&apos;s &quot;stable-privacy&quot; setting as another way of avoiding host tracking with IPv6 addresses."
+ nmcli-description="Configure IPv6 Privacy Extensions for SLAAC, described in RFC4941. If enabled, it makes the kernel generate a temporary IPv6 address in addition to the public one generated from MAC address via modified EUI-64. This enhances privacy, but could cause problems in some applications, on the other hand. The permitted values are: -1: unknown, 0: disabled, 1: enabled (prefer public address), 2: enabled (prefer temporary addresses). If set to &quot;-1&quot; (unknown) for a connection, the value is taken from the global &quot;ipv6.ip6-privacy&quot; setting. If the global setting is unspecified or also set to &quot;-1&quot;, the value is set from the original value of &quot;/proc/sys/net/ipv6/conf/&lt;iface&gt;/use_tempaddr&quot; from before NetworkManager started. Note that this setting is distinct from the Stable Privacy addresses that can be enabled with the &quot;addr-gen-mode&quot; property&apos;s &quot;stable-privacy&quot; setting as another way of avoiding host tracking with IPv6 addresses."
format="choice (NMSettingIP6ConfigPrivacy)"
values="unknown (-1), disabled (0), prefer-public-addr (1), prefer-temp-addr (2)" />
<property name="addr-gen-mode"