diff -r 9ce8c6d514b6 -r a171e73c4dae src/devices/wifi/wifi-mac.cc --- a/src/devices/wifi/wifi-mac.cc Wed Nov 18 11:30:45 2009 +0300 +++ b/src/devices/wifi/wifi-mac.cc Wed Nov 18 10:52:28 2009 +0100 @@ -220,6 +220,12 @@ case WIFI_PHY_STANDARD_holland: Configure80211a (); break; + case WIFI_PHY_STANDARD_80211p_CCH: + Configure80211p_CCH (); + break; + case WIFI_PHY_STANDARD_80211p_SCH: + Configure80211p_SCH (); + break; default: NS_ASSERT (false); break; @@ -272,6 +278,28 @@ } void +WifiMac::Configure80211p_CCH (void) +{ + SetSifs(MicroSeconds(32)); + SetSlot(MicroSeconds(16)); + SetEifsNoDifs(MicroSeconds(32+88)); + SetPifs(MicroSeconds(32+16)); + SetCtsTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); + SetAckTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); +} + +void +WifiMac::Configure80211p_SCH (void) +{ + SetSifs(MicroSeconds(32)); + SetSlot(MicroSeconds(16)); + SetEifsNoDifs(MicroSeconds(32+88)); + SetPifs(MicroSeconds(32+16)); + SetCtsTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); + SetAckTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); +} + +void WifiMac::ConfigureDcf (Ptr dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac) { /* see IEE802.11 section 7.3.2.29 */ @@ -307,5 +335,39 @@ } } - +void +WifiMac::ConfigureCCHDcf (Ptr dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac) +{ + /* see IEEE 1609.4-2006 section 6.3.1, Table 1 */ + switch (ac) { + case AC_VO: + dcf->SetMinCw ((cwmin+1)/4-1); + dcf->SetMaxCw ((cwmin+1)/2-1); + dcf->SetAifsn (2); + break; + case AC_VI: + dcf->SetMinCw ((cwmin+1)/4-1); + dcf->SetMaxCw ((cwmin+1)/2-1); + dcf->SetAifsn (3); + break; + case AC_BE: + dcf->SetMinCw ((cwmin+1)/2-1); + dcf->SetMaxCw (cwmin); + dcf->SetAifsn (6); + break; + case AC_BK: + dcf->SetMinCw (cwmin); + dcf->SetMaxCw (cwmax); + dcf->SetAifsn (9); + break; + case AC_BE_NQOS: + dcf->SetMinCw (cwmin); + dcf->SetMaxCw (cwmax); + dcf->SetAifsn (2); + break; + case AC_UNDEF: + NS_FATAL_ERROR ("I don't know what to do with this"); + break; + } +} } // namespace ns3