免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1874 | 回复: 0
打印 上一主题 下一主题

Linux2.6.30内核的rtable结构(1) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-03 14:55 |只看该作者 |倒序浏览


978计划工作组 2009-11-3
1函数源码
struct rtable
{
       union
       {
              struct dst_entry      dst;
       } u;
       /* Cache lookup keys */
       struct flowi            fl;
       struct in_device      *idev;
       int                  rt_genid;
       unsigned         rt_flags;
       __u16                   rt_type;
       __be32                  rt_dst;     /* Path destination  */
       __be32                  rt_src;     /* Path source        */
       int                  rt_iif;
       /* Info on neighbour */
       __be32                  rt_gateway;
       /* Miscellaneous cached information */
       __be32                  rt_spec_dst; /* RFC1122 specific destination */
       struct inet_peer      *peer; /* long-living peer info */
};
2结构用途
    路由相关的信息。
3语句注释
3.1 成员注释
u                     :。
struct flowi fl          :查找该路由节点的哈希值,该哈希值用源IP,目的地址,TOS一起确定。
struct in_device  *idev:该指针指向egress设备的IP配置块。
int            rt_genid:
unsigned      rt_flags:一组标志位,按目的入口查询的执行顺序:如果路由使用本地环回接口,则rt_flags上加标志RTCF_LOCAL如果路由结果类型是广播,则加标志RTCF_BROADCAST和RTCF_LOCAL如果结果是组播,则加标志RTCF_MULTICAST和 RTCF_LOCAL,该标志最终决定了目的入口使用哪一个IP数据报输入函数和输出函数如果是RTCF_LOCAL,则使用输入函数ip_local_deliver()如果是RTCF_BROADCAST或RTCF_MULTICAST,并且带有RTCF_LOCAL标志,并且输出设备不是环回接口设备,则使用输出函数ip_mc_output(),否则使用输出函数ip_output()
__u16          rt_type:路由类型,如果路由是LOOPBACK,则置类型为RTN_LOCAL,单播路由类型为RTN_UNICAST,如果目的地址为 0xFFFFFFFF,则路由类型为RTN_BROADCAST,如果目的地址是组播地址,则路由类型为RTN_MULTICAST。rt_type跟 rt_flags关系比较密切。
__be32          rt_dst:路由的目的地址。
__be32          rt_src:路由的源地址。
int                rt_iif:路由的输入设备接口的索引号。
__be32     rt_gateway:存放网关信息,用做下一跳的地址。
__be32     rt_spec_dst:首选源地址,首选源地址的选择:添加到路由缓存内的路由项是单向的,表示对于朝着被路由报文源IP地址的反方向上的流量,不能使用该路由项来进行路由。但是在一些情况下,接收到报文可能触发一个动作,要求本地主机选择一个源IP地址,以便在向发送方回送报文时使用。这个地址,即首选(preferred)源IP地址,必须与路由该ingress(接受包)报文的路由缓存表项保存在一起。首选源IP地址被保存在rt_spec_dst字段内,下面是使用该地址的两种情况:(1)ICMP:当一个主机接收到一个ICMP ECHO REQUEST消息时(人们常用的ping命令通常生成这种消息),如果主机没有明确配置为不作出回应,则该主机返回一个ICMPECHO REPLY消息。对该ingress ICMP ECHO REQUEST消息选择路由,路由项的rt_spec_dst被用作路由ICMP ECHO REPLY消息而进行路由查找的源地址。参见net/ipv4/icmp.c文件内的icmp_reply。在net/ipv4/ip_output.c文件内的ip_send_reply函数做法与之类似。(2)IP选项:一些IP选项要求源地址和目的地址中间的主机将它们接收该报文接口的IP地址写入IP头内,Linux写入的地址是rt_spec_dst。
struct inet_peer   *peer:inet_peer结构存储有关IP peer的long-living信息,IP peer是该缓存路由项的目的IP地址对应的主机。与本地主机在最近一段时间通信的每个远端IP地址都有一个inet_peer结构。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100948/showart_2085409.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP