modemmanager: do not disable modem on reconnect
authorFlorian Eckert <fe@dev.tdt.de>
Tue, 4 Feb 2025 11:36:51 +0000 (12:36 +0100)
committerFlorian Eckert <Eckert.Florian@googlemail.com>
Wed, 12 Feb 2025 15:52:16 +0000 (16:52 +0100)
If the modem loses the connection, an attempt is made to re-establish the
connection via the report-down script.

Until now, the modem was disabled when the modem processed the teardown of
the modemmanager protohandler. The immediate up events of netifd renables
the modem right away. This takes time, which is not necessary.

This commit changes the behavior so that the modem is not disabled when
the modemmanager is disconnected via the report-down script.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
net/modemmanager/Makefile
net/modemmanager/files/lib/netifd/proto/modemmanager.sh
net/modemmanager/files/usr/lib/ModemManager/connection.d/10-report-down

index fb4bcef9cb83b3ff84e6400ae7e2454bcdd1ac23..fc50a7478a64268bdc1d0b11c066f6008bbacf6b 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=modemmanager
 PKG_VERSION:=1.22.0
-PKG_RELEASE:=20
+PKG_RELEASE:=21
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git
index 715178f71e4d0451a960303ec7cda054a3f282e9..1d0211cf85193d86339305555955464fc360ee7d 100644 (file)
@@ -869,8 +869,17 @@ proto_modemmanager_teardown() {
        mmcli --modem="${device}" --simple-disconnect ||
                proto_notify_error "${interface}" DISCONNECT_FAILED
 
-       # disable
-       mmcli --modem="${device}" --disable
+       # reading variable from var state which was set in
+       # '/usr/lib/ModemManager/connection.d/10-report-down'
+       # because of a reconnect event.
+       # The modem therefore does not need to be disabled.
+       local disable="$(uci_get_state network "$interface" disable_modem "1")"
+       if [ "${disable}" -eq 0 ]; then
+               echo "Skipping modem disable"
+               uci_revert_state network "${interface}" disable_modem
+       else
+               mmcli --modem="${device}" --disable
+       fi
 
        # low power, only if requested
        [ "${lowpower:-0}" -lt 1 ] ||
index b8feb267790728aabd65afe51472d55a93f9d0c9..9c0484d6ed645a9dac9498e861694fad1e65631f 100644 (file)
@@ -32,6 +32,7 @@ IFUP=$(ifstatus "${CFG}" | jsonfilter -e "@.up")
 
 [ "${IFUP}" = "true" ] && {
        mm_log "info" "Reconnecting '${CFG}' on '${STATE}' event"
+       uci_toggle_state network "${CFG}" disable_modem "0"
        ubus call network.interface down "{ 'interface': '${CFG}'}"
        ubus call network.interface up "{ 'interface': '${CFG}'}"
 }