[Prev][Next][Index][Thread]

BOOTP or Bug




Well, after looking deeper, it seems that the return packets are not
getting to the bootp 
ether callback routine in ~OSKit/bootp/driver.c ...

net_receive(void *data, oskit_bufio_t *b, oskit_size_t pkt_size)

I've put some printf's here that would trigger if the routine was entered
and it never gets called.

I've snooped the line and I can see the BOOTP/REQUEST go out and the BOOTP
server acknowledges each and every one, but the packets don't get to the
net_receive callback.
Now the pingreply kernel works (but not the BOOTP part) if I type in the IP
address and netmask and gateway.  It sends the ICMP echo reply.
I'm trying to put a new ethercard driver into OSKit, one that is not
provided with the basic release, it is  for a cs89x0 from Crystal
Semiconductor. I've placed the code in ~OSKit/linux/src/drivers/net
(cs89x0.c cs89x0.h) I've added an entry to 
~OSKit/oskit/dev/linux_ethernet.h ...

driver(cs89x0, "ETH1", "JumpTec DIMMPC ", "Russel Nelson", "cs89x0",
cs89x0_probe)

and  added an entry at the end of ~OSKit/linux/dev/etherdrivers... 

ETHERDRIVERS =                                             lance 3c59x
seeq8005 tulip eepro100 hp100 smc-ultra smc9194 wd 3c503 hp hp-plus ac3200
ne   e2100 at1 700 fmv18x eth16i 3c509 znet eexpress eepro depca ewrk3
de4x5 apricot 3c501 3c507 3c505 sk_g16 ni52 ni65 cs89x0


I've noticed in both pingreply and netboot that the cs89x0_probe routine is
entered twice
could it be that I don't have the  driver integrated properly?

One issue that I had to work around was as follows...


>        current->state = TASK_INTERRUPTIBLE;
>        current->timeout = jiffies + 3;
>        schedule();    

I had to replace this fragment with...

>        /* wait 30 ms */
>        /* NOTE: the loop below is a hack, The commented out code
>           was what came with the driver but I could not get that to compile
>           under OSKit.
>        */
>        loop = 10000;
>        for (i =30; i > 0;i--){
>                while(loop--)continue;
>                loop = 10000;
>        }      

I thought about using osenv_timer... but wasn't sure if this was
appropriate in the context of a linux device driver.

Any insight would be appreciated.


                      



=================================
To subscribe or unsubscribe, send mail with "subscribe" or "unsubscribe"
to oskit-users-request@flux.cs.utah.edu.  The oskit-announce list is low
volume - if you want to subscribe, mail oskit-announce-request@flux.cs.utah.edu