modemmanager: explicitly disconnect even if no bearers found
authorAleksander Morgado <aleksander@aleksander.es>
Mon, 13 Jun 2022 10:24:43 +0000 (12:24 +0200)
committerRosen Penev <rosenp@gmail.com>
Wed, 6 Jul 2022 04:59:51 +0000 (21:59 -0700)
A network restart where netifd is cleanly restarted involves bringing
the network interfaces down. The 'modemmanager' protocol handler will
run a mmcli --simple-disconnect in this case, but only if there are
bearer objects found.

If the network restart happened *during* the connection attempt
procedure, while the modem is e.g. being registered in the network, no
bearer objects exist yet, and so, we would skip doing anything during
the interface teardown operation. This would lead to the original
connection attempt succeeding, so leaving the modem in ModemManager
in connected state, while the associated interface in netifd is
reported down.

Signed-off-by: Aleksander Morgado <aleksander@aleksander.es>
net/modemmanager/files/modemmanager.proto

index d24910b984f1498bafc5348b51757c0152ab4eee..855060f06e1cf1e86bb8b12d9a4dbb1ad3ca6a7b 100755 (executable)
@@ -515,7 +515,8 @@ proto_modemmanager_teardown() {
        modemstatus=$(mmcli --modem="${device}" --output-keyvalue)
        bearerpath=$(modemmanager_get_field "${modemstatus}" "modem.generic.bearers.value\[1\]")
        [ -n "${bearerpath}" ] || {
-               echo "couldn't load bearer path"
+               echo "couldn't load bearer path: disconnecting anyway"
+               mmcli --modem="${device}" --simple-disconnect >/dev/null 2>&1
                return
        }