uqmi: set plmn only if necessary
[openwrt/staging/hauke.git] / package / network / utils / uqmi / files / lib / netifd / proto / qmi.sh
index 13a4fc96119b24ff18ded552f00f38380e7853c5..a6c785eb563d680b0ce672cb82477b7dc4fdf69c 100755 (executable)
@@ -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