ncm: add error check and retry mechanism for gcom call
authorMike Wilson <mikewse@hotmail.com>
Mon, 20 Jul 2020 20:25:33 +0000 (22:25 +0200)
committerDavid Bauer <mail@david-bauer.net>
Tue, 28 Mar 2023 12:19:33 +0000 (14:19 +0200)
This patch solves the problem of receiving "error" responses when
initially calling gcom. This avoids unnecessary NO_DEVICE failures.

A retry loop retries the call after an "error" response within the
specified delay. A successful response will continue with the connection
immediately without waiting for max specified delay, bringing the
interface up sooner.

Signed-off-by: Mike Wilson <mikewse@hotmail.com>
package/network/utils/comgt/files/ncm.sh

index 2f366974876d86267a420b17a7a916d8bbabf1b7..dec058712d0735738c32e86936b3bdc40651e0fd 100644 (file)
@@ -86,10 +86,25 @@ proto_ncm_setup() {
                return 1
        }
 
-       [ -n "$delay" ] && sleep "$delay"
-
-       manufacturer=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk 'NF && $0 !~ /AT\+CGMI/ { sub(/\+CGMI: /,""); print tolower($1); exit; }')
-       [ $? -ne 0 -o -z "$manufacturer" ] && {
+       start=$(date +%s)
+       while true; do
+               manufacturer=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk 'NF && $0 !~ /AT\+CGMI/ { sub(/\+CGMI: /,""); print tolower($1); exit; }')
+               [ "$manufacturer" = "error" ] && {
+                       manufacturer=""
+               }
+               [ -n "$manufacturer" ] && {
+                       break
+               }
+               [ -z "$delay" ] && {
+                       break
+               }
+               sleep 1
+               elapsed=$(($(date +%s) - start))
+               [ "$elapsed" -gt "$delay" ] && {
+                       break
+               }
+       done
+       [ -z "$manufacturer" ] && {
                echo "Failed to get modem information"
                proto_notify_error "$interface" GETINFO_FAILED
                return 1