23 #include "ns3/packet.h" 24 #include "ns3/simulator.h" 38 .SetGroupName (
"Csma")
40 .AddAttribute (
"DataRate",
41 "The transmission data rate to be provided to devices connected to the channel",
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;
286 std::vector<CsmaDeviceRec>::iterator it;
290 if (it->devicePtr == device)
uint32_t m_currentSrc
Device Id of the source that is currently transmitting on the channel.
uint64_t GetUid(void) const
Returns the packet's Uid.
Simulation virtual time values and global simulation resolution.
Smart pointer class similar to boost::intrusive_ptr.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
WireState m_state
Current state of the channel.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
void Receive(Ptr< Packet > p, Ptr< CsmaNetDevice > sender)
Receive a packet from a connected CsmaChannel.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
uint32_t GetNumActDevices(void)
Channel is IDLE, no packet is being transmitted.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Abstract Channel Base Class.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
virtual std::size_t GetNDevices(void) const
std::vector< CsmaDeviceRec > m_deviceList
List of the net devices that have been or are currently connected to the channel. ...
Ptr< const AttributeChecker > MakeDataRateChecker(void)
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
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.
bool Detach(Ptr< CsmaNetDevice > device)
Detach a given netdevice from this channel.
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
AttributeValue implementation for Time.
DataRate m_bps
The assigned data rate of the channel.
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.
Ptr< const AttributeAccessor > MakeDataRateAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Channel is BUSY, packet is propagating to all attached net devices.
Ptr< CsmaNetDevice > GetCsmaDevice(std::size_t i) 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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void PropagationCompleteEvent()
Indicates that the channel has finished propagating the current packet.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
int32_t GetDeviceNum(Ptr< CsmaNetDevice > device)
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
static void ScheduleWithContext(uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event with the given context.
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.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
AttributeValue implementation for DataRate.
bool active
Is net device enabled to TX/RX.
Time Seconds(double value)
Construct a Time in the indicated unit.
DataRate GetDataRate(void)
Get the assigned data rate of the channel.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
bool TransmitStart(Ptr< const Packet > p, uint32_t srcId)
Start transmitting a packet over the channel.
Ptr< CsmaNetDevice > devicePtr
Pointer to the net device.
virtual Ptr< NetDevice > GetDevice(std::size_t i) const
bool Reattach(uint32_t deviceId)
Reattach a previously detached net device to the channel.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
static TypeId GetTypeId(void)
Get the type ID.