This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RedBoot DHCP failure due to race condition.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]