pppoe-server.c
一、从main()函数入手:
1、main()函数调用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()
InterfaceHandlerInterfaceHandler()函数调用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
网友评论