155 lines
4.6 KiB
C
155 lines
4.6 KiB
C
#ifndef __DHCPS_H__
|
|
#define __DHCPS_H__
|
|
|
|
#include "uip.h"
|
|
|
|
typedef unsigned char u8_t;
|
|
typedef int32_t s32_t;
|
|
typedef uint32_t u32_t;
|
|
typedef int16_t s16_t;
|
|
typedef unsigned short u16_t;
|
|
|
|
#define DHCP_DBG_PRINTF //printf
|
|
#define DHCP_DBG_FUNC_IN() //printf("\n\n+In func:%s \n",__FUNCTION__)
|
|
#define DHCP_DBG_SEND(p,len) //do{printf("\n\n%s send:",__FUNCTION__);put_buf((p),(len));puts("\n");}while(0)
|
|
#define DHCP_DBG_RECV(p,len) //do{printf("\n\n%s recv:",__FUNCTION__);put_buf((p),(len));puts("\n");}while(0)
|
|
|
|
#define LEASE_TIME 86400U //sec
|
|
|
|
#define LEASE_TMR_INTERVAL 60*60*1000U //mill_sec
|
|
|
|
enum _dhcps_state {
|
|
DHCPS_STATE_OFFER,
|
|
DHCPS_STATE_DECLINE,
|
|
DHCPS_STATE_ACK,
|
|
DHCPS_STATE_NAK,
|
|
DHCPS_STATE_IDLE,
|
|
};
|
|
|
|
struct _dhcps_cli {
|
|
u8_t cli_mac[6];
|
|
uip_ipaddr_t ipaddr;
|
|
s32_t timeout;
|
|
struct _dhcps_cli *next;
|
|
};
|
|
|
|
#define ETH_NETIF 0
|
|
#define WIFI_NETIF 1
|
|
#define BT_NETIF 2
|
|
|
|
#define LEASE_TIME 86400U //sec
|
|
#define LEASE_TMR_INTERVAL 60*60*1000U //mill_sec
|
|
|
|
#define TEMP_BUF_SIZE 2*1024
|
|
#define DHCP_MAGIC_COOKIE 0x63825363UL
|
|
#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */
|
|
#define DHCP_HTYPE_ETH 1
|
|
#define DHCP_OPTION_END 255
|
|
#define DHCP_OPTION_ROUTER 3
|
|
#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */
|
|
#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */
|
|
#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */
|
|
#define DHCP_OPTION_DNS_SERVER 6
|
|
#define DHCP_BOOTREPLY 2
|
|
#define DHCP_OFFER 2
|
|
#define DHCP_NAK 6
|
|
#define DHCP_CLIENT_PORT 68 //dhcp客户端端口
|
|
#define DHCP_SERVER_PORT 67 //dhcp服务端端口
|
|
#define DHCP_ACK 5
|
|
#define DHCP_DECLINE 4
|
|
#define DHCP_DISCOVER 1
|
|
#define DHCP_REQUEST 3
|
|
#define DHCP_RELEASE 7
|
|
#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */
|
|
#define mem_malloc malloc
|
|
#define mem_free free
|
|
#define LWIP_UNUSED_ARG(x) (void)x
|
|
|
|
struct lan_setting {
|
|
|
|
u8 WIRELESS_IP_ADDR0;//无线IP地址
|
|
u8 WIRELESS_IP_ADDR1;
|
|
u8 WIRELESS_IP_ADDR2;
|
|
u8 WIRELESS_IP_ADDR3;
|
|
|
|
u8 WIRELESS_NETMASK0;//无线掩码
|
|
u8 WIRELESS_NETMASK1;
|
|
u8 WIRELESS_NETMASK2;
|
|
u8 WIRELESS_NETMASK3;
|
|
|
|
u8 WIRELESS_GATEWAY0;//无线网关
|
|
u8 WIRELESS_GATEWAY1;
|
|
u8 WIRELESS_GATEWAY2;
|
|
u8 WIRELESS_GATEWAY3;
|
|
|
|
u8 SERVER_IPADDR1;//DHCP服务器地址
|
|
u8 SERVER_IPADDR2;
|
|
u8 SERVER_IPADDR3;
|
|
u8 SERVER_IPADDR4;
|
|
|
|
u8 CLIENT_IPADDR1;//起始IP地址
|
|
u8 CLIENT_IPADDR2;
|
|
u8 CLIENT_IPADDR3;
|
|
u8 CLIENT_IPADDR4;
|
|
|
|
u8 SUB_NET_MASK1;//子网掩码
|
|
u8 SUB_NET_MASK2;
|
|
u8 SUB_NET_MASK3;
|
|
u8 SUB_NET_MASK4;
|
|
};
|
|
|
|
#define ip4_addr_get_byte(ipaddr, idx) ((u8_t *)ipaddr)[idx]
|
|
|
|
#define ip4_addr1(ipaddr) ip4_addr_get_byte(ipaddr, 0)
|
|
#define ip4_addr2(ipaddr) ip4_addr_get_byte(ipaddr, 1)
|
|
#define ip4_addr3(ipaddr) ip4_addr_get_byte(ipaddr, 2)
|
|
#define ip4_addr4(ipaddr) ip4_addr_get_byte(ipaddr, 3)
|
|
|
|
struct ip4_addr_packed {
|
|
u32_t addr;
|
|
};
|
|
|
|
typedef struct ip4_addr_packed ip4_addr_p_t;
|
|
|
|
#define DHCP_CHADDR_LEN 16U
|
|
#define DHCP_SNAME_LEN 64U
|
|
#define DHCP_FILE_LEN 128U
|
|
|
|
#define PACK_STRUCT_FIELD(x) x
|
|
#define PACK_STRUCT_FLD_8(x) PACK_STRUCT_FIELD(x)
|
|
#define PACK_STRUCT_FLD_S(x) PACK_STRUCT_FIELD(x)
|
|
|
|
#define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN
|
|
struct dhcp_msg {
|
|
PACK_STRUCT_FLD_8(u8_t op);
|
|
PACK_STRUCT_FLD_8(u8_t htype);
|
|
PACK_STRUCT_FLD_8(u8_t hlen);
|
|
PACK_STRUCT_FLD_8(u8_t hops);
|
|
PACK_STRUCT_FIELD(u32_t xid);
|
|
PACK_STRUCT_FIELD(u16_t secs);
|
|
PACK_STRUCT_FIELD(u16_t flags);
|
|
PACK_STRUCT_FLD_S(ip4_addr_p_t ciaddr);
|
|
PACK_STRUCT_FLD_S(ip4_addr_p_t yiaddr);
|
|
PACK_STRUCT_FLD_S(ip4_addr_p_t siaddr);
|
|
PACK_STRUCT_FLD_S(ip4_addr_p_t giaddr);
|
|
PACK_STRUCT_FLD_8(u8_t chaddr[DHCP_CHADDR_LEN]);
|
|
PACK_STRUCT_FLD_8(u8_t sname[DHCP_SNAME_LEN]);
|
|
PACK_STRUCT_FLD_8(u8_t file[DHCP_FILE_LEN]);
|
|
PACK_STRUCT_FIELD(u32_t cookie);
|
|
PACK_STRUCT_FLD_8(u8_t options[68]);
|
|
/* PACK_STRUCT_FLD_8(u8_t options[312]); */
|
|
};
|
|
|
|
#define PP_HTONL(x) ((((x) & (u32_t)0x000000ffUL) << 24) | \
|
|
(((x) & (u32_t)0x0000ff00UL) << 8) | \
|
|
(((x) & (u32_t)0x00ff0000UL) >> 8) | \
|
|
(((x) & (u32_t)0xff000000UL) >> 24))
|
|
|
|
void dhcps_init(u8 netif);
|
|
void dhcps_uninit(void);
|
|
void display_IPAddress(void);
|
|
void dhcps_appcall(void);
|
|
int net_set_lan_info(struct lan_setting *__lan_setting_info);
|
|
|
|
#endif
|