2014-02-14 14:36:59 u013033022 阅读数 1244

《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

监视别的进程的进程,改自busyboxnetworking/ping

1使用的参数包括:检测间隔时间、IP地址列表(5IP地址)。参数配置文件iplist.conf存入在/etc目录下。

2进程名为ping_ppp,被编译到busybox中。

3ppp-on程序中启动,在掉线重拨时关闭。

4ICMP检测流程:

1读出/etc/iplist.conf文件中的IP地址列表及检测间隔时间,读出DNS域名服器的两个IP地址。

2统计IP地址列表中需要检测的IP地址个数,统计到列表中的IP地址为空结束。

根据设置的检测间隔延时。

3先检测2个域名服务器IP地址,再检测配置文件中设置的IP地址。

4按照检测IP地址顺序循环检测IP地址最多10次。

5在检测中如果有IP地址检测连通的则退出检测,不再进行下一次的检测。如果连续检测10次都没连通则给主进程发重拔信号。

6)整体流程如下:

2014-02-21 16:29:41 u013033022 阅读数 944


《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

监视别的进程的进程,改自busyboxnetworking/nslookup。

1使用的参数包括:检测间隔时间、域名地址列表(5个域名),参数配置文件dnslist.conf存入在/etc目录下。

2进程名为nslookup_ppp,被编译到busybox中。

3ppp-on程序中运行,在掉线重拨时关闭。

4DNS检测流程:

1)读出/etc/dnslist.conf文件中的域名地址列表及检测间隔时间。

2)统计域名列表中需要检测的域名个数,统计到列表中的域名为空结束。

3)根据设置的检测间隔延时。

4)按照域名列表顺序循环检测域名共10次。

5)在检测中如果有域名检测连通的则退出检测,不再进行下一次的检测。如果连续检测10次都没连通则给主进程发重拔信号。

6)整体流程图同ICMP检测。

2014-02-12 14:32:33 u013033022 阅读数 2063

《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

1拔号处理:

PPP拔号成功会生成/tmp/ppp/link.文件,在PPP拔号后在定期内判断是否有/tmp/ppp/link.文件的存在,如能有该文件存在则判断PPP拔号成功,如果在超时后还未发现该文件则重新进行PPP拔号。

2掉线处理:

1PPP自动掉线

ppp自检测掉线后会运行ip-down进程,在ip-down程序中添加给RC主进程发重拨的信号,主进程收到重拨信号后进行相应的处理。

2)检测处理

在测试过程中发现有假在线的现象,当广域网已经断开,但PPP进程自身并未检测到掉线。因此在PPP上线后添加ICMPDNS检测,定期检测广域网是否断开,如果断开则给RC主进程发重拨的信号。

程序流程图如下:

 

7.1 PPP检测掉线流程图

2017-07-25 18:22:24 qq_37961793 阅读数 588

树莓派3g模块

树莓派对大部分模块都有自动的驱动支持基本上都可以做到即插即用,网上有很多方法可以实现3g模块上网,比如使用可以自动拨号并且断线重连的软件pppd、umtskeeper与sakis3g。在这里我们将用到以下几个软件

1.在linux上,3G网卡上电会被检测为storge设备,而要用它拨号上网,就需要把网卡从storge设备转为modem设备,怎么转化呢?linux下有个软件叫usb_modeswitch,这是需要安装的第1个软件。
2.为了简化pppd的拨号流程(传统方式要编写好几个脚本,调用几次pppd的命令),需要一个wvdial的软件,它将pppd的拨号流程简化为一个配置脚本,写好脚本,运行wvdial,它会先完成和modem的AT命令交互,待交互完成后,再调用pppd,完成拨号上网。这是需要安装的第2个软件(里面自行安装好了pppd)。所以我们不需要再次安装pppd。

接下来进入操作过程:

插入3g模块,这里我是使用的华为3g e620的模块

查看3g模块信息

pi@nameserver114:~$ lsusb
Bus 001 Device 004: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
安装必要软件
sudo apt-get install usb-modeswitch usb-modeswitch-data 
sudo apt-get install wvdial 
基本准备工作已经完成,接下来usb-modeswitch默认配置文件

在配置文件之前我们需要查找本华为模块版本的转换信息

以下目录中有一个压缩包,并解压它

configPack.tar.gz
tar -xzvf /usr/share/usb_modeswitch/configPack.tar.gz

