[PATCH v2] uqmi: fix network registration loop
Florian Eckert
fe at dev.tdt.de
Sun May 9 23:00:57 PDT 2021
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.richard at kontron.com wrote:
>> From: Thomas Richard <thomas.richard at 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.richard at 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 at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list