Armadilloフォーラム

ONYX USBドングルを抜き挿しすると通信できなくなる

fkben

2022年5月16日 14時43分

お世話になります。
Armadillo-640(ディストリビューション buster)にSORACOM社製の
ONYX USBドングルを接続してLTE通信を試みています。
Armadilloを起動後、初めて接続する場合は正常に通信ができます。
ただ、USBドングルを抜き差しすると通信ができなくなります。
何か原因が考えられますでしょうか?
以下、操作の流れです。この時のsyslogも添付いたします。
4の操作で解消はするのですがシンプルに抜き差しの動作で通信を
行いたいと考えています。
大変お手数ですが、ご確認よろしくお願いいたします。

1) 13:45:08 電源投入後、ONYXを接続
問題なく通信ができる。
2) 13:45:55 ONYXを抜き差しする。
USBの認識はするが、通信できない。
ifconfig ppp0がみつからない。
3) 13:47:53 ここでifup wwan0を実行すると下記メッセージが表示される
ifup: interface wwan0 already configured
4) 13:48:45 ifdown wwan0を実行すると下記メッセージが表示される
No /usr/bin/wvdial found running; none killed.
5) 13:49:22 ifup wwan0を実行すると正しく通信できるようになる。
ifconfig ppp0でも正しくみつかる。

ファイル ファイルの説明
syslog.txt
コメント

pppdを起動させるためにwvdialを使っているように見えるので、
wvdialを自動的に起動させるためのサービスか何かを書いたとおもいますが、
どのような実装でしょうか?

udevでモデムを検知させていますか?

早速のご回答ありがとうございます。
はい、ご指摘のとおりwvdialを使用しています。
「/etc/udev/rules.d」に設定ファイルを配置し自動で認識するようになっています。
(SORACOM社が提供)

> pppdを起動させるためにwvdialを使っているように見えるので、
> wvdialを自動的に起動させるためのサービスか何かを書いたとおもいますが、
> どのような実装でしょうか?
>
> udevでモデムを検知させていますか?

補足ですが、rulesとinterfacesの抜粋を記述いたします。
「rules」の抜粋
ENV{SYSTEMD_WANTS}="ifup@wwan0.service"

「/etc/network/interfaces」の抜粋
allow-hotplug wwan0
iface wwan0 inet wvdial
pre-up sleep 5

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

> 早速のご回答ありがとうございます。
> はい、ご指摘のとおりwvdialを使用しています。
> 「/etc/udev/rules.d」に設定ファイルを配置し自動で認識するようになっています。
> (SORACOM社が提供)
>
> > pppdを起動させるためにwvdialを使っているように見えるので、
> > wvdialを自動的に起動させるためのサービスか何かを書いたとおもいますが、
> > どのような実装でしょうか?
> >
> > udevでモデムを検知させていますか?

そのスクリプトとモデムの仕様上正しいのかどうかは分かりませんが、
disconnectしたときにifdown wwan0しておけば問題ないということであれば、
次のようなudevルールを書いておけば良いと思います。
(モデムの制御は固有のクセのようなものがあるので、これで良いのかは分からないのですが…)

ファイル
/etc/udev/rules.d/30-onyx-disconnect.rules

中身

ACTION=="remove", ENV{ID_VENDOR_ID}=="onyxのVID", ENV{ID_MODEL_ID}=="onyxのPID", RUN+="/usr/sbin/ifdown wwan0"

onyxのVID,PIDは既にudev ruleで検知しているのであれば既知だと思います。
書いたら保存して、rebootするか、udevadm control --reloadを実行すると
デバイスを抜去すると、ifdown wwan0が実行されます。
たぶん、デバイス接続でifupがうまくいってるなら、これで動くと予想します。

ご回答ありがとうございます。
BENDOR_ID、MODEL_IDを記述して「remove」アクションのルールを
追加してみましたが、改善しませんでした。
USBドングルの認識は行うが、wvdialでのpppdの起動が実行されません。
そのまま、ifup wwn0を手動で実行するとpppdが起動します。
何か、他に改善点がありますでしょうか?
よろしくお願いいたします。

なお、wvdialの代わりにNetworkManagerを利用すると抜き差しを
気にする必要がないことを確認しています。

> そのスクリプトとモデムの仕様上正しいのかどうかは分かりませんが、
> disconnectしたときにifdown wwan0しておけば問題ないということであれば、
> 次のようなudevルールを書いておけば良いと思います。
> (モデムの制御は固有のクセのようなものがあるので、これで良いのかは分からないのですが…)
>
> ファイル
> /etc/udev/rules.d/30-onyx-disconnect.rules
>
> 中身
>

