/usr/src/linux-2.6.19/include/net/dst.h

最终生成的IP数据报的 路由称为目的入口(dst_entry),目的入口反映了相邻的外部主机在本地主机内部的一种“映象”,目的入口在内核中的定义如下

struct dst_entry
{
    struct dst_entry    *next;
    atomic_t            __refcnt;
    int                 __use;
    struct dst_entry    *child;
    struct net_device   *dev;
    short               error;
    short               obsolete;
    int                 flags;
    unsigned long       lastuse;
    unsigned long       expires;
    unsigned short      header_len;
    unsigned short      nfheader_len;
    unsigned short      trailer_len;
    u32                 metrics[RTAX_MAX];
    struct dst_entry    *path;
    unsigned long       rate_last;
    unsigned long       rate_tokens;
    struct neighbour    *neighbour;
    struct hh_cache     *hh;
    struct xfrm_state   *xfrm;
    int                 (*input)(struct sk_buff*);
    int                 (*output)(struct sk_buff*);
#ifdef CONFIG_NET_CLS_ROUTE
    __u32               tclassid;
#endif
    struct dst_ops     *ops;
    struct rcu_head     rcu_head;
    char        info[0];
};

dst_entry->__refcnt
    "目的入口"的引用计数,创建成功后即设为1

dst_entry->__use
    一个统计数值,该"目的入口"被使用一次(发送一个IP数据报),__use就加1

dst_entry->dev
    该路由的输出网络设备接口

dst_entry->flags
    标志位,其取值可以是DST_HOST, DST_NOXFRM, DST_NOPOLICY, DST_NOHASH, DST_BALANCED(用在路由有多路径的情况下)

dst_entry->lastuse
    一个时间值,每次目的入口被用于发送IP数据报,就将该值设置为当前系统时间值。该值被用于几个地方,路由缓存表 rt_hash_table是一个很大的数组(依据系统的内存大小而定),每一项都是一个struct rtable的链表,当要往缓存表的某一个链表中插入一个新的struct rtable时,如果这个链表的长度已经超出ip_rt_gc_elasticity(值为8),则需要删掉一个当前使用价值最低的,已保持链表长度的平衡。函数rt_score()就是用于为每个struct rtable计算价值分数,分数是一个32位值,最高位表示非常有价值,当struct rtable的成员rt_flags上有标志RTCF_REDIRECTED或RTCF_NOTIFY,或者目的入口的超时时间未到时,置该位,次高位价值次之,余下的30位由lastuse决定,该目的入口距上次使用时间越长,价值越低。另外,用于在rt_may_expire函数中判断一个struct rtable是否超时。

dst_entry->expires
    一个超时时间值,定时器rt_periodic_timer定期扫描路由缓存表rt_hash_table,如果发现expires值为0,或者小于当前系统时间值,并符合其它超时条件,则把该路由从缓存表中删除。

dst_entry->neighbour
    为该路由绑定的邻居节点(与ARP相关)

dst_entry->hh
    硬件头缓存,ARP解析得到的邻居的mac地址缓存在这里,再次发送IP数据报的时候,就不需要再到ARP缓存中去取硬件头。

dst_entry->input
dst_entry->output

    input和output分别是该目的入口的输入和输出函数。

