summaryrefslogtreecommitdiff
path: root/net/modemmanager
diff options
context:
space:
mode:
authorOliver Sedlbauer <osedlbauer@tdt.de>2023-10-17 17:13:37 +0200
committerOliver Sedlbauer <osedlbauer@tdt.de>2023-10-30 08:53:10 +0100
commitd78505bcfa3101fab00fcee680b120f5b6b5307e (patch)
treee141ca27b147a812a4b3c39fc2550ccbc7db194d /net/modemmanager
parent91c2be764af86f77ed88aff42f96d5ec155c6d27 (diff)
modemmanager: improve cleanup of ifaces
Change workflow to cleanup interfaces using the sysfscache. The sysfscache stores the processed sysfs-paths. Using this instead of mmcli -L, the interfaces can be properly cleaned up even if, for example, ModemManager crashes and mmcli is no longer usable. Signed-off-by: Oliver Sedlbauer <osedlbauer@tdt.de>
Diffstat (limited to 'net/modemmanager')
-rw-r--r--net/modemmanager/Makefile2
-rw-r--r--net/modemmanager/files/modemmanager.common32
2 files changed, 15 insertions, 19 deletions
diff --git a/net/modemmanager/Makefile b/net/modemmanager/Makefile
index 82216ae4c..bef514550 100644
--- a/net/modemmanager/Makefile
+++ b/net/modemmanager/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=modemmanager
PKG_SOURCE_VERSION:=1.22.0
-PKG_RELEASE:=3
+PKG_RELEASE:=4
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git
diff --git a/net/modemmanager/files/modemmanager.common b/net/modemmanager/files/modemmanager.common
index d157cebf8..2ba2036ce 100644
--- a/net/modemmanager/files/modemmanager.common
+++ b/net/modemmanager/files/modemmanager.common
@@ -235,24 +235,20 @@ mm_report_modem_wait() {
# Cleanup interfaces
mm_cleanup_interfaces() {
- local modemlist modemlength idx modeminfo modemsysfspath
-
- modemlist=$(mmcli --list-modems --output-keyvalue)
- [ -n "${modemlist}" ] || return 0
-
- modemlength=$(modemmanager_get_field "${modemlist}" "modem-list.length")
-
- # do nothing if no modem reported
- [ -n "${modemlength}" ] && [ "${modemlength}" -ge 1 ] && {
- idx=1
- while [ $idx -le "$modemlength" ]; do
- modempath=$(modemmanager_get_field "${modemlist}" "modem-list.value\[$idx\]")
- modeminfo=$(mmcli --modem "${modempath}" --output-keyvalue)
- modemsysfspath=$(modemmanager_get_field "${modeminfo}" "modem.generic.device")
- mm_cleanup_interface_by_sysfspath "${modemsysfspath}"
- idx=$((idx + 1))
- done
- }
+ local sysfs_path status
+
+ # Do nothing if there is no sysfs cache
+ [ -f "${MODEMMANAGER_SYSFS_CACHE}" ] || return
+
+ while IFS= read -r sysfs_cache_line; do
+ sysfs_path=$(echo "${sysfs_cache_line}" | awk '{print $1}')
+ status=$(echo "${sysfs_cache_line}" | awk '{print $2}')
+
+ if [ "${status}" = "processed" ]; then
+ mm_log "debug" "call cleanup for: ${sysfs_path}"
+ mm_cleanup_interface_by_sysfspath "${sysfs_path}"
+ fi
+ done < ${MODEMMANAGER_SYSFS_CACHE}
}
mm_cleanup_interface_by_sysfspath() {