摘要

本文主要介绍了嵌入式Linux系统下使用pppd  2.4.4来进行PPP拨号需要使用的脚本是如何配置的,配置项的含义,同时也说明了如何来配置参数,实现ppp拨号上网。

一.问题提出

嵌入式Linux操作系统下,如果要进行PPP连接,就需要配置拨号要使用的连接脚本。这些脚本参数就决定了PPPD的行为,会对PPP连接产生很大的影响。所以需要对这些脚本的参数以及具体含义有所了解。

二.解决思路和PPP连接关系密切的有两个脚本是chat和options两个脚本。其中,chat脚本是用来进行AT呼叫和控制的脚本,而options脚本就影响PPP连接的。

1.   CHAT脚本

一个简单的chat脚本有下面的结构:

""              AT

OK              ATDT  dialnumber

CONNECT      ""

一个chat脚本都是由字符串对来组成的。前面的字符串都是期望获取的串,紧跟的是发送的字符串。这个脚本每一项的具体含义是这样的:

1)     MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT;

2)     期望收到“OK”字符串,然后发送字符串“ATDT dialnumber”

3)     如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。

这样的chat脚本是最简单的,如果需要进行超时控制,就可以加入如下字段:

TIMEOUT  10

如果要增加对特殊情况的处理,就加入下面字段:

ABORT           BUSY

ABORT           NO ANSWER

ABORT            RINGING

这三行语句的意思是:如果收到字符串“BUSY”、“NO  ANSWER”、“RINGING”就退出执行。

所以在考虑到各种特殊情况下,配置一个PPP连接的CHAT脚本就可以像下面这样:

TIMEOUT          30

ABORT           BUSY

ABORT           NO ANSWER

ABORT           RINGING

""                 AT

OK                ATDT  dialnumber

CONNECT         ""

2.OPTIONS脚本OPTIONS脚本的内容,为PPP连接指定了连接使用的设备、使用的控制字符传输速率、指定了硬件加速、溢出控制等。

例如下面的options脚本:

ttyS0 ---- 指定连接使用的设备,例如:ttyS0、ttyS1等57600 ---- 设置连接使用的控制字符传输速率,可以设置为57600、115200等

debug ---- 如果需要加入调试信息,就加入参数debug

logfile /var/ ppplog ---- 将连接过程中的信息输入到某个文件中mtu 1500

-detach

noipdefault ---- 不使用默认IP就可以加入参数noipdefault

defaultroute

usepeerdns ---- 使用服务器端协商的DNS就可以设置参数usepeerdns

lcp-echo-failure 4 ---- 当连续4次没有收到发出的LCP回声请求时,就认为服务器端已不再响应,就退出执行。这里的失败次数可以灵活来决定。

-ccp ---- 不使用压缩控制协议-vj ---- 关掉式IP头压缩-chap ---- 不使用chap鉴权

-mschap-v2 ---- 不使用mschap鉴权

user

hide-password

connect  "/usr/bin/chat -v -t6 -f /var/ chat" ---- 制定了要使用的chat脚本的位置。加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 /var/log/messages)。-t 6 指定了执行chat该命令的时间为6s。chat脚本的位置可以位于/etc/目录下,也可以位于/var下,这个可以更加需要灵活设置。

persist --- 永久链接(自动重拨)

crtscts --- 告诉ppp使用modem的硬件流量控制

modem --- 使ppp使用DCD信号来判断连接是否正常,有无掉线现象

deflate --- 使pppd使用defalte压缩方式

idle --- 设置了一个时间限制,当在300秒的时间内没有数据传送,就断开连接

lock --- 则创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用。

demond --- 参数告诉pppd停留在后台,监视网络数据,一旦有要求就立即进行连网,超时后就断开连接,但pppd仍然停留在后台等待下次数据传送

其他的参数具体含义可以参照参考PPPD2.4.4 中options.c中注释:

/*

* Option variables and default values.

*/

int debug = 0;  /* Debug flag */int kdebugflag = 0;  /*  Tell kernel to print debug messages */

int default_device  = 1; /* Using /dev/tty or equivalent */char devnam[MAXPATHLEN]; /*  Device name */

bool nodetach = 0;  /* Don't detach from  controlling tty */bool updetach = 0;  /* Detach once link is up  */

int maxconnect = 0;  /* Maximum connect time  */char user[MAXNAMELEN]; /* Username for PAP */

