22 #include "ns3/queue.h"
23 #include "ns3/simulator.h"
25 #include "ns3/boolean.h"
26 #include "ns3/uinteger.h"
27 #include "ns3/pointer.h"
28 #include "ns3/channel.h"
29 #include "ns3/trace-source-accessor.h"
32 #include "ns3/llc-snap-header.h"
69 .SetGroupName (
"Spectrum")
71 .AddAttribute (
"Address",
72 "The MAC address of this device.",
76 .AddAttribute (
"Queue",
77 "packets being transmitted get queued here",
80 MakePointerChecker<Queue<Packet> > ())
81 .AddAttribute (
"Mtu",
"The Maximum Transmission Unit",
85 MakeUintegerChecker<uint16_t> (1,65535))
86 .AddAttribute (
"Phy",
"The PHY layer attached to this device.",
90 MakePointerChecker<Object> ())
91 .AddTraceSource (
"MacTx",
92 "Trace source indicating a packet has arrived "
93 "for transmission by this device",
95 "ns3::Packet::TracedCallback")
96 .AddTraceSource (
"MacTxDrop",
97 "Trace source indicating a packet has been dropped "
98 "by the device before transmission",
100 "ns3::Packet::TracedCallback")
101 .AddTraceSource (
"MacPromiscRx",
102 "A packet has been received by this device, has been "
103 "passed up from the physical layer "
104 "and is being forwarded up the local protocol stack. "
105 "This is a promiscuous trace,",
107 "ns3::Packet::TracedCallback")
108 .AddTraceSource (
"MacRx",
109 "A packet has been received by this device, "
110 "has been passed up from the physical layer "
111 "and is being forwarded up the local protocol stack. "
112 "This is a non-promiscuous trace,",
114 "ns3::Packet::TracedCallback")
374 NS_LOG_LOGIC (
"new packet is head of queue, starting TX immediately");
381 if (
m_queue->Enqueue (packet) ==
false)
392 if (
m_queue->Enqueue (packet) ==
false)
435 if (
m_queue->IsEmpty () ==
false)
a polymophic address class
This devices implements the following features:
TracedCallback m_linkChangeCallbacks
List of callbacks to fire if the link changes state (up or down).
void NotifyReceptionEndError()
Notify the MAC that the PHY finished a reception with an error.
TracedCallback< Ptr< const Packet > > m_macRxTrace
Rx trace.
Ptr< Queue< Packet > > m_queue
packet queue
virtual void SetQueue(Ptr< Queue< Packet > > queue)
set the queue which is going to be used by this device
Mac48Address m_address
MAC address.
bool m_linkUp
true if the link is up
NetDevice::ReceiveCallback m_rxCallback
Rx callback.
virtual uint32_t GetIfIndex(void) const
void StartTransmission()
start the transmission of a packet by contacting the PHY layer
NetDevice::PromiscReceiveCallback m_promiscRxCallback
Promiscuous Rx callback.
void NotifyReceptionStart()
Notify the MAC that the PHY has started a reception.
virtual void SetAddress(Address address)
Set the address of this interface.
Ptr< Object > m_phy
PHY object.
virtual void DoDispose(void)
Destructor implementation.
virtual bool IsPointToPoint(void) const
Return true if the net device is on a point-to-point link.
virtual void SetNode(Ptr< Node > node)
Ptr< Packet > m_currentPkt
Current packet.
Ptr< Channel > m_channel
Channel.
TracedCallback< Ptr< const Packet > > m_macPromiscRxTrace
Promiscuous Rx trace.
Ptr< Node > m_node
Node owning this NetDevice.
void SetGenericPhyTxStartCallback(GenericPhyTxStartCallback c)
set the callback used to instruct the lower layer to start a TX
virtual uint16_t GetMtu(void) const
virtual void SetPromiscReceiveCallback(PromiscReceiveCallback cb)
Ptr< Object > GetPhy() const
GenericPhyTxStartCallback m_phyMacTxStartCallback
Tx Start callback.
static TypeId GetTypeId(void)
Get the type ID.
virtual ~AlohaNoackNetDevice()
virtual bool IsBroadcast(void) const
virtual bool IsBridge(void) const
Return true if the net device is acting as a bridge.
void NotifyTransmissionEnd(Ptr< const Packet >)
Notify the MAC that the PHY has finished a previously started transmission.
void SetChannel(Ptr< Channel > c)
This class doesn't talk directly with the underlying channel (a dedicated PHY class is expected to do...
virtual Address GetAddress(void) const
State m_state
State of the NetDevice.
virtual Address GetMulticast(Ipv4Address addr) const
Make and return a MAC multicast address using the provided multicast group.
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
virtual void SetIfIndex(const uint32_t index)
virtual Ptr< Channel > GetChannel(void) const
virtual Address GetBroadcast(void) const
virtual bool SupportsSendFrom(void) const
virtual bool NeedsArp(void) const
uint32_t m_ifIndex
Interface index.
uint32_t m_mtu
NetDevice MTU.
void SetPhy(Ptr< Object > phy)
Set the Phy object which is attached to this device.
TracedCallback< Ptr< const Packet > > m_macTxTrace
Tx trace.
virtual Ptr< Node > GetNode(void) const
void NotifyReceptionEndOk(Ptr< Packet > p)
Notify the MAC that the PHY finished a reception successfully.
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
TracedCallback< Ptr< const Packet > > m_macTxDropTrace
Tx Drop trace.
State
State of the NetDevice.
virtual bool IsLinkUp(void) const
virtual bool SetMtu(const uint16_t mtu)
virtual void SetReceiveCallback(NetDevice::ReceiveCallback cb)
virtual bool IsMulticast(void) const
virtual void AddLinkChangeCallback(Callback< void > callback)
bool IsNull(void) const
Check for null implementation.
Ipv4 addresses are stored in host order in this class.
Describes an IPv6 address.
static Mac48Address GetMulticast(Ipv4Address address)
bool IsBroadcast(void) const
static Mac48Address ConvertFrom(const Address &address)
AttributeValue implementation for Mac48Address.
Network layer to device interface.
PacketType
Packet types are used as they are in Linux.
@ PACKET_HOST
Packet addressed oo us.
@ PACKET_OTHERHOST
Packet addressed to someone else.
@ PACKET_BROADCAST
Packet addressed to all.
@ PACKET_MULTICAST
Packet addressed to multicast group.
virtual void DoDispose(void)
Destructor implementation.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
void AddHeader(const Header &header)
Add header to this packet.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
Hold objects of type Ptr<T>.
Smart pointer class similar to boost::intrusive_ptr.
static EventId ScheduleNow(FUNC f, Ts &&... args)
Schedule an event to expire Now.
void ConnectWithoutContext(const CallbackBase &callback)
Append a Callback to the chain (without a context).
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Hold an unsigned integer type.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeAccessor > MakeMac48AddressAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Ptr< const AttributeChecker > MakeMac48AddressChecker(void)
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
@ IDLE
Channel is IDLE, no packet is being transmitted.