Armadilloフォーラム

Armadillo-IoT(G2)で3Gで接続できなくなる

y.nakamura

2015年12月24日 13時11分

中村です。

Armadillo-IoT(G2)で3Gの接続・切断を頻繁に行うと、
何時間か経過後に3Gでの通信ができなくなってしまいます。

どなたか、原因or解決方法をご存じではないでしょうか?

次のようなスクリプトで1分弱でループさせてテストをしています。
下のスクリプトの場合、接続にかかる時間にも依存しますが、
約50秒で1回まわります。
実際の運用では1分ということはなく10分とか30分とかになりますが、
試験として短時間での接続・切断を繰り返しました。

試験用のスクリプト

#!/bin/sh
(
while :
do
  echo "======= ifup ======"
  ifup umts0
  echo "======= ifup result = $? ======"
  ifconfig umts0
  sleep 10
  echo "======= ifdown ======"
  ifdown umts0
  echo "======= ifdown result = $? ======"
  ifconfig umts0
  sleep 30
done
) 2>&1 | logger -t 3g-test

syslogは、
syslogd -L -R 192.168.0.12
のようにして別のLinuxマシンに転送してます。

頻繁に接続と切断を繰り返しますので、次のようにして
ifplugdが起動しないようにしてあります。

auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp
iface umts0 inet dhcp
        pre-up 3g-connect
#       post-up 3g-monitor start        <--- ここ
#       pre-down 3g-monitor stop        <--- ここ
        post-down 3g-disconnect

テストした機体は何台かあり、どれでも同じ症状です。
そのうち1台は数日前に納品されたもので、
カーネルやユーザランドは何もいじっていません。
(変更箇所は、上に書いた/etc/config/interfacesだけ)

使用したSIMは、
- OCNのモバイルONE
- 旧DTI ServersMan SIM LTEC
で、どちらでも症状は同じです。

ちなみに、旧型のArmadillo-IoTでは、
何ヶ月かの稼働実績がありますが、
このような症状は発生していません。

以下、少し長くなりますが、症状を書いておきます。

正常時のifupの表示:

# ifup umts0
check APN/username/password
success
3G connect
udhcpc (v1.20.2) started
Sending discover...
Sending discover...
Sending select for 100.71.158.207...
Lease of 100.71.158.207 obtained, lease time 172800

正常時のifconfigの表示:

# ifconfig umts0
umts0     Link encap:Ethernet  HWaddr 00:00:11:12:13:14
          inet addr:100.71.158.207  Bcast:100.71.158.255  Mask:255.255.255.0
          inet6 addr: fe80::200:11ff:fe12:1314/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1180 (1.1 KiB)  TX bytes:12470 (12.1 KiB)

ifupで接続できなくなったときのifup

# ifup umts0
check APN/username/password
success
3G connect
udhcpc (v1.20.2) started
Sending discover...
Sending discover...
Sending discover...
Sending discover...
Sending discover...
Sending discover...
Sending discover...
Sending discover...
No lease, failing

一度この状態になると、復活しません。

ifupで接続できなくなったときのifconfig(引数無し)

# ifconfig(引数無し)
eth0      Link encap:Ethernet  HWaddr 00:11:0C:18:27:55
          inet addr:192.168.0.69  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::211:cff:fe18:2755/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7803 errors:0 dropped:61 overruns:0 frame:0
          TX packets:7737 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1106566 (1.0 MiB)  TX bytes:812762 (793.7 KiB)
 
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2108 (2.0 KiB)  TX bytes:2108 (2.0 KiB)
 
umts0     Link encap:Ethernet  HWaddr 00:00:11:12:13:14
          inet6 addr: fe80::200:11ff:fe12:1314/64 Scope:Link   <=== ★ここにIPv4がない
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1081 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10921 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:323824 (316.2 KiB)  TX bytes:3113326 (2.9 MiB)

このように、umts0にIPv4アドレスがありません。

この状態になったとき、ifdown umts0 も失敗します。

# ifdown umts0
ifdown: interface umts0 not configured

で、次のようにifconfigで落とすと・・・
この後のifconfig(引数無し)ではumts0は出てきません。

# ifconfig umts0 down
# ifconfig(引数無し)
eth0      Link encap:Ethernet  HWaddr 00:11:0C:18:27:55
          inet addr:192.168.0.69  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::211:cff:fe18:2755/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7944 errors:0 dropped:61 overruns:0 frame:0
          TX packets:7737 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1128726 (1.0 MiB)  TX bytes:812762 (793.7 KiB)
 
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2108 (2.0 KiB)  TX bytes:2108 (2.0 KiB)

引数でumts0を指定すると・・・

# ifconfig umts0
umts0     Link encap:Ethernet  HWaddr 00:00:11:12:13:14
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:1081 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10953 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:323824 (316.2 KiB)  TX bytes:3122303 (2.9 MiB)

