[openwrt/openwrt] ncm: add error check and retry mechanism for gcom call

LEDE Commits lede-commits at lists.infradead.org
Wed Mar 29 17:03:43 PDT 2023


blocktrron pushed a commit to openwrt/openwrt.git, branch openwrt-22.03:
https://git.openwrt.org/b573a785e0c53d710b8bd6637c7d5ba73fe6839c

commit b573a785e0c53d710b8bd6637c7d5ba73fe6839c
Author: Mike Wilson <mikewse at hotmail.com>
AuthorDate: Mon Jul 20 22:25:33 2020 +0200

    ncm: add error check and retry mechanism for gcom call
    
    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 at hotmail.com>
    (cherry picked from commit 8f27093ce784daad5a9b1c89f51d0a76a8bbb07b)
---
 package/network/utils/comgt/files/ncm.sh | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/package/network/utils/comgt/files/ncm.sh b/package/network/utils/comgt/files/ncm.sh
index 2f36697487..dec058712d 100644
--- a/package/network/utils/comgt/files/ncm.sh
+++ b/package/network/utils/comgt/files/ncm.sh
@@ -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




More information about the lede-commits mailing list