char passwd[MAXSECRETLEN]; /* Password for PAP  */bool persist = 0;  /* Reopen link after it goes down */

char our_name[MAXNAMELEN]; /* Our name for authentication purposes  */

bool demand = 0;  /* do dial-on-demand */

char *ipparam = NULL; /* Extra parameter for ip up/down scripts  */int idle_time_limit = 0; /* Disconnect if idle for this many  seconds */

int holdoff = 30;  /* # seconds to pause  before reconnecting */bool holdoff_specified; /* true if a holdoff  value has been given */

int log_to_fd = 1;  /* send log  messages to this fd too */bool log_default = 1; /* log_to_fd is  default (stdout) */

int maxfail = 10;  /* max # of  unsuccessful connection attempts */char linkname[MAXPATHLEN]; /*  logical name for link */

bool tune_kernel;  /* may alter  kernel settings */int connect_delay = 1000; /* wait this many ms  after connect script */

int req_unit = -1;  /* requested  interface unit */bool multilink = 0;  /* Enable multilink operation  */

char *bundle_name = NULL; /* bundle name for multilink  */bool dump_options;  /* print out option values */

bool dryrun;   /* print out option values and exit  */char *domain;  /* domain name set by domain option */

int child_wait = 5;  /* # seconds to wait for children at exit  */

3. 鉴权脚本    一般情况下,PPP连接是需要进行身份认证的。签权方式有两种,一种是PAP鉴权,另一种是CHAP鉴权。鉴权需要的用户名和密码是存放在PAP-secrets和chap-secrets脚本中,以如下方式存放:

Username  * password

需要进行鉴权时,通过在options脚本中指定鉴权方式为PAP或CHAP,PPP模块就会从PAP-secrets和chap-secrets脚本中读出用户名和密码,附加到PPP的鉴权包中,发送到服务器端进行身份认证。

4. PPP拨号过程与脚本之间的关系  脚本设置成功以后,怎么和pppd2.4.4一起工作呢?这个需要从pppd程序的主函数入手。

这个过程是这样的:

Pppd程序启动以后,就会按照pathname.h中所指定的文家位置去寻找options脚本文件。这个可以按照需要指定文件的位置,确保pppd能够准确找到该文件。

Pppd找到options文件后,按顺序读入参数行。在这里,就可以获取系统要使用的是哪个设备来进行联网、设备的速率是多少。

Pppd 将配置的参数解析为程序当中的全局变量标识符,进行pppd连接控制。

三.实践情况下面是FT282 上的PPP连接使用的OPTIONS、 CHAT和PAP-SECRETS脚本。

OPTIONS:

connect "/usr/bin/chat -v -t6 -f  /var/ppp/td-scdma_chat"

ttyUSB0

115200

debug

logfile  /var/log/ppplog

mtu  1500

-detach

noauth

noipdefault

defaultroute

usepeerdns

crtscts

lock

lcp-echo-failure  4

-ccp

-vj

-chap

-mschap-v2

user

hide-password

CHAT:

"" AT

OK ATDT*98*1#

CONNECT ""

PAP-SECRETS:

wap  *wap

经过在FT282上进行测试,发现能够顺利进行PPP连接。

以上流程成功后,会由移动或联通的基站分配一个IP地址作为自己的客户端地址,接下来按照如下流程建立客户端与服务端的连接。

(1)socket(int domain,int type,int protocol);

该函数建立新的socket,以建立一个新的通信端口并获得文件描述符。函数中的参数domain确定一个协议族,这里定义为AF_INET,type指定套接字类型,该处使用SOCK_STREAM,protocol一般为0,使用默认协议。

(2)connect(int sockfd,struct sockaddr *address,size_t address_len);

当调用socket建立传输端口后,调用connect函数建立与远程服务器相连的连接线路。

(3) recv(int sockfd,void *buf,int len,unsigned int flags);

该函数用于接收从套接口传来的信息,socket用connect连接的套接口,buf是指向内存块的指针,用于存储接受的消息,len指明内存块的大小,flags是一个操作标志。

(4)Base64_Code();//对登陆信息或附件内容进行加密

(5)send(int sockfd,const void *msg,int len,unsigned int flags);

该函数是用来通过套接口向其它程序传递数据的。sockfd是用来传输数据的socked描述符,msg是一个指向要发送数据的指针,len是以字节为单位的数据的长度,flags一般情况下设置为0。

其中对附件文件的发送需要预先设定每次读取的字节数和每次发送的字节数,将附件分批读取编码发送。

