diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2015-09-30 21:49:13 +1000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2015-09-30 21:49:13 +1000 |
commit | b0c64393c71f42055a05765fa6ce2c4ae45d0b87 (patch) | |
tree | 9ab87af42eee531b0c6b6049ae5593f4cbac3fe4 | |
parent | a9f34b580331b0c454200967a1be9ec86c70f9e6 (diff) | |
parent | 55adec1f4f9b600ade83c9269632cdc4b6a8b9e1 (diff) | |
download | lufa-b0c64393c71f42055a05765fa6ce2c4ae45d0b87.tar.gz lufa-b0c64393c71f42055a05765fa6ce2c4ae45d0b87.tar.bz2 lufa-b0c64393c71f42055a05765fa6ce2c4ae45d0b87.zip |
Merge pull request #62 from the2masters/RNDIS-DHCP
Add DHCP Lease Time to RNDIS Demo (thanks to Stefan Hellermann).
-rw-r--r-- | Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c | 12 | ||||
-rw-r--r-- | Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h | 3 | ||||
-rw-r--r-- | Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c | 12 | ||||
-rw-r--r-- | Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h | 3 |
4 files changed, 26 insertions, 4 deletions
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c index 7b191b11c..816e33c37 100644 --- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c +++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c @@ -95,12 +95,20 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, : DHCP_MESSAGETYPE_ACK; *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK; - *(DHCPOptionsOUTStart++) = 4; + *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); *(DHCPOptionsOUTStart++) = 0xFF; *(DHCPOptionsOUTStart++) = 0xFF; *(DHCPOptionsOUTStart++) = 0xFF; *(DHCPOptionsOUTStart++) = 0x00; + *(DHCPOptionsOUTStart++) = DHCP_OPTION_LEASETIME; + *(DHCPOptionsOUTStart++) = sizeof(uint32_t); + /* Lease Time 86400s (ONE_DAY) */ + *(DHCPOptionsOUTStart++) = 0x00; + *(DHCPOptionsOUTStart++) = 0x01; + *(DHCPOptionsOUTStart++) = 0x51; + *(DHCPOptionsOUTStart++) = 0x80; + *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER; *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t)); @@ -108,7 +116,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, *(DHCPOptionsOUTStart++) = DHCP_OPTION_END; - return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t)); + return (sizeof(DHCP_Header_t) + 18 + sizeof(IP_Address_t)); } } diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h index 325fe0353..e2ba4fc65 100644 --- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h +++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h @@ -60,6 +60,9 @@ /** DHCP option list entry header, indicating that a subnet mask will follow. */ #define DHCP_OPTION_SUBNETMASK 1 + /** DHCP option list entry header, indicating that the Lease Time will follow. */ + #define DHCP_OPTION_LEASETIME 51 + /** DHCP option list entry header, indicating that the DHCP message type constant will follow. */ #define DHCP_OPTION_MESSAGETYPE 53 diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c index fc501c308..0e98977df 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c @@ -95,12 +95,20 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, : DHCP_MESSAGETYPE_ACK; *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK; - *(DHCPOptionsOUTStart++) = 4; + *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); *(DHCPOptionsOUTStart++) = 0xFF; *(DHCPOptionsOUTStart++) = 0xFF; *(DHCPOptionsOUTStart++) = 0xFF; *(DHCPOptionsOUTStart++) = 0x00; + *(DHCPOptionsOUTStart++) = DHCP_OPTION_LEASETIME; + *(DHCPOptionsOUTStart++) = sizeof(uint32_t); + /* Lease Time 86400s (ONE_DAY) */ + *(DHCPOptionsOUTStart++) = 0x00; + *(DHCPOptionsOUTStart++) = 0x01; + *(DHCPOptionsOUTStart++) = 0x51; + *(DHCPOptionsOUTStart++) = 0x80; + *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER; *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t); memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t)); @@ -108,7 +116,7 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, *(DHCPOptionsOUTStart++) = DHCP_OPTION_END; - return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t)); + return (sizeof(DHCP_Header_t) + 18 + sizeof(IP_Address_t)); } } diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h index 325fe0353..e2ba4fc65 100644 --- a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h +++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h @@ -60,6 +60,9 @@ /** DHCP option list entry header, indicating that a subnet mask will follow. */ #define DHCP_OPTION_SUBNETMASK 1 + /** DHCP option list entry header, indicating that the Lease Time will follow. */ + #define DHCP_OPTION_LEASETIME 51 + /** DHCP option list entry header, indicating that the DHCP message type constant will follow. */ #define DHCP_OPTION_MESSAGETYPE 53 |