📄 mac-802_11.h
字号:
#define DSSS_CWMax 1023#define DSSS_SlotTime 0.000020 // 20us#define DSSS_CCATime 0.000015 // 15us#define DSSS_RxTxTurnaroundTime 0.000005 // 5us#define DSSS_SIFSTime 0.000010 // 10us#define DSSS_PreambleLength 144 // 144 bits#define DSSS_PLCPHeaderLength 48 // 48 bitsclass PHY_MIB {public: u_int32_t CWMin; u_int32_t CWMax; double SlotTime; double CCATime; double RxTxTurnaroundTime; double SIFSTime; u_int32_t PreambleLength; u_int32_t PLCPHeaderLength;};/* * IEEE 802.11 Spec, section 11.4.4.2 * - default values for the MAC Attributes */#define MAC_RTSThreshold 3000 // bytes#define MAC_ShortRetryLimit 7 // retransmittions#define MAC_LongRetryLimit 4 // retransmissions#define MAC_FragmentationThreshold 2346 // bytes#define MAC_MaxTransmitMSDULifetime 512 // time units#define MAC_MaxReceiveLifetime 512 // time unitsclass MAC_MIB {public: // MACAddress; // GroupAddresses; u_int32_t RTSThreshold; u_int32_t ShortRetryLimit; u_int32_t LongRetryLimit; u_int32_t FragmentationThreshold; u_int32_t MaxTransmitMSDULifetime; u_int32_t MaxReceiveLifetime; // wqos - Wed 04 Oct 00, 09:20 - dugdale u_int32_t dot11CFPollable; u_char dot11CFPPeriod; u_int16_t dot11CFPMaxDuration; u_int16_t dot11BeaconPeriod; u_char dot11DTIMPeriod; // wqos - changes by dugdale ends // ManufacturerID; // ProductID; u_int32_t TransmittedFragmentCount; u_int32_t MulticastTransmittedFrameCount; u_int32_t FailedCount; u_int32_t RetryCount; u_int32_t MultipleRetryCount; u_int32_t FrameDuplicateCount; u_int32_t RTSSuccessCount; u_int32_t RTSFailureCount; u_int32_t ACKFailureCount; u_int32_t ReceivedFragmentCount; u_int32_t MulticastReceivedFrameCount; u_int32_t FCSErrorCount;};/* ====================================================================== The following destination class is used for duplicate detection. ====================================================================== */class Host {public: LIST_ENTRY(Host) link; u_int32_t index; u_int32_t seqno;};// wqos - Thu 05 Oct 00, 13:36 - almquist/* ====================================================================== PCF List and utilities ====================================================================== */class PCFPollElement{public: inline PCFPollElement(int macId, int cfPollField): macId_(macId), cfPollField_(cfPollField), dontPoll_(0), next_(NULL){} int macId_; int cfPollField_; int dontPoll_; PCFPollElement *next_;};class PCFPollList{public: PCFPollList(); ~PCFPollList(); int getNextPollable(); void insertNode(int macId, int cfPollable, int cfPollReq); int deleteNode(int macId); void initPoll(); void markDontPoll(int macId); void clearDontPoll(); int numPollable(); private: int nrOfNodes, onlyPollable; PCFPollElement *lastPollable, *lastPolled; PCFPollElement *firstElement, *lastElement;};// wqos - changes by almquist ends/* ====================================================================== The actual 802.11 MAC class. ====================================================================== */class Mac802_11 : public Mac { friend class DeferTimer; friend class BackoffTimer; friend class IFTimer; friend class NavTimer; friend class RxTimer; friend class TxTimer; // wqos - Tue 26 Sep 00, 16:43 - dugdale friend class BeaconTimer; // wqos - changes by dugdale endspublic: Mac802_11(PHY_MIB* p, MAC_MIB *m); void recv(Packet *p, Handler *h); inline int hdr_dst(char* hdr, int dst = -2); inline int hdr_src(char* hdr, int src = -2); inline int hdr_type(char* hdr, u_int16_t type = 0);protected: void backoffHandler(void); void deferHandler(void); void navHandler(void); void recvHandler(void); void sendHandler(void); void txHandler(void); // wqos - Tue 26 Sep 00, 16:43 - dugdale virtual void beaconHandler(void); virtual void pcfHandler(void); // wqos - changes by dugdale ends private: int command(int argc, const char*const* argv); /* * Called by the timers. */ void recv_timer(void); void send_timer(void); int check_pktCTRL(); int check_pktRTS(); int check_pktTx(); // wqos - Tue 26 Sep 00, 17:04 - dugdale virtual int check_pktPCF(); // wqos - changes by dugdale ends /* * Packet Transmission Functions. */ void send(Packet *p, Handler *h); void sendRTS(int dst); void sendCTS(int dst, double duration); void sendACK(int dst); void sendDATA(Packet *p); void RetransmitRTS(); void RetransmitDATA(); // wqos - Tue 26 Sep 00, 17:04 - dugdale void send_beacon(); void sendPoll(); void sendCFEnd(); void pcfSend(int type, int subtype); // wqos - changes by dugdale ends /* * Packet Reception Functions. */ void recvRTS(Packet *p); void recvCTS(Packet *p); void recvACK(Packet *p); void recvDATA(Packet *p); // wqos - Wed 29 Nov 00, 13:20 - dugdale void recvPoll(Packet *p); // wqos - changes by dugdale ends void capture(Packet *p); void collision(Packet *p); void discard(Packet *p, const char* why); void rx_resume(void); void tx_resume(void); inline int is_idle(void); // wqos - Mon 09 Oct 00, 09:45 - dugdale void do_cfp(); // Function to do a CFP... Remove this? // wqos - changes by dugdale ends /* * Debugging Functions. */ void trace_pkt(Packet *p); void dump(char* fname); inline int initialized() { return (phymib_ && macmib_ && cache_ && logtarget_ && Mac::initialized()); } void mac_log(Packet *p) { logtarget_->recv(p, (Handler*) 0); } inline double TX_Time(Packet *p) { double t = DATA_Time((HDR_CMN(p))->size()); if(t < 0.0) { drop(p, "XXX"); exit(1); } return t; } inline void inc_cw() { cw_ = (cw_ << 1) + 1; if(cw_ > phymib_->CWMax) cw_ = phymib_->CWMax; } inline void rst_cw() { cw_ = phymib_->CWMin; }// wqos - Sat 18 Aug 01, 16:39 - dugdale inline u_int32_t usec(double t) { u_int32_t us = (u_int16_t)ceil(t *= 1e6); return us; }// wqos - changes by dugdale ends // wqos - Thu 05 Oct 00, 10:42 - dugdale // Converts seconds to TU inline u_int16_t tu(double t) { return (u_int16_t)ceil(t/0.001024); } // Converts TU to seconds inline double tutos(int t) { return (double)(t*0.001024); } // wqos - changes by dugdale ends // wqos - Sat 18 Aug 01, 16:39 - dugdale inline void set_nav(u_int32_t us) {// wqos - changes by dugdale ends double now = Scheduler::instance().clock(); double t = us * 1e-6; if((now + t) > nav_) { nav_ = now + t; if(mhNav_.busy()) mhNav_.stop(); mhNav_.start(t); } }protected: PHY_MIB *phymib_; MAC_MIB *macmib_;private: /* * Mac Timers */ IFTimer mhIF_; // interface timer NavTimer mhNav_; // NAV timer RxTimer mhRecv_; // incoming packets TxTimer mhSend_; // outgoing packets // wqos - Tue 26 Sep 00, 16:46 - dugdale BeaconTimer mhBeacon_; // Beacon timer // wqos - changes by dugdale ends DeferTimer mhDefer_; // defer timer BackoffTimer mhBackoff_; // backoff timer /* ============================================================ Internal MAC State ============================================================ */ double nav_; // Network Allocation Vector MacState rx_state_; // incoming state (MAC_RECV or MAC_IDLE) MacState tx_state_; // outgoint state int tx_active_; // transmitter is ACTIVE Packet *pktRTS_; // outgoing RTS packet Packet *pktCTRL_; // outgoing non-RTS packet // wqos - Tue 10 Oct 00, 14:14 - dugdale Packet *pktPCF_; // outgoing PCF stuff // wqos - changes by dugdale ends u_int32_t cw_; // Contention Window u_int32_t ssrc_; // STA Short Retry Count u_int32_t slrc_; // STA Long Retry Count double sifs_; // Short Interface Space double pifs_; // PCF Interframe Space double difs_; // DCF Interframe Space double eifs_; // Extended Interframe Space double tx_sifs_; double tx_pifs_; double tx_difs_; int min_frame_len_; NsObject* logtarget_; // wqos - Sat 30 Sep 00, 18:58 - dugdale // If this is non-zero then this is a PC int pc_; u_char dtimcount_, cfpcount_; int cfp_; // Non-zero during a CFP PCFPollList *pollList_; int pollsToSend_, btbs_; double lastPoll_; // wqos - changes by dugdale ends /* ============================================================ Duplicate Detection state ============================================================ */ u_int16_t sta_seqno_; // next seqno that I'll use int cache_node_count_; Host *cache_;};#endif /* __mac_80211_h__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -