diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 375bcaaa3..ae6bc504c 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -964,3 +964,24 @@ nm_utils_get_monotonic_timestamp_s (void) } +/** + * nm_utils_ip6_property_path: + * @ifname: an interface name + * @property: a property name + * + * Returns the path to IPv6 property @property on @ifname. Note that + * this uses a static buffer. + */ +const char * +nm_utils_ip6_property_path (const char *ifname, const char *property) +{ +#define IPV6_PROPERTY_DIR "/proc/sys/net/ipv6/conf/" + static char path[sizeof (IPV6_PROPERTY_DIR) + IFNAMSIZ + 32]; + int len; + + len = g_snprintf (path, sizeof (path), IPV6_PROPERTY_DIR "%s/%s", + ifname, property); + g_assert (len < sizeof (path) - 1); + + return path; +} diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h index a33c78e0a..f9583f5f5 100644 --- a/src/NetworkManagerUtils.h +++ b/src/NetworkManagerUtils.h @@ -105,4 +105,6 @@ gint64 nm_utils_get_monotonic_timestamp_us (void); gint64 nm_utils_get_monotonic_timestamp_ms (void); gint32 nm_utils_get_monotonic_timestamp_s (void); +const char *nm_utils_ip6_property_path (const char *ifname, const char *property); + #endif /* NETWORK_MANAGER_UTILS_H */ diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 9eeb3b6ca..246d80573 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -397,26 +397,10 @@ nm_device_init (NMDevice *self) priv->ip6_saved_properties = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); } -/* Returns a static buffer */ -static const char * -ip6_property_path (NMDevice *self, const char *property) -{ -#define IPV6_PROPERTY_DIR "/proc/sys/net/ipv6/conf/" - static char path[sizeof (IPV6_PROPERTY_DIR) + IFNAMSIZ + 32]; - int len; - - len = g_snprintf (path, sizeof (path), IPV6_PROPERTY_DIR "%s/%s", - nm_device_get_ip_iface (self), - property); - g_assert (len < sizeof (path) - 1); - - return path; -} - static inline gboolean nm_device_ipv6_sysctl_set (NMDevice *self, const char *property, const char *value) { - return nm_platform_sysctl_set (ip6_property_path (self, property), value); + return nm_platform_sysctl_set (nm_utils_ip6_property_path (nm_device_get_ip_iface (self), property), value); } static const char *ip6_properties_to_save[] = { @@ -433,13 +417,14 @@ static void save_ip6_properties (NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); + const char *ifname = nm_device_get_ip_iface (self); char *value; int i; g_hash_table_remove_all (priv->ip6_saved_properties); for (i = 0; i < G_N_ELEMENTS (ip6_properties_to_save); i++) { - value = nm_platform_sysctl_get (ip6_property_path (self, ip6_properties_to_save[i])); + value = nm_platform_sysctl_get (nm_utils_ip6_property_path (ifname, ip6_properties_to_save[i])); if (value) { g_hash_table_insert (priv->ip6_saved_properties, (char *) ip6_properties_to_save[i],