【精品】内核协议栈数据包转发完全解析.doc

【精品】内核协议栈数据包转发完全解析.doc

ID:49486111

大小:313.00 KB

页数:22页

时间:2020-03-02

【精品】内核协议栈数据包转发完全解析.doc_第1页
【精品】内核协议栈数据包转发完全解析.doc_第2页
【精品】内核协议栈数据包转发完全解析.doc_第3页
【精品】内核协议栈数据包转发完全解析.doc_第4页
【精品】内核协议栈数据包转发完全解析.doc_第5页
资源描述:

《【精品】内核协议栈数据包转发完全解析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、内核协议栈数据包转发目录1NAPI流程与非NAPI1.1NAPI驱动流程1.2非NAPI流程1.3NAPI和非NAPI的区别2内核接受数据2.1数据接收过程2.2采取DMA技术实现3elOO采用NAPI接收数据过程*el00_open启动el00网卡*elOO_rx_alloc_list建立环形缓冲区*e100_rx_alloc_skb分配skb缓存*elOO_poll轮询函数*elOO_rx_clean数据包的接收和传输*el00_rx_indicate4队列层4・1、软中断与下半部4・2、队列层5采用非

2、NAPI接收数据过程5.1netif_rx5.2轮询与中断调用netif_rx_schedule不同点5.1netif_rx_schedule5.2net_rx_action5.3process_backlog6数据包进入网络层5.3netif_receive_skb():5.4ip_rcv():5.5ip_rcv_finish():5.6dst_input():5.7本地流程ip_local_deliver:5.8转发流程ip_fonvard():1NAPI流程与非NAPI1.1NAPI驱动流程:中断发生

3、一〉确定中断原因是数据接收完毕(中断原因也可能是发送完毕,DMA完毕,其至是中断通道上的其他设备中断)-->通过netif_rx_schedule将驱动自己的napi结构加入softnet_data的poll_list链表,禁用网卡中断,并发出软中断NET_RX_SOFTIRQ-->中断返冋时触发软中断调用相应的函数net_rx_action,从softnet_data的poll_list上収下刚挂入的njpi结构,并且调用其poll函数,这个poll函数也是驱动自己提供的,比如elOO网卡驱动中的el00

4、_poll等。一〉在poll函数中进行轮询,直到接受完所有的数据或者预算(budget)耗尽。每接收-个报文要分配skb,用eth_type_trans处理并交给netif_receive_skbo一〉如果数据全部接收完(预算没有用完),则重新使能中断并将mipi从链表中取下。如果数据没接收完,则什么也不作,等待下一次poll函数被调度。NAPI相关数据结构CPU私有变量TSECPCHS卡每个网络设备(MAC层)都有自己的net_device数据结构,这个结构上有napi_structo每当收到数据包时,网

5、络设备驱动会把自巨的napi.strucl挂到CPU私有变■上:这样在软中断时,ne〔_rx_aciion会ig历epu私有变■的polljisc,执行上面所挂的napLswuci结构的poll钩子函数.将数据包X驱动传到网络协议桟《1.2非NAPI流程:中断发生-->确圧屮断发生的原因是接收完毕。分配skb,读入数据,用eth_type_trans处理并且将skb交给netif_rx-->在nctif_rx中,将packet加入到softnet_data的input_pkt_queue末尾(NAPI驱动不

6、使用这个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―>函数processbacklog从softnetdata的inputpktqueue末尾取下skb,并且直接交给neti

7、f_receive_skb处理。-->如果input_pkt_queue中所有skb都处理完则将backlog从队列中除去(注意input_pkt_queue中可能有多个网卡加入的报文,因为它是每epu公用的)并退出循环;如果预算用完后也跳出循环。最后返冋接受到的包数noNAPI确钳CPU私仃变杲不配善NAP啲时候.网络设备不使用自己的napi.struc晦构,所有网络设备驱动都使用同一napLstruct即cpu私有变量_get_cpu_var(softnet_data)・backlog每当收到包时,网络

8、设备get_cpu_var(softnet_data).backlogj^5y_get_cpu^var(softnet_data).polljist±®o所以软中断里net_rx_action遍历cpu私有变星_get_cpu_va「(softnet_data).poll」istB^,上面挂的napi_st「uct只有一个1.3NAPI和非NAPI的区别NAPI和非NAPT的区别6.2NAPT使用中断+轮询的方式

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。