> ACTION=="remove", ENV{ID_VENDOR_ID}=="onyxのVID", ENV{ID_MODEL_ID}=="onyxのPID", RUN+="/usr/sbin/ifdown wwan0"
> 

>
> onyxのVID,PIDは既にudev ruleで検知しているのであれば既知だと思います。
> 書いたら保存して、rebootするか、udevadm control --reloadを実行すると
> デバイスを抜去すると、ifdown wwan0が実行されます。
> たぶん、デバイス接続でifupがうまくいってるなら、これで動くと予想します。
>
>

「rules」および「interfaces」中の記述を下記の通り、
「wwan0 論理名」から「ppp0 物理名」に変更することで抜き差ししても
問題なく接続できるようになりました。
ラズパイ4(bullseye)では、論理名のままで問題ありません。
ディストリビューション、wvdial、pppのバージョン違いなどの影響でしょうか。
上記、修正方法で何か問題点などがありましたら、お手数ですがご指摘よろしく
お願いいたします。

> ご回答ありがとうございます。
> BENDOR_ID、MODEL_IDを記述して「remove」アクションのルールを
> 追加してみましたが、改善しませんでした。
> USBドングルの認識は行うが、wvdialでのpppdの起動が実行されません。
> そのまま、ifup wwn0を手動で実行するとpppdが起動します。
> 何か、他に改善点がありますでしょうか?
> よろしくお願いいたします。
>
> なお、wvdialの代わりにNetworkManagerを利用すると抜き差しを
> 気にする必要がないことを確認しています。
>
> > そのスクリプトとモデムの仕様上正しいのかどうかは分かりませんが、
> > disconnectしたときにifdown wwan0しておけば問題ないということであれば、
> > 次のようなudevルールを書いておけば良いと思います。
> > (モデムの制御は固有のクセのようなものがあるので、これで良いのかは分からないのですが…)
> >
> > ファイル
> > /etc/udev/rules.d/30-onyx-disconnect.rules
> >
> > 中身
> >

> > ACTION=="remove", ENV{ID_VENDOR_ID}=="onyxのVID", ENV{ID_MODEL_ID}=="onyxのPID", RUN+="/usr/sbin/ifdown wwan0"
> > 

> >
> > onyxのVID,PIDは既にudev ruleで検知しているのであれば既知だと思います。
> > 書いたら保存して、rebootするか、udevadm control --reloadを実行すると
> > デバイスを抜去すると、ifdown wwan0が実行されます。
> > たぶん、デバイス接続でifupがうまくいってるなら、これで動くと予想します。
> >
> >

> 「rules」および「interfaces」中の記述を下記の通り、
> 「wwan0 論理名」から「ppp0 物理名」に変更することで抜き差ししても
> 問題なく接続できるようになりました。

良かったです。問題ないかどうかの判断は現物見ていないのではっきりとした
ことは言えないのですが、例えば、挿抜を繰り返したときにppp, wwanの
インターフェース名が開放前に取得しようとしてインクリメントされたり
(wwan0->wwan1->wwan2)しないのであれば、問題はないと思います。

バージョン間の差異かどうかも現物をみていないのでなんとも言えないのですが、
もともと手動で相当の操作をしてうまくいっていたのであれば、CPUのコア数
の違いにより、udevのルール実行がCPUにスケジュールされるタイミングの
違いはありそうですね。

その後も安定して動作していますので、とりあえず良かったです。
色々とご対応いただき、ありがとうございました。
今後、ディストリビューションのバージョン等が更新された場合に
ケアするようにします。
ありがとうございました。

> > 「rules」および「interfaces」中の記述を下記の通り、
> > 「wwan0 論理名」から「ppp0 物理名」に変更することで抜き差ししても
> > 問題なく接続できるようになりました。
>
> 良かったです。問題ないかどうかの判断は現物見ていないのではっきりとした
> ことは言えないのですが、例えば、挿抜を繰り返したときにppp, wwanの
> インターフェース名が開放前に取得しようとしてインクリメントされたり
> (wwan0->wwan1->wwan2)しないのであれば、問題はないと思います。
>
> バージョン間の差異かどうかも現物をみていないのでなんとも言えないのですが、
> もともと手動で相当の操作をしてうまくいっていたのであれば、CPUのコア数
> の違いにより、udevのルール実行がCPUにスケジュールされるタイミングの
> 違いはありそうですね。