DHCP客户端实现(初稿)

 
 include "DHCP.h"

 #define _DHCP_C
 #define THIS_IS_DHCP

 #define DHCP_TIMEOUT                    (TICK)(2L * TICK_SECOND)


#define DHCP_CLIENT_PORT                (68u)
#define DHCP_SERVER_PORT                (67u)

#define BOOT_REQUEST                    (1u)
#define BOOT_REPLY                      (2u)
#define HW_TYPE                         (1u)
#define LEN_OF_HW_TYPE                  (6u)

#define DHCP_MESSAGE_TYPE               (53u)
#define DHCP_MESSAGE_TYPE_LEN           (1u)

#define DHCP_UNKNOWN_MESSAGE            (0u)

#define DHCP_DISCOVER_MESSAGE           (1u)
#define DHCP_OFFER_MESSAGE              (2u)
#define DHCP_REQUEST_MESSAGE            (3u)
#define DHCP_DECLINE_MESSAGE            (4u)
#define DHCP_ACK_MESSAGE                (5u)
#define DHCP_NAK_MESSAGE                (6u)
#define DHCP_RELEASE_MESSAGE            (7u)

#define DHCP_SERVER_IDENTIFIER          (54u)
#define DHCP_SERVER_IDENTIFIER_LEN      (4u)

#define DHCP_PARAM_REQUEST_LIST         (55u)
#define DHCP_PARAM_REQUEST_LIST_LEN     (2u)
#define DHCP_PARAM_REQUEST_IP_ADDRESS       (50u)
#define DHCP_PARAM_REQUEST_IP_ADDRESS_LEN   (4u)
#define DHCP_SUBNET_MASK                (1u)
#define DHCP_ROUTER                     (3u)
#define DHCP_IP_LEASE_TIME              (51u)
#define DHCP_END_OPTION                 (255u)

#define HALF_HOUR                       (WORD)((WORD)60 * (WORD)30)

#define INVALID_UDP_SOCKET      (0xff)
#define INVALID_UDP_PORT        (0L)

#define SIZE_OF_DHCPMES   (548u)   //标准DHCP报文字节大小

DHCP_MES DHCPMes;
APP_CONFIG AppConfig;

SM_DHCP  smDHCPState = SM_DHCP_INIT;
static UDP_SOCKET DHCPSocket = INVALID_UDP_SOCKET;


DHCP_STATE DHCPState = { 0x00 };

static IP_ADDR DHCPServerID;
//static DWORD_VAL DHCPLeaseTime;

static IP_ADDR tempIPAddress;
static IP_ADDR tempGateway;
static IP_ADDR tempMask;

INT8U SizeOfOptionsUsed;    //DHCP报文options字段使用的字节
INT8U SizeOfDHCPMesUsed;	//DHCP报文全部字段使用字节长度


static INT8U _DHCPReceive(void);
static void _DHCPSend(INT8U messageType);

 /*
*********************************************************************************************************
*                                            DHCPReset
*
* Description: 对DHCP进行重置,设置相应的参数
*												
* Arguments  : void
*									
* Returns    : void 
*
* Notes		 : 当服务器发回NAC报文时调用此函数			
*
**********************************************************************************************************
*/
void DHCPReset(void)
{
    // Do not reset DHCP if it was previously disabled.
    if ( smDHCPState == SM_DHCP_DISABLED )
        return;

    if ( DHCPSocket != INVALID_UDP_SOCKET )
        UDPClose(DHCPSocket);				 //???????????关闭套接字
    DHCPSocket = INVALID_UDP_SOCKET;

    smDHCPState = SM_DHCP_INIT;
//    DHCPBindCount = 0;

    DHCPState.bits.bIsBound = FALSE;
}

 /*
*********************************************************************************************************
*                                            DHCP_MesInit
*
* Description: DHCP报文初始化函数:对除了options字段外其他部分进行初始化,供DHCP_Send函数进行调用
*												
* Arguments  : void
*									
* Returns    : void 
*
* Notes		 : 报文部分字段赋值为固定值			
*
**********************************************************************************************************
*/
viod DHCP_MesInit(viod)
{
  INT8U i;

  DHCPMes.op=BOOT_REQUEST;
  DHCPMes.htype=HW_TYPE;
  DHCPMes.hlen=LEN_OF_HW_TYP
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值