Hello,
We know that in the linux kernel received network packets usually go
from the physical layer (let's say, etherenet drivers)
to netif_rx(struct sk_buff *skb) in net/core/dev.c.
This call usually happen in the interrupt handler in the ethrnet
driver ;
Just for exmaple, in the RTL 8139too driver, in rtl8139_rx_interrupt()
there is a
call to netif_rx(). In eeproo100.c (Intel Ethernet driver for Linux.)
it is in speedo_rx() method.
Now I want to monitor (and filter in the future) UDP packets in this
netif_rx()
method (ot net/core/dev.c) ; so I added this 2 lines in this method:
if (skb && skb->nh.iph && skb->nh.iph->protocol == IPPROTO_UDP)
{
printk(KERN_INFO "in if (skb && ... == IPPROTO_UDP)");
}
I had build the kernel and rebooted; I reached the console ok ; I also
verified that sending UDP packets is OK.
But when I started X I got a kernel panic. Any idea what can be the
reason ?
(The message was:
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing)
Any idea why this panic is caused after starting "X"?
(and BTW ,my added 2 lines of code are after local_irq_save(flags) in
netif_rx())
Regards,
John
_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now!
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/