複数の USB モデムを Ubuntu に接続しています。
uname -a
Linux devlp 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 GNU/Linux
pppd version: 2.4.5
私は 8 台のシエラ ワイヤレス モデムでテストを行っていますが、それらはすべて接続され、動作しています。それぞれに「ppp」インターフェースがあります。
それらが接続された後、私は ppp7 を再接続しようとしていますが、最初は pppd が失敗し、2 回目の試行で、「シリアル接続が確立されました」と表示されてスタックします。pppd を強制終了するためにすべての強制終了シグナルを試みましたが、成功しませんでした。終了させる唯一の方法は、ダイヤルしようとしたモデムを取り外すことです。
pppd が動かなくなる正確な場所を探したところ、ここにありました。
int generic_establish_ppp (int fd)
{
int x;
if (new_style_driver) {
int flags;
FILE *f=fopen("/root/ptest.log","a");
fputs("before get channel\n",f);
fflush(f);
/* Open an instance of /dev/ppp and connect the channel to it */
if (ioctl(fd, PPPIOCGCHAN, &chindex) == -1) { // <<<<<<< STUCK HERE
error("Couldn't get channel number: %m");
goto err;
}
fputs("after get channel\n",f);
....
}
}
問題は特に ppp7 にあるようです - どのモデムでもかまいませんので、モデムの問題ではないと思いますが、そのコマンドで実際に何が起こっているのかわかりませんか? 答えは誰の責任?カーネルだけですか?モデムドライバー?モデム自体?PPPIOCGCHAN のドキュメントは非常に貧弱なので、その情報をどうするかよくわかりません..
最初は pppd が切断後にチャネルまたは ppp を解放していないのではないかと思ったので、自分の pppd バージョンをコンパイルし、PPPIOCDISCONN と PPPIOCDETACH を追加して、自分のバージョンが問題ないことを確認しましたが、結果は同じでした。
あなたが思うこと?