WIZNet W5500 with additional enhancements
Fork of WIZnetInterface by
Socket/DHCPClient.h
- Committer:
- Helmut Tschemernjak
- Date:
- 2017-10-12
- Revision:
- 38:67e763cdde02
- Parent:
- 36:0ba2e8d5274a
File content as of revision 38:67e763cdde02:
// DHCPClient.h 2013/4/10
#ifndef DHCPCLIENT_H
#define DHCPCLIENT_H
#include "eth_arch.h"
#include "UDPSocket.h"
#define DHCP_OFFSET_OP 0
#define DHCP_OFFSET_XID 4
#define DHCP_OFFSET_YIADDR 16
#define DHCP_OFFSET_SIADDR 20
#define DHCP_OFFSET_OPTIONS 240
#define DHCP_MAX_PACKET_SIZE 600
#define DHCP_SERVER_PORT 67
#define DHCP_CLIENT_PORT 68
// DHCP Message Type
#define DHCPDISCOVER 1
#define DHCPOFFER 2
#define DHCPREQUEST 3
#define DHCPDECLINE 4
#define DHCPACK 5
#define DHCPNAK 6
#define DHCPRELEASE 7
#define DHCPINFORM 8
#define DHCP_MAGIC_COOKIE 0x63825363
#define OPT_PAD 0
#define OPT_SUBNET_MASK 1
#define OPT_TIME_OFFSET 2
#define OPT_ROUTER 3
#define OPT_TIME_SERVER 4
#define OPT_IEN116_NAME_SERVER 5
#define OPT_DNS 6
#define OPT_LOG_SERVER 7
#define OPT_COOKIE_SERVER 8
#define OPT_LPR_SERVER 9
#define OPT_IMPRESS_SERVER 10
#define OPT_RESOURCE_LOC_SERVER 11
#define OPT_HOSTNAME 12
#define OPT_BOOTFILE_SIZE 13
#define OPT_MERIT_DUMP 14
#define OPT_DOMAIN_NAME 15
#define OPT_SWAP_SERVER 16
#define OPT_ROOT_PATH 17
#define OPT_EXTENSIONS_PATH 18
#define OPT_IP_FORWARDING 19
#define OPT_NONLOCAL_SOURCE_ROUTING 20
#define OPT_POLICY_FILTER 21
#define OPT_MAX_DATAGRAM_REASS 22
#define OPT_DEFAULT_IP_TTL 23
#define OPT_PATH_MTU_AGING_TIMEOUT 24
#define OPT_PATH_MTU_PLATEAU_TABLE 25
#define OPT_INTERFACE_MTU 26
#define OPT_ALL_SUBNETS_ARE_LOCAL 27
#define OPT_BROADCAST_ADDR 28
#define OPT_STATIC_ROUTE 33
#define OPT_VENDOR 43
#define OPT_NETBIOS_NAME_SERVER 44
#define OPT_NETBIOS_DATA_DIST 45
#define OPT_NETBIOS_NODE_TYPE 46
#define OPT_NETBIOS_SCOPE 47
#define OPT_IP_ADDR_REQ 50
#define OPT_ADDR_LEASE_TIME 51
#define OPT_DHCP_MESSAGE 53
#define OPT_SERVER_IDENT 54
#define OPT_PARAMETER_REQ 55
#define OPT_RENEWAL_TIME 58
#define OPT_REBINDING_TIME 59
#define OPT_CLIENT_IDENT 61
#define OPT_TFTP_SERVER_NAME 66
#define OPT_BOOTFILE_NAME 67
#define OPT_LDAP_URL 95 /* from draft RFC */
#define OPT_DOMAIN_SEARCH 119 /* from draft RFC 3397 */
/* site specific options */
#define SITE_HD 252
#define SITE_BF 253
#define SITE_SA 254
#define OPT_END 255
class DHCPClient {
public:
DHCPClient();
~DHCPClient();
int setup(const char *hostnane, int timeout_ms = 15*1000);
uint8_t chaddr[6]; // MAC
uint8_t yiaddr[4]; // IP
uint8_t siaddr[4]; // DHCP server
uint8_t dnsaddr[4]; // DNS
uint8_t gateway[4];
uint8_t netmask[4];
uint8_t timesrv[4];
uint8_t leaseTime[4];
char *domainName;
private:
int discover();
int request();
int offer(uint8_t buf[], int size);
void add_buf(uint8_t* buf, int len);
void fill_buf(int len, uint8_t data = 0x00);
void add_buf(uint8_t c);
void add_option(uint8_t code, uint8_t* buf = NULL, int len = 0);
bool verify(uint8_t buf[], int len);
void callback();
UDPSocket* m_udp;
Endpoint m_server;
uint8_t xid[4];
bool exit_flag;
Timer m_interval;
int m_retry;
uint8_t m_buf[DHCP_MAX_PACKET_SIZE];
int m_pos;
const char *_hostname;
WIZnet_Chip* eth;
};
#endif //DHCPCLIENT_H
Helmut Tschemernjak
