History: ip_app_dhcp_v4

This page describes all changes made to the ip_app_dhcp_v4 package, DHCP Client for IPv4, since its release.


2.34 (2020-09-02, 15:25):

  • Decline message is now sent to broadcast address according to RFC 2131.

2.33 (2020-09-15, 10:50)

  • Added inform request to stateless DHCP.
  •  Added decline message in case of unaccepted message.

2.32 (2020-08-18, 09:30):

  • Added clearing of IP address to DHCP stop functionality, to be able to accept DHCP responses.
  • Added dhcp_force_renew() to force renew IP address for bound interface

2.31 (2020-05-26, 17:30):

  • Unreachable code removed from dhcp_init().

2.30 (2020-05-20, 22:31):

  • MISRA-C:2012: violations eliminated (MISRA-C:2004 revoked).

2.29 (2020-03-23, 09:45):

  • User-defined server OPTION code is now requested in DHCP discovery and request messages.

2.28 (2020-03-11, 10:41):

  • Added Init-reboot state to handle reconnection in bound, renew and rebinding state.
  • User defined server OPTION code parser added.

2.27 (2020-01-29, 17:30):

  • Added support for exponential backoff algorithm implementation as per RFC 2131 sec 4.1.
  • Added support for the time value of 0xffffffff, which is reserved to represent "infinity".
  • Added support for renewal time(58) and rebinding time (59) options.
  • Fix: Source IP address of the DHCP REQUEST sent after reconnection was incorrectly set to the previously obtained IP address instead of
  • Fix: DHCP client stayed in REBINDING state after lease time expired instead of going to SELECTING state.
  • Fix: "Server identifier" is included in RENEW/REBIND packets.
  • Fix: Transaction identifier (xid) in DHCPREQUEST was incorrect, xid should stay the same in DHCPOFFER sent from DHCP server.

2.26 (2019-12-13, 10:30):

  • DHCPREQUEST is retried for a timeout period when DHCPACK/DHCKNAK timeout occurs in DHCPREQUEST state, as per RFC 2131 sec 3.1 point 5.
  • Rebind state introduced. Introduced timeout ticks to handle the request timeout, renew time (T1), rebind time (T2) and rebind timeout, as per RFC 2131 sec 4.4.5.

2.25 (2019-11-25, 15:57):

  • MISRA-C:2004: violations eliminated.

2:24 (2019-02-13, 16:55):

  • MISRA-C:2004: violations eliminated.

2.23 (2018-11-21, 16:31):

  • Added vendor class support (client can report the vendor ID to the server. The server's response is delivered to the user).

2.22 (2018-09-27, 11:00):

  • Bugfix: try to resend request message in case UDP buffer is not available.
  • Bugfix: apply the same scaling to the user-configurable lease time parameter as to the server returned value.

2.21 (2018-09-12, 08:52):

  • If there was no gateway in DHCP server's answer, invalid gateway IP could be set.

2.20r2 (2018-08-29, 18:31):

  • Added document HTML link to the documentation folder.
  • Renamed history and document files to the package name.

2.20 (2017-10-04, 10:45):

  • udp_open() call changed to match new API.

2.19 (107-06-19, 12:10):

  • IP configuration is now not reset if the IP configuration was already set. This allows it to work with old IP configuration after link up before obtaining a new IP address.


  • Corrected possible data loss during calling of dhcp_get_fqdn() in dhcp_ack_handler().
  • Corrected uninitialized return value in dhcp_delete().


  • During DISCOVERY DHCP incorrectly requested the actual FQDN instead of the default one assigned by the user.


  • Updated to work with IP base major version 6.


  • Modified FQDN handling, client will always request the default FQDN name and not the one that may have been assigned once by another DHCP server.
  • Updated to work with IP base major version 5.


  • The system failed to obtain IP address if it was connected to a different network and DHCP REQUEST was not NAK-ed by the DHCP server (when the system is plugged to another network it'll first send a DHCP REQUEST to obtain the same IP address that was assigned during the DISCOVER process).


  • Added hardware address check for incoming packets. It could happen that a DHCP offer/ack/nak packet was incorrectly accepted that was directed to another device.
  • Updated to work with UDP major version 5.


  • Required package version checks added.


  • Corrected renewal process (after the second timed out renewal request system entered discovery state and wrong server address was used, configuration was not invalidated if a renewal was NAK-ed).  
  • Added the option to use FQDN as client identifier
  • Processing of received DHCP packets could be performed incorrectly if two packets were received too quickly.


  • In case of NAK-ed request, only restart discovery if in REQUEST state.
  • dhcp.c includes dhcp.h to have function prototypes.


  • Makes use of the modified udp_get_buf_ifc() function.


  • Added option to enable ASCII encoded domain name.
  • Possible incorrect FQDN fixed in binary encoding.
  • Changed to use new udp_send() function.


  • Send DHCP release message only in correct states.


  • Updated to work with the new routing module.


  • Function headers fixed.
  • Comments fixed.


  • In case of timeout requests will be done from the task instead of the timer function, this way if the IP stack runs out of buffers the timer functionality will not be suspended waiting for a free buffer. In the previous version this situation could lead to a failure as the task was not registered.


  • Removed mutex unlock/lock around udp_close() from dhcp_delete() as mutex lock/unlock was removed from ip_stack_delete() (so udp_close() can lock the mutex).


  • Uninitialized variable sometimes causes incorrect behavior.


  • FQDN handling added.


  • Multi-interface compliant.


  • Initial release.