Linux 使用pppd和ppp程序进行3G/4G拨号

Linux 使用pppd和ppp程序进行3G/4G拨号

参考连接:
http://blog.csdn.net/zhang_danf/article/details/43567559
http://www.cnblogs.com/cryhuang/p/5649372.html

在openwrt的平台上,已经有完整的针对3G/4G模块进行ppp拨号的流程。由于要移植到LSDK上,所以进行了简单的研究,总结如下:

试验环境:Linux 3.3.8/Linux 3.18.23, 
通讯模块: 加载成ttyUSB*设备;
目标:使用通讯模块进行3G4G拨号连接互联网
方法:使用pppd和ppp程序,进行拨号连接
前提:安装了ppp、pppd两个程序
摘要:涉及的文件ppp的chat-script拨号脚本(针对不通通讯设备情况需要有所调整,此处不考虑这些情况,大部分都可以使用)、

1. 需要拨号的chat脚本

此处2个脚本都是openwrt中的。

1)移动:

diff --git a/rootfs/tozedap-router_4g_industry/etc/chatscripts/3g.chat b/rootfs/tozedap-router_4g_industry/etc/chatscripts/3g.chat
new file mode 100644
index 0000000..6656240
--- /dev/null
+++ b/rootfs/tozedap-router_4g_industry/etc/chatscripts/3g.chat
@@ -0,0 +1,12 @@
+ABORT   BUSY
+ABORT   'NO CARRIER'
+ABORT   ERROR
+REPORT  CONNECT
+TIMEOUT 10
+""      "AT&F"
+OK      "ATE1"
+OK      'AT+CGDCONT=1,"IP","$USE_APN"'
+SAY     "Calling UMTS/GPRS"
+TIMEOUT 30
+OK      "ATD$DIALNUMBER"
+CONNECT ' '

2)电信

diff --git a/rootfs/tozedap-router_4g_industry/etc/chatscripts/evdo.chat b/rootfs/tozedap-router_4g_industry/etc/chatscripts/evdo.chat
new file mode 100644
index 0000000..de49e41
--- /dev/null
+++ b/rootfs/tozedap-router_4g_industry/etc/chatscripts/evdo.chat
@@ -0,0 +1,17 @@
+# This is a simple chat script based off of the one provided by Sierra Wireless
+# for CDMA connections.  It should work for both Sprint and Verizon networks.
+
+ABORT  BUSY
+ABORT  'NO CARRIER'
+ABORT  ERROR
+ABORT  'NO DIAL TONE'
+ABORT  'NO ANSWER'
+ABORT  DELAYED
+REPORT CONNECT
+TIMEOUT        10
+''             AT
+OK             ATZ
+SAY     'Calling CDMA/EVDO'
+TIMEOUT        30
+OK             ATDT#777
+CONNECT        

3. ppp自动connect脚本

Example:
1) Mobile: ./nb-iot mobile
2) Telecom: ./nb-iot telecom
3) Stop the pppd: ./nb-iot stop

测试发现dns不能自动更新,所以增加了一个简单的流程。可能不规范,后期再优化。

diff --git a/rootfs/tozedap-router_4g_industry/etc/nb-iot b/rootfs/tozedap-router_4g_industry/etc/nb-iot
new file mode 100755
index 0000000..c0fc783
--- /dev/null
+++ b/rootfs/tozedap-router_4g_industry/etc/nb-iot
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+# debug infomation
+#set -x
+
+CONNECT_FILE=/etc/ppp/peers/ppp-connect
+CHAT_NAME=
+
+DEVICE=/dev/ttyUSB1
+USER=cmnet
+PASSWORD=cmnet
+USE_APN=cmnet
+DIALNUMBER=*99***1#
+
+conf_init()
+{
+cat << EOF >> $CONNECT_FILE
+    $DEVICE
+    115200
+    debug
+    #nodetach
+    crtscts
+    usepeerdns
+    noauth
+    noipdefault
+    novj
+    novjccomp
+    noccp
+    defaultroute
+    ipcp-accept-local
+    ipcp-accept-remote
+    ms-dns 8.8.8.8
+    ms-dns 8.8.4.4
+    user $USER
+    password $PASSWORD
+    connect 'USE_APN=$USE_APN DIALNUMBER=$DIALNUMBER /usr/sbin/chat -t5 -E -v -f /etc/chatscripts/$CHAT_NAME'
+    connect 'USE_APN=$USE_APN DIALNUMBER=$DIALNUMBER /usr/sbin/chat -t5 -E -v -f /etc/chatscripts/$CHAT_NAME'
+#    ipv6-up-script "/lib/netifd/ppp-up"
+#    ip-down-script "/lib/netifd/ppp-down"
+#    ipv6-down-script "/lib/netifd/ppp-down"
+EOF
+
+    echo > /tmp/resolv.conf.ppp
+}
+
+update_dns()
+{
+    while true
+    do
+        dns=`grep -inr "nameserver" /tmp/resolv.conf.ppp`
+        if [ "$dns" != "" ]; then
+            cp /tmp/resolv.conf.ppp /etc/resolv.conf
+            exit 0
+        fi
+    done
+}
+
+start()
+{
+    conf_init
+    pppd call ppp-connect
+    update_dns
+}
+
+stop()
+{
+    kill -9 `cat /var/run/ppp0.pid`
+}
+
+case $1 in
+    telecom)
+        CHAT_NAME=evdo.chat
+        start
+        ;;
+    mobile)
+        CHAT_NAME=3g.chat
+        start
+        ;;
+    stop)
+        stop
+        ;;
+esac
+
+exit 0

