Author: nbd
Date: 2014-10-02 14:18:58 +0200 (Thu, 02 Oct 2014)
New Revision: 42721

Modified:
   trunk/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
Log:
uqmi: use the autoconnect feature

Instead of connecting once and saving the packet data handle, let the
firmware handle connecting/reconnecting automatically. This is more
reliable and reduces reliance on potentially stale data.

Use the global packet data handle to attempt to disable autoconnect
before restarting the connection. This ensures that the firmware will
take the new APN/auth settings.

Signed-off-by: Felix Fietkau <[email protected]>

Modified: trunk/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
===================================================================
--- trunk/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh      
2014-10-02 12:18:43 UTC (rev 42720)
+++ trunk/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh      
2014-10-02 12:18:58 UTC (rev 42721)
@@ -17,6 +17,14 @@
        proto_config_add_string modes
 }
 
+qmi_disconnect() {
+       # disable previous autoconnect state using the global handle
+       # do not reuse previous wds client id to prevent hangs caused by stale 
data
+       uqmi -s -d "$device" \
+               --stop-network 0xffffffff \
+               --autoconnect > /dev/null
+}
+
 proto_qmi_setup() {
        local interface="$1"
 
@@ -68,6 +76,8 @@
                return 1
        }
 
+       qmi_disconnect
+
        echo "Waiting for network registration"
        while uqmi -s -d "$device" --get-serving-system | grep '"searching"' > 
/dev/null; do
                sleep 5;
@@ -83,24 +93,17 @@
                proto_block_restart "$interface"
                return 1
        }
-       uci_set_state network $interface cid "$cid"
 
-       pdh=`uqmi -s -d "$device" --set-client-id wds,"$cid" --start-network 
"$apn" \
-       ${auth:+--auth-type $auth} \
-       ${username:+--username $username} \
-       ${password:+--password $password}`
-       [ $? -ne 0 ] && {
-               echo "Unable to connect, check APN and authentication"
-               proto_notify_error "$interface" NO_PDH
-               proto_block_restart "$interface"
-               return 1
-       }
-       uci_set_state network $interface pdh "$pdh"
+       uqmi -s -d "$device" --set-client-id wds,"$cid" \
+               --start-network "$apn" \
+               ${auth:+--auth-type $auth} \
+               ${username:+--username $username} \
+               ${password:+--password $password} \
+               --autoconnect > /dev/null
 
        if ! uqmi -s -d "$device" --get-data-status | grep '"connected"' > 
/dev/null; then
                echo "Connection lost"
                proto_notify_error "$interface" NOT_CONNECTED
-               proto_block_restart "$interface"
                return 1
        fi
 
@@ -129,14 +132,10 @@
        local device
        json_get_vars device
        local cid=$(uci_get_state network $interface cid)
-       local pdh=$(uci_get_state network $interface pdh)
 
        echo "Stopping network"
+       qmi_disconnect
        [ -n "$cid" ] && {
-               [ -n "$pdh" ] && {
-                       uqmi -s -d "$device" --set-client-id wds,"$cid" 
--stop-network "$pdh"
-                       uci_revert_state network $interface pdh
-               }
                uqmi -s -d "$device" --set-client-id wds,"$cid" 
--release-client-id wds
                uci_revert_state network $interface cid
        }
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to