この状態でもう一度ifupしてみると・・・やっぱり失敗します。

tipコマンドでモデムにアクセスすると、問題はなさそうです。

# tip -l /dev/ttyATCMD -s 115200
Connected.
at
OK
 
ati3
RHL85xx.5.5.16.0.201505261641.x6250_2
 
OK
AT$CSQ
$CSQ: 20,99,-5
 
OK

rebootで再起動すれば、復活できます。
(電源のOFF/ONは必要なし)

--
なかむら

コメント

中村です。

> 実際の運用では1分ということはなく10分とか30分とかになりますが、
> 試験として短時間での接続・切断を繰り返しました。

昨晩から約10分間隔で接続・切断を24時間やってみました。
ifdownのあとのsleepを600秒です。

今のところ、10分間隔の場合は問題は発生してません。

--
なかむら

中村です。

> 昨晩から約10分間隔で接続・切断を24時間やってみました。
> ifdownのあとのsleepを600秒です。
>
> 今のところ、10分間隔の場合は問題は発生してません。

そのまま動かし続けたところ、先ほど障害が発生しました。
46時間です。

この後、半分の5分でやってみます。

--
なかむら

中村です。

> > 昨晩から約10分間隔で接続・切断を24時間やってみました。
> > ifdownのあとのsleepを600秒です。
...
> そのまま動かし続けたところ、先ほど障害が発生しました。
> 46時間です。
>
> この後、半分の5分でやってみます。

5分の場合、約24時間で障害が発生しました。
再起動からifupの実行回数をカウントしてみたところ、
269回目でNGです。

2分もやってみました。ifdownの後、sleep 100です。
約9時間でNG、回数は5分間隔の時と同じ269回目。

もう一度1分間隔のときのの回数を数えてみました。
これも269回目です。

ドライバか3Gモジュールのファームウェアに
何かありそうです。

この後30分間隔をやってみます。
もしこれも269回目でNGになるならば、
6日間くらいかかりますので報告は年明け3日頃です。

--
なかむら

中村様

古関です。

調査・再現試験、真にありがとうございます。

弊社でも症状を確認できました。

今のところ、3Gモジュール HL8548(ファームウェア)側の問題と見ています。

具体的には、ネットワーク接続するATコマンド "AT+XCEDATA" が
まともに動作できなくなっているようです。
(なぜ必ず269回目なのか、というのが良くわかっていませんが。。)

3Gモジュールメーカーと確認・解析を進め、
不具合ならばファームウェアのリリース、ワークアラウンドなりを出そうと考えています。
大変申し訳ありませんが、根本的な対策を行うまでは時間がかかりそうです。
進展ありましたら、報告させていただきます。

現在できる暫定的な対応としては、
この状態になった場合、3Gモジュールをリセットし、
3g-set-ap と ifupをやり直すしか見えていません。
(リセット後、接続できるところまでは確認しています。)

3Gモジュールのリセットの方法は2通りあります。

(1) ATコマンドでリセットする方法
ATコマンド "AT+CPOF" を実行する

(2) sysfsを利用して、3Gモジュールのリセット信号をアサートする方法
(※本来は3Gモジュールが固まり、ATコマンドすら実行できなくなった場合を想定した方法)

以下のようにコマンドを実行し、3Gモジュールをリセットする。

[armadillo ~]# echo 1 > /sys/class/gpio/RESET_N_3G/value
※100msec程度待つ
[armadillo ~]# echo 0 > /sys/class/gpio/RESET_N_3G/value

大変ご迷惑をおかけし、申し訳ありませんが、
よろしくお願いします。

中村です。

古関さん、
再現調査、どうもありがとうございます。
回避方法だけでも年越しせずに済みそうです。

> 3Gモジュールメーカーと確認・解析を進め、

時間がかかりそうですね。

> 3g-set-ap と ifupをやり直すしか見えていません。
...
> (1) ATコマンドでリセットする方法
> ATコマンド "AT+CPOF" を実行する

ATコマンドが生きていることと、269回というのは
確実そうですので、当面は回数を数えて、
ある程度の回数(256とか)になったら、
このATコマンドでリセットする方法で回避と
しようと思います。

> 以下のようにコマンドを実行し、3Gモジュールをリセットする。
>
> [armadillo ~]# echo 1 > /sys/class/gpio/RESET_N_3G/value
> ※100msec程度待つ
> [armadillo ~]# echo 0 > /sys/class/gpio/RESET_N_3G/value

たぶんこちらは使わずに済むと思うのですが、
GPIOを使ったリセットのHighとLowはこれであってますか?
"RESET_N_3G"と"N"がついているので。

--
なかむら

中村です。

みなさま、
あけましておめでとうございます。
今年もよろしくお願いいたします。

昨年暮れの
> この後30分間隔をやってみます。
> もしこれも269回目でNGになるならば、
> 6日間くらいかかりますので報告は年明け3日頃です。

