diff --git a/CHANGELOG b/CHANGELOG index 9e8564c2..29fa75c9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -13,6 +13,10 @@ HISTORY ++ New features: + 2010-06-16: Simon Goldschmidt + * dhcp.c/.h: Added a function to deallocate the struct dhcp from a netif + (fixes bug #31525). + 2010-07-12: Simon Goldschmidt (patch by Stephane Lesage) * ip.c, udp.c/.h, pbuf.h, sockets.c: task #10495: Added support for IP_MULTICAST_LOOP at socket- and raw-API level. diff --git a/src/core/dhcp.c b/src/core/dhcp.c index 0c60fc4f..e2f231fc 100644 --- a/src/core/dhcp.c +++ b/src/core/dhcp.c @@ -592,6 +592,23 @@ dhcp_set_struct(struct netif *netif, struct dhcp *dhcp) netif->dhcp = dhcp; } +/** Removes a struct dhcp from a netif. + * + * ATTENTION: Only use this when not using dhcp_set_struct() to allocate the + * struct dhcp since the memory is passed back to the heap. + * + * @param netif the netif from which to remove the struct dhcp + */ +void dhcp_cleanup(struct netif *netif) +{ + LWIP_ASSERT("netif != NULL", netif != NULL); + + if (netif->dhcp != NULL) { + mem_free(netif->dhcp); + netif->dhcp = NULL; + } +} + /** * Start DHCP negotiation for a network interface. * diff --git a/src/include/lwip/dhcp.h b/src/include/lwip/dhcp.h index 8767605c..32d93381 100644 --- a/src/include/lwip/dhcp.h +++ b/src/include/lwip/dhcp.h @@ -106,6 +106,9 @@ PACK_STRUCT_END #endif void dhcp_set_struct(struct netif *netif, struct dhcp *dhcp); +/** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */ +#define dhcp_remove_struct(netif) do { (netif)->dhcp = NULL; } while(0) +void dhcp_cleanup(struct netif *netif); /** start DHCP configuration */ err_t dhcp_start(struct netif *netif); /** enforce early lease renewal (not needed normally)*/