Normally, a device disabled via nm_device_interface_set_enabled() will
shift into the UNAVAILABLE state.  Modems, however, don't do that.
Rather, they pretend that they are in the DISCONNECTED state, presumably
to make it easier to re-enable them.  To avoid accidentally re-enabling
and autoconnecting a disabled modem, we need to explicitly make
nm_device_interface_get_enabled() == true a prerequisite for
autoconnecting.
---
 src/nm-policy.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/src/nm-policy.c b/src/nm-policy.c
index 20729fd..a42a0fa 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -896,6 +896,9 @@ schedule_activate_check (NMPolicy *policy, NMDevice 
*device, guint delay_seconds
        if (state < NM_DEVICE_STATE_DISCONNECTED)
                return;
 
+       if (!nm_device_interface_get_enabled (NM_DEVICE_INTERFACE (device)))
+               return;
+
        if (!nm_device_autoconnect_allowed (device))
                return;
 
@@ -1054,6 +1057,12 @@ nsps_changed (NMDeviceWimax *device, NMWimaxNsp *nsp, 
gpointer user_data)
 }
 #endif
 
+static void
+modem_enabled_changed (NMDeviceModem *device, gpointer user_data)
+{
+       schedule_activate_check ((NMPolicy *) (user_data), NM_DEVICE (device), 
0);
+}
+
 typedef struct {
        gulong id;
        NMDevice *device;
@@ -1088,6 +1097,8 @@ device_added (NMManager *manager, NMDevice *device, 
gpointer user_data)
                _connect_device_signal (policy, device, "nsp-added", 
nsps_changed);
                _connect_device_signal (policy, device, "nsp-removed", 
nsps_changed);
 #endif
+       } else if (NM_IS_DEVICE_MODEM (device)) {
+               _connect_device_signal (policy, device, 
NM_DEVICE_MODEM_ENABLE_CHANGED, modem_enabled_changed);
        }
 }
 
-- 
1.7.4.1

_______________________________________________
networkmanager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to