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
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #ifdef NS_DIFFUSION
00051
00052 #ifndef DIFFUSION_RTG
00053 #define DIFFUSION_RTG
00054
00055 #include "filter_core.hh"
00056 #include "iodev.hh"
00057 #include "events.hh"
00058 #include "classifier-port.h"
00059 #include "ll.h"
00060 #include "ns-process.h"
00061 #include "agent.h"
00062 #include "trace.h"
00063 #include "message.hh"
00064
00065 class DiffusionCoreAgent;
00066 class DiffRoutingAgent;
00067 extern DiffPacket DupPacket(DiffPacket pkt);
00068
00069 class LocalApp : public DiffusionIO {
00070 public:
00071 LocalApp(DiffRoutingAgent *agent) { agent_ = agent;}
00072 DiffPacket recvPacket(int fd);
00073 void sendPacket(DiffPacket p, int len, int dst);
00074 protected:
00075 DiffRoutingAgent *agent_;
00076 };
00077
00078 class LinkLayerAbs : public DiffusionIO {
00079 public:
00080 LinkLayerAbs(DiffRoutingAgent *agent) { agent_ = agent;}
00081 DiffPacket recvPacket(int fd);
00082 void sendPacket(DiffPacket p, int len, int dst);
00083 protected:
00084 DiffRoutingAgent *agent_;
00085 };
00086
00087 class DiffusionData : public AppData {
00088 private:
00089 Message *data_;
00090 int len_;
00091 public:
00092 DiffusionData(Message *data, int len) : AppData(DIFFUSION_DATA), data_(0)
00093 {
00094 data_ = data;
00095 len_ = len;
00096 }
00097 ~DiffusionData() { delete data_; }
00098 Message *data() {return data_;}
00099 int size() const { return len_; }
00100 AppData* copy() {
00101 Message *newdata = CopyMessage(data_);
00102 DiffusionData *dup = new DiffusionData(newdata, len_);
00103 return dup;
00104 }
00105 };
00106
00107
00108 class DiffRoutingAgent : public Agent {
00109 public:
00110 DiffRoutingAgent(int nodeid);
00111 int command(int argc, const char*const* argv);
00112
00113 void initpkt(Packet* p, Message* msg, int len);
00114 Packet* createNsPkt(Message *msg, int len, int dst);
00115 void recv(Packet*, Handler*);
00116 void sendPacket(DiffPacket p, int len, int dst);
00117
00118 DiffusionCoreAgent *getagent() { return agent_; }
00119
00120
00121 void trace (char *fmt,...);
00122
00123 PortClassifier *port_dmux() {return port_dmux_; }
00124 private:
00125 int addr_;
00126 Trace *tracetarget_;
00127
00128
00129 DiffusionCoreAgent *agent_;
00130
00131
00132 PortClassifier *port_dmux_;
00133
00134 };
00135
00136 #endif //diffrtg
00137 #endif // NS
00138