DHCP源码分析-dhcpv6模块


一,主流程分析



DHCP源码分析-dhcpv6模块_第1张图片



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()函数作用及分析



DHCP源码分析-dhcpv6模块_第2张图片


(对应上述整体流程的第二步_第四条件)

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()函数作用及分析



DHCP源码分析-dhcpv6模块_第3张图片



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*/

}



你可能感兴趣的:(linux内核,TCP/IP协议簇)