pppd 调用不会返回

pppd 调用不会返回

pppd call provider我在使用 Hayes 兼容调制解调器的命令时遇到了问题。

PPPD 的版本是 2.4.7,我相信这是最新版本。

仅当我关闭调制解调器时它才会失败(即它不会回复任何 AT 命令)。

我的聊天脚本很简单:

ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
TIMEOUT 30
"" AT
OK ATE0
...

当调制解调器关闭时pppd call provider输出以下内容:

... #bunch of pppd configurations
abort on (BUSY)
abort on (NO CARRIER)
abort on (NO DIALTONE)
abort on (ERROR)
abort on (NO ANSWER)
timeout set to 30 seconds
send (AT^M)
expect (OK)
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@....

说到这里我已经完全糊涂了。

事实:

  • 调制解调器已关闭
  • 如果我向调制解调器发送“”微型计算机,它没有回答(正如我所料)
  • ^@ 会一直打印,30 秒后也不会停止。我必须手动将其杀死killall -9 chat; killall -9 pppd

即使我将"" AT行更改为OK AT(在发送 AT 之前期望 OK),那些 ^@ 字符仍会出现:

...
timeout set to 30 seconds
expect (OK)
^@^@^@^@^@^@^@^@^@^@...

现在我也测试了这个设备:

cat /dev/ttyS0
^C

我等了十多秒,什么都没有打印出来。

我的问题是:

  • 聊天如果程序没有收到预期的答案,它应该运行到错误,为什么这个不这样做?(它显然没有收到 OK)
  • 为什么在输出的命令^M后面打印?(我已经为聊天脚本做了 dos2unix)AT

答案1

为什么输出中的 AT 命令后面会打印 ^M?

您可能需要调整 S3 和 S4(调制解调器 CR 和 LF 设置)以匹配您所使用的软件的预期 - 或者相应地调整软件设置。

如果聊天程序没有收到预期的答案,它应该运行到错误,为什么这个不这样做?(它显然没有收到 OK)

请注意,^@ 是 ascii nul 的可能表示 - 软件尝试读取串行端口,但失败并且从读取中获取一个 nul 字符,或者无法识别空的读取结果,修改字符串结束 nul(0x00) - 或其任何变体。

參考文獻:https://en.wikipedia.org/wiki/Hayes_command_set

相关内容