فهرست منبع

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 <[email protected]>
Signed-off-by: Daniel Golle <[email protected]>
Martin Schiller 6 سال پیش
والد
کامیت
b4b829fe64
2فایلهای تغییر یافته به همراه22 افزوده شده و 8 حذف شده
  1. 1 1
      package/network/utils/uqmi/Makefile
  2. 21 7
      package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh

+ 1 - 1
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

+ 21 - 7
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