/*更新整个lro skb的相关数据*/
static void lro_add_common(struct net_lro_desc *lro_desc, struct iphdr *iph,struct tcphdr *tcph, int tcp_data_len)
{struct sk_buff *parent = lro_desc->parent;__be32 *topt;lro_desc->pkt_aggr_cnt++;lro_desc->ip_tot_len += tcp_data_len;lro_desc->tcp_next_seq += tcp_data_len;lro_desc->tcp_window = tcph->window;lro_desc->tcp_ack = tcph->ack_seq;/* don't update tcp_rcv_tsval, would not work with PAWS */if (lro_desc->tcp_saw_tstamp) {topt = (__be32 *) (tcph + 1);lro_desc->tcp_rcv_tsecr = *(topt + 2);}lro_desc->data_csum = csum_block_add(lro_desc->data_csum,lro_tcp_data_csum(iph, tcph,tcp_data_len),parent->len);parent->len += tcp_data_len;parent->data_len += tcp_data_len;if (tcp_data_len > lro_desc->mss)lro_desc->mss = tcp_data_len;
}/*向LRO skb中添加一个新的skb*/
static void lro_add_packet(struct net_lro_desc *lro_desc, struct sk_buff *skb,struct iphdr *iph, struct tcphdr *tcph)
{struct sk_buff *parent = lro_desc->parent;int tcp_data_len = TCP_PAYLOAD_LENGTH(iph, tcph);lro_add_common(lro_desc, iph, tcph, tcp_data_len);/*更新该skb的data 长度,需要除去header部分长度*/skb_pull(skb, (skb->len - tcp_data_len));/*更新整个lro skb的总长度*/parent->truesize += skb->truesize;/*将skb挂接在lro skb的 frag_list上面。*/if (lro_desc->last_skb)lro_desc->last_skb->next = skb;elseskb_shinfo(parent)->frag_list = skb;lro_desc->last_skb = skb;
}/*向一个skb添加带frags的数据包; 支持分散、聚合的dma, 一个数据可能由多个skb_frags组成。*/
static void lro_add_frags(struct net_lro_desc *lro_desc,int len, int hlen, int truesize,struct skb_frag_struct *skb_frags,struct iphdr *iph, struct tcphdr *tcph)
{struct sk_buff *skb = lro_desc->parent;int tcp_data_len = TCP_PAYLOAD_LENGTH(iph, tcph);lro_add_common(lro_desc, iph, tcph, tcp_data_len);skb->truesize += truesize;/*去掉该skb包的header部分, 而该header应该保存在第一个frags数据中。*/skb_frags[0].page_offset += hlen;skb_frags[0].size -= hlen;/*将page部分的数据,直接保存到skb的frags中*/while (tcp_data_len > 0) {*(lro_desc->next_frag) = *skb_frags;tcp_data_len -= skb_frags->size;lro_desc->next_frag++;skb_frags++;skb_shinfo(skb)->nr_frags++;}
}

LRO -- skb_buff->frags[] skb_buff->frag_list相关推荐

  1. [玩转UE4/UE5动画系统>应用篇>功能模块] 之 ALS V4地面站立动作状态机详解

    本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式.教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏<玩转UE4/UE5动画系统>.教程中使用的 ...

  2. asp.net的aspx页面<% %>、<%@ %>、<%# %>、<%= %>、<%$ %>的用法

    1. <%--exegesics--%> 注释 相当于<!----> 2. <% code%> 绑定后台代码块: //相当于写在后台的可执行代码 <form ...

  3. [玩转UE4/UE5动画系统>应用篇>功能模块] 之 ALS V4 主状态机详解

    本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式.教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏<玩转UE4/UE5动画系统>.教程中使用的 ...

  4. [玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot IK系统(ALS V4实现方案详解)

    本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式. 教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏<玩转UE4/UE5动画系统>. 教程中使 ...

  5. HTML中有序列表(<ol><li>)和无序列表(<ul><li>)以及定义列表的使用,以及利用无序列表制作网购按钮

    文章速览: HTML基础知识的学习+附加常用HTML标签 HTML中有序列表(<ol><li>)和无序列表(<ul><li>)以及定义列表的使用,以及利 ...

  6. [玩转UE4/UE5动画系统>应用篇>功能模块] 之 布娃娃系统(ALS V4实现方案详解)

    本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式. 教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏<玩转UE4/UE5动画系统>. 教程中使 ...

  7. 【数据结构与算法】->算法-> A* 搜索算法->如何实现游戏中的寻路功能?

    A* 搜索算法 Ⅰ 前言 Ⅱ 算法解析 Ⅲ 如何实现游戏寻路问题 Ⅳ 总结 Ⅰ 前言 你可能玩过魔兽世界,仙剑奇侠和英雄联盟这类 MMRPG 游戏,在这些游戏中,有一个非常重要的功能,就是人物角色自动 ...

  8. Linux 中echo及echo > 和echo >>

    一.Linux 中的echo指令 Shell 的 echo 指令用于字符串的输出.详见: Shell echo命令 | 菜鸟教程 二.echo > 和echo >> echo > ...

  9. 关于学习Python的一点学习总结(5->切片赋值->sort排序->列表操作)

    16.给切片赋值: >>> test=list('hello')>>> test['h', 'e', 'l', 'l', 'o']>>> test ...

  10. 关于学习Python的一点学习总结(3->标识符->if->模块->字符)

    5.在Python中,名称(标识符)只能由字母.数字和下划线(_)构成,且不能以数字打头. 因此you8是合法的变量名,而8you不是. 6. >>>x = input(" ...

最新文章

  1. IDEA中修改文件的默认创建方式
  2. Java不同场景加载不同类_[改善Java代码]不同的场景使用不同的泛型通配符
  3. Windows Live Windows Phone 7
  4. 使用windows服务更新站点地图
  5. [转自天涯]很多年以前,我是一个中锋
  6. 修改服务器的时区为gmt,将GMT转换为服务器本地时区C#
  7. [原创]传递UIScrollView的滑动事件到其子视图中
  8. silence丶你的名字
  9. android jni framework,Android Framework层的JNI机制(二)
  10. 91.接收用户请求包体的方式
  11. Unix环境高级编程(二)文件和目录
  12. photoshop 2021在m1 mac上导出png发生未知错误的解决方案
  13. 51单片机LCD1602程序
  14. Java创建Excel文档(自定义格式)
  15. HDU 5144 NPY and shot(三分法)
  16. SCI收录声学学科期刊31种
  17. 带软开启功能的MOS管电源开关电路!
  18. matlab画爱心的代码
  19. 三菱 FX5U PLC结构化4轴伺服机器人程序
  20. log4 日志级别使用

热门文章

  1. cookie的保存 jq,如何使用jQuery读取Cookie并将其存储在变量中?
  2. 约瑟夫环问题java_Java求解约瑟夫环问题
  3. 标题中冒号的用法_英文中冒号的各种用法
  4. android炫彩跑马灯特效,盘点一下那些自带酷炫跑马灯效果的手机,最后一款几乎没人知道...
  5. 《对比Excel,轻松学习Python数据分析》读书笔记------Pandas入门
  6. 各场景下NetApp的数据备份推荐(Veeam+群晖NAS)
  7. 终端应用安全之网络流量分析
  8. 【小程序开发】开发一个短信登录验证(后端采用springboot)
  9. 获取网站CDN加速的真实服务器IP方法
  10. 在Windows 10 64 位机器上安装Debug