modemmanager: explicitly disconnect even if no bearers found
authorAleksander Morgado <aleksander@aleksander.es>
Mon, 13 Jun 2022 10:24:43 +0000 (12:24 +0200)
committerJosef Schlehofer <pepe.schlehofer@gmail.com>
Tue, 23 Apr 2024 14:36:42 +0000 (16:36 +0200)
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>
(cherry picked from commit c15e94f6c5fbbaedd41fd74b930a2a205f80afc0)

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
        }