Armadilloフォーラム

BaseOS(3.21.3-at.12)のLTE再接続サービスの動作について

ta-imai

2025年7月2日 15時33分

==========
製品型番:AG6271-C03Z
Debian/ABOSバージョン:3.21.3-at.12
カーネルバージョン:5.10.237-0-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
BaseOSのバージョンアップのため、現在 3.21.3-at.12 での動作確認を行っています。

connection-recover を使用して LTE 回線の監視を実施していますが、
動作を確認するとping応答が1回ない場合でも LTE 回線が切断・再接続されました。

3.19.1-at.1 では、複数回連続で ping 応答がない場合に LTE 回線の切断・再接続が行われていましたが、
3.21.3-at.12 では 1回の ping 応答なしで 回線が切断・再接続される仕様に変更されたのでしょうか?
もし仕様が変更されたのであれば、その理由を教えていただくことは可能でしょうか?

8.8.8.8に1秒間隔で1時間pingを送信すると、弊社環境では15~30回応答がありませんでしたが、
その後のpingに対しては応答はあるため、
1回の応答なしでLTE回線を切断・再接続する必要があるとは思えませんでした。
以前のように「連続で応答なし」の条件に戻すことは可能でしょうか?

ご確認のほど、よろしくお願いいたします。

コメント

at_satoshi.ohta

2025年7月2日 17時47分

太田です。

お世話になっております。

> 3.19.1-at.1 では、複数回連続で ping 応答がない場合に LTE 回線の切断・再接続が行われていましたが、
> 3.21.3-at.12 では 1回の ping 応答なしで 回線が切断・再接続される仕様に変更されたのでしょうか?

特にここの処理に関して仕様変更はされていないです。

/usr/bin/connection-recover をみると、

is_connected() {
    if ping -s 1 -c "${PING_COUNT}" -I "${NETWORK_IF}" "${PING_DEST_IP}" > /dev/null 2>&1; then
        return 0
    else
        put_cr_log "$DEVICE ping fail"
    fi
    return 1
}

で ping を実行しています。

ここの処理から ping の送信回数を制御するには PING_COUNT の値を変更することでできることが分かります。

PING_COUNT の値はデフォルトでは 2 です。
この値を変更する場合は Armadillo 上で以下を実行してみていただけますでしょうか?

armadillo:~# mv /etc/atmark/connection-recover.conf.example /etc/atmark/connection-recover.conf                                                                 
armadillo:~# vi /etc/atmark/connection-recover.conf                             
armadillo:~# cat /etc/atmark/connection-recover.conf                            
#!/bin/sh                                                                       
# SPDX-License-Identifier: MIT                                                  
 
PING_COUNT=<数字>   #<数字> には ping の送信回数を入れる
armadillo:~# persist_file /etc/atmark/connection-recover.conf
armadillo:~# rc-service connection-recover restart

これで設定が反映されるはずですので試していただけますでしょうか?

どうぞよろしくお願いいたします。

お世話になります。

is_connected()内ではなく、is_connected()から返った後の処理が変わっています。

                *connected*)
                        clear_counts
                        is_connected
                        PING_STATUS=$?
                        if [ $PING_STATUS -ne 0 ]; then
                                # if reboot or restart wwan, do not reconnect
                                PING_NG_COUNT_TMP=$((PING_NG_COUNT+1))
                                if [ $PING_NG_COUNT_TMP -lt $FORCE_RECONNECT_PING_NG_COUNT ]; then
                                        reconnect
                                fi
                        else
                                WWAN_RESTART_COUNT=0
                        fi ;;

PING_NG_COUNT_TMP が FORCE_RECONNECT_PING_NG_COUNT 小さい場合、reconnect()が実行されます。
pingの応答なし1回目はPING_NG_COUNT_TMPが 1 になりますので、reconnect()実行されることになります。

3.19.1-at.1 では、下記のようになっていました。
EX_FORCE_RECONNECT_PING_NG_COUNT以上になるまでは、reconnect()実行されません。

		*connected*)
			SIM_NOT_FOUND_COUNT=0
			is_connected
			PING_STATUS=$?
			if [ $PING_STATUS -ne 0 ]; then
				# if reboot or restart wwan, do not reconnect
				PING_NG_COUNT_TMP=$((PING_NG_COUNT+1))
				if [ $PING_NG_COUNT_TMP -ge $EX_FORCE_RECONNECT_PING_NG_COUNT ]; then
					reconnect
				fi
			else
				WWAN_RESTART_COUNT=0
			fi ;;

以上、よろしくお願いします。

横からすみません、
マルティネです。

> EX_FORCE_RECONNECT_PING_NG_COUNT以上になるまでは、reconnect()実行されません。
> if [ $PING_NG_COUNT_TMP -ge $EX_FORCE_RECONNECT_PING_NG_COUNT ]; then

手元でコードを変更してませんか?

確認したところ ABOS では変わってません。

$ curl -s https://download.atmark-techno.com/armadillo-iot-a6e/baseos/baseos-6e-3.19.1-at.1.tar.zst | zstd -d | tar -Oxv ./usr/bin/connection-recover | grep -C 2 PING_NG_COUNT_TMP
			if [ $PING_STATUS -ne 0 ]; then
				# if reboot or restart wwan, do not reconnect
				PING_NG_COUNT_TMP=$((PING_NG_COUNT+1))
				if [ $PING_NG_COUNT_TMP -lt $FORCE_RECONNECT_PING_NG_COUNT ]; then
					reconnect
				fi

よろしくお願いします

お世話になっております。

再度確認したところ弊社内で変更していました。
申し訳ございません。

以上、よろしくお願いします。