PPPoE拨号流程_曾梦想仗剑走天涯-CSDN博客_pppoe拨号
4.Linux中的PPPoE拨号守护进程(pppd:Point-to-Point Protocol Daemon)
Linux 内核 include/uapi/linux/if_pppox.h
中定义了
{PADI_CODE,PADO_CODE,PADR_CODE,PADS_CODE,PADT_CODE}
和
struct pppoe_tag/pppoe_hdr;
PPP/PPPoE 实现代码在 /drivers/net/ppp/ 目录下,pppoe.c 中实现了 pppoe_connect、pppoe_xmit、pppoe_recvmsg 等接口。
pppd 是一个后台服务进程(daemon),是一个用户空间的进程,所以把策略性的内容从内核的PPP协议处理模块移到 pppd 中是很自然的事了。pppd 实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。
pppd只是一个普通的用户进程,它如何扩展PPP协议呢?这就是pppd与内核中的PPP协议处理模块之间约定了,它们之间采用了最传统的内核空间与用户空间之间通信方式:设备文件。
设备文件名是 /dev/ppp。通过read系统调用,pppd可以读取PPP协议处理模块的数据包,当然,PPP协议处理模块只会把应该由pppd处理的数据包发给pppd。通过write系统调用,pppd可以把要发送的数据包传递给PPP协议处理模块。通过ioctrl系统调用,pppd可以设置PPP协议的参数,可以建立/关闭连接。