![]() |
User Manual, Developers Guide and API Documentation |
![]() |
00001 /****************************************************************************** 00002 * Glue * 00003 * __________________________________________________________________________ * 00004 * * 00005 * Copyright (C) 2005-2006 * 00006 * Lehrstuhl fuer Kommunikationsnetze (ComNets) * 00007 * Kopernikusstr. 16, D-52074 Aachen, Germany * 00008 * phone: ++49-241-80-27910 (phone), fax: ++49-241-80-22242 * 00009 * email: wns@comnets.rwth-aachen.de * 00010 * www: http://wns.comnets.rwth-aachen.de * 00011 ******************************************************************************/ 00012 00013 #ifndef GLUE_MAC_CSMACA_HPP 00014 #define GLUE_MAC_CSMACA_HPP 00015 00016 #include <GLUE/mac/Backoff.hpp> 00017 00018 #include <WNS/ldk/FunctionalUnit.hpp> 00019 #include <WNS/ldk/CommandTypeSpecifier.hpp> 00020 #include <WNS/ldk/Command.hpp> 00021 #include <WNS/ldk/HasReceptor.hpp> 00022 #include <WNS/ldk/HasConnector.hpp> 00023 #include <WNS/ldk/HasDeliverer.hpp> 00024 #include <WNS/ldk/arq/StopAndWait.hpp> 00025 #include <WNS/logger/Logger.hpp> 00026 #include <WNS/Cloneable.hpp> 00027 #include <WNS/service/phy/copper/DataTransmissionFeedback.hpp> 00028 #include <WNS/service/phy/copper/CarrierSensing.hpp> 00029 #include <WNS/Observer.hpp> 00030 #include <WNS/simulator/Time.hpp> 00031 00032 namespace glue { namespace mac { 00033 00034 class CSMACACommand : 00035 public wns::ldk::Command 00036 { 00037 public: 00038 struct { 00039 } local; 00040 00041 struct { 00042 } peer; 00043 00044 struct { 00045 } magic; 00046 }; 00047 00054 class CSMACA : 00055 public wns::ldk::FunctionalUnit, 00056 public wns::ldk::CommandTypeSpecifier<CSMACACommand>, 00057 public wns::ldk::HasReceptor<>, 00058 public wns::ldk::HasConnector<>, 00059 public wns::ldk::HasDeliverer<>, 00060 public wns::Cloneable<CSMACA>, 00061 public virtual BackoffObserver 00062 { 00063 public: 00064 00065 CSMACA(wns::ldk::fun::FUN* fun, const wns::pyconfig::View& config); 00066 00067 virtual 00068 ~CSMACA(); 00069 00070 private: 00071 // FunctionalUnit / CompoundHandlerInterface 00072 virtual bool 00073 doIsAccepting(const wns::ldk::CompoundPtr& _compound) const; 00074 00075 virtual void 00076 doSendData(const wns::ldk::CompoundPtr& _compound); 00077 00078 virtual void 00079 doWakeup(); 00080 00081 virtual void 00082 doOnData(const wns::ldk::CompoundPtr& _compound); 00083 00084 virtual void 00085 onFUNCreated(); 00086 00087 virtual void 00088 backoffExpired(); 00089 00090 virtual void 00091 onCarrierIdle(); 00092 00093 virtual void 00094 sifsExpired(); 00095 00096 wns::logger::Logger logger; 00097 00098 wns::ldk::CompoundPtr iFrame; 00099 wns::ldk::CompoundPtr ackFrame; 00100 00101 std::string stopAndWaitARQName; 00102 wns::ldk::arq::StopAndWait* stopAndWaitARQ; 00103 00104 Backoff backoff; 00105 wns::simulator::Time sifsLength; 00106 }; 00107 00108 00109 class StopAndWait : 00110 public wns::ldk::arq::StopAndWait, 00111 public wns::Observer<wns::service::phy::copper::DataTransmissionFeedbackInterface>, 00112 public wns::Observer<wns::service::phy::copper::CarrierSensing> 00113 { 00114 public: 00115 StopAndWait(wns::ldk::fun::FUN* fuNet, const wns::pyconfig::View& config); 00116 00117 virtual wns::ldk::CompoundPtr getData(); 00118 00119 virtual void onTimeout(); 00120 00121 // observer DataTransmissionFeedbackInterface 00122 virtual void onDataSent(wns::osi::PDUPtr pdu); 00123 00124 // observer CarrierSensing 00125 virtual void onCarrierIdle(); 00126 virtual void onCarrierBusy(); 00127 virtual void onCollision(); 00128 00129 private: 00130 double shortResendTimeout; 00131 double longResendTimeout; 00132 bool waitingForAckTransmission; 00133 00134 00135 }; 00136 } // mac 00137 } // glue 00138 00139 #endif // GLUE_MAC_CSMACA_HPP
1.5.5