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_ll_h
00040 #define ns_ll_h
00041
00042 #include <delay.h>
00043 #include <queue.h>
00044 #include <arp.h>
00045 #include <classifier.h>
00046 #include <lanRouter.h>
00047 #include <varp.h>
00048
00049 enum LLFrameType {
00050 LL_DATA = 0x0001,
00051 LL_ACK = 0x0010
00052 };
00053
00054 struct hdr_ll {
00055 LLFrameType lltype_;
00056 int seqno_;
00057 int ackno_;
00058 int bopno_;
00059 int eopno_;
00060 int psize_;
00061 double sendtime_;
00062
00063 static int offset_;
00064 inline int& offset() { return offset_; }
00065 static hdr_ll* access(const Packet* p) {
00066 return (hdr_ll*) p->access(offset_);
00067 }
00068
00069 inline LLFrameType& lltype() { return lltype_; }
00070 inline int& seqno() { return seqno_; }
00071 inline int& ackno() { return ackno_; }
00072 inline int& bopno() { return bopno_; }
00073 inline int& eopno() { return eopno_; }
00074 inline int& psize() { return psize_; }
00075 inline double& sendtime() { return sendtime_; }
00076 };
00077
00078
00079 class LL : public LinkDelay {
00080 public:
00081 friend void ARPTable::arpinput(Packet *p, LL* ll);
00082 friend void ARPTable::arprequest(nsaddr_t src, nsaddr_t dst, LL* ll);
00083 LL();
00084 virtual void recv(Packet* p, Handler* h);
00085 void handle(Event* e) { recv((Packet*)e, 0); }
00086 inline int initialized() {
00087 return (mac_ && uptarget_ && downtarget_);
00088 }
00089
00090 virtual void sendUp(Packet* p);
00091 virtual void sendDown(Packet* p);
00092
00093 inline int seqno() { return seqno_; }
00094 inline int ackno() { return ackno_; }
00095 inline int macDA() { return macDA_; }
00096 inline virtual void hdr_dst(Packet *p, int macDA) {}
00097 inline Queue *ifq() { return ifq_; }
00098 inline NsObject* downtarget() { return downtarget_; }
00099 inline NsObject* uptarget() { return uptarget_; }
00100 inline ARPTable *arp_table() { return arptable_; }
00101
00102 protected:
00103 int command(int argc, const char*const* argv);
00104
00105 int seqno_;
00106 int ackno_;
00107 int macDA_;
00108
00109 Queue* ifq_;
00110 Mac* mac_;
00111 LanRouter* lanrouter_;
00112 ARPTable* arptable_;
00113 VARPTable* varp_;
00114
00115 NsObject* downtarget_;
00116 NsObject* uptarget_;
00117
00118
00119 };
00120
00121 #endif