昨日テストが終わりましたので、結果を報告しておきます。
予想通り、269回目でつながらなくなりました。

それから、古関さんのリカバリ方法に対して質問した
> GPIOを使ったリセットのHighとLowはこれであってますか?
> "RESET_N_3G"と"N"がついているので。
を試してみました。(6日間の試験が終わったので)

"1"を出力でリセットになりました。

--
なかむら

古関です。

> 3Gモジュールメーカーと確認・解析を進め、
> 不具合ならばファームウェアのリリース、ワークアラウンドなりを出そうと考えています。
> 大変申し訳ありませんが、根本的な対策を行うまでは時間がかかりそうです。
> 進展ありましたら、報告させていただきます。

状況報告です。

Armadillo-IoT以外の環境(WindowsPC)で同じ問題を再現できました。
ドライバー側の問題は薄そうです。

3Gモジュール HL8548のファームウェア不具合の方向でメーカー(Sierra社)解析中です。

ご迷惑おかけしますが、
今暫くお待ちいただけますようお願い申し上げます。

よろしくお願いします。

中村です。

古関さん、
再現試験作業と経過の報告、どうもありがとうございます。

> 今暫くお待ちいただけますようお願い申し上げます。

よろしくお願いします。

--
なかむら

古関です。

状況報告です。

3Gモジュール: HL8548のファームバグが原因であることが確定し、
修正版 テストファーム[※]がモジュールメーカー(Sierra社)からリリースされました。
[※] docomo IOTが未取得なテスト用ファームであり、弊社からお客さまへの再配布は出来ません。

テストファームで不具合が起こらないことは弊社で確認済みです。

この不具合修正が入った、再配布可能な、docomo IOT取得ファームのリリース日程はまだ未定ですが、
Sierra社 -> 弊社のリリースは最短でも2016/4となっております。

弊社で再度試験した後、変更通知とともに、ユーザーズサイトにアップロードする予定です。

詳しい日程が見えましたら、再度報告させていただきます。

よろしくお願いします。

中村です。

古関さん、

> 3Gモジュール: HL8548のファームバグが原因であることが確定し、
> 修正版 テストファーム[※]がモジュールメーカー(Sierra社)からリリースされました。

状況の報告、ありがとうございます。

ユーザーが使えるようになるのは、
> Sierra社 -> 弊社のリリースは最短でも2016/4となっております。
まで待たなければならない、ということですね。

--
なかむら

古関さん、
中村です。

> この不具合修正が入った、再配布可能な、docomo IOT取得ファームのリリース日程はまだ未定ですが、
> Sierra社 -> 弊社のリリースは最短でも2016/4となっております。

そろそろかなぁ?と思っているのですが、
状況はどうでしょうか?
「最短でも・・・」なので、もっと時間がかかる
こともあるかとは思いますが。

よろしくお願いします。

--
なかむら

中村様

古関です。

> > この不具合修正が入った、再配布可能な、docomo IOT取得ファームのリリース日程はまだ未定ですが、
> > Sierra社 -> 弊社のリリースは最短でも2016/4となっております。
>
> そろそろかなぁ?と思っているのですが、
> 状況はどうでしょうか?
> 「最短でも・・・」なので、もっと時間がかかる
> こともあるかとは思いますが。

申し訳ありません。
Sierra社側の都合によりリリースが遅れています。

詳しい日程が分かり次第、報告させていただきます。

ご迷惑をおかけしますが、よろしくお願いします。

中村です。

古関様、
ご回答いただき、どうもありがとうございます。

> Sierra社側の都合によりリリースが遅れています。

もうしばらく待つことにします。
引き続き、よろしくお願いいたします。

--
なかむら

MCSのマーと申します。
上記問題に関連して弊社でも下記問題を発見しております。

ifdown: interface umts0 not configured

ただ,3Gは有効で,ifconfigでみたところIPも特に問題はないでした。

中村です。

> 本不具合の修正ファームがSierra社よりリリースされました。

古関さん、
どうもありがとうございます。

早速ファームウェアを書き換えて、動かしてみました。

300回以上繰り返しても今回のつながらなくなる問題は
発生しなくなったことを確認できました。
(330回くらいで止めましたが)

--
なかむら

中村 様

古関です。

> 早速ファームウェアを書き換えて、動かしてみました。
>
> 300回以上繰り返しても今回のつながらなくなる問題は
> 発生しなくなったことを確認できました。
> (330回くらいで止めましたが)

確認いただきありがとうございます。

変更通知には記載しておりませんが、
弊社でも5000回の試験をし、発生しないことを確認しております。

よろしくお願いします。

古関さん、

> 変更通知には記載しておりませんが、
> 弊社でも5000回の試験をし、発生しないことを確認しております。

情報、ありがとうございます。

--
なかむら