📄 mac-802_11.h
字号:
/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- * * Copyright (c) 1997 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Computer Systems * Engineering Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Header: /nfs/jade/vint/CVSROOT/ns-2/mac/mac-802_11.h,v 1.23 2003/12/10 21:06:57 xuanc Exp $ * * Ported from CMU/Monarch's code, nov'98 -Padma. * wireless-mac-802_11.h */#ifndef ns_mac_80211_h#define ns_mac_80211_h// Added by Sushmita to support event tracing (singal@nunki.usc.edu)#include "address.h"#include "ip.h"#include "mac-timers.h"#include "marshall.h"class EventTrace;#define GET_ETHER_TYPE(x) GET2BYTE((x))#define SET_ETHER_TYPE(x,y) {u_int16_t t = (y); STORE2BYTE(x,&t);}/* ====================================================================== Frame Formats ====================================================================== */#define MAC_ProtocolVersion 0x00#define MAC_Type_Management 0x00#define MAC_Type_Control 0x01#define MAC_Type_Data 0x02#define MAC_Type_Reserved 0x03#define MAC_Subtype_RTS 0x0B#define MAC_Subtype_CTS 0x0C#define MAC_Subtype_ACK 0x0D#define MAC_Subtype_Data 0x00//-ak----// BSS type//#define BSS_Infrastructure 0x00//#define BSS_Adhoc 0x01struct frame_control { u_char fc_subtype : 4; u_char fc_type : 2; u_char fc_protocol_version : 2; u_char fc_order : 1; u_char fc_wep : 1; u_char fc_more_data : 1; u_char fc_pwr_mgt : 1; u_char fc_retry : 1; u_char fc_more_frag : 1; u_char fc_from_ds : 1; u_char fc_to_ds : 1;};//--ak------------/*struct probereq_frame { struct frame_control preq_fc; u_int16_t preq_duration; u_char preq_da[ETHER_ADDR_LEN]; u_char preq_sa[ETHER_ADDR_LEN]; u_char preq_bss_type; int preq_bssid;};struct scanresp_frame{ struct frame_control pres_fc; u_int16_t pres_duration; u_char pres_da[ETHER_ADDR_LEN]; u_char pres_sa[ETHER_ADDR_LEN]; u_char pres_bss_type; int pres_bssid; //current channel //supported datarate};*/struct rts_frame { struct frame_control rf_fc; u_int16_t rf_duration; u_char rf_ra[ETHER_ADDR_LEN]; u_char rf_ta[ETHER_ADDR_LEN]; u_char rf_fcs[ETHER_FCS_LEN];};struct cts_frame { struct frame_control cf_fc; u_int16_t cf_duration; u_char cf_ra[ETHER_ADDR_LEN]; u_char cf_fcs[ETHER_FCS_LEN];};struct ack_frame { struct frame_control af_fc; u_int16_t af_duration; u_char af_ra[ETHER_ADDR_LEN]; u_char af_fcs[ETHER_FCS_LEN];};// XXX This header does not have its header access function because it shares// the same header space with hdr_mac.struct hdr_mac802_11 { struct frame_control dh_fc; u_int16_t dh_duration;// change wrt Mike's code/* u_char dh_da[ETHER_ADDR_LEN]; u_char dh_sa[ETHER_ADDR_LEN]; u_char dh_bssid[ETHER_ADDR_LEN];*/ u_char dh_ra[ETHER_ADDR_LEN]; u_char dh_ta[ETHER_ADDR_LEN]; u_char dh_3a[ETHER_ADDR_LEN]; u_int16_t dh_scontrol; u_char dh_body[0]; // XXX Non-ANSI};/* ====================================================================== Definitions ====================================================================== */// change wrt Mike's code/*#define PLCP_HDR_LEN \ ((phymib_->PreambleLength >> 3) + \ (phymib_->PLCPHeaderLength >> 3))#define ETHER_HDR_LEN11 \ (PLCP_HDR_LEN + \ sizeof(struct hdr_mac802_11) + \ ETHER_FCS_LEN)#define ETHER_RTS_LEN \ (PLCP_HDR_LEN + \ sizeof(struct rts_frame))#define ETHER_CTS_LEN \ (PLCP_HDR_LEN + \ sizeof(struct cts_frame))#define ETHER_ACK_LEN \ (PLCP_HDR_LEN + \ sizeof(struct ack_frame))*//* * IEEE 802.11 Spec, section 15.3.2 * - default values for the DSSS PHY MIB */// change wrt Mike's code/*#define DSSS_CWMin 31#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 bits#define DSSS_PLCPDataRate 1.0e6 // 1Mbps*//* Must account for propagation delays added by the channel model when * calculating tx timeouts (as set in tcl/lan/ns-mac.tcl). * -- Gavin Holland, March 2002 */#define DSSS_MaxPropagationDelay 0.000002 // 2us XXXXclass PHY_MIB {public: PHY_MIB(Mac802_11 *parent); inline u_int32_t getCWMin() { return(CWMin); } inline u_int32_t getCWMax() { return(CWMax); } inline double getSlotTime() { return(SlotTime); } inline double getSIFS() { return(SIFSTime); } inline double getPIFS() { return(SIFSTime + SlotTime); } inline double getDIFS() { return(SIFSTime + 2 * SlotTime); } inline double getEIFS() { // see (802.11-1999, 9.2.10) return(SIFSTime + getDIFS() + (8 * getACKlen())/PLCPDataRate); } inline u_int32_t getPreambleLength() { return(PreambleLength); } inline double getPLCPDataRate() { return(PLCPDataRate); } inline u_int32_t getPLCPhdrLen() { return((PreambleLength + PLCPHeaderLength) >> 3); } inline u_int32_t getHdrLen11() { return(getPLCPhdrLen() + sizeof(struct hdr_mac802_11) + ETHER_FCS_LEN); } inline u_int32_t getRTSlen() { return(getPLCPhdrLen() + sizeof(struct rts_frame)); } inline u_int32_t getCTSlen() { return(getPLCPhdrLen() + sizeof(struct cts_frame)); } inline u_int32_t getACKlen() { return(getPLCPhdrLen() + sizeof(struct ack_frame)); } private: u_int32_t CWMin; u_int32_t CWMax; double SlotTime;// change wrt Mike's code// double CCATime;// double RxTxTurnaroundTime; double SIFSTime; u_int32_t PreambleLength; u_int32_t PLCPHeaderLength; double PLCPDataRate;};/* * IEEE 802.11 Spec, section 11.4.4.2 * - default values for the MAC Attributes */// change wrt Mike's code//#define MAC_RTSThreshold 3000 // bytes//#define MAC_RTSThreshold 0 // 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: MAC_MIB(Mac802_11 *parent);private: // MACAddress;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -