WIZNet W5500 with additional enhancements
Fork of WIZnetInterface by
Socket/DHCPClient.h@38:67e763cdde02, 2017-10-12 (annotated)
- 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?
User | Revision | Line number | New 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 |