AOMDV协议中的路由表rt

来源:互联网 发布:mysql安装失败 编辑:程序博客网 时间:2024/06/05 02:46

读了大概一半的aomdv.cc代码,rt出现了很多很多次,导致我如果不研究一下,aomdv的代码完全读不下去……

嗯,看一下rt:aomdv_rt_entry *rt 是一个指向aomdv_rt_entry类的指针。

而aomdv_rt_entry类是在aomdv_rtable.h中定义的,下面具体看一下。


定义路由表节点的类:aomdv_rt_entry:

其中定义的成员函数主要分为:对邻居表nb的操作,对路径path的操作以及对先导pc的操作。而成员函数,在我的理解中,应该就是路由表项包含的具体内容了。

class aomdv_rt_entry {        friend class aomdv_rtable;        friend class AOMDV;friend class LocalRepairTimer; public:        aomdv_rt_entry();        ~aomdv_rt_entry();        void            nb_insert(nsaddr_t id);        AOMDV_Neighbor*  nb_lookup(nsaddr_t id); // AOMDV code        AOMDV_Path*   path_insert(nsaddr_t nexthop, u_int16_t hopcount, double expire_time, nsaddr_t lasthop=0);        AOMDV_Path*   path_lookup(nsaddr_t id);  // lookup path by nexthop        AOMDV_Path*   disjoint_path_lookup(nsaddr_t nexthop, nsaddr_t lasthop);        bool         new_disjoint_path(nsaddr_t nexthop, nsaddr_t lasthop);        AOMDV_Path*   path_lookup_lasthop(nsaddr_t id);   // lookup path by lasthop        void         path_delete(nsaddr_t id);           // delete path by nexthop        void         path_delete(void);                  // delete all paths        void         path_delete_longest(void);          // delete longest path        bool         path_empty(void);                   // is the path list empty?        AOMDV_Path*   path_find(void);                    // find the path that we got first        AOMDV_Path*   path_findMinHop(void);              // find the shortest path        u_int16_t    path_get_max_hopcount(void);          u_int16_t    path_get_min_hopcount(void);          double       path_get_max_expiration_time(void);         void         path_purge(void);        void            pc_insert(nsaddr_t id);        AOMDV_Precursor* pc_lookup(nsaddr_t id);        void pc_delete(nsaddr_t id);        void pc_delete(void);        bool pc_empty(void);        double          rt_req_timeout;         // when I can send another req        u_int8_t        rt_req_cnt;             // number of route requests  // AOMDV code        u_int8_t        rt_flags; protected:        LIST_ENTRY(aomdv_rt_entry) rt_link;        nsaddr_t        rt_dst;        u_int32_t       rt_seqno;/* u_int8_t rt_interface; */ // AOMDV code        u_int16_t       rt_hops;             // hop count        u_int16_t       rt_advertised_hops;  // advertised hop countint rt_last_hop_count;// last valid hop count // AOMDV code        aomdv_paths      rt_path_list;     // list of paths        u_int32_t       rt_highest_seqno_heard;         int             rt_num_paths_;bool rt_error;        /* list of precursors */         aomdv_precursors rt_pclist;        double          rt_expire;     // when entry expires#define RTF_DOWN 0#define RTF_UP 1#define RTF_IN_REPAIR 2        /*         *  Must receive 4 errors within 3 seconds in order to mark         *  the route down.        u_int8_t        rt_errors;      // error count        double          rt_error_time;#define MAX_RT_ERROR            4       // errors#define MAX_RT_ERROR_TIME       3       // seconds         */#define MAX_HISTORY3double rt_disc_latency[MAX_HISTORY];char hist_indx;        int rt_req_last_ttl;        // last ttl value used// last few route discovery latencies// double rt_length [MAX_HISTORY];// last few route lengths        /*         * a list of neighbors that are using this route.         */        aomdv_ncache          rt_nblist;};


根据aomdv_rt_entry的protected成员参数,可以得到一条路由表项中包含的内容可能有:

一般参数:

