diff --git a/src/devices/nm-device-private.h b/src/devices/nm-device-private.h index c5b4936b51..c2ba98f387 100644 --- a/src/devices/nm-device-private.h +++ b/src/devices/nm-device-private.h @@ -45,7 +45,7 @@ enum NMActStageReturn { NMSettings *nm_device_get_settings (NMDevice *self); -void nm_device_set_ip_iface (NMDevice *self, const char *iface); +gboolean nm_device_set_ip_iface (NMDevice *self, const char *iface); void nm_device_activate_schedule_stage3_ip_config_start (NMDevice *device); diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 64bb62c893..f172ec2c6f 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -848,22 +848,32 @@ nm_device_get_ip_ifindex (NMDevice *self) return priv->ip_iface ? priv->ip_ifindex : priv->ifindex; } -void +/** + * nm_device_set_ip_iface: + * @self: the #NMDevice + * @iface: the new IP interface name + * + * Updates the IP interface name and possibly the ifindex. + * + * Returns: %TRUE if the anything (name or ifindex) changed, %FALSE if nothing + * changed. + */ +gboolean nm_device_set_ip_iface (NMDevice *self, const char *iface) { NMDevicePrivate *priv; int ifindex; - g_return_if_fail (NM_IS_DEVICE (self)); + g_return_val_if_fail (NM_IS_DEVICE (self), FALSE); priv = NM_DEVICE_GET_PRIVATE (self); if (nm_streq0 (iface, priv->ip_iface)) { if (!iface) - return; + return FALSE; ifindex = nm_platform_if_nametoindex (NM_PLATFORM_GET, iface); if ( ifindex <= 0 || priv->ip_ifindex == ifindex) - return; + return FALSE; priv->ip_ifindex = ifindex; _LOGD (LOGD_DEVICE, "ip-ifname: update ifindex for ifname '%s': %d", iface, priv->ip_ifindex); @@ -904,6 +914,7 @@ nm_device_set_ip_iface (NMDevice *self, const char *iface) priv->ip_mtu = nm_platform_link_get_mtu (NM_PLATFORM_GET, priv->ip_ifindex); _notify (self, PROP_IP_IFACE); + return TRUE; } static gboolean diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c index fec0d4ce91..7a70a0bf43 100644 --- a/src/devices/wwan/nm-device-modem.c +++ b/src/devices/wwan/nm-device-modem.c @@ -260,16 +260,11 @@ static void data_port_changed_cb (NMModem *modem, GParamSpec *pspec, gpointer user_data) { NMDevice *self = NM_DEVICE (user_data); - const char *old = nm_device_get_ip_iface (self); - const char *new = nm_modem_get_data_port (modem); - gboolean changed = FALSE; - - if (new && g_strcmp0 (new, old)) - changed = TRUE; + gboolean changed; /* We set the IP iface in the device as soon as we know it, so that we * properly ifup it if needed */ - nm_device_set_ip_iface (self, new); + changed = nm_device_set_ip_iface (self, nm_modem_get_data_port (modem)); /* Disable IPv6 immediately on the interface since NM handles IPv6 * internally, and leaving it enabled could allow the kernel's IPv6