NS2.35中在satroute.cc,~.h中实现了集中式的路由
@@ 在.h文件中,主要有以下类:
1、SatRouteAgent
class SatRouteAgent : public Agent
继承关系:
SatRouteAgent<-Agent<-Connector<-NsObject<-TclObject, Handler
2、SatRouteObject
class SatRouteObject : public RouteLogic
继承关系:
SatRouteObject<-RouteLogic<-TclObject
@@ 在.cc文件中,主要有以下类:
static class SatRouteClass:public TclClass
{
public:
SatRouteClass ():TclClass ("Agent/SatRoute") { }
TclObject *create (int, const char *const *) {
return (new SatRouteAgent ());
}
} class_satroute;
static class SatRouteObjectClass:public TclClass
{
public:
SatRouteObjectClass ():TclClass ("SatRouteObject") { }
TclObject *create (int, const char *const *) {
return (new SatRouteObject ());
}
} class_satrouteobject;
上面两个类主要是为了实现C++和Tcl的交互,为通用定义,不去深究。
在.cc文件中主要还是实现.h中定义的两个类的方法。
@@ SatRouteObject实现了路由算法,包括计算网络拓扑,计算路由,分发路由表
计算网络拓扑:void SatRouteObject::compute_topology()
计算路由:void SatRouteObject::node_compute_routes(intnode)
voidSatRouteObject::recompute()
分发路由:voidSatRouteObject::populate_routing_tables(int node)
计算路由有两个,第一个计算某个节点的路由,第二个计算整个网络的路由,第二个调用的是基类RouteLogic的方法。
计算路由据说是集中式最短路径算法,难道是Dijkstra?
@@ 路由表的组织
在route.h中定义了路由的邻居链路代价表,路由表
struct adj_entry {
double cost;
void* entry;
};
struct route_entry {
public:
int next_hop;
void* entry;
};
在satroute.h中定义了转发表
// Entry in theforwarding table
struct slot_entry {
int next_hop;
NsObject* entry;
};
不知道路由表和转发表有什么区别?