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 #ifndef ns_rtmodule_h
00027 #define ns_rtmodule_h
00028
00029 #include <tclcl.h>
00030 #include "addr-params.h"
00031 #include "classifier.h"
00032 #include "classifier-hash.h"
00033 #include "classifier-hier.h"
00034
00035
00036
00037 class NsObject;
00038 class Node;
00039 class VirtualClassifier;
00040 class DestHashClassifier;
00041
00042
00043 class RoutingModule : public TclObject {
00044 public:
00045 RoutingModule();
00046
00047
00048
00049 inline Node* node() { return n_; }
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 virtual int attach(Node *n) { n_ = n; return TCL_OK; }
00060 virtual int command(int argc, const char*const* argv);
00061 virtual const char* module_name() const { return NULL; }
00062
00063
00064 void route_notify(RoutingModule *rtm);
00065 void unreg_route_notify(RoutingModule *rtm);
00066 virtual void add_route(char *dst, NsObject *target);
00067 virtual void delete_route(char *dst, NsObject *nullagent);
00068 void set_table_size(int nn);
00069 void set_table_size(int level, int csize);
00070 RoutingModule *next_rtm_;
00071
00072 protected:
00073 Node *n_;
00074 Classifier *classifier_;
00075 };
00076
00077 class BaseRoutingModule : public RoutingModule {
00078 public:
00079 BaseRoutingModule() : RoutingModule() {}
00080 virtual const char* module_name() const { return "Base"; }
00081 virtual int command(int argc, const char*const* argv);
00082 protected:
00083 DestHashClassifier *classifier_;
00084 };
00085
00086 class McastRoutingModule : public RoutingModule {
00087 public:
00088 McastRoutingModule() : RoutingModule() {}
00089 virtual const char* module_name() const { return "Mcast"; }
00090 virtual int command(int argc, const char*const* argv);
00091 protected:
00092 DestHashClassifier *classifier_;
00093 };
00094
00095 class HierRoutingModule : public RoutingModule {
00096 public:
00097 HierRoutingModule() : RoutingModule() {}
00098 virtual const char* module_name() const { return "Hier"; }
00099 virtual int command(int argc, const char*const* argv);
00100 protected:
00101 HierClassifier *classifier_;
00102 };
00103
00104 class ManualRoutingModule : public RoutingModule {
00105 public:
00106 ManualRoutingModule() : RoutingModule() {}
00107 virtual const char* module_name() const { return "Manual"; }
00108 virtual int command(int argc, const char*const* argv);
00109 void add_route(char *dst, NsObject *target);
00110 protected:
00111 DestHashClassifier *classifier_;
00112 };
00113
00114 class SourceRoutingModule : public RoutingModule {
00115 public:
00116 SourceRoutingModule() : RoutingModule() {}
00117 virtual const char* module_name() const { return "Source"; }
00118 virtual int command(int argc, const char*const* argv);
00119 };
00120
00121 class QSRoutingModule : public RoutingModule {
00122 public:
00123 QSRoutingModule() : RoutingModule() {}
00124 virtual const char* module_name() const { return "QS"; }
00125 virtual int command(int argc, const char*const* argv);
00126 };
00127
00128 class VcRoutingModule : public RoutingModule {
00129 public:
00130 VcRoutingModule() : RoutingModule() {}
00131 virtual const char* module_name() const { return "VC"; }
00132 virtual int command(int argc, const char*const* argv);
00133 virtual void add_route(char *, NsObject *);
00134 };
00135
00136
00137
00138 class PgmRoutingModule : public RoutingModule {
00139 public:
00140 PgmRoutingModule() : RoutingModule() {}
00141 virtual const char* module_name() const { return "PGM"; }
00142 };
00143
00144 class LmsRoutingModule : public RoutingModule {
00145 public:
00146 LmsRoutingModule() : RoutingModule() {}
00147 virtual const char* module_name() const { return "LMS"; }
00148
00149 virtual void add_route(char *dst, NsObject *target){}
00150 };
00151
00152 #endif // ns_rtmodule_h