if there are no rx packets when is called (and while it waits 100ms), etherrxflush will give the head of the rx queue back to the interface but the interface doesn't know that, so the queue will be jamed, thus causing bootp to fail.