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 #ifndef ns_satlink_h
00040 #define ns_satlink_h
00041
00042 #include "node.h"
00043 #include "channel.h"
00044 #include "phy.h"
00045 #include "queue.h"
00046 #include "net-interface.h"
00047 #include "timer-handler.h"
00048
00049 #define LINK_HDRSIZE 16
00050
00051
00052 #define LINK_GENERIC 1
00053 #define LINK_GSL_GEO 2
00054 #define LINK_GSL_POLAR 3
00055 #define LINK_GSL_REPEATER 4
00056 #define LINK_GSL 5
00057 #define LINK_ISL_INTRAPLANE 6
00058 #define LINK_ISL_INTERPLANE 7
00059 #define LINK_ISL_CROSSSEAM 8
00060
00061 class SatLinkHead;
00062 class SatTrace;
00063 class SatNode;
00064
00065 class SatLL : public LL {
00066 public:
00067 SatLL() : LL(), arpcache_(-1), arpcachedst_(-1) {}
00068 virtual void sendDown(Packet* p);
00069 virtual void sendUp(Packet* p);
00070 virtual void recv(Packet* p, Handler* h);
00071 Channel* channel();
00072 SatNode* satnode() {return satnode_; }
00073 protected:
00074 int command(int argc, const char*const* argv);
00075 int getRoute(Packet *p);
00076 SatNode* satnode_;
00077
00078 int arpcache_;
00079 int arpcachedst_;
00080 };
00081
00083
00084 class SatMac;
00085 class MacSendTimer : public TimerHandler {
00086 public:
00087 MacSendTimer(SatMac *a) : TimerHandler() {a_ = a; }
00088 protected:
00089 virtual void expire(Event *e);
00090 SatMac *a_;
00091 };
00092
00093 class MacRecvTimer : public TimerHandler {
00094 public:
00095 MacRecvTimer(SatMac *a) : TimerHandler() {a_ = a; }
00096 protected:
00097 virtual void expire(Event *e);
00098 SatMac *a_;
00099 };
00100
00101 class MacHandlerRcv : public Handler {
00102 public:
00103 MacHandlerRcv(SatMac* m) : mac_(m) {}
00104 void handle(Event* e);
00105 protected:
00106 SatMac* mac_;
00107 };
00108
00109 class SatMac : public Mac {
00110 public:
00111 SatMac();
00112 void sendDown(Packet* p);
00113 void sendUp(Packet *p);
00114 virtual void send_timer() {}
00115 virtual void recv_timer() {}
00116
00117 protected:
00118 int command(int argc, const char*const* argv);
00119 MacSendTimer send_timer_;
00120 MacRecvTimer recv_timer_;
00121 SatTrace* drop_trace_;
00122 int trace_drops_;
00123 SatTrace* coll_trace_;
00124 int trace_collisions_;
00125 };
00126
00127
00128 class UnslottedAlohaMac : public SatMac {
00129 public:
00130 UnslottedAlohaMac();
00131 void sendDown(Packet* p);
00132 void sendUp(Packet *p);
00133 void send_timer();
00134 void recv_timer();
00135 void end_of_contention(Packet* p);
00136
00137 protected:
00138 virtual void backoff(double delay=0);
00139 Packet* snd_pkt_;
00140 Packet* rcv_pkt_;
00141 MacState tx_state_;
00142 MacState rx_state_;
00143 int rtx_;
00144 int rtx_limit_;
00145 double mean_backoff_;
00146 double send_timeout_;
00147 double end_of_contention_;
00148 };
00149
00151
00152 class SatPhy : public Phy {
00153 public:
00154 SatPhy() {}
00155 void sendDown(Packet *p);
00156 int sendUp(Packet *p);
00157 protected:
00158 int command(int argc, const char*const* argv);
00159 };
00160
00161 class RepeaterPhy : public Phy {
00162 public:
00163 RepeaterPhy() {}
00164 void recv(Packet* p, Handler*);
00165 void sendDown(Packet *p);
00166 int sendUp(Packet *) { return 0; }
00167 protected:
00168 };
00169
00171
00172
00173
00174
00175 class SatChannel : public Channel{
00176 friend class SatRouteObject;
00177 public:
00178 SatChannel(void);
00179 int getId() { return index_; }
00180 void add_interface(Phy*);
00181 void remove_interface(Phy*);
00182 int find_peer_mac_addr(int);
00183
00184 protected:
00185 double get_pdelay(Node* tnode, Node* rnode);
00186 private:
00187
00188 };
00189
00191
00192 class SatNode;
00193 class ErrorModel;
00194
00195
00196
00197
00198 class SatLinkHead : public LinkHead {
00199 public:
00200 SatLinkHead();
00201
00202
00203
00204 SatPhy* phy_tx() { return phy_tx_; }
00205 SatPhy* phy_rx() { return phy_rx_; }
00206 SatMac* mac() { return mac_; }
00207 SatLL* satll() { return satll_; }
00208 Queue* queue() { return queue_; }
00209 ErrorModel* errmodel() { return errmodel_; }
00210 int linkup_;
00211 SatNode* node() { return ((SatNode*) node_); }
00212
00213 protected:
00214 virtual int command(int argc, const char*const* argv);
00215 SatPhy* phy_tx_;
00216 SatPhy* phy_rx_;
00217 SatMac* mac_;
00218 SatLL* satll_;
00219 Queue* queue_;
00220 ErrorModel* errmodel_;
00221
00222 };
00223
00224 #endif