在函数ip_rt_init( )中进行了rt_hash_bucket的初始化,代码如下:

rt_hash_table = (struct rt_hash_bucket *)

alloc_large_system_hash("IP route cache",

sizeof(struct rt_hash_bucket),

rhash_entries,

(num_physpages >= 128 * 1024) ?

15 : 17,

0,

&rt_hash_log,

&rt_hash_mask,

0);

memset(rt_hash_table, 0, (rt_hash_mask + 1) * sizeof(struct rt_hash_bucket));

使用alloc_large_system_hash函数初始化了一个哈希表

在该函数中还创建了slab句柄,用于存储具体的r_table项

ipv4_dst_ops.kmem_cachep =

kmem_cache_create("ip_dst_cache", sizeof(struct rtable), 0,

SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);

路由缓存查找过程

 

数据包进入网络层之后,第一个调用的函数是ip_  rcv函数,通过pskb_may_pull完成碎片重组之后还要进行一些有效性检查,最后调用

return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,

ip_rcv_finish);

进入ip_rcv_finish函数,ip_rcv_finish函数开始就调用了ip_route_input以生成路由信息。

linux路由内核实现分析(四)---路由缓存机制(3)相关推荐

  1. linux路由内核实现分析(四)---路由缓存机制(1)

    ------------------------------------------------------------------------------------------ 以下是我根据 li ...

  2. linux路由内核实现分析(四)---路由缓存机制(4)

    ip_route_input函数   int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr, u8 tos, struc ...

  3. linux路由内核实现分析(四)---路由缓存机制(2)

    dst_entry结构   struct dst_entry { struct rcu_head             rcu_head; struct dst_entry      *child; ...

  4. linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4)

    fib_info结构 struct fib_info { struct hlist_node fib_hash; struct hlist_node fib_lhash; int fib_treere ...

  5. linux路由内核实现分析(三)---路由查找过程

    ------------------------------------------------------------------------------------------ 以下是我根据 li ...

  6. linux路由内核实现分析(一)----邻居子节点(1)

    ------------------------------------------------------------------------------------------ 以下是我根据 li ...

  7. mysql 源码 缓存_MySQL源码:MYSQL存储过程/函数的分析原理及缓存机制

    前言:我个人认为,有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙,可扩展性不够好,其实现的耦合性太高,所以主要讲一些它的原理方面的内容,但有可能在某些方面理解不够好或者有些不正确的地方,欢迎 ...

  8. linux路由内核实现分析(二)---FIB相关数据结构(1)

    ------------------------------------------------------------------------------------------ 以下是我根据 li ...

  9. linux路由内核实现分析(二)---FIB相关数据结构(4)

    fib_info结构 struct fib_info {struct hlist_node fib_hash;struct hlist_node fib_lhash;int fib_treeref;a ...

最新文章

  1. qprocess start怎么判断是否结束_面试结束后,如何判断自己是否有戏?看有无这8大信号!...
  2. 关于笔记本键盘错乱的原因及解决办法
  3. Power of Cryptography
  4. ( 1 )Linux 常用命令
  5. PDF转Word的免费方法
  6. 对象必须实现 iconvertible。_精雕基础教程:对象的显示颜色
  7. 【Python数据挖掘】回归模型与应用
  8. 比特币的服务器作用,比特币白皮书解读-时间戳服务器
  9. 【CLR】解析CLR的托管堆和垃圾回收
  10. 视频编解码(十一):编解码、显示调试常用命令总结
  11. VS2017 winform 打包(使用 Microsoft Visual Studio 2017 Installer Project)
  12. FastDFS原理和过程
  13. 10-新闻发布系统数据库-新闻管理数据操作
  14. 为N台linux服务器传输大文件
  15. 金仓数据库KingbaseES数据库管理员指南--15.1. 管理视图
  16. 【攻略】淘宝前端智勇大闯关-第一季
  17. 1.19 JQuery高级
  18. footer的设置绝不只是设置footer:使html高、宽自适应和footer始终在网页最末尾
  19. kanzi 粒子插件
  20. #Python小技巧#教你用Python在Excel里画画

热门文章

  1. 中移4G模块-ML302-OpenCpu开发-CJSON
  2. Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
  3. Ubuntu/Centos 等linux终端忽略大小写提示
  4. pandas删除index与某一列有重复值所在的行
  5. 西奥服务器修改楼层参数,西奥FOVF梯调试介绍.doc
  6. 3.2 指数型生成函数
  7. 后台系统应该具备的素养
  8. python入门-windows下anaconda环境搭建
  9. [软件工程学习笔记]个人java小程序---词频统计(二)
  10. 各种字符串合并处理示例.sql