DHCP流程图
2017-08-28 13:54:04 0 举报
DHCP流程,收包,发包,处理包
作者其他创作
大纲/内容
dhcp_client_main
packet.xid==clientp-xid?
清空wakeup_fd对应管道中的数据
设置超时和发送次数
设置status为RENEWING ,改变监听模式为LISTEN_KERNEL
设置租赁时间
结束
否
是
初始化DHCPDISCOVER包
status==REQUESTING
发包
发renew包到服务器
设置超时时间,改变监听模式为LISTEN_RAW
初始化DHCP,创建管道文件。
server_addr不为空
是否用向wakeup_fd中写数据。
clientp-socket_fd在文件描述符集是否被设置
带vlan往广播发包(send_raw_packet)
packet_handle处理接收到的数据包
判断DHCP_MESSAGE_TYPE的类型
status==REBINDING
DHCP_CLIENT结构体成员 isocket_fd; ifindex;status; packet_num; vlanid; timeout; listen_mode; op_code; xid; requested_ip; subnet; leasetime; server_addr; option60p; lease_obtained_time;
clientp-status == INIT_SELECTING
进行发包(packet_send)
把所有客户端描述符设置到rfds,并放回最大的描述符
开始
timeout和packet_num设置为零。status设置为REQUESTING
timeout0
判断监听模式
获取包中配置DHCP_MESSAGE_TYPE
设置注册时间,获取到的IP,设置status为BOUND
类型为DHCPNAK
判断clientp-status的值
从dhcp链表中去一个在文件操作集中被设置了的客户端
初始化DHCPREQUEST包
retval==0
判断retval的值
设置选择的IP和服务器地址。
recv_kernel_packet收包
关闭监听
类型为DHCPACK
listen_mode == LISTEN_RAW
status==INIT_SELECTING
收包
设置status为INIT_SELECTING,requested_ip和packet_num设为0
处理包
发广播包
status==RENEWING
发布IP设置事件(ipc_release_ipset_event)
status==BOUND
根据接口名+vlan,和ifindex获取接口mac。并作为发包的源MAC地址
设置status为INIT_SELECTING。
retval0
进行收包(packet_receiver)
获取包中配置,并复制到clientp
设置status为INIT_SELECTING。其他参数设置为零。
初始化DHCPDECLINE包头和设置
pthread_wakeup_dhcpc
设置status为DECLINE,并把包中yiaddr复制到requested_ip
recv_raw_packet收包
listen_mode == LISTEN_KERNEL
找到一个超时最短的dhcp客户端(active_clientp)
设置对应接口的IP是否成功?
packet_send(CLIENT_PTR clientp)
设置requested_ip和packet_num为0
clientp-status == REQUESTING | | RENEWING | |RENEW_REQUESTED | | REBINDING
timeout60
status==DECLINE
死循环for(;;)
0 条评论
下一页