2012年8月29日星期三

W5100E01-AVR是什麼?怎麼用?(六)(用戶手冊V1.0版)

W5100E01-AVR是为AVR开发者提供的W5100评估板。本文是W5100E01-AVR的用户手册,希望对大家有所帮助。今天我们接着前天的博文继续介绍:

第五部分在这里:W5100E01-AVR是什么?怎么用?(五)(用户手册V1.0版)



<表3-34>所示为在“inet/dhcp.h”中定义成枚举数据类型,显示了许多DHCP客户端程序普遍使用的Option代码段。

其他没有在<表3-34>定义的代码段在DHCP客户端程序中跳过。
 
DHCP客户端程序的操作在评估板’s main()函数执行,参见<图3.3>。
 
第一,在初始化阶段设置DHCP客户端使用的MAC地址,MAC地址时网络中唯一标识设备的地址,是网络通信中最基本的地址,用于在DHCP服务器中识别DHCP客户。对于DHCP客户端程序的MAC地址,使用评估板的MAC地址设置DHCP客户的全局变量SRC_MAC_ADDR。在设置完SRC_MAC_ADDR后,通过调用init_dhcp_client()函数可以对从DHCP服务器接收的IP进行收集时,注册两个函数,防止DHCP服务器端的IP地址更新。
 
当调用init_dhcp_client()函数时,如果每个函数未指定,DHCP客户端程序的set_DHCP_network()函数和proc_ip_conflict()函数分别被调用。
当更新网络信息或发生IP冲突,注册evb_soft_reset()函数来自动重置评估板。
 
第二,可以通过getIP_DHCPS()函数获取网络信息。
getIP_DHCPS()函数使用setIP(),setMACAddr()等函数初始化W5100,并初始化DHCP客户端程序的‘dhcp_state’的变量状态为‘STATE_DHCP_DISCOVER’。
 
初始化结束后,它调用send_DHCP_DISCOVER()函数发送DHCP DISCOVERY消息给DHCP服务器。
 
发送DHCP DISCOVERY消息后,通过调用reset_DHCP_time()函数初始化定时器为才DHCP服务器端接收的网络信息中的租约期限,并使用set_timer() 函数将‘DHCP定时器’时间间隔设为1秒。在初始化DHCP_Timeout为0后,等待接收从DHCP服务器端的DHCP信息,并将DHCP_Timeout定义为‘DHCP_WAIT_TIME’与‘MAX_DHCP_RETRY’定义的时间。在等待‘DHCP_WAIT_TIME & MAX_DHCP_RETRY’时间中,它会检测dhcp_state是否通过check_DHCP_state()函数改为STATE_DHCP_LEASED状态。
 
STATE_DHCP_LEASED状态代表网络信息,并意味着getIP_DHCP()函数成功执行。如果在等待接收‘DHCP_WAIT_TIME & MAX_DHCP_RETRY’的过程中没有从DHCP服务器获取网络信息,调用check_DHCP_state()函数将DHCP_Timeout改为1,。当DHCP_Timeout等于1时,getIP_DHCPS()函数在释放DHCP计时器后返回失败信息。
 
当无法从DHCP服务器获取网络信息时,评估板使用默认网络信息或先前获取的网络信息进行网络配置。
 
<表3-35>所示为定义的状态、超时和重新连接DHCP客户端。
在getIP_DHCP()函数中,‘DHCP_XID’是可变的,可用于设置DHCP信息的xid字段,如<图3.26:DHCP信息格式>所示。它的值必需是唯一的,而且在网络信息中规定的租约期限内它值不变。这里DHCP_XID与‘0x12345678’固定,但建议使用随机值。
 
当初始化W5100与DHCP服务器进行通信时,建议设置源IP地址为‘0.0.0.0.’你可以使用任何IP地址设置W5100的源IP地址,但是使用‘0.0.0.0’会更好,因为‘0.0.0.0’相当于IPv4的A类地址,它是一个无效的IP地址,实际上并不使用。因此,它不可能与其他网络产生冲突。
 
对于DHCP服务器发送的UDP广播封包,注意DHCP信息的MSB的Flag字段必须设置成1,参见<图3.19:DHCP信息格式>
<表3-36>是设置Flag字段的部分代码。
 
 
第三,从DHCP服务器获取的网络信息管理可以通过check_DHCP_state()函数执行,<图3.30>所示为在check_DHCP_state()中改变DHCP客户端状态的DHCP信息流。
 
check_DHCP_state()函数检测是否有从DHCP服务器传来DHCP信息。它接收和分析DHCP信息。根据DHCP信息的类型,如果DHCP信息可接收,他再DHCP客户端状态改变后进入下一个状态显示DHCP信息流,如<图3.30>所示。
 
check_DHCP_state()函数的每一个进程都对应一个DHCP客户端状态,如<图3.31>所示。如果我们简要看一下在check_DHCP_state()函数中的DHCP_STATE_LEASED状态,我们会发现从DHCP服务器接收的租约期限是有限的。因此,当经过租约期限的一半后,check_DHCP_state()函数就擦送DHCP_REQEUST消息给DHCP服务器,并在服务器返回IP地址后变成DHCP_STATE_REREQUEST状态。因为它持续给服务器发送DHCP_REQUEST消息,因此网络信息得以持续。
 
 
<图3‑32: parse_DHCPMSG()函数与check_DHCP_Timeout()函数>
 
parseDHCPMSG()函数负责接收DHCP服务器的DHCP信息,管理DHCP信息及保存网络信息。当执行check_DHCP_state()函数时,如果在DHCP_WAIT_TIME时间内没有接收到DHCP信息,或接收到的不是期望的DHCP信息,就重新发送DHCP信息给DHCP服务器。如果重新发送DHCP信息的重复次数达到MAX_DHCP_RETRY,check_DHCP_state()函数就在它初始化所有变量尝试连接DHCP服务器和DHCP客户后,发送DHCP_DISCOVER消息给DHCP服务器。
这是本文的第六部分内容,后面还剩下一些部分,我将会在下次帖子中发布,敬请期待噢!希望我的内容对大家有所帮助。
 
更多有關W5100的帖子請進入我們的官方網站www.iwiznet.cn 或官方部落http://blog.iwiznet.cn/ 查看更多。
 
 

 

没有评论:

发表评论