23 #include "ns3/packet.h"
24 #include "ns3/simulator.h"
39 .AddConstructor<CsmaChannel> ()
40 .AddAttribute (
"DataRate",
41 "The transmission data rate to be provided to devices connected to the channel",
44 MakeDataRateChecker ())
45 .AddAttribute (
"Delay",
"Transmission delay through the channel",
86 std::vector<CsmaDeviceRec>::iterator it;
89 if (it->devicePtr == device)
135 NS_LOG_WARN (
"CsmaChannel::Detach(): Device is already detached (" << deviceId <<
")");
143 NS_LOG_WARN (
"CsmaChannel::Detach(): Device is currently" <<
"transmitting (" << deviceId <<
")");
160 std::vector<CsmaDeviceRec>::iterator it;
163 if ((it->devicePtr == device) && (it->active))
180 NS_LOG_WARN (
"CsmaChannel::TransmitStart(): State is not IDLE");
186 NS_LOG_ERROR (
"CsmaChannel::TransmitStart(): Seclected source is not currently attached to network");
216 NS_LOG_ERROR (
"CsmaChannel::TransmitEnd(): Seclected source was detached before the end of the transmission");
225 std::vector<CsmaDeviceRec>::iterator it;
259 int numActDevices = 0;
260 std::vector<CsmaDeviceRec>::iterator it;
268 return numActDevices;
287 std::vector<CsmaDeviceRec>::iterator it;
291 if (it->devicePtr == device)
uint32_t m_currentSrc
Device Id of the source that is currently transmitting on the channel.
keep track of time values and allow control of global simulation resolution
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
WireState m_state
Current state of the channel.
void Receive(Ptr< Packet > p, Ptr< CsmaNetDevice > sender)
Receive a packet from a connected CsmaChannel.
uint64_t GetUid(void) const
A packet is allocated a new uid when it is created empty or with zero-filled payload.
#define NS_ASSERT(condition)
uint32_t GetNumActDevices(void)
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
Channel is IDLE, no packet is being transmitted.
Abstract Channel Base Class.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
std::vector< CsmaDeviceRec > m_deviceList
List of the net devices that have been or are currently connected to the channel. ...
Ptr< Packet > m_currentPkt
The Packet that is currently being transmitted on the channel (or last packet to have been transmitte...
Class for representing data rates.
virtual ~CsmaChannel()
Destroy a CsmaChannel.
Channel is BUSY, a packet is being written by a net device.
double GetSeconds(void) const
bool Detach(Ptr< CsmaNetDevice > device)
Detach a given netdevice from this channel.
virtual uint32_t GetNDevices(void) const
hold objects of type ns3::Time
DataRate m_bps
The assigned data rate of the channel.
virtual Ptr< NetDevice > GetDevice(uint32_t i) const
Time m_delay
The assigned speed-of-light delay of the channel.
Time GetDelay(void)
Get the assigned speed-of-light delay of the channel.
int32_t Attach(Ptr< CsmaNetDevice > device)
Attach a given netdevice to this channel.
static void ScheduleWithContext(uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event with the given context.
#define NS_LOG_LOGIC(msg)
Channel is BUSY, packet is propagating to all attached net devices.
Ptr< Packet > Copy(void) const
WireState
Current state of the channel.
bool IsActive(uint32_t deviceId)
Indicates if a net device is currently attached or detached from the channel.
void PropagationCompleteEvent()
Indicates that the channel has finished propagating the current packet.
NS_LOG_COMPONENT_DEFINE("CsmaChannel")
CsmaDeviceRec()
Is net device enabled to TX/RX.
int32_t GetDeviceNum(Ptr< CsmaNetDevice > device)
CsmaChannel()
Create a CsmaChannel.
bool TransmitEnd()
Indicates that the net device has finished transmitting the packet over the channel.
bool IsBusy()
Indicates if the channel is busy.
hold objects of type ns3::DataRate
bool active
Pointer to the net device.
DataRate GetDataRate(void)
Get the assigned data rate of the channel.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Ptr< CsmaNetDevice > GetCsmaDevice(uint32_t i) const
#define NS_LOG_ERROR(msg)
Ptr< CsmaNetDevice > devicePtr
bool Reattach(uint32_t deviceId)
Reattach a previously detached net device to the channel.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
bool TransmitStart(Ptr< Packet > p, uint32_t srcId)
Start transmitting a packet over the channel.
static TypeId GetTypeId(void)