On 2021-05-08 12:33, Baptiste Jonglez wrote:
Applied, thanks.

Does this need to be backported to 21.02 or even 19.07?

yes that would not be bad at least for openwrt-21.02
On openwrt-19.07 there are additional commits needed.

Thanks for take care


Baptiste

On 20-04-21, thomas.rich...@kontron.com wrote:
From: Thomas Richard <thomas.rich...@kontron.com>

With some debug in qmi.sh using following patch, some errors are visible
in the registration step
@@ -29,6 +29,7 @@ proto_qmi_init_config() {
 }

 proto_qmi_setup() {
+       set -x
        local interface="$1"
        local dataformat connstat plmn_mode mcc mnc
local device apn auth username password pincode delay modes pdptype
@@ -224,6 +225,8 @@ proto_qmi_setup() {
                fi
        done

+       registration=$(uqmi -s -d "$device" --get-serving-system)
+
[ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1

        echo "Starting network $interface"

During the boot of the system, modem could not start automatically its
network registration.
netifd: wan (9235): + echo 'Waiting for network registration'
netifd: wan (9235): Waiting for network registration
netifd: wan (9235): + local 'registration_timeout=0'
netifd: wan (9235): + uqmi -s -d /dev/cdc-wdm1 --get-serving-system
netifd: wan (9235): + grep '"searching"'
netifd: wan (9235): + uqmi -s -d /dev/cdc-wdm1 --get-serving-system
netifd: wan (9235): + registration='{"registration":"not_registered","plmn_mcc":208,"plmn_mnc":20,"plmn_description":"","roaming":true}'
netifd: wan (9235): + '[' -n  ]
netifd: wan (9235): + echo 'Starting network wan'

As the while loop checks only "searching" pattern, uqmi.sh script quits
searching loop and continues whereas the modem is not registered

Other issue, after X seconds modem stops searching.
netifd: wan (9213): + uqmi -s -d /dev/cdc-wdm0 --get-serving-system
netifd: wan (9213): + grep '"searching"'
netifd: wan (9213): + '[' -e /dev/cdc-wdm0 ]
netifd: wan (9213): + '[' 3 -lt 0 -o 0 '=' 0 ]
netifd: wan (9213): + let registration_timeout++
netifd: wan (9213): + sleep 1
netifd: wan (9213): + uqmi -s -d /dev/cdc-wdm0 --get-serving-system
netifd: wan (9213): + grep '"searching"'
netifd: wan (9213): + uqmi -s -d /dev/cdc-wdm0 --get-serving-system
netifd: wan (9213): + registration='{"registration":"not_registered"}'
netifd: wan (9213): + '[' -n  ]
netifd: wan (9213): + echo 'Starting network wan'
netifd: wan (9213): Starting network wan

If registration_timeout is not expired, registration can be restarted

Signed-off-by: Thomas Richard <thomas.rich...@kontron.com>
---
 package/network/utils/uqmi/Makefile                |  2 +-
.../utils/uqmi/files/lib/netifd/proto/qmi.sh | 35 ++++++++++++++++------
 2 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile
index 68958a3729..da54ba0f46 100644
--- a/package/network/utils/uqmi/Makefile
+++ b/package/network/utils/uqmi/Makefile
@@ -1,7 +1,7 @@
 include $(TOPDIR)/rules.mk

 PKG_NAME:=uqmi
-PKG_RELEASE:=2
+PKG_RELEASE:=3

 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git
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 a6c785eb56..c0134f44dd 100755
--- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
+++ b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
@@ -209,19 +209,36 @@ proto_qmi_setup() {

        uqmi -s -d "$device" --sync > /dev/null 2>&1

+       uqmi -s -d "$device" --network-register > /dev/null 2>&1
+
        echo "Waiting for network registration"
+       sleep 1
        local registration_timeout=0
- while uqmi -s -d "$device" --get-serving-system | grep '"searching"' > /dev/null; do
-               [ -e "$device" ] || return 1
- if [ "$registration_timeout" -lt "$timeout" -o "$timeout" = "0" ]; then
-                       let registration_timeout++
-                       sleep 1;
+       local registration_state=""
+       while true; do
+ registration_state=$(uqmi -s -d "$device" --get-serving-system 2>/dev/null | jsonfilter -e "@.registration" 2>/dev/null)
+
+               [ "$registration_state" = "registered" ] && break
+
+ if [ "$registration_state" = "searching" ] || [ "$registration_state" = "not_registered" ]; then + if [ "$registration_timeout" -lt "$timeout" ] || [ "$timeout" = "0" ]; then
+                               [ "$registration_state" = "searching" ] || {
+ echo "Device stopped network registration. Restart network registration"
+                                       uqmi -s -d "$device" --network-register > 
/dev/null 2>&1
+                               }
+                               let registration_timeout++
+                               sleep 1
+                               continue
+                       fi
+                       echo "Network registration failed, registration timeout 
reached"
                else
-                       echo "Network registration failed"
-                       proto_notify_error "$interface" 
NETWORK_REGISTRATION_FAILED
-                       proto_block_restart "$interface"
-                       return 1
+                       # registration_state is 'registration_denied' or 
'unknown' or ''
+                       echo "Network registration failed (reason: 
'$registration_state')"
                fi
+
+               proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED
+               proto_block_restart "$interface"
+               return 1
        done

[ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to