From b4b829fe64908d0f8743175e7d3ce05cdb3177d8 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 --- 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 -- 2.30.2