ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PPP和GSM

2022-03-01 15:35:32  阅读:158  来源: 互联网

标签:调用 数据包 PPP pppd ppp 串口 GSM


PPP(Point-to-Point)提供了一种标准的方法在点对点链接上传输多种协议数据包,它最常见的用途可能是拨号上网了,网络应用程序使用PPP程序作为和GSM模块之间的协议

PPP协议之下是以太网,串口等物理层,之上是IP层,发送数据时,IP数据包经过PPP打包之后在经过以太网或者串口进行发送,接受时数据通过PPP解包之后送给IP层,PPP协议不仅提供简单的数据链路层功能,还提供了鉴权(PAP/CHAP),数据压缩和解压,加密和机密功能,应用程序要求使用透明化,不关心这些细节。

pppd是一个后台服务程序,把策略性的内容从内核的PPP协议模块中移到了pppd中,pppd实现了所有的鉴权,压缩/解压,加密/解密等扩展功能的控制协议,pppd和内核PPP模块之间使用设备文件进行通信,设备文件名是/dev/ppp,通过read系统调用,pppd可以读取PPP协议处理模块的数据包,通过write调用,pppd模块可以把要发送的数据传递给PPP协议处理模块。在pppd里,每种协议的实现都在独立的C文件中。

Chat是pppd的一个辅助工具,用于和GSM模组建立会话,它的实现比较简单,想串口发送AT命令,建立GSM模块和主机的会话,以便让PPP协议可以在串口上传输数据包,

pppd在make_ppp_unit函数中,调用ioctrl(PPPIOCNEWUNIT)创建一个ppp0接口,内核的PPP协议模块在处理PPPIOCNEWUNIT时,会调用register_netdev接口注册一个网络设备,该网络的设备的传输函数为ppp_start_xmit,当应用程序发送数据时,根据IP地址和路由表找到ppp0接口,然后调用ppp_start_xmit发送数据,此时数据就到ppp协议模块了,具体调用为ppp_start_xmit->ppp_xmit_process->ppp_send_frame,ppp_send_frame根据设置,调用压缩加密等之后经过ppp_push调用pch->chan->ops->start_xmit发送数据包

pch->chan->ops->start_xmit是具体的发送方式,必然串口发送,则是ppp_asynctty_open中注册的ppp_async_send函数,ppp_async_send经过ppp_async_push函数调用tty->driver->write把数据发送串口

用户数据发送如下图所示:

 

 

 pppd的控制协议数据发送如下图:

 

 ppp_async.c在初始化(ppp_async_init)调用tty_register_ldisc向tty注册了处理函数,时当串口收到数据时会调用ppp_ldisc的ppp_asynctty_receive函数接收数据,ppp_asynctty_receive->ppp_async_input把数据buff转换成sk_buf,最终调用ppp_input函数让PPP协议处理模块处理该数据包,

在ppp_input函数中,数据被分成两路,一路是控制协议数据包交给pppd处理,另一类是用户数据包经过ppp_do_recv/ppp_receive_frame进行ppp处理之后再由netif_rx提交给上层协议处理,最后经socket传递到应用程序,

 

标签:调用,数据包,PPP,pppd,ppp,串口,GSM
来源: https://www.cnblogs.com/sudochen/p/15950372.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有