2019年(21)
发布时间:2019-02-05 10:43:24
Linux数据包NAPI处理流程1. 概念NAPI:linux新的网卡数据包处理API,采用新的数据包处理流程。round-robin:轮询调度调度算法。硬中断:由外设产生,主要是用来通知通过操作系统外设发生变化。比如当网卡收到数据包的时候,就会产生一个硬中断。软中断:为了满足实时性需要,中断处理应该是越快越好,当中断发生时,硬.........【阅读全文】
发布时间:2019-02-04 23:26:36
软中断是可以被硬中断打断的,有一点需要注意:假设当前有3个softirq处于pending状态,然后__do_softirq正在处理第1个软中断,这个时候硬中断发生了,硬中断里面trigger了1个新的更高优先级的softirq,当中断返回的时候,检查in_interrupt不为0,所以不会重新调用do_softirq,而是返回中断前的__do_softirq中。软中断的注.........【阅读全文】
发布时间:2019-02-04 23:15:40
数据包在网卡驱动的中断处理中enqueue后,由process_backlog做后续的处理。process_backlog是由软中断处理函数net_rx_action调用的。process_backlog调用netif_receive_skb(已经到协议栈的入口了)对在queue中的报文进行处理(有个时间的配额).......【阅读全文】
发布时间:2019-02-03 16:29:44
网卡是用结构体net_device表述的,通过函数register_netdev来注册具体的网卡。mini2440的的网卡放在driver/net/dm9000.c中。网卡的数据发送在net_device->netdev_ops中定义。net_device->netdev_ops也是一个结构体(const struct net_device_ops *netdev_ops),其定义了如下操作:struct net_device_ops { n.........【阅读全文】
发布时间:2019-02-03 15:13:47
网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接受数据。这一层的存在使得上层协议独立于具体的设备。......【阅读全文】