WIZNet W5500 with additional enhancements
Fork of WIZnetInterface by
Socket/DHCPClient.h@35:fe3028eda085, 2017-10-10 (annotated)
- Committer:
- Helmut Tschemernjak
- Date:
- Tue Oct 10 20:56:13 2017 +0200
- Revision:
- 35:fe3028eda085
- Parent:
- 0:6f28332c466f
- Child:
- 36:0ba2e8d5274a
Added support for DHCP lease time and domain name
Enhance DHCP code to use opcode defines to make it easier to
understand and maintain.
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(); |
| Soohwan Kim |
0:6f28332c466f | 85 | int setup(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; |
| Helmut Tschemernjak | 35:fe3028eda085 | 95 | |
| Soohwan Kim |
0:6f28332c466f | 96 | private: |
| Soohwan Kim |
0:6f28332c466f | 97 | int discover(); |
| Soohwan Kim |
0:6f28332c466f | 98 | int request(); |
| Soohwan Kim |
0:6f28332c466f | 99 | int offer(uint8_t buf[], int size); |
| Soohwan Kim |
0:6f28332c466f | 100 | void add_buf(uint8_t* buf, int len); |
| Soohwan Kim |
0:6f28332c466f | 101 | void fill_buf(int len, uint8_t data = 0x00); |
| Soohwan Kim |
0:6f28332c466f | 102 | void add_buf(uint8_t c); |
| Soohwan Kim |
0:6f28332c466f | 103 | void add_option(uint8_t code, uint8_t* buf = NULL, int len = 0); |
| Soohwan Kim |
0:6f28332c466f | 104 | bool verify(uint8_t buf[], int len); |
| Soohwan Kim |
0:6f28332c466f | 105 | void callback(); |
| Soohwan Kim |
0:6f28332c466f | 106 | UDPSocket* m_udp; |
| Soohwan Kim |
0:6f28332c466f | 107 | Endpoint m_server; |
| Soohwan Kim |
0:6f28332c466f | 108 | uint8_t xid[4]; |
| Soohwan Kim |
0:6f28332c466f | 109 | bool exit_flag; |
| Soohwan Kim |
0:6f28332c466f | 110 | Timer m_interval; |
| Soohwan Kim |
0:6f28332c466f | 111 | int m_retry; |
| Soohwan Kim |
0:6f28332c466f | 112 | uint8_t m_buf[DHCP_MAX_PACKET_SIZE]; |
| Soohwan Kim |
0:6f28332c466f | 113 | int m_pos; |
| 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 |
Helmut Tschemernjak
