电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

内核协议栈数据包转发完全解析VIP专享VIP免费

内核协议栈数据包转发完全解析_第1页
内核协议栈数据包转发完全解析_第2页
内核协议栈数据包转发完全解析_第3页
内核协议栈数据包转发 目录 1 NAPI 流程与非NAPI 1.1 NAPI 驱动流程 1.2 非NAPI 流程 1.3 NAPI 和非NAPI 的区别 2 内核接受数据 2.1 数据接收过程 2.2 采取DMA 技术实现 3 e100 采用NAPI 接收数据过程 3.1 e100_open 启动e100 网卡 3.2 e100_rx_alloc_list 建立环形缓冲区 3.3 e100_rx_alloc_skb 分配skb 缓存 3.4 e100_poll 轮询函数 3.5 e100_rx_clean 数据包的接收和传输 3.6 e100_rx_indicate 4 队列层 4.1、软中断与下半部 4.2、队列层 5 采用非NAPI 接收数据过程 5.1netif_rx 5.2 轮询与中断调用netif_rx_schedule 不同点 5.3 netif_rx_schedule 5.4 net_rx_action 5.5 process_backlog 6 数据包进入网络层 6.1 netif_receive_skb(): 6.2 ip_rcv(): 6.3 ip_rcv_finish(): 6.4 dst_input(): 6.5 本地流程ip_local_deliver: 6.6 转发流程ip_forward(): 1 NAPI 流程与非NAPI 1.1NAPI 驱动流程: 中断发生 -->确定中断原因是数据接收完毕(中断原因也可能是发送完毕,DMA 完毕,甚至是中断通道上的其他设备中断) -->通过netif_rx_schedule将驱动自己的napi结构加入softnet_data的poll_list链表,禁用网卡中断,并发出软中断 NET_RX_SOFTIRQ -->中断返回时触发软中断调用相应的函数net_rx_action,从 softnet_data 的poll_list 上取下刚挂入的napi 结构,并且调用其 poll 函数,这个poll 函数也是驱动自己提供的,比如e100 网卡驱动中的e100_poll 等。 -->在 poll 函数中进行轮询,直到接受完所有的数据或者预算(budget)耗尽。每接收一个报文要分配 skb,用eth_type_trans 处理并交给 netif_receive_skb。 -->如果数据全部接收完(预算没有用完),则重新使能中断并将 napi 从链表中取下。如果数据没接收完,则什么也不作,等待下一次 poll 函数被调度。 1.2 非 NAPI 流程: 中断发生 -->确定中断发生的原因是接收完毕。分配 skb,读入数据,用eth_type_trans 处理并且将 skb 交给 netif_rx -->在 netif_rx 中,将 packet 加入到 softnet_data 的input_pkt_queue 末尾(NAPI驱动不使用这个 input_pkt_queue),再通过 napi_schedule 将 softnet_data 中的backlog(这也是个napi 结构)加入 softnet_data 的poll_list,最后发出软中断 -->软中断net_rx_action从poll_list上取下softnet_data的backlog,调...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部