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的初步理解,等我对它有了更加深入的认识后,会补充在这里的。
- AOMDV协议中的路由表rt
- OSPF路由协议中的邻居与邻接
- 路由选择表维护协议
- 路由协议
- 路由协议
- 路由协议
- 路由协议
- 路由协议
- 路由协议
- 路由协议
- 路由协议
- 动态路由协议在协议栈中的位置+路由自环
- 【RIP路由协议】由相邻路由发来的RIP信息更新当前路由的路由表
- 实现一个手动配置路由表的无线路由协议
- 《网络协议》路由协议
- 自组网环境中的组播路由协议
- OSPF路由协议中的邻居与邻接的区别
- 物联网中的RPL路由协议(一)----概述
- jQuery select操作控制方法小结
- Linux部署Java应用Too many open files解决方案
- 练练正则
- 高级字符驱动程序操作(poll机制)
- 函数参数列表为空和void的区别
- AOMDV协议中的路由表rt
- Hibernate实战_笔记13(切换回Hibernate接口)
- 动态数组vector和List
- Linux C一站式学习习题答案 剪刀石头布
- ASP.NET 生成分页HTML标签
- Part 3. Classes and Data Abstraction
- POJ 1723 SOLDIERS
- java.lang.ClassNotFoundException: Didn't find class "*****Activity" on path: /data/app/*******.apk
- A20,陀螺仪LIS3LV02DQ