WIZNet W5500 with additional enhancements

Fork of WIZnetInterface by WIZnet

Committer:
Helmut Tschemernjak
Date:
Thu Oct 12 12:19:11 2017 +0200
Revision:
38:67e763cdde02
Parent:
36:0ba2e8d5274a
Enable Interrupts for all sockets by default.
Added a Soft-Reset in the reset() functions which works perfect
when no Reset line is connected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Soohwan Kim 0:6f28332c466f 1 // DHCPClient.h 2013/4/10
Soohwan Kim 0:6f28332c466f 2 #ifndef DHCPCLIENT_H
Soohwan Kim 0:6f28332c466f 3 #define DHCPCLIENT_H
Soohwan Kim 0:6f28332c466f 4 #include "eth_arch.h"
Soohwan Kim 0:6f28332c466f 5 #include "UDPSocket.h"
Soohwan Kim 0:6f28332c466f 6
Soohwan Kim 0:6f28332c466f 7 #define DHCP_OFFSET_OP 0
Soohwan Kim 0:6f28332c466f 8 #define DHCP_OFFSET_XID 4
Soohwan Kim 0:6f28332c466f 9 #define DHCP_OFFSET_YIADDR 16
Soohwan Kim 0:6f28332c466f 10 #define DHCP_OFFSET_SIADDR 20
Soohwan Kim 0:6f28332c466f 11 #define DHCP_OFFSET_OPTIONS 240
Soohwan Kim 0:6f28332c466f 12 #define DHCP_MAX_PACKET_SIZE 600
Soohwan Kim 0:6f28332c466f 13
Helmut Tschemernjak 35:fe3028eda085 14 #define DHCP_SERVER_PORT 67
Helmut Tschemernjak 35:fe3028eda085 15 #define DHCP_CLIENT_PORT 68
Helmut Tschemernjak 35:fe3028eda085 16
Soohwan Kim 0:6f28332c466f 17 // DHCP Message Type
Soohwan Kim 0:6f28332c466f 18 #define DHCPDISCOVER 1
Soohwan Kim 0:6f28332c466f 19 #define DHCPOFFER 2
Soohwan Kim 0:6f28332c466f 20 #define DHCPREQUEST 3
Soohwan Kim 0:6f28332c466f 21 #define DHCPDECLINE 4
Soohwan Kim 0:6f28332c466f 22 #define DHCPACK 5
Soohwan Kim 0:6f28332c466f 23 #define DHCPNAK 6
Soohwan Kim 0:6f28332c466f 24 #define DHCPRELEASE 7
Soohwan Kim 0:6f28332c466f 25 #define DHCPINFORM 8
Helmut Tschemernjak 35:fe3028eda085 26 #define DHCP_MAGIC_COOKIE 0x63825363
Helmut Tschemernjak 35:fe3028eda085 27 #define OPT_PAD 0
Helmut Tschemernjak 35:fe3028eda085 28 #define OPT_SUBNET_MASK 1
Helmut Tschemernjak 35:fe3028eda085 29 #define OPT_TIME_OFFSET 2
Helmut Tschemernjak 35:fe3028eda085 30 #define OPT_ROUTER 3
Helmut Tschemernjak 35:fe3028eda085 31 #define OPT_TIME_SERVER 4
Helmut Tschemernjak 35:fe3028eda085 32 #define OPT_IEN116_NAME_SERVER 5
Helmut Tschemernjak 35:fe3028eda085 33 #define OPT_DNS 6
Helmut Tschemernjak 35:fe3028eda085 34 #define OPT_LOG_SERVER 7
Helmut Tschemernjak 35:fe3028eda085 35 #define OPT_COOKIE_SERVER 8
Helmut Tschemernjak 35:fe3028eda085 36 #define OPT_LPR_SERVER 9
Helmut Tschemernjak 35:fe3028eda085 37 #define OPT_IMPRESS_SERVER 10
Helmut Tschemernjak 35:fe3028eda085 38 #define OPT_RESOURCE_LOC_SERVER 11
Helmut Tschemernjak 35:fe3028eda085 39 #define OPT_HOSTNAME 12
Helmut Tschemernjak 35:fe3028eda085 40 #define OPT_BOOTFILE_SIZE 13
Helmut Tschemernjak 35:fe3028eda085 41 #define OPT_MERIT_DUMP 14
Helmut Tschemernjak 35:fe3028eda085 42 #define OPT_DOMAIN_NAME 15
Helmut Tschemernjak 35:fe3028eda085 43 #define OPT_SWAP_SERVER 16
Helmut Tschemernjak 35:fe3028eda085 44 #define OPT_ROOT_PATH 17
Helmut Tschemernjak 35:fe3028eda085 45 #define OPT_EXTENSIONS_PATH 18
Helmut Tschemernjak 35:fe3028eda085 46 #define OPT_IP_FORWARDING 19
Helmut Tschemernjak 35:fe3028eda085 47 #define OPT_NONLOCAL_SOURCE_ROUTING 20
Helmut Tschemernjak 35:fe3028eda085 48 #define OPT_POLICY_FILTER 21
Helmut Tschemernjak 35:fe3028eda085 49 #define OPT_MAX_DATAGRAM_REASS 22
Helmut Tschemernjak 35:fe3028eda085 50 #define OPT_DEFAULT_IP_TTL 23
Helmut Tschemernjak 35:fe3028eda085 51 #define OPT_PATH_MTU_AGING_TIMEOUT 24
Helmut Tschemernjak 35:fe3028eda085 52 #define OPT_PATH_MTU_PLATEAU_TABLE 25
Helmut Tschemernjak 35:fe3028eda085 53 #define OPT_INTERFACE_MTU 26
Helmut Tschemernjak 35:fe3028eda085 54 #define OPT_ALL_SUBNETS_ARE_LOCAL 27
Helmut Tschemernjak 35:fe3028eda085 55 #define OPT_BROADCAST_ADDR 28
Helmut Tschemernjak 35:fe3028eda085 56 #define OPT_STATIC_ROUTE 33
Helmut Tschemernjak 35:fe3028eda085 57 #define OPT_VENDOR 43
Helmut Tschemernjak 35:fe3028eda085 58 #define OPT_NETBIOS_NAME_SERVER 44
Helmut Tschemernjak 35:fe3028eda085 59 #define OPT_NETBIOS_DATA_DIST 45
Helmut Tschemernjak 35:fe3028eda085 60 #define OPT_NETBIOS_NODE_TYPE 46
Helmut Tschemernjak 35:fe3028eda085 61 #define OPT_NETBIOS_SCOPE 47
Helmut Tschemernjak 35:fe3028eda085 62 #define OPT_IP_ADDR_REQ 50
Helmut Tschemernjak 35:fe3028eda085 63 #define OPT_ADDR_LEASE_TIME 51
Helmut Tschemernjak 35:fe3028eda085 64 #define OPT_DHCP_MESSAGE 53
Helmut Tschemernjak 35:fe3028eda085 65 #define OPT_SERVER_IDENT 54
Helmut Tschemernjak 35:fe3028eda085 66 #define OPT_PARAMETER_REQ 55
Helmut Tschemernjak 35:fe3028eda085 67 #define OPT_RENEWAL_TIME 58
Helmut Tschemernjak 35:fe3028eda085 68 #define OPT_REBINDING_TIME 59
Helmut Tschemernjak 35:fe3028eda085 69 #define OPT_CLIENT_IDENT 61
Helmut Tschemernjak 35:fe3028eda085 70 #define OPT_TFTP_SERVER_NAME 66
Helmut Tschemernjak 35:fe3028eda085 71 #define OPT_BOOTFILE_NAME 67
Helmut Tschemernjak 35:fe3028eda085 72 #define OPT_LDAP_URL 95 /* from draft RFC */
Helmut Tschemernjak 35:fe3028eda085 73 #define OPT_DOMAIN_SEARCH 119 /* from draft RFC 3397 */
Helmut Tschemernjak 35:fe3028eda085 74
Helmut Tschemernjak 35:fe3028eda085 75 /* site specific options */
Helmut Tschemernjak 35:fe3028eda085 76 #define SITE_HD 252
Helmut Tschemernjak 35:fe3028eda085 77 #define SITE_BF 253
Helmut Tschemernjak 35:fe3028eda085 78 #define SITE_SA 254
Helmut Tschemernjak 35:fe3028eda085 79 #define OPT_END 255
Soohwan Kim 0:6f28332c466f 80
Soohwan Kim 0:6f28332c466f 81 class DHCPClient {
Soohwan Kim 0:6f28332c466f 82 public:
Soohwan Kim 0:6f28332c466f 83 DHCPClient();
Helmut Tschemernjak 35:fe3028eda085 84 ~DHCPClient();
Helmut Tschemernjak 36:0ba2e8d5274a 85 int setup(const char *hostnane, int timeout_ms = 15*1000);
Soohwan Kim 0:6f28332c466f 86 uint8_t chaddr[6]; // MAC
Soohwan Kim 0:6f28332c466f 87 uint8_t yiaddr[4]; // IP
Helmut Tschemernjak 35:fe3028eda085 88 uint8_t siaddr[4]; // DHCP server
Soohwan Kim 0:6f28332c466f 89 uint8_t dnsaddr[4]; // DNS
Soohwan Kim 0:6f28332c466f 90 uint8_t gateway[4];
Soohwan Kim 0:6f28332c466f 91 uint8_t netmask[4];
Helmut Tschemernjak 35:fe3028eda085 92 uint8_t timesrv[4];
Helmut Tschemernjak 35:fe3028eda085 93 uint8_t leaseTime[4];
Helmut Tschemernjak 35:fe3028eda085 94 char *domainName;
Soohwan Kim 0:6f28332c466f 95 private:
Soohwan Kim 0:6f28332c466f 96 int discover();
Soohwan Kim 0:6f28332c466f 97 int request();
Soohwan Kim 0:6f28332c466f 98 int offer(uint8_t buf[], int size);
Soohwan Kim 0:6f28332c466f 99 void add_buf(uint8_t* buf, int len);
Soohwan Kim 0:6f28332c466f 100 void fill_buf(int len, uint8_t data = 0x00);
Soohwan Kim 0:6f28332c466f 101 void add_buf(uint8_t c);
Soohwan Kim 0:6f28332c466f 102 void add_option(uint8_t code, uint8_t* buf = NULL, int len = 0);
Soohwan Kim 0:6f28332c466f 103 bool verify(uint8_t buf[], int len);
Soohwan Kim 0:6f28332c466f 104 void callback();
Soohwan Kim 0:6f28332c466f 105 UDPSocket* m_udp;
Soohwan Kim 0:6f28332c466f 106 Endpoint m_server;
Soohwan Kim 0:6f28332c466f 107 uint8_t xid[4];
Soohwan Kim 0:6f28332c466f 108 bool exit_flag;
Soohwan Kim 0:6f28332c466f 109 Timer m_interval;
Soohwan Kim 0:6f28332c466f 110 int m_retry;
Soohwan Kim 0:6f28332c466f 111 uint8_t m_buf[DHCP_MAX_PACKET_SIZE];
Soohwan Kim 0:6f28332c466f 112 int m_pos;
Helmut Tschemernjak 36:0ba2e8d5274a 113 const char *_hostname;
Soohwan Kim 0:6f28332c466f 114 WIZnet_Chip* eth;
Soohwan Kim 0:6f28332c466f 115 };
Soohwan Kim 0:6f28332c466f 116 #endif //DHCPCLIENT_H
Soohwan Kim 0:6f28332c466f 117