pppoe-server源代码阅读

pppoe-server.c

一、从main()函数入手:

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

pppoe-server源代码阅读_第1张图片
getopt

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

在进入 InterfaceHandler之后,会经过一个过程:
PADI
PADO
PADR
PADS
StartPPPD
4、main()函数在InterfaceHandler整个调用过程后,开始UNIX Network Programming
pppoe-server源代码阅读_第3张图片
Unix network programming

二、进入main()中的InterfaceHandler()
pppoe-server源代码阅读_第4张图片
InterfaceHandler

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

三、serverProcessPacket()函数
pppoe-server源代码阅读_第5张图片
serverProcessPacket

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


pppoe-server源代码阅读_第6张图片
image.png

其中PPPoEPacket定义如下:


pppoe-server源代码阅读_第7张图片
PPPoEPacket定义
pppoe-server源代码阅读_第8张图片
PPPoE codes
四、processPADI函数

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


pppoe-server源代码阅读_第9张图片
PADO准备

最后调用sendPacket函数发送PADO包


sendPacket

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


startPPPD

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


pppoe-server源代码阅读_第10张图片
startPPPD

一个是startPPPDLinuxKernelMode,另一个是startPPPDUserMode

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


退出startPPPD

你可能感兴趣的:(pppoe-server源代码阅读)