diff options
Diffstat (limited to 'package/network/utils/uqmi/files')
-rwxr-xr-x | package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh | 28 |
1 files changed, 21 insertions, 7 deletions
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 |