Merge pull request #170 from exp/master
[pub/lufa.git] / Demos / Device / ClassDriver / RNDISEthernet / Lib / DHCP.c
index 021bf15..979435b 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2013.
+     Copyright (C) Dean Camera, 2021.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2013  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2021  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -54,8 +54,8 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart,
        DHCP_Header_t* DHCPHeaderIN  = (DHCP_Header_t*)DHCPHeaderInStart;
        DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;
 
        DHCP_Header_t* DHCPHeaderIN  = (DHCP_Header_t*)DHCPHeaderInStart;
        DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;
 
-       uint8_t* DHCPOptionsINStart  = (uint8_t*)(DHCPHeaderInStart  + sizeof(DHCP_Header_t));
-       uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));
+       uint8_t* DHCPOptionsINStart  = ((uint8_t*)DHCPHeaderInStart  + sizeof(DHCP_Header_t));
+       uint8_t* DHCPOptionsOUTStart = ((uint8_t*)DHCPHeaderOutStart + sizeof(DHCP_Header_t));
 
        DecodeDHCPHeader(DHCPHeaderInStart);
 
 
        DecodeDHCPHeader(DHCPHeaderInStart);
 
@@ -95,12 +95,20 @@ int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart,
                                                                                                                                                                                                : DHCP_MESSAGETYPE_ACK;
 
                                *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;
                                                                                                                                                                                                : DHCP_MESSAGETYPE_ACK;
 
                                *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;
-                               *(DHCPOptionsOUTStart++) = 4;
+                               *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);
                                *(DHCPOptionsOUTStart++) = 0xFF;
                                *(DHCPOptionsOUTStart++) = 0xFF;
                                *(DHCPOptionsOUTStart++) = 0xFF;
                                *(DHCPOptionsOUTStart++) = 0x00;
 
                                *(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));
                                *(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;
 
 
                                *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;
 
-                               return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));
+                               return (sizeof(DHCP_Header_t) + 18 + sizeof(IP_Address_t));
                        }
                }
 
                        }
                }