struct dst_entry *dst相关推荐

  1. skb_dst_set - struct dst_entry dst 路由子系统使用。

    现在有一个需求,使用netfilter框架,在NF_IP_FORWARD点做钩子. 把钩到的包从指定的物理接口发出去,这个怎么实现?哪个大侠能举个例子,谢谢 1.偿试修改skb_buff->de ...

  2. 目的入口(dst_entry)

    最终生成的IP数据报的路由称为目的入口(dst_entry),目的入口反映了相邻的外部主机在主机内部的一种"映象",目的入口在内核中的定义如下:     struct dst_en ...

  3. 非常详细的详谈struct sk_buff

    非常详细的详谈struct sk_buff 排版太慢 难看的话可以下载WOR文档 专门详解struct_sk_buff 链接: http://pan.baidu.com/s/1gf8VNKR 密码: ...

  4. Open×××以及其它IP层×××的完全链路层处理的实现

    如果Open×××也能实现传输模式×××该有多好,如果基于Open×××实现的×××产品能仅仅作为一根昂贵的网线串接在用户网络环境,自动捕获感兴趣流量该有多好:如果它能做到只需要配置一个IP即可工作而 ...

  5. Open×××的Linux内核版,鬼魅的残缺 part I:The PROTOCOL

    Open×××的多处理一直都是问题,但是作为轻量级×××,这无所谓,但是如果你要将其作为重量级×××来用,那就必须考虑了.        之前,我将Open×××分裂成了多线程版本,但是由于Open× ...

  6. linux socket 中的backlog参数介绍

    问题 我们在linux上服务器起了一个serversocket,并且设置了backlog为2,并没有让serversock.accept() 在客户端上,我们一个一个的启动了连接socket, 当连接 ...

  7. 深入Linux内核网络堆栈

    前一段时间看到这篇帖子,确实很经典,于是翻出了英文原版再读,顺便再翻译出来供大家学习,这篇文章的中文版也早都有了,不过出于完全理解的目的,我还是将它翻译了出来,加进了自己的代码,虽然在上一周的翻译过程 ...

  8. linux 内核网络协议栈

    Linux网络协议栈之数据包处理过程  1前言 本来是想翻译<The journey of a packet through the linux 2.4 network stack>这篇文 ...

  9. tcp connection setup的实现

    bind的实现: 先来介绍几个地址结构. struct sockaddr 其实相当于一个基类的地址结构,其他的结构都能够直接转到sockaddr.举个例子比如当sa_family为PF_INET时,s ...

最新文章

  1. 代码示例_网络编程_select
  2. js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...
  3. Leetcode--438. 找到字符串中所有字母异位词
  4. php路由地址,ThinkPHP6.0路由地址 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...
  5. java文件比较_Java 比较两个任意文件是否相同
  6. spring配置文件各个属性详解
  7. 嵌入式Linux开发板移植SSH
  8. Pixhawk更换GPS协议 由默认ublox更换为NMEA GPGGA格式
  9. 锦锐单片机开发工具_飞思卡尔单片机PE开发工具硬件及软件
  10. 对服务器上出现大量的SYN_RCVD状态的TCP连接的问题分析
  11. 华为服务器如何修改ip地址,华为路由器IP地址设置问题-192.168.1.1进不去
  12. Adaptive Object Detection Using Adjacency and Zoom Prediction
  13. Y z推荐菜东家 易订货生鲜系统_新零售·新生鲜——易订货生鲜专版客户交流会(贵阳站)圆满结束!...
  14. 通信原理 数字基带信号之码间串扰
  15. 面向服务的WCF编程(三)
  16. 华为:求生存是当前主线 下阶段重点 to B数字化
  17. windows开启自启动jar包
  18. honts/htonl等大小端转换函数的原理
  19. 岛屿的个数java_LeetCode 200:岛屿数量 Number of Islands
  20. 计算机名ip自动配置文件,机房管理中自动配置IP地址和计算机名实现.pdf

热门文章

  1. MAYA2018常用命令
  2. Autodesk Maya 2018.6 中文特别版 Mac 顶级三维动画制作工具
  3. Denouncing Mafia
  4. 计算机考试感受作文,关于考试感受作文5篇
  5. 保存阿里云的邮件模板提示错误Template Text is too large.
  6. 解决tar (child): gzip: Cannot exec: Too many levels of symbolic links
  7. 批量添加Exchange邮件联系人
  8. Vue源码之用户watcher
  9. dwz使用mysql_Dwz_group
  10. 手撕LongAdder-add()源码