From 19d13274278e68391c1cd4f0c334215a5fd4d181 Mon Sep 17 00:00:00 2001 From: Martin Schiller Date: Wed, 28 Aug 2019 07:24:33 +0200 Subject: [PATCH] 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 Signed-off-by: Daniel Golle Signed-off-by: maurerr --- 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 c892c3f8e8b..68958a37291 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 13a4fc96119..a6c785eb563 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