>So, if I understand correctly, dhcpd correctly obtains an IP address,
>but in the process "over-inits" the LANCE driver which then chokes....
>And this only happens on VirtualBox (as far as we know).
yes, this is my understanding so far. As i said, static ip
configuration causes no troubles at all.
But I forgot to paste my diff againsted lance.c taken from r4200:
50a51
> #define nil ((void*)0)
311c312,321
<
---
>
> static void sig_handler(int sig)
> {
> int r, tasknr;
>
> switch(sig) {
> case SIGUSR1: lance_dump(); break;
> }
> }
>
316a327
> struct sigaction sa;
344a356,361
> sigemptyset(&sa.sa_mask);
> sa.sa_flags = 0;
> sa.sa_handler = sig_handler;
> sigaction(SIGUSR1, &sa, nil);
>
>
497a515
>
503c521
< printf("lance buf: v 0x%lx ph 0x%lx\n", lance_buf,
lance_buf_phys);
---
> printf("lance buf: v 0x%lx ph 0x%lx pid %d\n", lance_buf, lance_buf_phys, getpid());
641,645d658
< if (ec->ec_linmem != 0)
< {
< assert( 0 );
< /*phys2seg(&ec->ec_memseg, &ec->ec_memoff, ec->ec_linmem);*/
< }
647c660
< /* XXX */ if (ec->ec_linmem == 0) ec->ec_linmem= 0xFFFF0000;
---
> ec->ec_linmem= 0xFFFF0000;
This adds a signal-handler for USR1 to dump the stats to the
controlling tty and adds the pid to the do_init() log.
The last section (removing the assert & and setting ec_linmem) is
taken from an older conversation and absolutely necessary.
Otherwise lance won't load at all.
cheers,
Matthias