Armadilloフォーラム

LTE通信の通信不良

kirihara

2024年1月29日 15時08分

Armadillo IoT A6E (AG6271)のLTE通信についてです。

当該機器で、長時間LTE通信を継続的に動作させていると、LTE通信が途中で切れてしまう事象が発生します。
1度切れた後は、5分程度待機しても通信が復旧せず、Armadilloが再起動すると復旧します。
(アプリケーションにて、5分待機しても通信復旧しなければ再起動するように実装しております。)

本事象が発生したときの/var/log/messagesのログを添付します。
こちらのログからは、ArmadilloのLTE通信にか関して、どのような現象が発生していると考えられますでしょうか。

なお、LTE通信の「自動再起動サービス」は、
 FORCE_REBOOT
 REBOOT_IF_SIM_NOT_FOUND
を両方とも有効にして、使用しております。

よろしくお願いいたします。

ファイル ファイルの説明
【抽出】LTE通信不良_20240126.txt
コメント

at_mitsuhiro.yoshida

2024年1月29日 15時50分

吉田です。

製品マニュアルに動作詳細を記載しておらず申し訳ありません。
FORCE_REBOOT を有効にした場合、 ping 導通チェックが 4 回連続 NG だった場合にArmadillo を再起動します。
ping 導通チェックは初期状態では120 秒間隔で をしておりますので、360 秒 ~ 480 秒の間で Armadillo の再接続を行う動作となります。

その為、5 分で再起動としているアプリケーションの方が先に動作する結果となっていると思われます。

REBOOT_IF_SIM_NOT_FOUND に関しては SIM が検出できなくなったと状況で Armadillo の再起動を試みますので、今回は稼働していないと思われます。

添付いただいたログは再接続が成功したパターンと認識いたします。

kirihara

2024年1月29日 17時06分

早速のご回答ありがとうございます。

>
> 製品マニュアルに動作詳細を記載しておらず申し訳ありません。
> FORCE_REBOOT を有効にした場合、 ping 導通チェックが 4 回連続 NG だった場合にArmadillo を再起動します。
> ping 導通チェックは初期状態では120 秒間隔で をしておりますので、360 秒 ~ 480 秒の間で Armadillo の再接続を行う動作となります。
>
 ⇒理解いたしました。

> 添付いただいたログは再接続が成功したパターンと認識いたします。

 ⇒つまり、
  1.最初にpingの導通チェックで失敗を判定
  2.LTEのコネクション無効化→有効化を実施
  3.LTE通信が復帰
  という動作をしている、ということでよいでしょうか?
  (この挙動は、FORCE_REBOOT/REBOOT_IF_SIM_NOT_FOUNDの設定とは関係なく動作する…という認識であっていますでしょうか。)

at_mitsuhiro.yoshida

2024年1月29日 17時13分

吉田です。

>  ⇒つまり、
>   1.最初にpingの導通チェックで失敗を判定
>   2.LTEのコネクション無効化→有効化を実施
>   3.LTE通信が復帰
>   という動作をしている、ということでよいでしょうか?
>   (この挙動は、FORCE_REBOOT/REBOOT_IF_SIM_NOT_FOUNDの設定とは関係なく動作する…という認識であっていますでしょうか。)

はい、おっしゃるとおりです。

動作概要は製品マニュアル「LTE 再接続サービス」に記載しておりますので、ご確認ください。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

よろしくお願いします。

kirihara

2024年1月30日 16時26分

吉田様

もう2点教えてください。

・ArmadilloのLTE再接続サービスでのpingの導通チェックによる失敗判定ですが、
 現在はpingが1回失敗した時点でLTEのコネクション無効化/有効化を実施となっています。
 このコネクション無効化/有効化のためのpingの失敗回数を3回連続、5回連続などのように変更することはできるのでしょうか。

・pingの確認先をIPアドレスは初期では"8.8.8.8"ですが、これを特定にドメイン(URL)に設定することはできるのでしょうか。

よろしくお願いいたします。

at_mitsuhiro.yoshida

2024年1月30日 17時05分

吉田です。

> ・ArmadilloのLTE再接続サービスでのpingの導通チェックによる失敗判定ですが、
>  現在はpingが1回失敗した時点でLTEのコネクション無効化/有効化を実施となっています。
>  このコネクション無効化/有効化のためのpingの失敗回数を3回連続、5回連続などのように変更することはできるのでしょうか。

標準のものでは対応しておりません。

対応する場合、ソースコード変更する必要がありますが、
ABOS 3.18.6-at.10 時点のソースコードですと、
/usr/bin/connection-recover 内
reconnect を call しているところで新たに変数を追加して判定する
対処を追加する必要があります。
以下の ★ の箇所で別な定義を用意して FORCE_RECONNECT_PING_NG_COUNT の値を 2 より大きな値に設定する様な変更になります。

