linux网络协议栈是一种线程、后台服务、软中断、还是其他的东西?
各位好,
之前在做网卡驱动,想到一个问题:
linux网络协议栈对包的处理方式是属于一种内核线程(后台服务)、软中断、还是其他的东西?
我的理解为:
当一个包来了触发了硬件的中断,在硬件的ISR中会触发了软中断(NET_RX_SOFTIRQ),
在某个特定的时刻软中断的处理函数net_rx_action得以执行,
该函数中对device进行polling,
在device的polling函数中又调用netif_receive_skb(NAPI或者非NAPI都如此),
netif_receive_skb即将skb分配到各个协议的handler去处理(IP,ARP等),
然后更上一层再对包进行处理(TCP,UDP等)。
但netif_receive_skb以及后面的一系列对包的处理过程都是在net_rx_action中进行的,
而net_rx_action又是在软中断的环境下,
所以可不可以理解为Linux网络协议栈的工作就是在软中断的环境下进行的?