一,主流程分析
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*/
}