pppd卡在拨号过程中

时间:2011-06-28 07:55:04

标签: linux-kernel serial-port modem ioctl ppp

我将几个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个sierra无线调制解调器进行测试,所有调制解调器都连接并正常工作。他们每个人都有一个“ppp”界面 在它们连接之后,我正在尝试重新连接ppp7,并且首先,pppd失败,然后在第二次尝试中它达到了这样的程度:“串行连接建立”并且卡住了。我尝试了所有杀死信号以杀死该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,以确保我的版本没问题,结果是一样的。<登记/> 你怎么想?

1 个答案:

答案 0 :(得分:0)

嗯我很漂亮我解决了这个问题 - 我在ipptl命令之前在pppd中添加了一些行来制作fd NONBLOCK:)