pppoe-server源代码阅读

pppoe-server.c

一、从main()函数入手:

1、main()函数调用getopt()函数,进行命令参数词法分析

getopt

2、然后main()函数开始检查一些参数(好多参数,暂时不知道有何用),初始化random cookie,还有对session的操作
3、打开所有的Interface接口,creat event selector,创建接口事件处理函数,调用InterfaceHandler
event handler

在进入InterfaceHandler之后,会经过一个过程:
PADI
PADO
PADR
PADS
StartPPPD
4、main()函数在InterfaceHandler整个调用过程后,开始UNIX Network Programming
Unix network programming

二、进入main()中的InterfaceHandler()
InterfaceHandler

InterfaceHandler()函数调用serverProcessPacket()函数

三、serverProcessPacket()函数
serverProcessPacket

根据packet.code来选择处理函数


image.png

其中PPPoEPacket定义如下:


PPPoEPacket定义
PPPoE codes
四、processPADI函数

在判断客户端发送的广播请求的address、session、MAC没有问题并能够提供客户端所需的service后,server主机准备发送PADO


PADO准备

最后调用sendPacket函数发送PADO包


sendPacket

五、processPADR函数
当主机能够提供服务后,给客户端发送PADO,客户端选择一个能够提供服务的主机发送PADR包,当主机接收到PADR后,就可以准备发起一个PPP会话


startPPPD

六、startPPPD函数
进入startPPPD后,又分为两种


startPPPD

一个是startPPPDLinuxKernelMode,另一个是startPPPDUserMode

七、startPPPD之后
不管是startPPPDLinuxKernelMode还是startPPPDUserMode,如果其过程顺利执行,到最后都是以下面两个函数结尾退出


退出startPPPD
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,213评论 18 399
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 11,524评论 0 6
  • 死,只是一个结果,怎么活着才是最重要!,感谢熊顿,滚蛋吧!肿瘤君,真是感人的电影,教给我们乐观!多爱身边人吧!照顾...
    张子涯阅读 2,880评论 0 1

友情链接更多精彩内容