#ifndef DHCP_H
#define DHCP_H
typedef unsigned char INT8U;
typedef unsigned short int WORD; // 16-bit(全局)
typedef unsigned long LONG; // 32-bit(全局)
typedef enum _BOOL { FALSE = 0, TRUE } BOOL;
#define SUCCESS (1u)
#define FAIL (0u)
#define DHCP_TIMEOUT (TICK)(2L * TICK_SECOND)
//#define TRUE 1
//#define FALSE 0
#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 548 //标准DHCP报文字节大小
INT8U SizeOfOptionsUsed; //DHCP报文options字段使用的字节
INT8U SizeOfDHCPMesUsed; //DHCP报文全部字段使用字节长度
typedef enum _SM_DHCP
{
// SM_DHCP_INIT_FIRST_TIME,
SM_DHCP_INIT,
// SM_DHCP_RESET_WAIT,
SM_DHCP_BROADCAST,
SM_DHCP_DISCOVER,
SM_DHCP_REQUEST,
SM_DHCP_BIND,
SM_DHCP_BOUND,
SM_DHCP_DISABLED,
} SM_DHCP;
#if !defined(THIS_IS_DHCP)
extern SM_DHCP smDHCPState;
#endif
typedef union DHCP_STATE
{
struct
{
unsigned char bIsBound : 1;
unsigned char bOfferReceived : 1;
} bits;
INT8U Val;
} DHCP_STATE;
#if !defined(THIS_IS_DHCP)
extern DHCP_STATE DHCPState;
#endif
typedef struct _DHCP_MES
{
INT8U op ;
INT8U htype ;
INT8U hlen ;
INT8U hops ;
INT8U xid [4];
INT8U secs [2];
INT8U flags [2];
INT8U ciaddr [4];
INT8U yiaddr [4];
INT8U siaddr [4];
INT8U giaddr [4];
INT8U chaddr [16];
INT8U sname [64];
INT8U file [128];
INT8U options[312]; //长度不定
} DHCP_MES;
INT8U UDP_GetDHCPMes;
#define DHCPDisable() (smDHCPState = SM_DHCP_DISABLED)
#define DHCPIsBound() (DHCPState.bits.bIsBound)
void DHCP_Task(void);
void DHCP_Reset(void);
#endif