 rt_dst | rt_seqno | rt_hops | rt_advertised_hops | rt_last_hop_count | 

与路径path有关的参数(class AOMDV_Path):

rt_path_list | rt_highest_seqno_heard | rt_num_paths |

与precursor有关的参数(class AOMDV_Precursor):

rt_pclist | rt_expire |

与history有关的参数:

rt_disc_latency[MAX_HISTORY] | hist_index | rt_req_last_ttl |

邻居表:

rt_nblist

其中包含三个链表:路径链表,先导链表(这个暂时不知道用来干嘛)和邻居表。根据发送数据的不同(RREQ/RREP/RERR),应该有不同的RREQ表RREP表什么的,但是不会独立写一个这样的表,而是把这些表当作路由表的一部分(这个来自aomdv.cc的注释),所以应该是根据不同的数据包类型,选择性的使用这些参数,以形成不同格式的表 。


在路由表类aomdv_rtable中包含了对路由表的操作,如增加/删除/查询表项等:

class aomdv_rtable { public:aomdv_rtable() { LIST_INIT(&rthead); }        aomdv_rt_entry*       head() { return rthead.lh_first; }        aomdv_rt_entry*       rt_add(nsaddr_t id);        void                 rt_delete(nsaddr_t id);        aomdv_rt_entry*       rt_lookup(nsaddr_t id); // AOMDV codevoid                 rt_dumptable();bool                 rt_has_active_route(); private:        LIST_HEAD(aomdv_rthead, aomdv_rt_entry) rthead;};
路由表rt也构成了一个链表。对路由表的理解直接关系到对协议的理解,因为在协议中涉及到rt的地方真的是太多了,在aomdv.cc中随手搜了一下rt简直能晃瞎我的眼……好吧,这些 只是对rt的初步理解,等我对它有了更加深入的认识后,会补充在这里的。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 对方把保权的房子卖给我怎么办 内存卡在手机上显示损坏怎么办 内存卡显示但是下载不了东西怎么办 相机sd卡没办法读卡怎么办 尼康相机新sd卡显示满了怎么办 修冰箱没几个月又坏了怎么办 星露谷物语活动中心成了仓库怎么办 你家如果油锅起火时应该怎么办 当你遇到电器起火时应该怎么办 酷派大神f2充不进去电怎么办 借车子别人开违章一年了怎么办 快递刚发货我点错了收货怎么办 快递收货地址错了已经发货了怎么办 老公在外地工地上夜班吃不好怎么办 工人在工地干活被吊车撞了怎么办 小米手机记不得保密柜密码怎么办 华为手机文件保密柜密码忘了怎么办 超市寄存柜密码纸丢了怎么办 佳明软件安装不到手机上怎么办 最好的朋友的抢了自己的活怎么办 支付宝被实名验证上限了怎么办 装修预留插座被挡了一半怎么办 衣服放在柜子里面有味道怎么办 河北发货一个柜到天津港口怎么办 家用潜水泵更换电容后压力小怎么办 无塔供水井水水位低了怎么办 应急部成立林场的专业灭火队怎么办 路由器我恢复出厂设置断网了怎么办 多囊卵巢综合症不来月经怎么办 天刀普通血战苍梧城没有太白怎么办 天涯明月刀把沈妄言打入水中怎么办 天涯明月刀刷本队友技能太花怎么办 手机收所有短信时显示被隐藏怎么办 div放图片多出的空白怎么办 我14岁射精让我记忆力差了怎么办 qq闪退聊天记录全没了怎么办 木瓜奇迹忘记升级过头转职了怎么办 孩子进入青春期什么坏事都干怎么办 母狗狗第一次来月经应该怎么办图 社保断了想补缴怎么办?这些要知道 换工作社保断了一个月怎么办