source: rtos_arduino/trunk/arduino_lib/libraries/Ethernet2/src/Dhcp.h@ 136

Last change on this file since 136 was 136, checked in by ertl-honda, 8 years ago

ライブラリとOS及びベーシックなサンプルの追加.

File size: 4.0 KB
Line 
1// DHCP Library v0.3 - April 25, 2009
2// Author: Jordan Terrell - blog.jordanterrell.com
3
4#ifndef Dhcp_h
5#define Dhcp_h
6
7#include "EthernetUdp2.h"
8
9/* DHCP state machine. */
10#define STATE_DHCP_START 0
11#define STATE_DHCP_DISCOVER 1
12#define STATE_DHCP_REQUEST 2
13#define STATE_DHCP_LEASED 3
14#define STATE_DHCP_REREQUEST 4
15#define STATE_DHCP_RELEASE 5
16
17#define DHCP_FLAGSBROADCAST 0x8000
18
19/* UDP port numbers for DHCP */
20#define DHCP_SERVER_PORT 67 /* from server to client */
21#define DHCP_CLIENT_PORT 68 /* from client to server */
22
23/* DHCP message OP code */
24#define DHCP_BOOTREQUEST 1
25#define DHCP_BOOTREPLY 2
26
27/* DHCP message type */
28#define DHCP_DISCOVER 1
29#define DHCP_OFFER 2
30#define DHCP_REQUEST 3
31#define DHCP_DECLINE 4
32#define DHCP_ACK 5
33#define DHCP_NAK 6
34#define DHCP_RELEASE 7
35#define DHCP_INFORM 8
36
37#define DHCP_HTYPE10MB 1
38#define DHCP_HTYPE100MB 2
39
40#define DHCP_HLENETHERNET 6
41#define DHCP_HOPS 0
42#define DHCP_SECS 0
43
44#define MAGIC_COOKIE 0x63825363
45#define MAX_DHCP_OPT 16
46
47#define HOST_NAME "WIZnet"
48#define DEFAULT_LEASE (900) //default lease time in seconds
49
50#define DHCP_CHECK_NONE (0)
51#define DHCP_CHECK_RENEW_FAIL (1)
52#define DHCP_CHECK_RENEW_OK (2)
53#define DHCP_CHECK_REBIND_FAIL (3)
54#define DHCP_CHECK_REBIND_OK (4)
55
56enum
57{
58 padOption = 0,
59 subnetMask = 1,
60 timerOffset = 2,
61 routersOnSubnet = 3,
62 /* timeServer = 4,
63 nameServer = 5,*/
64 dns = 6,
65 /*logServer = 7,
66 cookieServer = 8,
67 lprServer = 9,
68 impressServer = 10,
69 resourceLocationServer = 11,*/
70 hostName = 12,
71 /*bootFileSize = 13,
72 meritDumpFile = 14,*/
73 domainName = 15,
74 /*swapServer = 16,
75 rootPath = 17,
76 extentionsPath = 18,
77 IPforwarding = 19,
78 nonLocalSourceRouting = 20,
79 policyFilter = 21,
80 maxDgramReasmSize = 22,
81 defaultIPTTL = 23,
82 pathMTUagingTimeout = 24,
83 pathMTUplateauTable = 25,
84 ifMTU = 26,
85 allSubnetsLocal = 27,
86 broadcastAddr = 28,
87 performMaskDiscovery = 29,
88 maskSupplier = 30,
89 performRouterDiscovery = 31,
90 routerSolicitationAddr = 32,
91 staticRoute = 33,
92 trailerEncapsulation = 34,
93 arpCacheTimeout = 35,
94 ethernetEncapsulation = 36,
95 tcpDefaultTTL = 37,
96 tcpKeepaliveInterval = 38,
97 tcpKeepaliveGarbage = 39,
98 nisDomainName = 40,
99 nisServers = 41,
100 ntpServers = 42,
101 vendorSpecificInfo = 43,
102 netBIOSnameServer = 44,
103 netBIOSdgramDistServer = 45,
104 netBIOSnodeType = 46,
105 netBIOSscope = 47,
106 xFontServer = 48,
107 xDisplayManager = 49,*/
108 dhcpRequestedIPaddr = 50,
109 dhcpIPaddrLeaseTime = 51,
110 /*dhcpOptionOverload = 52,*/
111 dhcpMessageType = 53,
112 dhcpServerIdentifier = 54,
113 dhcpParamRequest = 55,
114 /*dhcpMsg = 56,
115 dhcpMaxMsgSize = 57,*/
116 dhcpT1value = 58,
117 dhcpT2value = 59,
118 /*dhcpClassIdentifier = 60,*/
119 dhcpClientIdentifier = 61,
120 endOption = 255
121};
122
123typedef struct _RIP_MSG_FIXED
124{
125 uint8_t op;
126 uint8_t htype;
127 uint8_t hlen;
128 uint8_t hops;
129 uint32_t xid;
130 uint16_t secs;
131 uint16_t flags;
132 uint8_t ciaddr[4];
133 uint8_t yiaddr[4];
134 uint8_t siaddr[4];
135 uint8_t giaddr[4];
136 uint8_t chaddr[6];
137}RIP_MSG_FIXED;
138
139class DhcpClass {
140
141private:
142 uint32_t _dhcpInitialTransactionId;
143 uint32_t _dhcpTransactionId;
144 uint8_t _dhcpMacAddr[6];
145 uint8_t _dhcpLocalIp[4];
146 uint8_t _dhcpSubnetMask[4];
147 uint8_t _dhcpGatewayIp[4];
148 uint8_t _dhcpDhcpServerIp[4];
149 uint8_t _dhcpDnsServerIp[4];
150 uint32_t _dhcpLeaseTime;
151 uint32_t _dhcpT1, _dhcpT2;
152 signed long _renewInSec;
153 signed long _rebindInSec;
154 signed long _lastCheck;
155 unsigned long _timeout;
156 unsigned long _responseTimeout;
157 unsigned long _secTimeout;
158 uint8_t _dhcp_state;
159 EthernetUDP _dhcpUdpSocket;
160 int request_DHCP_lease();
161 void reset_DHCP_lease();
162 void presend_DHCP();
163 void send_DHCP_MESSAGE(uint8_t, uint16_t);
164 void printByte(char *, uint8_t);
165
166 uint8_t parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId);
167public:
168 IPAddress getLocalIp();
169 IPAddress getSubnetMask();
170 IPAddress getGatewayIp();
171 IPAddress getDhcpServerIp();
172 IPAddress getDnsServerIp();
173
174 int beginWithDHCP(uint8_t *, unsigned long timeout = 60000, unsigned long responseTimeout = 5000);
175 int checkLease();
176};
177
178#endif
Note: See TracBrowser for help on using the repository browser.