summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-01-13 15:55:48 +0100
committerThomas Haller <thaller@redhat.com>2017-01-16 17:24:36 +0100
commitbe4442bd0dc3d846272ed1891771a41cc6c420c7 (patch)
tree266a5d18519561341bddf8333a77a69de01b988a
parent5051a04d818894453171df390861df19b1eac2ab (diff)
downloadNetworkManager-be4442bd0dc3d846272ed1891771a41cc6c420c7.tar.gz
device: cleanup setting of mtu in NMDevice
Mark priv->mtu/priv->ip_mtu/ priv->ip6_mtu as const to highlight the places that explicitly set their mutable aliases priv->mtu_/ priv->ip_mtu_/priv->ip6_mtu_. Also, NM_DEVICE_MTU property is read-only. It cannot be set via g_object_set(). Also, clear priv->mtu in nm_device_unrealize().
-rw-r--r--src/devices/nm-device.c54
1 files changed, 31 insertions, 23 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 4c93c0e26b..b8a9fb57be 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -307,6 +307,7 @@ typedef struct _NMDevicePrivate {
gulong ignore_carrier_id;
guint32 mtu;
guint32 ip_mtu;
+ guint32 ip6_mtu;
bool up; /* IFF_UP */
/* Generic DHCP stuff */
@@ -383,7 +384,6 @@ typedef struct _NMDevicePrivate {
NMIP6Config * ext_ip6_config_captured; /* Configuration captured from platform. */
GSList * vpn6_configs; /* VPNs which use this device */
bool nm_ipv6ll; /* TRUE if NM handles the device's IPv6LL address */
- guint32 ip6_mtu;
NMIP6Config * dad6_ip6_config;
NMNDisc * ndisc;
@@ -2175,7 +2175,6 @@ device_link_changed (NMDevice *self)
_notify (self, PROP_DRIVER);
}
- /* Update MTU if it has changed. */
if (priv->mtu != info.mtu) {
priv->mtu = info.mtu;
_notify (self, PROP_MTU);
@@ -2322,8 +2321,7 @@ device_ip_link_changed (NMDevice *self)
_stats_update_counters_from_pllink (self, pllink);
- if (priv->ip_mtu != pllink->mtu)
- priv->ip_mtu = pllink->mtu;
+ priv->ip_mtu = pllink->mtu;
if (_ip_iface_update (self, pllink->name))
nm_device_update_dynamic_ip_setup (self);
@@ -2588,6 +2586,7 @@ realize_start_setup (NMDevice *self, const NMPlatformLink *plink)
NMDeviceCapabilities capabilities = 0;
NMConfig *config;
guint real_rate;
+ guint32 mtu;
g_return_if_fail (NM_IS_DEVICE (self));
@@ -2608,6 +2607,13 @@ realize_start_setup (NMDevice *self, const NMPlatformLink *plink)
/* Balanced by a thaw in nm_device_realize_finish() */
g_object_freeze_notify (G_OBJECT (self));
+ priv->ip6_mtu = 0;
+ priv->ip_mtu = 0;
+ if (priv->mtu) {
+ priv->mtu = 0;
+ _notify (self, PROP_MTU);
+ }
+
if (plink) {
g_return_if_fail (link_type_compatible (self, plink->type, NULL, NULL));
update_device_from_platform_link (self, plink);
@@ -2623,8 +2629,11 @@ realize_start_setup (NMDevice *self, const NMPlatformLink *plink)
if (nm_platform_link_is_software (NM_PLATFORM_GET, priv->ifindex))
capabilities |= NM_DEVICE_CAP_IS_SOFTWARE;
- priv->mtu = nm_platform_link_get_mtu (NM_PLATFORM_GET, priv->ifindex);
- _notify (self, PROP_MTU);
+ mtu = nm_platform_link_get_mtu (NM_PLATFORM_GET, priv->ifindex);
+ if (priv->mtu != mtu) {
+ priv->mtu = mtu;
+ _notify (self, PROP_MTU);
+ }
nm_platform_link_get_driver_info (NM_PLATFORM_GET,
priv->ifindex,
@@ -2835,6 +2844,11 @@ nm_device_unrealize (NMDevice *self, gboolean remove_resources, GError **error)
if (nm_clear_g_free (&priv->ip_iface))
_notify (self, PROP_IP_IFACE);
+ if (priv->mtu != 0) {
+ priv->mtu = 0;
+ _notify (self, PROP_MTU);
+ }
+
if (priv->driver_version) {
g_clear_pointer (&priv->driver_version, g_free);
_notify (self, PROP_DRIVER_VERSION);
@@ -6590,23 +6604,12 @@ linklocal6_start (NMDevice *self)
static void nm_device_ipv6_set_mtu (NMDevice *self, guint32 mtu);
-static void
-set_ip_mtu (NMDevice *self, guint32 mtu)
-{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
- if (priv->ip_ifindex)
- priv->ip_mtu = mtu;
- else
- priv->mtu = mtu;
-}
-
static guint32
get_ip_mtu (NMDevice *self)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
- if (priv->ip_ifindex)
+ if (priv->ip_ifindex > 0)
return priv->ip_mtu;
else
return priv->mtu;
@@ -6619,8 +6622,16 @@ nm_device_set_mtu (NMDevice *self, guint32 mtu)
int ifindex = nm_device_get_ip_ifindex (self);
guint32 ip_mtu;
- if (mtu)
- set_ip_mtu (self, mtu);
+ if (mtu) {
+ if (priv->ip_ifindex > 0)
+ priv->ip_mtu = mtu;
+ else {
+ if (priv->mtu != mtu) {
+ priv->mtu = mtu;
+ _notify (self, PROP_MTU);
+ }
+ }
+ }
/* Ensure the IPv6 MTU is still alright. */
if (priv->ip6_mtu)
@@ -13083,9 +13094,6 @@ set_property (GObject *object, guint prop_id,
g_free (priv->firmware_version);
priv->firmware_version = g_value_dup_string (value);
break;
- case PROP_MTU:
- priv->mtu = g_value_get_uint (value);
- break;
case PROP_IP4_ADDRESS:
priv->ip4_address = g_value_get_uint (value);
break;