pi@nameserver114:~$ cd /usr/share/usb_modeswitch/
pi@nameserver114:/usr/share/usb_modeswitch$ ls
03f0:002a                   0af0:d057         198a:0003
0408:f000                   0af0:d058         198f:bccd
0421:060c                   0af0:d155         19d2:0003
0421:0610                   0af0:d157         19d2:0013
0421:061d                   0af0:d255         19d2:0026
0421:0622                   0af0:d257         19d2:0031
0421:0627                   0af0:d357         19d2:0040
0421:062c                   0b3c:c700         19d2:0053
0421:0632                   0b3c:f000         19d2:0083
0421:0637                   0cf3:20ff         19d2:0083:uPr=WCDMA
0471:1210:uMa=Philips       0d46:45a1         19d2:0101
0471:1210:uMa=Wisue         0d46:45a5         19d2:0103
0471:1237                   0df7:0800         19d2:0110
0482:024d                   0e8d:0002:uPr=MT  19d2:0115
04bb:bccd                   0e8d:7109         19d2:0120
04e8:680c                   0fce:d0cf         19d2:0146
04e8:689a                   0fce:d0e1         19d2:0149
04e8:f000:sMo=U209          0fce:d103         19d2:0154
057c:84ff                   0fd1:1000         19d2:0166
05c6:1000:sVe=GT            1004:1000         19d2:0169
05c6:1000:sVe=Option        1004:607f         19d2:0325
05c6:1000:uMa=AnyDATA       1004:613a         19d2:1001
05c6:1000:uMa=CELOT         1004:613f         19d2:1007
05c6:1000:uMa=DGT           1004:614e         19d2:1009
05c6:1000:uMa=Option        1004:6156         19d2:1013
05c6:1000:uMa=SAMSUNG       1004:6190         19d2:1017
05c6:1000:uMa=SSE           1004:61aa         19d2:1171
05c6:1000:uMa=StrongRising  1004:61dd         19d2:1175
05c6:1000:uMa=Vertex        1004:61e7         19d2:1179
05c6:2000                   1004:61eb         19d2:1201
05c6:2001                   1004:6327         19d2:1216
05c6:6503                   1033:0035         19d2:1224
05c6:f000                   106c:3b03         19d2:1514
05c7:1000                   106c:3b05         19d2:1517
072f:100d                   106c:3b06         19d2:1520
07d1:a800                   106c:3b14         19d2:1523
07d1:a804                   1076:7f40         19d2:1542
0922:1001                   109b:f009         19d2:2000
0930:0d46                   1199:0fff         19d2:bccd
0ace:2011                   1266:1000         19d2:ffde
0ace:20ff                   12d1:1001         19d2:ffe6
0af0:4007                   12d1:1003         19d2:fff5
0af0:6711                   12d1:1009         19d2:fff6
0af0:6731                   12d1:101e         1a8d:1000
0af0:6751                   12d1:1030         1a8d:2000
0af0:6771                   12d1:1031         1ab7:5700
0af0:6791                   12d1:1414         1b7d:0700
0af0:6811                   12d1:1446         1bbb:000f
0af0:6911                   12d1:1449         1bbb:00ca
0af0:6951                   12d1:14ad         1bbb:f000
0af0:6971                   12d1:14b5         1bbb:f017
0af0:7011                   12d1:14b7         1bbb:f052
0af0:7031                   12d1:14ba         1c9e:1001
0af0:7051                   12d1:14c1         1c9e:6061
0af0:7071                   12d1:14c3         1c9e:9200
0af0:7111                   12d1:14c4         1c9e:9800
0af0:7211                   12d1:14c5         1c9e:98ff
0af0:7251                   12d1:14d1         1c9e:9e00
0af0:7271                   12d1:14fe         1c9e:f000
0af0:7301                   12d1:1505         1da5:f000
0af0:7311                   12d1:151a         1dd6:1000
0af0:7361                   12d1:1520         1de1:1101
0af0:7381                   12d1:1521         1e0e:f000
0af0:7401                   12d1:1523         1e89:f000
0af0:7501                   12d1:1526         1edf:6003
0af0:7601                   12d1:1553         1ee8:0009
0af0:7701                   12d1:1557         1ee8:0013
0af0:7706                   12d1:155b         1ee8:0040
0af0:7801                   12d1:1c0b         1ee8:004a
0af0:7901                   12d1:1c24         1ee8:0054
0af0:7a01                   12d1:1d50         1ee8:0060
0af0:7a05                   12d1:1da1         1f28:0021
0af0:8006                   12d1:1f01         1fac:0032
0af0:8200                   12d1:1f11         1fac:0130
0af0:8201                   12d1:380b         1fac:0150
0af0:8300                   1307:1169         1fac:0151
0af0:8302                   1410:5010         2001:a80b
0af0:8304                   1410:5020         201e:1023
0af0:8400                   1410:5030         201e:2009
0af0:8600                   1410:5031         2020:f00e
0af0:8700                   1410:5041         2077:f000
0af0:8800                   1410:5059         21f5:1000
0af0:8900                   1410:7001         22de:6803
0af0:9000                   148e:a000         22f4:0021
0af0:c031                   148f:2578         230d:0001
0af0:c100                   15eb:7153         230d:0007
0af0:d001                   16d8:6281         230d:0101
0af0:d013                   16d8:6803         2357:0200
0af0:d031                   16d8:6804         8888:6500
0af0:d033                   16d8:700a         configPack.tar.gz
0af0:d035                   16d8:700b
0af0:d055                   16d8:f000

