--- a/src/devices/wifi/qadhoc-wifi-mac.cc Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/qadhoc-wifi-mac.cc Wed Nov 18 10:52:28 2009 +0100
@@ -410,6 +410,18 @@
{
switch (standard)
{
+ case WIFI_PHY_STANDARD_80211p_CCH:
+ ConfigureCCHDcf (m_queues[AC_BK], 15, 511, AC_BK);
+ ConfigureCCHDcf (m_queues[AC_BE], 15, 511, AC_BE);
+ ConfigureCCHDcf (m_queues[AC_VI], 15, 511, AC_VI);
+ ConfigureCCHDcf (m_queues[AC_VO], 15, 511, AC_VO);
+ break;
+ case WIFI_PHY_STANDARD_80211p_SCH:
+ ConfigureDcf (m_queues[AC_BK], 15, 511, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 15, 511, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 15, 511, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 15, 511, AC_VO);
+ break;
case WIFI_PHY_STANDARD_holland:
// fall through
case WIFI_PHY_STANDARD_80211a:
--- a/src/devices/wifi/qap-wifi-mac.cc Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/qap-wifi-mac.cc Wed Nov 18 10:52:28 2009 +0100
@@ -752,6 +752,18 @@
{
switch (standard)
{
+ case WIFI_PHY_STANDARD_80211p_CCH:
+ ConfigureCCHDcf (m_queues[AC_BK], 15, 511, AC_BK);
+ ConfigureCCHDcf (m_queues[AC_BE], 15, 511, AC_BE);
+ ConfigureCCHDcf (m_queues[AC_VI], 15, 511, AC_VI);
+ ConfigureCCHDcf (m_queues[AC_VO], 15, 511, AC_VO);
+ break;
+ case WIFI_PHY_STANDARD_80211p_SCH:
+ ConfigureDcf (m_queues[AC_BK], 15, 511, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 15, 511, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 15, 511, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 15, 511, AC_VO);
+ break;
case WIFI_PHY_STANDARD_holland:
// fall through
case WIFI_PHY_STANDARD_80211a:
--- a/src/devices/wifi/qsta-wifi-mac.cc Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/qsta-wifi-mac.cc Wed Nov 18 10:52:28 2009 +0100
@@ -739,6 +739,18 @@
{
switch (standard)
{
+ case WIFI_PHY_STANDARD_80211p_CCH:
+ ConfigureCCHDcf (m_queues[AC_BK], 15, 511, AC_BK);
+ ConfigureCCHDcf (m_queues[AC_BE], 15, 511, AC_BE);
+ ConfigureCCHDcf (m_queues[AC_VI], 15, 511, AC_VI);
+ ConfigureCCHDcf (m_queues[AC_VO], 15, 511, AC_VO);
+ break;
+ case WIFI_PHY_STANDARD_80211p_SCH:
+ ConfigureDcf (m_queues[AC_BK], 15, 511, AC_BK);
+ ConfigureDcf (m_queues[AC_BE], 15, 511, AC_BE);
+ ConfigureDcf (m_queues[AC_VI], 15, 511, AC_VI);
+ ConfigureDcf (m_queues[AC_VO], 15, 511, AC_VO);
+ break;
case WIFI_PHY_STANDARD_holland:
// fall through
case WIFI_PHY_STANDARD_80211a:
--- 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> 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> 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
--- a/src/devices/wifi/wifi-mac.h Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/wifi-mac.h Wed Nov 18 10:52:28 2009 +0100
@@ -216,6 +216,7 @@
protected:
void ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac);
+ void ConfigureCCHDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac);
private:
static Time GetDefaultMaxPropagationDelay (void);
static Time GetDefaultSlot (void);
@@ -240,6 +241,8 @@
void Configure80211b (void);
void Configure80211_10Mhz (void);
void Configure80211_5Mhz ();
+ void Configure80211p_CCH (void);
+ void Configure80211p_SCH (void);
/**
* The trace source fired when packets come into the "top" of the device
--- a/src/devices/wifi/wifi-phy-standard.h Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/wifi-phy-standard.h Wed Nov 18 10:52:28 2009 +0100
@@ -28,6 +28,8 @@
WIFI_PHY_STANDARD_80211_10Mhz,
WIFI_PHY_STANDARD_80211_5Mhz,
WIFI_PHY_STANDARD_holland,
+ WIFI_PHY_STANDARD_80211p_CCH,
+ WIFI_PHY_STANDARD_80211p_SCH,
WIFI_PHY_UNKNOWN
};
--- a/src/devices/wifi/yans-wifi-phy.cc Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/yans-wifi-phy.cc Wed Nov 18 10:52:28 2009 +0100
@@ -171,6 +171,12 @@
case WIFI_PHY_STANDARD_holland:
ConfigureHolland ();
break;
+ case WIFI_PHY_STANDARD_80211p_CCH:
+ Configure80211p_CCH ();
+ break;
+ case WIFI_PHY_STANDARD_80211p_SCH:
+ Configure80211p_SCH ();
+ break;
default:
NS_ASSERT (false);
break;
@@ -592,6 +598,36 @@
m_modes.push_back (WifiPhy::Get54mba ());
}
+void
+YansWifiPhy::Configure80211p_CCH (void)
+{
+ NS_LOG_FUNCTION (this);
+ m_channelStartingFrequency = 5e3; // 802.11p works over the 5Ghz freq range
+ m_modes.push_back (WifiPhy::Get3mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get4_5mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get6mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get9mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get12mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get18mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get24mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get27mb10Mhz ());
+}
+
+void
+YansWifiPhy::Configure80211p_SCH (void)
+{
+ NS_LOG_FUNCTION (this);
+ m_channelStartingFrequency = 5e3; // 802.11p works over the 5Ghz freq range
+ m_modes.push_back (WifiPhy::Get3mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get4_5mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get6mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get9mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get12mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get18mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get24mb10Mhz ());
+ m_modes.push_back (WifiPhy::Get27mb10Mhz ());
+}
+
void
YansWifiPhy::RegisterListener (WifiPhyListener *listener)
{
--- a/src/devices/wifi/yans-wifi-phy.h Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/yans-wifi-phy.h Wed Nov 18 10:52:28 2009 +0100
@@ -153,6 +153,8 @@
void Configure80211_10Mhz (void);
void Configure80211_5Mhz ();
void ConfigureHolland (void);
+ void Configure80211p_CCH (void);
+ void Configure80211p_SCH (void);
double GetEdThresholdW (void) const;
double DbmToW (double dbm) const;
double DbToRatio (double db) const;