数据包接受完整流程

本文详细介绍了TCP数据包从接收、解析到传递给相应协议处理的完整流程,涉及e1000_clean_rx_irq函数中接收缓冲区的处理,dev_add_pack中数据包类型注册,以及IP数据包的局部交付和协议处理。通过nf_hook、ip_defrag等关键函数,阐述了网络数据包在内核中的路由和处理机制。
摘要由CSDN通过智能技术生成
TCP/IP数据包的完整接收流程!

入口自然是从driver开始,以Intel(R) PRO/1000 Network Driver对应的e1000_main.c为例。
事先声明,因为本人不是内核工程师,所以难免在kernel的代码理解上献丑,希望大家指正。

这里,我们并不需要关心如何去写driver,如何处理中断,只需要关注网卡如何接收的数据包,并传给上层协议。

函数e1000_clean_rx_irq为网卡接收数据包的处理函数。
  1. static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
  2.              struct e1000_rx_ring *rx_ring,
  3.              int *work_done, int work_to_do)
  4. {
  5.     ...... ......

  6.     /* 得到了接收缓存buffer */
  7.     i = rx_ring->next_to_clean;
  8.     rx_desc = E1000_RX_DESC(*rx_ring, i);
  9.     buffer_info = &rx_ring->buffer_info[i];
  10.     
  11.     while (rx_desc->status & E1000_RXD_STAT_DD) {
  12.         ...... ......
  13.         
  14.         /* 取得接收缓存buffer的数据包buffer,即skb */
  15.         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值