- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内核协议栈数据包完全解析
内核协议栈数据包转发
目录
1 NAPI流程与非NAPI
NAPI驱动流程
非NAPI流程
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,调用其poll函数,这个poll函数是内核提供的process_backlog? ? --函数process_backlog从softnet_data的input_pkt_queue末尾取下skb,并且直接交给netif_receive_skb处理。? ? --如果input_pkt_queue中所有skb都处理完则将backlog从队列中除去(注意input_pkt_queue中可能有多个网卡加入的报文,因为它是每cpu公用的)并退出循环;如果预算用完后也跳出循环。最后返回接受到的包数
1.3 NAPI和非NAPI的区别NAPI和非NAPI的区别? ? 1.NAPI使用中断+轮询的方式,中断产生之后暂时关闭中断然后轮询接收完所有的数据包,接着再开中断。而非NAPI采用纯粹中断的方式,一个中断接收一个数据包? ? 2.NAPI都有自己的struct napi结构,非NAPI没有? ? 3.NAPI有自己的poll函数,而且接收数据都是在软中断调用poll函数时做的,而非NAPI使用公共的process_backlog函数作为其poll函数,接收数据是在硬件中断中做的? ? 4.NAPI在poll函数中接收完数据之后直接把skb发给netif_receive_skb,而非NAPI在硬件中断中接收了数据通过 netif_rx把skb挂到公共的input_pkt_queue上,最后由软中断调用的process_backlog函数来将其发送给 netif_receive_skb
驱动以及软
您可能关注的文档
最近下载
- 机动车辆租赁合同.docx VIP
- 形势与政策论文1500(通用3篇).docx VIP
- 2025年教科版(2024)小学科学三年级上册(全册)教学设计(附目录P171).docx
- T∕CECS G:T34-2023 寒区公路隧道设计标准.pdf
- 2014普通铁路质量控制标准和要求.doc VIP
- 2025年新人教版7年级道德与法治上册全册课件.pptx
- 第一单元+第2课《缤纷的世界美术流派》-2025-2026学年人美版(2024)美术新教材八年级上册.pptx VIP
- 江苏省泰州市区县街道社区乡镇村名称统计.pdf VIP
- 行政管理学题库答案.pdf VIP
- 学校食堂采购水果供应协议书.doc VIP
文档评论(0)