pppoe-server.c
一、從main()函數(shù)入手:
1、main()函數(shù)調(diào)用getopt()函數(shù),進(jìn)行命令參數(shù)詞法分析
getopt
2、然后main()函數(shù)開始檢查一些參數(shù)(好多參數(shù)移国,暫時(shí)不知道有何用),初始化random cookie道伟,還有對(duì)session的操作
3迹缀、打開所有的Interface接口,creat event selector皱卓,創(chuàng)建接口事件處理函數(shù)裹芝,調(diào)用InterfaceHandler
event handler
在進(jìn)入InterfaceHandler之后,會(huì)經(jīng)過一個(gè)過程:
PADI
PADO
PADR
PADS
StartPPPD
4娜汁、main()函數(shù)在InterfaceHandler整個(gè)調(diào)用過程后嫂易,開始UNIX Network Programming
Unix network programming
二、進(jìn)入main()中的InterfaceHandler()
InterfaceHandler
InterfaceHandler()函數(shù)調(diào)用serverProcessPacket()函數(shù)
三掐禁、serverProcessPacket()函數(shù)
serverProcessPacket
根據(jù)packet.code來選擇處理函數(shù)
image.png
其中PPPoEPacket定義如下:
PPPoEPacket定義
PPPoE codes
四怜械、processPADI函數(shù)
在判斷客戶端發(fā)送的廣播請求的address、session傅事、MAC沒有問題并能夠提供客戶端所需的service后缕允,server主機(jī)準(zhǔn)備發(fā)送PADO
PADO準(zhǔn)備
最后調(diào)用sendPacket函數(shù)發(fā)送PADO包
sendPacket
五、processPADR函數(shù)
當(dāng)主機(jī)能夠提供服務(wù)后蹭越,給客戶端發(fā)送PADO障本,客戶端選擇一個(gè)能夠提供服務(wù)的主機(jī)發(fā)送PADR包,當(dāng)主機(jī)接收到PADR后响鹃,就可以準(zhǔn)備發(fā)起一個(gè)PPP會(huì)話
startPPPD
六驾霜、startPPPD函數(shù)
進(jìn)入startPPPD后,又分為兩種
startPPPD
一個(gè)是startPPPDLinuxKernelMode买置,另一個(gè)是startPPPDUserMode
七粪糙、startPPPD之后
不管是startPPPDLinuxKernelMode還是startPPPDUserMode,如果其過程順利執(zhí)行忿项,到最后都是以下面兩個(gè)函數(shù)結(jié)尾退出
退出startPPPD