add support for 802.11p PHY and MAC parameters

This commit is contained in:
Michael Nowatkowski
2009-11-18 10:52:28 +01:00
parent bcd23e4c8b
commit b6d1a79f33
8 changed files with 142 additions and 1 deletions

View File

@@ -410,6 +410,18 @@ QadhocWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
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:

View File

@@ -752,6 +752,18 @@ QapWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
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:

View File

@@ -739,6 +739,18 @@ QstaWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
{
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:

View File

@@ -220,6 +220,12 @@ WifiMac::ConfigureStandard (enum WifiPhyStandard standard)
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;
@@ -271,6 +277,28 @@ WifiMac::Configure80211_5Mhz (void)
SetAckTimeout(MicroSeconds(64+176+21+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
}
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)
{
@@ -307,5 +335,39 @@ WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum Access
}
}
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

View File

@@ -216,6 +216,7 @@ public:
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 @@ private:
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

View File

@@ -28,6 +28,8 @@ enum WifiPhyStandard {
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
};

View File

@@ -171,6 +171,12 @@ YansWifiPhy::ConfigureStandard (enum WifiPhyStandard standard)
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 @@ YansWifiPhy::ConfigureHolland (void)
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)
{

View File

@@ -153,6 +153,8 @@ private:
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;