20 #include "ns3/packet.h"
21 #include "ns3/simulator.h"
22 #include "ns3/mobility-model.h"
23 #include "ns3/net-device.h"
26 #include "ns3/pointer.h"
27 #include "ns3/object-factory.h"
30 #include "ns3/propagation-loss-model.h"
31 #include "ns3/propagation-delay-model.h"
44 .AddConstructor<YansWifiChannel> ()
45 .AddAttribute (
"PropagationLossModel",
"A pointer to the propagation loss model attached to this channel.",
48 MakePointerChecker<PropagationLossModel> ())
49 .AddAttribute (
"PropagationDelayModel",
"A pointer to the propagation delay model attached to this channel.",
52 MakePointerChecker<PropagationDelayModel> ())
95 Time delay =
m_delay->GetDelay (senderMobility, receiverMobility);
96 double rxPowerDbm =
m_loss->
CalcRxPower (txPowerDbm, senderMobility, receiverMobility);
97 NS_LOG_DEBUG (
"propagation: txPower=" << txPowerDbm <<
"dbm, rxPower=" << rxPowerDbm <<
"dbm, " <<
98 "distance=" << senderMobility->
GetDistanceFrom (receiverMobility) <<
"m, delay=" << delay);
102 if (dstNetDevice == 0)
104 dstNode = 0xffffffff;
112 j, copy, rxPowerDbm, txVector, preamble);
121 m_phyList[i]->StartReceivePacket (packet, rxPowerDbm, txVector, preamble);
144 int64_t currentStream = stream;
146 return (currentStream - stream);
Ptr< PropagationDelayModel > m_delay
keep track of time values and allow control of global simulation resolution
double GetDistanceFrom(Ptr< const MobilityModel > position) const
int64_t AssignStreams(int64_t stream)
void SetPropagationLossModel(Ptr< PropagationLossModel > loss)
void SetPropagationDelayModel(Ptr< PropagationDelayModel > delay)
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
uint16_t GetChannelNumber() const
Return current channel number, see SetChannelNumber()
#define NS_LOG_FUNCTION_NOARGS()
Keep track of the current position and velocity of an object.
virtual Ptr< NetDevice > GetDevice(uint32_t i) const
virtual ~YansWifiChannel()
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
virtual uint32_t GetNDevices(void) const
Ptr< PropagationLossModel > m_loss
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
static void ScheduleWithContext(uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
Ptr< Packet > Copy(void) const
hold objects of type Ptr<T>
static TypeId GetTypeId(void)
Wifi Channel interface specificationThis class works in tandem with the ns3::WifiPhy class...
void Receive(uint32_t i, Ptr< Packet > packet, double rxPowerDbm, WifiTxVector txVector, WifiPreamble preamble) const
Network layer to device interface.
#define NS_LOG_DEBUG(msg)
void Add(Ptr< YansWifiPhy > phy)
void Send(Ptr< YansWifiPhy > sender, Ptr< const Packet > packet, double txPowerDbm, WifiTxVector txVector, WifiPreamble preamble) const
Ptr< T > GetObject(void) const
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
int64_t AssignStreams(int64_t stream)
Ptr< Object > GetMobility(void)