一
.
网卡接受数据的过程
1 . 从网络中接收数据报文的时候,涉及到两个终端。一个是硬中断,一个是软中断。
这部分是说明数据报文在在链路层的处理,以及如何将报文送交给对应的网络层协议来处理。这些功能基本都是在驱动中实现的。
1 . 从网络中接收数据报文的时候,涉及到两个终端。一个是硬中断,一个是软中断。
(1).硬中断的中断处理函数是在驱动中注册,一般在device open()函数或者 device init()函数中注册,使用request_irq()来注册硬中断处理函数。当网卡接收到数据的时候,就会调用这个终端处理函数来处理。比如8139too.c函数就用 retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev)来注册硬中断处理函数。
(2)软中断是通过NET_RX_SOFTIRQ信号来触发的,处理函数是net_rx_action。注册函数是open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL)。触发这个中断信号(raise irq)一般是在硬中断处理流程中,当硬中断处理基本结束的时候,通过调用__raise_softirq_irqoff(NET_RX_SOFTIRQ)来触发这个中断。