[openwrt/openwrt] uqmi: set plmn only if necessary

LEDE Commits lede-commits at lists.infradead.org
Tue Nov 24 10:19:27 EST 2020


dangole pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/b4b829fe64908d0f8743175e7d3ce05cdb3177d8

commit b4b829fe64908d0f8743175e7d3ce05cdb3177d8
Author: Martin Schiller <ms at dev.tdt.de>
AuthorDate: Wed Aug 28 07:24:33 2019 +0200

    uqmi: set plmn only if necessary
    
    Setting the plmn to '0' (auto) will implicitly lead to a (delayed)
    network re-registration, which could further lead to some timing
    related issues in the qmi proto handler.
    
    On the other hand, if you switch back from manual plmn selection
    to auto mode you have to set it to '0', because this setting is
    permanently "saved" in the wwan module.
    
    Conclusion:
    If plmn is configured, check if it's already set euqally in the module.
    If so, do nothing. Otherwise set it.
    
    Signed-off-by: Martin Schiller <ms at dev.tdt.de>
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 package/network/utils/uqmi/Makefile                |  2 +-
 .../utils/uqmi/files/lib/netifd/proto/qmi.sh       | 28 ++++++++++++++++------
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile
index c892c3f8e8..68958a3729 100644
--- a/package/network/utils/uqmi/Makefile
+++ b/package/network/utils/uqmi/Makefile
@@ -1,7 +1,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=uqmi
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git
diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
index 13a4fc9611..a6c785eb56 100755
--- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
+++ b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
@@ -30,7 +30,7 @@ proto_qmi_init_config() {
 
 proto_qmi_setup() {
 	local interface="$1"
-	local dataformat connstat
+	local dataformat connstat plmn_mode mcc mnc
 	local device apn auth username password pincode delay modes pdptype
 	local profile dhcp dhcpv6 autoconnect plmn timeout mtu $PROTO_DEFAULT_OPTIONS
 	local ip4table ip6table
@@ -152,24 +152,38 @@ proto_qmi_setup() {
 		esac
 	fi
 
-	[ -n "$plmn" ] && {
-		local mcc mnc
-		if [ "$plmn" = 0 ]; then
+	if [ -n "$plmn" ]; then
+		json_load "$(uqmi -s -d "$device" --get-plmn)"
+		json_get_var plmn_mode mode
+		json_get_vars mcc mnc || {
 			mcc=0
 			mnc=0
-			echo "Setting PLMN to auto"
-		else
+		}
+
+		if [ "$plmn" = "0" ]; then
+			if [ "$plmn_mode" != "automatic" ]; then
+				mcc=0
+				mnc=0
+				echo "Setting PLMN to auto"
+			fi
+		elif [ "$mcc" -ne "${plmn:0:3}" -o "$mnc" -ne "${plmn:3}" ]; then
 			mcc=${plmn:0:3}
 			mnc=${plmn:3}
 			echo "Setting PLMN to $plmn"
+		else
+			mcc=""
+			mnc=""
 		fi
+	fi
+
+	if [ -n "$mcc" -a -n "$mnc" ]; then
 		uqmi -s -d "$device" --set-plmn --mcc "$mcc" --mnc "$mnc" > /dev/null 2>&1 || {
 			echo "Unable to set PLMN"
 			proto_notify_error "$interface" PLMN_FAILED
 			proto_block_restart "$interface"
 			return 1
 		}
-	}
+	fi
 
 	# Cleanup current state if any
 	uqmi -s -d "$device" --stop-network 0xffffffff --autoconnect > /dev/null 2>&1



More information about the lede-commits mailing list