00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __aodv_rtable_h__
00032 #define __aodv_rtable_h__
00033
00034 #include <assert.h>
00035 #include <sys/types.h>
00036 #include <config.h>
00037 #include <lib/bsd-list.h>
00038 #include <scheduler.h>
00039
00040 #define CURRENT_TIME Scheduler::instance().clock()
00041 #define INFINITY2 0xff
00042
00043
00044
00045
00046 class AODV_Neighbor {
00047 friend class AODV;
00048 friend class aodv_rt_entry;
00049 public:
00050 AODV_Neighbor(u_int32_t a) { nb_addr = a; }
00051
00052 protected:
00053 LIST_ENTRY(AODV_Neighbor) nb_link;
00054 nsaddr_t nb_addr;
00055 double nb_expire;
00056 };
00057
00058 LIST_HEAD(aodv_ncache, AODV_Neighbor);
00059
00060
00061
00062
00063 class AODV_Precursor {
00064 friend class AODV;
00065 friend class aodv_rt_entry;
00066 public:
00067 AODV_Precursor(u_int32_t a) { pc_addr = a; }
00068
00069 protected:
00070 LIST_ENTRY(AODV_Precursor) pc_link;
00071 nsaddr_t pc_addr;
00072 };
00073
00074 LIST_HEAD(aodv_precursors, AODV_Precursor);
00075
00076
00077
00078
00079
00080
00081 class aodv_rt_entry {
00082 friend class aodv_rtable;
00083 friend class AODV;
00084 friend class LocalRepairTimer;
00085 public:
00086 aodv_rt_entry();
00087 ~aodv_rt_entry();
00088
00089 void nb_insert(nsaddr_t id);
00090 AODV_Neighbor* nb_lookup(nsaddr_t id);
00091
00092 void pc_insert(nsaddr_t id);
00093 AODV_Precursor* pc_lookup(nsaddr_t id);
00094 void pc_delete(nsaddr_t id);
00095 void pc_delete(void);
00096 bool pc_empty(void);
00097
00098 double rt_req_timeout;
00099 u_int8_t rt_req_cnt;
00100
00101 protected:
00102 LIST_ENTRY(aodv_rt_entry) rt_link;
00103
00104 nsaddr_t rt_dst;
00105 u_int32_t rt_seqno;
00106
00107 u_int16_t rt_hops;
00108 int rt_last_hop_count;
00109 nsaddr_t rt_nexthop;
00110
00111 aodv_precursors rt_pclist;
00112 double rt_expire;
00113 u_int8_t rt_flags;
00114
00115 #define RTF_DOWN 0
00116 #define RTF_UP 1
00117 #define RTF_IN_REPAIR 2
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 #define MAX_HISTORY 3
00129 double rt_disc_latency[MAX_HISTORY];
00130 char hist_indx;
00131 int rt_req_last_ttl;
00132
00133
00134
00135
00136
00137
00138
00139 aodv_ncache rt_nblist;
00140 };
00141
00142
00143
00144
00145
00146
00147 class aodv_rtable {
00148 public:
00149 aodv_rtable() { LIST_INIT(&rthead); }
00150
00151 aodv_rt_entry* head() { return rthead.lh_first; }
00152
00153 aodv_rt_entry* rt_add(nsaddr_t id);
00154 void rt_delete(nsaddr_t id);
00155 aodv_rt_entry* rt_lookup(nsaddr_t id);
00156
00157 private:
00158 LIST_HEAD(aodv_rthead, aodv_rt_entry) rthead;
00159 };
00160
00161 #endif