22 #include "wifi-mode.h"
23 #include "wifi-channel.h"
24 #include "wifi-preamble.h"
25 #include "ns3/simulator.h"
26 #include "ns3/packet.h"
27 #include "ns3/assert.h"
29 #include "ns3/double.h"
30 #include "ns3/uinteger.h"
32 #include "ns3/trace-source-accessor.h"
43 WifiPhyListener::~WifiPhyListener ()
51 NS_OBJECT_ENSURE_REGISTERED (WifiPhy);
54 WifiPhy::GetTypeId (
void)
56 static TypeId tid = TypeId (
"ns3::WifiPhy")
58 .AddTraceSource (
"PhyTxBegin",
59 "Trace source indicating a packet has begun transmitting over the channel medium",
61 .AddTraceSource (
"PhyTxEnd",
62 "Trace source indicating a packet has been completely transmitted over the channel. NOTE: the only official WifiPhy implementation available to this date (YansWifiPhy) never fires this trace source.",
64 .AddTraceSource (
"PhyTxDrop",
65 "Trace source indicating a packet has been dropped by the device during transmission",
67 .AddTraceSource (
"PhyRxBegin",
68 "Trace source indicating a packet has begun being received from the channel medium by the device",
70 .AddTraceSource (
"PhyRxEnd",
71 "Trace source indicating a packet has been completely received from the channel medium by the device",
73 .AddTraceSource (
"PhyRxDrop",
74 "Trace source indicating a packet has been dropped by the device during reception",
76 .AddTraceSource (
"MonitorSnifferRx",
77 "Trace source simulating a wifi device in monitor mode sniffing all received frames",
79 .AddTraceSource (
"MonitorSnifferTx",
80 "Trace source simulating the capability of a wifi device in monitor mode to sniff all frames being transmitted",
107 return WifiPhy::GetOfdmRate1_5MbpsBW5MHz ();
109 return WifiPhy::GetOfdmRate3MbpsBW10MHz ();
123 if (preamble == WIFI_PREAMBLE_LONG)
131 return WifiPhy::GetDsssRate2Mbps ();
171 if (preamble == WIFI_PREAMBLE_SHORT)
217 if (preamble == WIFI_PREAMBLE_SHORT)
246 uint32_t symbolDurationUs;
252 symbolDurationUs = 4;
255 symbolDurationUs = 8;
258 symbolDurationUs = 16;
264 double numDataBitsPerSymbol = payloadMode.
GetDataRate () * symbolDurationUs / 1e6;
267 uint32_t numSymbols = lrint (std::ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
272 return numSymbols * symbolDurationUs + 6;
276 return numSymbols * symbolDurationUs;
283 <<
" mode=" << payloadMode
285 return lrint (std::ceil ((size * 8.0) / (payloadMode.
GetDataRate () / 1.0e6)));
370 WifiPhy::GetDsssRate2Mbps ()
400 WifiPhy::GetDsssRate11Mbps ()
430 WifiPhy::GetErpOfdmRate9Mbps ()
443 WifiPhy::GetErpOfdmRate12Mbps ()
445 static WifiMode mode =
456 WifiPhy::GetErpOfdmRate18Mbps ()
458 static WifiMode mode =
469 WifiPhy::GetErpOfdmRate24Mbps ()
471 static WifiMode mode =
482 WifiPhy::GetErpOfdmRate36Mbps ()
484 static WifiMode mode =
495 WifiPhy::GetErpOfdmRate48Mbps ()
497 static WifiMode mode =
508 WifiPhy::GetErpOfdmRate54Mbps ()
510 static WifiMode mode =
538 WifiPhy::GetOfdmRate9Mbps ()
551 WifiPhy::GetOfdmRate12Mbps ()
553 static WifiMode mode =
564 WifiPhy::GetOfdmRate18Mbps ()
566 static WifiMode mode =
577 WifiPhy::GetOfdmRate24Mbps ()
579 static WifiMode mode =
590 WifiPhy::GetOfdmRate36Mbps ()
592 static WifiMode mode =
603 WifiPhy::GetOfdmRate48Mbps ()
605 static WifiMode mode =
616 WifiPhy::GetOfdmRate54Mbps ()
618 static WifiMode mode =
630 WifiPhy::GetOfdmRate3MbpsBW10MHz ()
632 static WifiMode mode =
643 WifiPhy::GetOfdmRate4_5MbpsBW10MHz ()
645 static WifiMode mode =
656 WifiPhy::GetOfdmRate6MbpsBW10MHz ()
658 static WifiMode mode =
669 WifiPhy::GetOfdmRate9MbpsBW10MHz ()
671 static WifiMode mode =
682 WifiPhy::GetOfdmRate12MbpsBW10MHz ()
684 static WifiMode mode =
695 WifiPhy::GetOfdmRate18MbpsBW10MHz ()
697 static WifiMode mode =
708 WifiPhy::GetOfdmRate24MbpsBW10MHz ()
710 static WifiMode mode =
721 WifiPhy::GetOfdmRate27MbpsBW10MHz ()
723 static WifiMode mode =
735 WifiPhy::GetOfdmRate1_5MbpsBW5MHz ()
737 static WifiMode mode =
748 WifiPhy::GetOfdmRate2_25MbpsBW5MHz ()
750 static WifiMode mode =
761 WifiPhy::GetOfdmRate3MbpsBW5MHz ()
763 static WifiMode mode =
774 WifiPhy::GetOfdmRate4_5MbpsBW5MHz ()
776 static WifiMode mode =
787 WifiPhy::GetOfdmRate6MbpsBW5MHz ()
789 static WifiMode mode =
800 WifiPhy::GetOfdmRate9MbpsBW5MHz ()
802 static WifiMode mode =
813 WifiPhy::GetOfdmRate12MbpsBW5MHz ()
815 static WifiMode mode =
826 WifiPhy::GetOfdmRate13_5MbpsBW5MHz ()
828 static WifiMode mode =
843 return (os <<
"IDLE");
845 return (os <<
"CCA_BUSY");
851 return (os <<
"SWITCHING");
854 return (os <<
"INVALID");
868 ns3::WifiPhy::GetDsssRate2Mbps ();
870 ns3::WifiPhy::GetDsssRate11Mbps ();
872 ns3::WifiPhy::GetErpOfdmRate9Mbps ();
873 ns3::WifiPhy::GetErpOfdmRate12Mbps ();
874 ns3::WifiPhy::GetErpOfdmRate18Mbps ();
875 ns3::WifiPhy::GetErpOfdmRate24Mbps ();
876 ns3::WifiPhy::GetErpOfdmRate36Mbps ();
877 ns3::WifiPhy::GetErpOfdmRate48Mbps ();
878 ns3::WifiPhy::GetErpOfdmRate54Mbps ();
880 ns3::WifiPhy::GetOfdmRate9Mbps ();
881 ns3::WifiPhy::GetOfdmRate12Mbps ();
882 ns3::WifiPhy::GetOfdmRate18Mbps ();
883 ns3::WifiPhy::GetOfdmRate24Mbps ();
884 ns3::WifiPhy::GetOfdmRate36Mbps ();
885 ns3::WifiPhy::GetOfdmRate48Mbps ();
886 ns3::WifiPhy::GetOfdmRate54Mbps ();
887 ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz ();
888 ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz ();
889 ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz ();
890 ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz ();
891 ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz ();
892 ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz ();
893 ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz ();
894 ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz ();
895 ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz ();
896 ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz ();
897 ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz ();
898 ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz ();
899 ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz ();
900 ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz ();
901 ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz ();
902 ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz ();
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
static uint32_t GetPlcpHeaderDurationMicroSeconds(WifiMode payloadMode, WifiPreamble preamble)
#define NS_LOG_FUNCTION(parameters)
static WifiMode GetDsssRate1Mbps()
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
enum WifiModulationClass GetModulationClass() const
#define NS_LOG_COMPONENT_DEFINE(name)
void NotifyTxDrop(Ptr< const Packet > packet)
void NotifyTxBegin(Ptr< const Packet > packet)
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
#define NS_FATAL_ERROR(msg)
fatal error handling
void NotifyRxDrop(Ptr< const Packet > packet)
TracedCallback< Ptr< const Packet >, uint16_t, uint16_t, uint32_t, bool > m_phyMonitorSniffTxTrace
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
static WifiMode GetPlcpHeaderMode(WifiMode payloadMode, WifiPreamble preamble)
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
static WifiMode CreateWifiMode(std::string uniqueName, enum WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, enum WifiCodeRate codingRate, uint8_t constellationSize)
void NotifyRxBegin(Ptr< const Packet > packet)
TracedCallback< Ptr< const Packet >, uint16_t, uint16_t, uint32_t, bool, double, double > m_phyMonitorSniffRxTrace
static Time CalculateTxDuration(uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble)
#define NS_LOG_LOGIC(msg)
uint32_t GetBandwidth(void) const
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
static uint32_t GetPayloadDurationMicroSeconds(uint32_t size, WifiMode payloadMode)
std::ostream & operator<<(std::ostream &os, const Angles &a)
void NotifyMonitorSniffRx(Ptr< const Packet > packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm)
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
static WifiMode GetDsssRate5_5Mbps()
void NotifyTxEnd(Ptr< const Packet > packet)
static WifiMode GetErpOfdmRate6Mbps()
void NotifyRxEnd(Ptr< const Packet > packet)
void NotifyMonitorSniffTx(Ptr< const Packet > packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble)
static uint32_t GetPlcpPreambleDurationMicroSeconds(WifiMode payloadMode, WifiPreamble preamble)
uint64_t GetDataRate(void) const
Time MicroSeconds(uint64_t us)
create ns3::Time instances in units of microseconds.
static WifiMode GetOfdmRate6Mbps()
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace