The short PLCP header is transmitted using the 2 Mbps
in 802.11b .
But we can not transmit it on NS2.27 because we have
not PLCPHeaderRate in its Implementation.
Short Preamble:
Mac/802_11 set PreambleLength_ 72
Mac/802_11  set PLCPHeaderLength 48
Mac/802_11 set PLCPDataRate 1e6

I found below coding for short preamble Rate.


Is it have bug ?




diff -urP mac/mac-802_11.cc mac/mac-802_11.cc~
--- mac/mac-802_11.cc 2006-04-09 00:00:00.000000000
+0200
+++ mac/mac-802_11.cc~ 2006-04-09 00:01:00.000000000
+0200
  -166,7 +166,9   
parent->bind("SIFS_", &SIFSTime);
parent->bind("PreambleLength_", &PreambleLength);
parent->bind("PLCPHeaderLength_", &PLCPHeaderLength);
- parent->bind_bw("PLCPDataRate_", &PLCPDataRate);
+ parent->bind_bw("PLCPhdrRate_", &PLCPhdrRate);
+ parent->bind_bw("PLCPpreambleRate_",
&PLCPpreambleRate);
+ parent->bind("basicRate_", &basicRate_);
}

MAC_MIB::MAC_MIB(Mac802_11 *parent)
  -1397,10 +1399,12   
double
Mac802_11::txtime(double psz, double drt)
{
- double dsz = psz - phymib_.getPLCPhdrLen();
- int plcp_hdr = phymib_.getPLCPhdrLen() << 3; 
+ double dsz = psz - phymib_.getPLCPhdrLen() -
phymib_.getPLCPpreambleLen();
+ int plcp_preamble = phymib_.getPLCPpreambleLen() <<
3;
+ int plcp_hdr = phymib_.getPLCPhdrLen() << 3;
int datalen = (int)dsz << 3;
- double t =
(((double)plcp_hdr)/phymib_.getPLCPDataRate())
+ double t =
(((double)plcp_hdr)/phymib_.getPLCPhdrRate())
+ +
(((double)plcp_preamble)/phymib_.getPLCPpreambleRate())
+ (((double)datalen)/drt);
return(t);
}
diff -urP mac/mac-802_11.h mac/mac-802_11.h~
--- mac/mac-802_11.h 2006-04-09 00:00:00.000000000
+0200
+++ mac/mac-802_11.h~ 2006-04-09 01:00:00.000000000
+0200
  -143,30 +143,38   
inline double getEIFS() {
// see (802.11-1999, 9.2.10)
return(SIFSTime + getDIFS()
- + (8 * getACKlen())/PLCPDataRate);
+ + (8.0 * ((double) ((getACKlen() << 3) -
getPreambleLength() - getHdrLength())) / basicRate_)
+ + ((8.0 + 1.0) * (((double)
getPreambleLength())/getPLCPpreambleRate()))
+ + ((8.0 + 1.0) * (((double)
getHdrLength())/getPLCPhdrRate())));
}
inline u_int32_t getPreambleLength() {
return(PreambleLength); }
- inline double getPLCPDataRate() {
return(PLCPDataRate); }
+ inline u_int32_t getHdrLength() {
return(PLCPHeaderLength); }
+ inline double getPLCPpreambleRate() { return
(PLCPpreambleRate); }
+ inline double getPLCPhdrRate() {
return(PLCPhdrRate); }

- inline u_int32_t getPLCPhdrLen() {
- return((PreambleLength + PLCPHeaderLength) >> 3);
+ inline u_int32_t getPLCPpreambleLen() {
+ return(PreambleLength >> 3);
}

+ inline u_int32_t getPLCPhdrLen() {
+ return(PLCPHeaderLength >> 3);
+ }
+
inline u_int32_t getHdrLen11() {
- return(getPLCPhdrLen() + sizeof(struct
hdr_mac802_11)
+ return(getPLCPpreambleLen() + getPLCPhdrLen() +
sizeof(struct hdr_mac802_11)
+ ETHER_FCS_LEN);
}

inline u_int32_t getRTSlen() {
- return(getPLCPhdrLen() + sizeof(struct rts_frame));
+ return(getPLCPpreambleLen() + getPLCPhdrLen() +
sizeof(struct rts_frame));
}

inline u_int32_t getCTSlen() {
- return(getPLCPhdrLen() + sizeof(struct cts_frame));
+ return(getPLCPpreambleLen() + getPLCPhdrLen() +
sizeof(struct cts_frame));
}

inline u_int32_t getACKlen() {
- return(getPLCPhdrLen() + sizeof(struct ack_frame));
+ return(getPLCPpreambleLen() + getPLCPhdrLen() +
sizeof(struct ack_frame));
}

private:
  -180,7 +188,9   
double SIFSTime;
u_int32_t PreambleLength;
u_int32_t PLCPHeaderLength;
- double PLCPDataRate;
+ double PLCPhdrRate;
+ double PLCPpreambleRate;
+ double basicRate_;
};


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to