mbed OS5
Fork of UIPEthernet by
Diff: Dhcp.h
- Revision:
- 0:5350a66d5279
- Child:
- 8:4acb22344932
diff -r 000000000000 -r 5350a66d5279 Dhcp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Dhcp.h Mon Sep 15 11:12:30 2014 +0000 @@ -0,0 +1,189 @@ +// DHCP Library v0.3 - April 25, 2009 +// Author: Jordan Terrell - blog.jordanterrell.com +#ifndef Dhcp_h + #define Dhcp_h + + #include "UIPUdp.h" + +/* DHCP state machine. */ + + #define STATE_DHCP_START 0 + #define STATE_DHCP_DISCOVER 1 + #define STATE_DHCP_REQUEST 2 + #define STATE_DHCP_LEASED 3 + #define STATE_DHCP_REREQUEST 4 + #define STATE_DHCP_RELEASE 5 + + #define DHCP_FLAGSBROADCAST 0x8000 + +/* UDP port numbers for DHCP */ + + #define DHCP_SERVER_PORT 67 /* from server to client */ + + #define DHCP_CLIENT_PORT 68 /* from client to server */ + +/* DHCP message OP code */ + + #define DHCP_BOOTREQUEST 1 + #define DHCP_BOOTREPLY 2 + +/* DHCP message type */ + + #define DHCP_DISCOVER 1 + #define DHCP_OFFER 2 + #define DHCP_REQUEST 3 + #define DHCP_DECLINE 4 + #define DHCP_ACK 5 + #define DHCP_NAK 6 + #define DHCP_RELEASE 7 + #define DHCP_INFORM 8 + + #define DHCP_HTYPE10MB 1 + #define DHCP_HTYPE100MB 2 + + #define DHCP_HLENETHERNET 6 + #define DHCP_HOPS 0 + #define DHCP_SECS 0 + + #define MAGIC_COOKIE 0x63825363 + #define MAX_DHCP_OPT 16 + + #define HOST_NAME "ENC28J" + #define DEFAULT_LEASE (900) //default lease time in seconds + + #define DHCP_CHECK_NONE (0) + #define DHCP_CHECK_RENEW_FAIL (1) + #define DHCP_CHECK_RENEW_OK (2) + #define DHCP_CHECK_REBIND_FAIL (3) + #define DHCP_CHECK_REBIND_OK (4) + +enum +{ + padOption = 0, + subnetMask = 1, + timerOffset = 2, + routersOnSubnet = 3, + + /* timeServer = 4, + nameServer = 5,*/ + dns = 6, + + /*logServer = 7, + cookieServer = 8, + lprServer = 9, + impressServer = 10, + resourceLocationServer = 11,*/ + hostName = 12, + + /*bootFileSize = 13, + meritDumpFile = 14,*/ + domainName = 15, + + /*swapServer = 16, + rootPath = 17, + extentionsPath = 18, + IPforwarding = 19, + nonLocalSourceRouting = 20, + policyFilter = 21, + maxDgramReasmSize = 22, + defaultIPTTL = 23, + pathMTUagingTimeout = 24, + pathMTUplateauTable = 25, + ifMTU = 26, + allSubnetsLocal = 27, + broadcastAddr = 28, + performMaskDiscovery = 29, + maskSupplier = 30, + performRouterDiscovery = 31, + routerSolicitationAddr = 32, + staticRoute = 33, + trailerEncapsulation = 34, + arpCacheTimeout = 35, + ethernetEncapsulation = 36, + tcpDefaultTTL = 37, + tcpKeepaliveInterval = 38, + tcpKeepaliveGarbage = 39, + nisDomainName = 40, + nisServers = 41, + ntpServers = 42, + vendorSpecificInfo = 43, + netBIOSnameServer = 44, + netBIOSdgramDistServer = 45, + netBIOSnodeType = 46, + netBIOSscope = 47, + xFontServer = 48, + xDisplayManager = 49,*/ + dhcpRequestedIPaddr = 50, + dhcpIPaddrLeaseTime = 51, + + /*dhcpOptionOverload = 52,*/ + dhcpMessageType = 53, + dhcpServerIdentifier= 54, + dhcpParamRequest = 55, + + /*dhcpMsg = 56, + dhcpMaxMsgSize = 57,*/ + dhcpT1value = 58, + dhcpT2value = 59, + + /*dhcpClassIdentifier = 60,*/ + dhcpClientIdentifier= 61, + endOption = 255 +}; + +typedef struct _RIP_MSG_FIXED +{ + uint8_t op; + uint8_t htype; + uint8_t hlen; + uint8_t hops; + uint32_t xid; + uint16_t secs; + uint16_t flags; + uint8_t ciaddr[4]; + uint8_t yiaddr[4]; + uint8_t siaddr[4]; + uint8_t giaddr[4]; + uint8_t chaddr[6]; +} RIP_MSG_FIXED; + +class DhcpClass +{ +private: + uint32_t _dhcpInitialTransactionId; + uint32_t _dhcpTransactionId; + uint8_t _dhcpMacAddr[6]; + uint8_t _dhcpLocalIp[4]; + uint8_t _dhcpSubnetMask[4]; + uint8_t _dhcpGatewayIp[4]; + uint8_t _dhcpDhcpServerIp[4]; + uint8_t _dhcpDnsServerIp[4]; + uint32_t _dhcpLeaseTime; + uint32_t _dhcpT1, _dhcpT2; + signed long _renewInSec; + signed long _rebindInSec; + signed long _lastCheck; + unsigned long _timeout; + unsigned long _responseTimeout; + unsigned long _secTimeout; + uint8_t _dhcp_state; + UIPUDP _dhcpUdpSocket; + + int request_DHCP_lease(void); + void reset_DHCP_lease(void); + void presend_DHCP(void); + void send_DHCP_MESSAGE(uint8_t, uint16_t); + void printByte(char* , uint8_t); + + uint8_t parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId); +public: + IPAddress getLocalIp(void); + IPAddress getSubnetMask(void); + IPAddress getGatewayIp(void); + IPAddress getDhcpServerIp(void); + IPAddress getDnsServerIp(void); + + int beginWithDHCP(uint8_t* , unsigned long timeout = 60000, unsigned long responseTimeout = 4000); + int checkLease(void); +}; +#endif