modem-broadband: update modem's supported-ip-families (rh #1263959)

If SIM in a modem is locked, ModemManager can't initialize SupportedIpFamilies
and NetworkManager will set the property to 0. ModemManager then updates the
property after the modem is unlocked, but NetworkManager did not watch changes
to the property. And that resulted in a connection failure:
(ttyUSB1): Failed to connect 'O2 Internet': Connection requested IPv4 but IPv4 is unsuported by the modem.
(ttyUSB1): device state change: prepare -> failed (reason 'modem-init-failed') [40 120 28]

https://bugzilla.redhat.com/show_bug.cgi?id=1263959

(cherry picked from commit eecb4c46cc)
This commit is contained in:
Jiří Klimeš 2015-09-22 18:42:40 +02:00
parent 4971ce9a12
commit a0ffb5ad19

View file

@ -1145,6 +1145,19 @@ sim_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
g_object_set (G_OBJECT (self), NM_MODEM_SIM_ID, NULL, NULL);
}
static void
supported_ip_families_changed (MMModem *modem, GParamSpec *pspec, gpointer user_data)
{
NMModemBroadband *self = NM_MODEM_BROADBAND (user_data);
g_return_if_fail (modem == self->priv->modem_iface);
g_object_set (G_OBJECT (self),
NM_MODEM_IP_TYPES,
mm_ip_family_to_nm (mm_modem_get_supported_ip_families (modem)),
NULL);
}
static void
nm_modem_broadband_init (NMModemBroadband *self)
{
@ -1176,6 +1189,10 @@ set_property (GObject *object,
G_CALLBACK (sim_changed),
self);
sim_changed (self->priv->modem_iface, NULL, self);
g_signal_connect (self->priv->modem_iface,
"notify::supported-ip-families",
G_CALLBACK (supported_ip_families_changed),
self);
/* Note: don't grab the Simple iface here; the Modem interface is the
* only one assumed to be always valid and available */