SKB路由缓存与SOCK路由缓存交互知识讲解
4页1、SKB路由缓存与SOCK路由缓存交互知识讲解skb结构体中的成员_skb_refdst与sock结构体中成员sk_rx_dst(缓存入口路由)和sk_dst_cache(缓存出口路由)成员之间的交互操作。SOCK入口路由与SKB路由缓存内核在接收流程中,调用early_demux函数提前在IP层做established状态的sock查找,并负责将sock结构体成员sk_rx_dst的路由缓存赋值给skb成员_skb_refdst,对于UDP协议,先判断DST_NOCACHE标志,如果成立,增加dst引用计数,设置skb的dst;否则,调用skb_dst_set_noref直接进行设置。?12345678910111213141516void udp_v4_early_demux(struct sk_buff *skb)dst = READ_ONCE(sk-sk_rx_dst);if (dst)dst = dst_check(dst, 0);if (dst) /* DST_NOCACHE can not be used without taking a reference */if (d
2、st-flags & DST_NOCACHE) if (likely(atomic_inc_not_zero(&dst-_refcnt)skb_dst_set(skb, dst); else skb_dst_set_noref(skb, dst);对于TCP协议,直接调用skb_dst_set_noref函数,将sock结构体成员sk_rx_dst缓存到skb结构体中。乐淘棋牌http:/?123456789101112void tcp_v4_early_demux(struct sk_buff *skb)if (sk-sk_state != TCP_TIME_WAIT) struct dst_entry *dst = sk-sk_rx_dst;if (dst)dst = dst_check(dst, 0);if (dst &inet_sk(sk)-rx_dst_ifindex = skb-skb_iif)skb_dst_set_noref(skb, dst);同样都为early_demux函数,都是从sk-sk_rx_dst获取路由缓存,tcp和udp的存在明显差别。TCP直接赋值,
《SKB路由缓存与SOCK路由缓存交互知识讲解》由会员m****分享,可在线阅读,更多相关《SKB路由缓存与SOCK路由缓存交互知识讲解》请在金锄头文库上搜索。
DB2发生死锁情况时应该怎么处理
Python 为何能成最强编程语言
面试前必须要知道的Redis面试
MySQL下自动删除指定时间以前的记录的操作方法
深入理解FastCGI协议以及在PHP中的实现
MySQL数据库性能优化之硬件瓶颈分析
NoSQL数据库大全收集整理
2018 – 2019 年前端 JavaScript 面试题
PHP文件包含漏洞的形式总结
5种使用Python代码轻松实现数据可视化的方法
改进JavaScript和Bust的互操作性:深入认识wasm-bindgen组件
C#图片缩放平移从功能分析到编码实现
详解网络蜘蛛的安全隐患及预防方法
利用NAP解除安全隐患自动隐藏你的IP地址
解决分布式数据库和离线网络中原子性问题的新方法
bbed恢复数据遇到延迟块清除的问题
Oracle Data Redaction数据加密
linux下du和df结果不一致的原因及处理
基于QMP实现对qemu虚拟机进行交互
解读Java并发队列BlockingQueue
2024-01-15 24页
2024-01-15 15页
2024-01-08 89页
2024-01-08 72页
2023-08-31 3页
2023-08-31 2页
2023-07-10 3页
2023-07-10 3页
2023-07-10 3页
2023-07-10 2页