找到12d1\:1001文件并打开它,以下就是它的转换信息,我们可以直接复制粘贴到usb-modeswitch配置文件

sudo nano 12d1:1001
sudo nano /etc/usb-modeswtich.conf
# Huawei E169

TargetClass=0xff

HuaweiMode=1


将以上的信息复制到usb-modeswitch中

sudo  nano /etc/usb-modeswitch.conf

然后我们输入转换命令,指定配置文件并创建tty设备,具体用法看help
usb_modeswitch -W -c /etc/usb_modeswitch.conf -I

转换成功之后,我们会在/dev看见多了几个tty,接下来我们看那个tty能用

pi@nameserver114:/dev$ sudo wvdialconf
Editing `/etc/wvdial.conf'.

Scanning your serial ports for a modem.

ttyUSB0<*1>: ATQ0 V1 E1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB0<*1>: Speed 9600: AT -- OK
ttyUSB0<*1>: Max speed is 9600; that should be safe.
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 9600 baud
ttyUSB1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
ttyUSB2<*1>: ATQ0 V1 E1 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB2<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB2<*1>: Speed 9600: AT -- OK
ttyUSB2<*1>: Max speed is 9600; that should be safe.
ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK

Found a modem on /dev/ttyUSB0.
Modem configuration written to /etc/wvdial.conf.
ttyUSB0<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
ttyUSB2<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

由图可见,ttyUSB0可用,这个时候我们再进入wvdial配置文件,检查是否选定ttyUSB0,并更改配置文件

sudo nano /etc/wvdial.conf

[Dialer Defaults]
Auto DNS = on
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","3GNET"
Modem Type = Analog Modem
ISDN = 0
New PPPD = yes
Phone = *99#
Modem = /dev/ttyUSB0
Username = any
Password = any
Baud = 9600

这里我用的是移动卡,将phone、usrname、password设置为移动3g相关的信息。另外的几种情况,以下图为鉴
 

运营商(ISP)

APN

拨号号码

帐号

密码

中国联通WCDMA

China Unicom

3GNET

*99#

中国电信CDMA2000

China Telecom

EVDO网络

#777

ctnet@mycdma.cn

vnet.mobi

1X网络

#777

card (CARD)

cardCARD

中国移动 TD-SCDMA

China Mobile

CMNET

*98*1#

中国移动 GPRS

China Mobile

CMNET

*99***1#

 
设置完成之后我们直接执行拨号命令
pi@nameserver114:/$ sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","3GNET"
AT+CGDCONT=1,"IP","3GNET"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.

开始拨号,如果不出意外,将会拨号成功。
尝试ping baidu,检查是否已经联网成功。

















2020-02-23 20:26:06 jeff_linux 阅读数 58

上周使用华为4G网络发现程序在掉线重新拨号后socket不能连接,经过检查发现是重新拨号后ip发生变化,但是socket状态还是返回正常,造成判断错误,因为服务端需要面对不同的程序,所以在socket加入keepalive检测,需要注意是keepaliv设置检测时间一定要不应用程序定时发送数据的时间短,否则keepalive不会检测。参考网络文章进行修改

keepalive默认是关闭的, 因为虽然流量极小, 毕竟是开销. 因此需要用户手动开启. 有两种方式开启.
1) 在代码里针对每个socket进行单独设定, 使用起来灵活.
除了keepAlive 开关, 还有keepIdle, keepInterval, keepCount 3个属性, 使用简单, 如下:

    int keepalive = 1; // 开启keepalive属性
    int keepidle = 20; // 如该连接在20秒内没有任何数据往来,则进行探测
    int keepinterval = 5; // 探测时发包的时间间隔为5 秒
    int keepcount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
    setsockopt(pSocket->m_sockfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive ));
    setsockopt(pSocket->m_sockfd, SOL_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle ));
    setsockopt(pSocket->m_sockfd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval ));
    setsockopt(pSocket->m_sockfd, SOL_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount ));

使用时需要#include <netinet/tcp.h>, 否则SOL_TCP和TCP_KEEPIDLE等3个宏找不到.

2) 修改配置文件, 对整个系统所有的socket有效.
我们可以用cat命令查看到系统中这几个默认的值.
#cat /proc/sys/net/ipv4/tcp_keepalive_time  7200  
#cat /proc/sys/net/ipv4/tcp_keepalive_intvl  75  
#cat /proc/sys/net/ipv4/tcp_keepalive_probes  9
修改它们:
#echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time  
#echo 5 > /proc/sys/net/ipv4/tcp_keepalive_intvl  
#echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes

若想保存设置可以在etc下修改sysctl.conf加入下面内容

net.ipv4.tcp_keepalive_intvl = 3
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 20

意 思就是说对于tcp连接,如果一直在socket上有数据来往就不会触发keepalive,但是如果20秒一直没有数据往来,则keep alive开始工作:发送探测包,受到响应则认为网络,是好的,结束探测;如果没有相应就每隔3秒发探测包,一共发送3次,3次后仍没有相应,

没有更多推荐了,返回首页