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

------------------------------------------------------------------------------------------

以下是我根据 linux-2.6.23.9版本内核源代码所做阅读笔记,属个人兴趣而为,希望找到有共同兴趣

的朋友一起讨论和研究,有谬误之处,笔者水平有限,欢迎大家拍砖:)

------------------------------------------------------------------------------------------

路由缓存机制

 

rtable结构

 

struct rtable

{

       union

       {

              struct dst_entry      dst;

       } u;

       struct flowi            fl;

       struct in_device      *idev;

       unsigned         rt_flags;

       __u16                   rt_type;

 

       __be32                  rt_dst;    

       __be32                  rt_src;    

       int                  rt_iif;

       __be32                  rt_gateway;

       __be32                  rt_spec_dst;

       struct inet_peer      *peer;

};

 

unsigned         rt_flags;//一些结构性的标志,例如,RTF_UP表示这条路由可用

__u16            rt_type;//表明了目标地址的类型,例如RTN_LOCAL,RTN_MULTICAST

__be 32 rt_dst       用来存放目标的IP地址

__be32 rt_src        路由路径的起点ip地址

__be32                  rt_gateway;//该成员存放了网关信息

struct flowi               fl;//存放的是查找该路由节点的哈希值,该哈希值用源IP,目的地址,TOS一起确定

 

struct in_device              *idev;// 该指针指向egress设备的IP配置块。注意对送往本地的ingress报文的路由,设置的egress设备为loopback设备

 

struct inet_peer             *peer; //用于long-living ip peer,虽然普通的IP报文没有状态,但是内核会记录IP报文的一些信息以提高效率,主要是记录IP报文的packet-id以检查是否收到了重复的报文,还需要检查packet-id的增量。

 

 

rt_cache_bucket结构

 

struct rt_hash_bucket {

       struct rtable    *chain;

};

 

// struct rtable           *chain; //是一个struct rtable类型的指针,struct rtable用于描述         一条完整的路由缓存项

 

在2.4版内核中,还有一个spin_lock成员用于哈希链的读写锁,2.6内核专门创建了一个spin_lock表来进行替代。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值