linux pppd源码下载_linux pppd脚本配置(转载)相关推荐

  1. linux pppd源码下载_linux pppd脚本配置

    问题描述:之前一直对公司产品的ppp拨号流程存在很多不解的问题,主要是对pppd的那么多参数不太明晰,所以针对pppd命令的使用做一下研究. 摘要 本文主要介绍了嵌入式Linux系统下使用pppd  ...

  2. linux pppd源码下载_LINUX下的拨号利器:wvdial和pppd —— 转载

    wvdial是LINUX下的智能化拨号工具,利用wvdial和ppp可以实现linux下的轻松上网.在整个过程中wvdial的作用是拨号并等待提示,并根据提示输入相应的用户名和密码等认证信息:ppp的 ...

  3. linux pppd源码下载_Linux中的pppd

    在学习tinyos的PppRouter例程时涉及到了ppp组件及pppd程序.学习网络课程的时候大概了解过这是一个拨号应用,但具体不是特别理解这是啥. [PPP简介] PPP是在串行连接上运行IP以及 ...

  4. HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门

    Docker是虚拟机吗? Docker是用来隔离的,使用的是隔离的namespace,使用OS提供的接口进行应用程序之间的资源隔离,不是虚拟机.再加上它自己特殊的文件系统,一层一层叠加.他只不过是一个 ...

  5. linux 内核源码下载网址

    记录下linux 内核源码下载网址: https://mirrors.edge.kernel.org/pub/linux/kernel/ linux 0系列版本下载网址 http://oldlinux ...

  6. Linux内核源码下载方式

    官网 Linux内核源码下载页面 https://www.kernel.org/pub/linux/kernel/ 页面介绍: HTTP https://www.kernel.org/pub/ GIT ...

  7. 基于java,swing图书管理系统源码下载(含数据库脚本) 附下载

    资源简介 1.执行数据库脚本文件 生成数据库 2. 修改  ibraryManager\src\com\wsy\dao\DAO.java 文件中的 数据库密码为你本机 3. 运行该程序后,输入 账号: ...

  8. 树莓派Linux系统内核源码下载方式

    树莓派Linux系统内核源码下载方式(参考了rpi-source的wiki) 最近使用树莓派开发东西,买了个树莓派3B,然后去官网下载了img镜像烧写进去,由于需要用到内核源码,去/lib/modul ...

  9. linux 浏览器源码下载,Android开发:图片浏览器源码

    Android 图片浏览器源码,是你学习Android很好的例子,希望对你的学习有帮助. main.xml android:layout_width="fill_parent" a ...

最新文章

  1. C# AutoMapper的简单扩展
  2. MarkDown入门及技巧
  3. Fastjson 1.2.68版本反序列化漏洞分析篇
  4. hdu-4811 Ball
  5. 6.13spring随笔
  6. html首字母样式,html标签手册
  7. Python技术分享:ndarray对象的常用属性
  8. java正则表达式判断手机号_正则表达式学习之简单手机号和邮箱练习
  9. UE4次世代的移动平台渲染技术
  10. linux 重启21端口命令,修改SSH默认远程端口为21号端口
  11. java临时文件下载_Java临时文件
  12. 全国草地资源类型分布数据/植被类型分布数据/土地利用类型分布数据
  13. 测试新电脑要什么软件,测试电脑性能的软件(新电脑用什么软件测试)
  14. 淘宝 - 淘宝买家信誉怎么查询?
  15. 统计通话次数和时间的软件_通话时间统计下载
  16. 在matlab设置三角波,matlab 中repeating sequence中怎样设置20khz三角波
  17. RAKsmart服务器优势有哪些?外贸选择的关键原因
  18. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
  19. win10根据通知栏图标找对应程序
  20. 基于android的互动健身平台,基于Android和ARM的智能健身系统的设计与实现

热门文章

  1. Linux TF卡ext4文件系统录制视频文件用拷贝不用移动的影响
  2. Type-c快充加无线直播麦克风方案(无线麦克风边充电)LDR6023C专业快充芯片
  3. Linux ps命令
  4. 【Python】​​​​​​​turtle八边形绘制
  5. c语言程序画正八边形,用少儿编程绘制一个正九边形
  6. 微信公众号——网页授权
  7. 入门算法题——数学篇(一)
  8. 02-走马灯 动画实现图片无缝展示
  9. SAS9.4+sid更新
  10. 6、Spring事务配置上篇