From 29590e5d6dc03f4cbe2bdd8eedf9f409cf97af31 Mon Sep 17 00:00:00 2001 From: Oliver Sedlbauer Date: Fri, 11 Aug 2023 12:18:32 +0200 Subject: [PATCH] modemmanager: Remove hardcoded proto check Modified the code to correctly determine modem availability based on the sysfs path provided in the 'device' option, instead of relying on the 'proto' value. This ensures proper configuration for custom-made protos that do not match the "modemmanager" identifier. Signed-off-by: Oliver Sedlbauer --- net/modemmanager/Makefile | 2 +- net/modemmanager/files/modemmanager.common | 35 ++++++++++++---------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/net/modemmanager/Makefile b/net/modemmanager/Makefile index 5017d3e25..5616cb676 100644 --- a/net/modemmanager/Makefile +++ b/net/modemmanager/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=modemmanager PKG_SOURCE_VERSION:=1.20.6 -PKG_RELEASE:=12 +PKG_RELEASE:=13 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 a931717fd..d46ee7243 100644 --- a/net/modemmanager/files/modemmanager.common +++ b/net/modemmanager/files/modemmanager.common @@ -6,6 +6,7 @@ . /lib/functions.sh . /lib/netifd/netifd-proto.sh +INCLUDE_ONLY=1 . /lib/netifd/proto/modemmanager.sh ################################################################################ # Runtime state @@ -139,10 +140,6 @@ mm_get_modem_config_foreach_cb() { local cfg="$1" local sysfspath="$2" - local proto - config_get proto "${cfg}" proto - [ "${proto}" = modemmanager ] || return 0 - local dev dev=$(uci_get network "${cfg}" device) [ "${dev}" = "${sysfspath}" ] || return 0 @@ -237,19 +234,25 @@ mm_report_modem_wait() { ################################################################################ # Cleanup interfaces -mm_cleanup_interface_cb() { - local cfg="$1" - - local proto - config_get proto "${cfg}" proto - [ "${proto}" = modemmanager ] || return 0 - - proto_set_available "${cfg}" 0 -} - mm_cleanup_interfaces() { - config_load network - config_foreach mm_cleanup_interface_cb interface + 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 + } } mm_cleanup_interface_by_sysfspath() {