From c82f04f54c1ad178a810397c79efdb8e5238c3bf Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Thu, 27 Feb 2014 22:44:16 +0100 Subject: [PATCH] fixed bug #40303 DHCP xid renewed when sending a DHCPREQUEST --- CHANGELOG | 3 +++ src/core/dhcp.c | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a8b95e80..61c5862a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -96,6 +96,9 @@ HISTORY ++ Bugfixes: + 2014-02-27: Simon Goldschmidt + * dhcp.c: fixed bug #40303 DHCP xid renewed when sending a DHCPREQUEST + 2014-02-27: Simon Goldschmidt * raw.c: fixed bug #41680 raw socket can not receive IPv6 packet when IP_SOF_BROADCAST_RECV==1 diff --git a/src/core/dhcp.c b/src/core/dhcp.c index 21fd7845..4c605212 100644 --- a/src/core/dhcp.c +++ b/src/core/dhcp.c @@ -1671,15 +1671,18 @@ dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type) LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", (dhcp->p_out->len >= sizeof(struct dhcp_msg))); - /* reuse transaction identifier in retransmissions */ - if (dhcp->tries == 0) { + /* DHCP_REQUEST should reuse 'xid' from DHCPOFFER */ + if (message_type != DHCP_REQUEST) { + /* reuse transaction identifier in retransmissions */ + if (dhcp->tries == 0) { #if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) - xid = LWIP_RAND(); + xid = LWIP_RAND(); #else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - xid++; + xid++; #endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + } + dhcp->xid = xid; } - dhcp->xid = xid; LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("transaction id xid(%"X32_F")\n", xid));