add support for 802.11p PHY and MAC parameters
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user