<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Feb 14, 2017 11:20 PM, "Dan Williams" <<a href="mailto:dcbw@redhat.com">dcbw@redhat.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="elided-text">On Tue, 2017-02-14 at 15:46 -0600, Russ Westrem wrote:<br>
> You mean you can still use the WWAN even if MM says it's<br>
> disconnected?<br>
> Not sure I understood, otherwise.<br>
><br>
><br>
> --<br>
> Aleksander<br>
> <a href="https://aleksander.es" rel="noreferrer" target="_blank">https://aleksander.es</a><br>
><br>
><br>
><br>
> No, nothing is usable untill i ifup.<br>
<br>
</div>Here's what's probably going on...  When the network tells the modem to<br>
disconnect the PDP context (eg, bearer), MM sees the message and sets<br>
the status on the bearer and does some other cleanup.  But that doesn't<br>
actually trigger a bearer disconnect, because ModemManager is waiting<br>
for a connection manager to notice the bearer/modem state change and to<br>
delete the bearer, which in your case actually clears the WDS client<br>
and tells the modem to release the bearer resources.<br>
<br>
But MM should probably call the bearer disconnect sequence when the<br>
bearer is disconnected unexpectedly, and ignore errors since the bearer<br>
is already dead.  But this doesn't help your actual problem, which is<br>
that nothing is telling ModemManager to activate another bearer when<br>
the first one drops...<br>
<br>
So to circle back to your original question, which was "how do I<br>
automatically reconnect a bearer when the network disconnects me",<br>
you'd have a small script that watches the modem state, and if the<br>
modem state moves from connected -> registered just runs 'ifup<br>
broadband'.<br>
<br>
Dan<br>
<br>
Here's how to do that in Python, for example:<br>
------------------------------<wbr>---------------<br>
<br>
import sys, signal, gi, os<br>
<br>
gi.require_version('<wbr>ModemManager', '1.0')<br>
from gi.repository import GLib, GObject, Gio, ModemManager<br>
<br>
def modem_state_changed(modem, old_state, new_state, reason):<br>
    print "Modem state changed: %d -> %d (reason %d)" % (old_state, new_state, reason)<br>
    if old_state == getattr(ModemManager,"<wbr>ModemState").CONNECTED and new_state == getattr(ModemManager,"<wbr>ModemState").REGISTERED:<br>
        os.system("ifup broadband")<br>
<br>
sigids = {}<br>
<br>
def watch_modem(manager, obj):<br>
    modem = obj.get_modem()<br>
    sigids[modem] = modem.connect('state-changed', modem_state_changed)<br>
<br>
def unwatch_modem(manager, obj):<br>
    modem = obj.get_modem()<br>
    modem.disconnect(sigids[modem]<wbr>)<br>
    del sigids[modem]<br>
<br>
def signal_handler(data):<br>
    main_loop.quit()<br>
<br>
if __name__ == "__main__":<br>
    main_loop = GLib.MainLoop()<br>
    GLib.unix_signal_add(GLib.<wbr>PRIORITY_HIGH, signal.SIGHUP, signal_handler, None)<br>
    GLib.unix_signal_add(GLib.<wbr>PRIORITY_HIGH, signal.SIGTERM, signal_handler, None)<br>
<br>
    # Connection to ModemManager<br>
    connection = Gio.bus_get_sync (Gio.BusType.SYSTEM, None)<br>
    manager = ModemManager.Manager.new_sync (connection, Gio.<wbr>DBusObjectManagerClientFlags.<wbr>DO_NOT_AUTO_START, None)<br>
<br>
    # watch the manager for new modems<br>
    manager.connect('object-added'<wbr>, watch_modem)<br>
    manager.connect('object-<wbr>removed', unwatch_modem)<br>
<br>
    # Watch existing modems<br>
    if manager.get_name_owner() != None:<br>
        for obj in manager.get_objects():<br>
            watch_modem(manager, obj)<br>
<br>
    # Main loop<br>
    try:<br>
        main_loop.run()<br>
    except KeyboardInterrupt:<br>
        pass<br>
</blockquote></div><br></div></div><div class="gmail_extra" dir="auto"><br></div><div class="gmail_extra" dir="auto">Is there anything in the modemmanager scripts that I could change to have it ignore the deregistered modem and stop it from removing it from the bearer.  I have a feeling these deregistrations happen often but very quickly and maybe if ignored, everything might work.</div></div>