0

複数の 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 を追加して、自分のバージョンが問題ないことを確認しましたが、結果は同じでした。
あなたが思うこと?

4

1 に答える 1

1

まあ私はかなり私はこれを解決しました - fd NONBLOCK を作成するために ioctl コマンドの前に pppd にいくつかの行を追加しました:)

于 2011-06-30T16:44:16.300 に答える