DHCP源碼分析-dhcpv6模塊


一,主流程分析






dhcpv6主要流程

{

  調用log_packet_in()記錄接收包的信息;

  調用build_dhcpv6_reply(&reply, packet)創建回覆packet;

  發送reply;

}

 

build_dhcpv6_reply()函數完成對不同的dhcpv6_msg_type對應的包進行處理。

 

右邊流程圖爲不同的消息類型對應的處理流程;包括solicit、、request、confirm、reply等。

 

包處理函數用到valid_client_msg()數據包驗證函數,函數作用:若請求信息不包括客戶端標識符的選項,或有服務器標識符的選項,服務器必須丟棄該信息。



二,dhcpv6_confirm()函數作用及分析





(對應上述整體流程的第二步_第四條件)

dhcpv6_confirm()的作用是:當客戶認爲這可能是一個新的鏈接,它發送一個confirm確認消息。

基本流程爲:

{

/*client基本消息認證*/

/*不要處理未識別的沒有IA的confirms*/

/*刪除IA_PD選項*/

/*變量初始化*/

/*調用shared_network_from_packet6(&shared, packet)確定客戶端連接的shared work,

若沒有任何客戶端所在網絡的信息則不能回覆*/

/*如果沒有子網記錄,沒有關於此子網信息——終止confirms*/

/*判定是否IA的所有地址都適合用來連接*/

/*如果客戶機沒有提供地址,不要reply*/

/*start_reply()函數,設置reply*/

/*set_status_code()函數,設置狀態*/

/*只有一個選項,則添加它*/

/*給調用者返回reply*/

}



三,lease_to_client()函數作用及分析






lease_to_client()函數在構建租約的reply時候被調用

基本流程爲:

{    /*調shared_network_from_packet6()函數,找shared network;定位client*/

/*初始化reply*/

/*調用start_reply()函數開始reply操作*/

/*如果packet中有ORO選項請求選項,獲取它*/

/*從packet中找到相匹配的主機記錄,若存在,則client所在共享網絡有效*/

/*調seek_shared_host()檢查“硬件”匹配*/

/*處理客戶端提供的IA到reply緩衝區。*/【包括D6O_IA_NA和D6O_IA_TA】

/*IA_PD也同樣處理*/

/*如果沒有資源且不是request信息,不要回復*/

/*給調用者返回reply*/

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章