This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: RedBoot DHCP failure due to race condition.
- From: Grant Edwards <grant dot b dot edwards at gmail dot com>
- To: ecos-discuss at sources dot redhat dot com
- Date: Thu, 17 Mar 2011 14:23:10 +0000 (UTC)
- Subject: [ECOS] Re: RedBoot DHCP failure due to race condition.
- References: <ilrcdg$jfn$1@dough.gmane.org>
On 2011-03-16, Grant Edwards <grant.b.edwards@gmail.com> wrote:
> We've been having intermittent problems with RedBoot's DHCP client
> failing to acquire an address. I've tracked it down to what looks
> like a race condition in RedBoot's DHCP code.
Apart from the race condition that's overwriting the saved bp_info
struct, I'm a little baffled by the "retry" counter in
__bootp_find_local_ip. It doesn't appear to count attempts to get an
IP address. It appears to count passes through the foreground state
machine loop. It takes 3 passes through that loop to obtain an IP
address via DHCP.
In our build, somebody had set MAX_RETRIES to 4. With 4 retries, I
presume they assumed that up to 5 attempts would be made, but only 1
is made.
I changed the code so that it's only decremented once for each
attempted DHCP transaction, and then I ended up with cases where it
looped indefinitely because the retry counter is re-initialized by the
state machine when an OFFER packet is received.
Can somebody explain how the retry counter is supposed to work?
--
Grant Edwards grant.b.edwards Yow! I'm gliding over a
at NUCLEAR WASTE DUMP near
gmail.com ATLANTA, Georgia!!
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss