pppd源代码分析

pppd源代码分析

ID:37552676

大小:227.00 KB

页数:12页

时间:2019-05-25

pppd源代码分析_第1页
pppd源代码分析_第2页
pppd源代码分析_第3页
pppd源代码分析_第4页
pppd源代码分析_第5页
资源描述:

《pppd源代码分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、(一)PPP驱动程序的基本原理PPP协议之下是以太网和串口等物理层,之上是IP协议等网络层。这里,对于下层,我们只讨论串口的情况,对于上层,我们只讨论TCP/IP的情况。发送时,TCP/IP数据包经过PPP打包之后经过串口发送。接收时,从串口上来的数据经PPP解包之后上报给TCP/IP协议层。pppd是一个后台服务进程(daemon),是一个用户空间的进程,所以把策略性的内容从内核的PPP协议处理模块移到pppd中是很自然的事了。pppd实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。 在移动终端向监控中心发送定位信息的过程中,移动终端上的GPRS通信程序通过socket接

2、口发送TCP/IP数据包,内核根据IP地址和路由表,找到PPP网络接口,然后调用函数ppp_start_xmit(),此时控制权就转移到了PPP协议模块。函数ppp_start_xmit()调用函数ppp_xmit_process()去发送队列中的所有数据包,而函数ppp_xmit_process()会进一步调用函数ppp_send_frame()去发送单个数据包。函数ppp_send_frame()根据前面pppd对PPP协议模块的设置调用压缩等扩展功能之后,又经函数ppp_push()调用函数pch->chan->ops->start_xmit()发送数据包。函数pch->chan

3、->ops->start_xmit()是具体的传输方式,对于串口发送方式,则是ppp_async.c:ppp_asynctty_open中注册的函数ppp_async_send(),函数ppp_async_send()经函数ppp_async_push()调用函数tty->driver->write()(定义在低层驱动程序中)把数据发送到串口2(GPRS通信模块接在串口2上)。  ppp_async.c在初始化时(ppp_async_init),调用函数tty_register_ldisc()向tty注册了行规程N_PPP的处理接口,也就是一组回调函数。在移动终端接收监控中心指令的过程

4、中,当GPRS通信模块收到数据时,就会回调N_PPP行规程中的函数ppp_asynctty_receive()来接收数据。函数ppp_asynctty_receive()调用函数ppp_async_input()把数据buffer转换成sk_buff,并放入接收队列ap->rqueue中。ppp_async另外有一个tasklet(ppp_async_process)专门处理接收队列ap->rqueue中的数据包,ppp_async_process一直挂在接收队列ap->rqueue上,一旦被唤醒,它就调用函数ppp_input()让PPP协议模块处理该数据包。在函数ppp_input

5、()中,数据被分成两路,一路是协议控制数据包,放入队列pch->file.rqb中,交给pppd处理。另外一路是用户数据包,经函数ppp_do_recv()、ppp_receive_frame()进行PPP协议相关的处理后,再由函数netif_rx()提交给上层的TCP/IP协议模块进行处理,最后经socket接口传递给应用层的GPRS通信程序。=====================1)ppp设备是指在点对点的物理链路之间使用PPP帧进行分组交换的内核网络接口设备,由于Linux内核将串行设备作为终端设备来驱动,于是引入PPP终端规程来实现终端设备与PPP设备的接口.根据终端设备的

6、物理传输特性的不同,PPP规程分为异步规程(N_PPP)和同步规程(N_SYNC_PPP)两种,对于普通串口设备使用异步PPP规程.2)在PPP驱动程序中,每一tty终端设备对应于一条PPP传输通道(chanell),每一ppp网络设备对应于一个PPP接口单元(unit).从终端设备上接收到的数据流通过PPP传输通道解码后转换成PPP帧传递到PPP网络接口单元,PPP接口单元再将PPP帧转换为PPP设备的接收帧.反之,当PPP设备发射数据帧时,发射帧通过PPP接口单元转换成PPP帧传递给PPP通道,PPP通道负责将PPP帧编码后写入终端设备.在配置了多链路PPP时(CONFIG_PPP

7、_MULTILINK),多个PPP传输通道可连接到同一PPP接口单元.PPP接口单元将PPP帧分割成若干个片段传递给不同的PPP传输通道,反之,PPP传输通道接收到的PPP帧片段被PPP接口单元重组成完整的PPP帧. 3)在Linux-2.4中,应用程序可通过字符设备/dev/ppp监控内核PPP驱动程序.用户可以用ioctl(PPPIOCATTACH)将文件绑定到PPP接口单元上,来读写PPP接口单元的输出帧,也可以用ioctl(PPPIOC

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。