4. 部分log

1)模块枚举

[71845.710000] usb 1-1.4: new high-speed USB device number 7 using ehci-platform
[71845.820000] option 1-1.4:1.0: GSM modem (1-port) converter detected
[71845.830000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0
[71845.840000] option 1-1.4:1.1: GSM modem (1-port) converter detected
[71845.850000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[71845.850000] option 1-1.4:1.2: GSM modem (1-port) converter detected
[71845.860000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
[71845.870000] option 1-1.4:1.3: GSM modem (1-port) converter detected
[71845.880000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
[71845.890000] option 1-1.4:1.4: GSM modem (1-port) converter detected
[71845.890000] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB4

2)/dev/ttyUSB*

root@OpenWrt:/# ls /dev/ttyUSB* -al
crw-r--r--    1 root     root      188,   0 May 25 02:53 /dev/ttyUSB0
crw-r--r--    1 root     root      188,   1 May 25 02:53 /dev/ttyUSB1
crw-r--r--    1 root     root      188,   2 May 25 02:53 /dev/ttyUSB2
crw-r--r--    1 root     root      188,   3 May 25 02:53 /dev/ttyUSB3
crw-r--r--    1 root     root      188,   4 May 25 02:53 /dev/ttyUSB4

root@OpenWrt:/# ls /dev/ppp -al
crw-r--r--    1 root     root      108,   0 May 23 13:26 /dev/ppp

3)拨号logread

root@OpenWrt:/# logread -f
Tue May 23 14:59:14 2017 daemon.notice pppd[8293]: pppd 2.4.6 started by root, uid 0
Tue May 23 14:59:15 2017 local2.info chat[8295]: abort on (BUSY)
Tue May 23 14:59:15 2017 local2.info chat[8295]: abort on (NO CARRIER)
Tue May 23 14:59:15 2017 local2.info chat[8295]: abort on (ERROR)
Tue May 23 14:59:15 2017 local2.info chat[8295]: report (CONNECT)
Tue May 23 14:59:15 2017 local2.info chat[8295]: timeout set to 10 seconds
Tue May 23 14:59:15 2017 local2.info chat[8295]: send (AT&F^M)
Tue May 23 14:59:15 2017 local2.info chat[8295]: expect (OK)
Tue May 23 14:59:15 2017 local2.info chat[8295]: AT&F^M^M
Tue May 23 14:59:15 2017 local2.info chat[8295]: OK
Tue May 23 14:59:15 2017 local2.info chat[8295]:  -- got it
Tue May 23 14:59:15 2017 local2.info chat[8295]: send (ATE1^M)
Tue May 23 14:59:15 2017 local2.info chat[8295]: expect (OK)
Tue May 23 14:59:15 2017 local2.info chat[8295]: ^M
Tue May 23 14:59:15 2017 local2.info chat[8295]: ATE1^M^M
Tue May 23 14:59:15 2017 local2.info chat[8295]: OK
Tue May 23 14:59:15 2017 local2.info chat[8295]:  -- got it
Tue May 23 14:59:15 2017 local2.info chat[8295]: send (AT+CGDCONT=1,"IP","cmnet"^M)
Tue May 23 14:59:15 2017 local2.info chat[8295]: timeout set to 30 seconds
Tue May 23 14:59:15 2017 local2.info chat[8295]: expect (OK)
Tue May 23 14:59:15 2017 local2.info chat[8295]: ^M
Tue May 23 14:59:15 2017 local2.info chat[8295]: AT+CGDCONT=1,"IP","cmnet"^M^M
Tue May 23 14:59:15 2017 local2.info chat[8295]: OK
Tue May 23 14:59:15 2017 local2.info chat[8295]:  -- got it
Tue May 23 14:59:15 2017 local2.info chat[8295]: send (ATD*99***1#^M)
Tue May 23 14:59:16 2017 local2.info chat[8295]: expect (CONNECT)
Tue May 23 14:59:16 2017 local2.info chat[8295]: ^M
Tue May 23 14:59:16 2017 local2.info chat[8295]: ATD*99***1#^M^M
Tue May 23 14:59:16 2017 local2.info chat[8295]: CONNECT
Tue May 23 14:59:16 2017 local2.info chat[8295]:  -- got it
Tue May 23 14:59:16 2017 local2.info chat[8295]: send ( ^M)
Tue May 23 14:59:16 2017 daemon.debug pppd[8293]: Script /usr/sbin/chat -t5 -E -v -f /etc/chatscripts/4g.chat finished (pid 8294), status = 0x0
Tue May 23 14:59:16 2017 daemon.info pppd[8293]: Serial connection established.
Tue May 23 14:59:16 2017 daemon.debug pppd[8293]: using channel 10
Tue May 23 14:59:16 2017 daemon.info pppd[8293]: Using interface ppp0
Tue May 23 14:59:16 2017 daemon.notice pppd[8293]: Connect: ppp0 <--> /dev/ttyUSB2
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x5a83eff5>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP ConfReq id=0x15 <asyncmap 0x0> <auth chap MD5> <magic 0xb09fd017> <pcomp> <accomp>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: No auth is possible
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP ConfRej id=0x15 <auth chap MD5> <pcomp> <accomp>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x5a83eff5>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP ConfReq id=0x16 <asyncmap 0x0> <magic 0xb09fd017>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP ConfAck id=0x16 <asyncmap 0x0> <magic 0xb09fd017>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [LCP EchoReq id=0x0 magic=0x5a83eff5]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP DiscReq id=0x17 magic=0xb09fd017]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [LCP EchoRep id=0x0 magic=0xb09fd017 5a 83 ef f5]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfReq id=0xe]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfNak id=0xe <addr 0.0.0.0>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfNak id=0x1 <addr 10.108.204.190> <ms-dns1 221.179.38.7> <ms-dns2 120.196.165.7>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfReq id=0x2 <addr 10.108.204.190> <ms-dns1 221.179.38.7> <ms-dns2 120.196.165.7>]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfReq id=0xf]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: sent [IPCP ConfAck id=0xf]
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: rcvd [IPCP ConfAck id=0x2 <addr 10.108.204.190> <ms-dns1 221.179.38.7> <ms-dns2 120.196.165.7>]
Tue May 23 14:59:17 2017 daemon.warn pppd[8293]: Could not determine remote IP address: defaulting to 10.64.64.64
Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: local  IP address 10.108.204.190
Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: remote IP address 10.64.64.64
Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: primary   DNS address 221.179.38.7
Tue May 23 14:59:17 2017 daemon.notice pppd[8293]: secondary DNS address 120.196.165.7
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: Script /lib/netifd/ppp-up started (pid 8308)
Tue May 23 14:59:17 2017 daemon.debug pppd[8293]: Script /lib/netifd/ppp-up finished (pid 8308), status = 0x0
Tue May 23 14:59:18 2017 daemon.debug pppd[8293]: sent [LCP EchoReq id=0x1 magic=0x5a83eff5]
Tue May 23 14:59:18 2017 daemon.debug pppd[8293]: rcvd [LCP EchoRep id=0x1 magic=0xb09fd017 5a 83 ef f5]
Tue May 23 14:59:19 2017 daemon.debug pppd[8293]: sent [LCP EchoReq id=0x2 magic=0x5a83eff5]
Tue May 23 14:59:19 2017 daemon.debug pppd[8293]: rcvd [LCP EchoRep id=0x2 magic=0xb09fd017 5a 83 ef f5]

4)测试

root@OpenWrt:/# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.79.90.44  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:280 (280.0 B)  TX bytes:362 (362.0 B)

root@OpenWrt:/# 

root@OpenWrt:/# ping -I ppp0 www.baidu.com
PING www.baidu.com (183.232.231.172): 56 data bytes
64 bytes from 183.232.231.172: seq=0 ttl=54 time=21.993 ms
64 bytes from 183.232.231.172: seq=1 ttl=54 time=85.652 ms
^C
--- www.baidu.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 21.993/53.822/85.652 ms
root@OpenWrt:/# 

root@OpenWrt:/# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.64.64.64     0.0.0.0         UG    0      0        0 ppp0
10.64.64.64     *               255.255.255.255 UH    0      0        0 ppp0
192.168.0.0     *               255.255.255.0   U     0      0        0 br-lan
root@OpenWrt:/# 

5. 注释

这里写图片描述

这里写图片描述

这里写图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值