追加した定義値より PING_NG_COUNT_TMP が大きい場合は reconnect を実施
FORCE_RECONNECT_PING_NG_COUNT より PING_NG_COUNT_TMP が大きい場合は wwan-force-restart を実施
といった動きでしょうか。

                *connected*)
                        SIM_NOT_FOUND_COUNT=0
                        DEVICE_UNMANAGED_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 -lt $FORCE_RECONNECT_PING_NG_COUNT ]; then
                                        reconnect
                                fi
                        else
                                WWAN_RESTART_COUNT=0
                        fi ;;

> ・pingの確認先をIPアドレスは初期では"8.8.8.8"ですが、これを特定にドメイン(URL)に設定することはできるのでしょうか。

DNS が有効な環境でしたら、
/etc/atmark/connection-recover.conf
の PING_DEST_IP にドメインを記載いただければそちらに ping 導通確認を実施します。

kirihara

2024年1月30日 19時58分

吉田様

桐原です。

> > ・ArmadilloのLTE再接続サービスでのpingの導通チェックによる失敗判定ですが、
> >  現在はpingが1回失敗した時点でLTEのコネクション無効化/有効化を実施となっています。
> >  このコネクション無効化/有効化のためのpingの失敗回数を3回連続、5回連続などのように変更することはできるのでしょうか。
>
> 標準のものでは対応しておりません。
>
> 対応する場合、ソースコード変更する必要がありますが、
> ABOS 3.18.6-at.10 時点のソースコードですと、
> /usr/bin/connection-recover 内
> reconnect を call しているところで新たに変数を追加して判定する
> 対処を追加する必要があります。
> 以下の ★ の箇所で別な定義を用意して FORCE_RECONNECT_PING_NG_COUNT の値を 2 より大きな値に設定する様な変更になります。
>
> 追加した定義値より PING_NG_COUNT_TMP が大きい場合は reconnect を実施

⇒ありがとうございます。
 下記のような感じで修正すると、5回連続のping失敗で再接続をするという認識ですが、
 合っていますでしょうか。

 #ソースコードの上の方に、以下の変数を定義
 EX_FORCE_RECONNECT_PING_NG_COUNT=6
 #----途中割愛-----
 
                 *connected*)
                         SIM_NOT_FOUND_COUNT=0
                         DEVICE_UNMANAGED_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 -lt $EX_FORCE_RECONNECT_PING_NG_COUNT ]; then
                                         reconnect
                                 fi
                         else
                                 WWAN_RESTART_COUNT=0
                         fi ;;
 

★部分の「FORCE_RECONNECT_PING_NG_COUNT」を「EX_FORCE_RECONNECT_PING_NG_COUNT」に変更
(一応、修正後のソースコードも添付します。)

> FORCE_RECONNECT_PING_NG_COUNT より PING_NG_COUNT_TMP が大きい場合は wwan-force-restart を実施
> といった動きでしょうか。
>

 ⇒「wwan-force-restart」の方は、PING_NG_COUNTが設定ファイルのWWAN_FORCE_RESTART_COUNTを超えたら動作する…という認識です。
  合っていますでしょうか。

よろしくお願いいたします。

ファイル ファイルの説明
connection-recover.txt

at_mitsuhiro.yoshida

2024年2月2日 17時17分

吉田です。

そうですね、EX_FORCE_RECONNECT_PING_NG_COUNT までは
reconnect (nmcli の up/down) を実施するのであればこれでいいかと思われます。

kirihara

2024年2月5日 11時39分

桐原です。

> そうですね、EX_FORCE_RECONNECT_PING_NG_COUNT までは
> reconnect (nmcli の up/down) を実施するのであればこれでいいかと思われます。

ご確認ありがとうございました。
"EX_FORCE_RECONNECT_PING_NG_COUNT"分だけ連続して、pingが失敗したときにreconnect (nmcli の up/down) を実施したいと思っていましたので、
改修方法が違ったようです。

その場合は、下記のようになりますかね。

		*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 ;;

★の箇所の条件判定式を "-lt" から "-ge" にしました。
すみませんが、よろしくお願いいたします。

at_mitsuhiro.yoshida

2024年2月5日 14時45分

吉田です。

そうですね、それでいいかと思われます。
追加した EX_FORCE_RECONNECT_PING_NG_COUNT を 5 とするのであれば、
FORCE_RECONNECT_PING_NG_COUNT を 5 より大きい値にしておかないと

260 行目の

			if [ $PING_NG_COUNT -ge $FORCE_RECONNECT_PING_NG_COUNT ]; then

の判定に引っ掛かって wwan-force-restart を実行されますのでご注意ください。