23 #include "ns3/packet.h"
25 #include "ns3/pointer.h"
26 #include "ns3/error-model.h"
27 #include "ns3/trace-source-accessor.h"
28 #include "ns3/boolean.h"
29 #include "ns3/string.h"
31 #include "ns3/simulator.h"
32 #include "ns3/drop-tail-queue.h"
87 void Print (std::ostream &os)
const;
103 .AddConstructor<SimpleTag> ()
190 .AddConstructor<SimpleNetDevice> ()
191 .AddAttribute (
"ReceiveErrorModel",
192 "The receiver error model used to simulate packet loss",
195 MakePointerChecker<ErrorModel> ())
196 .AddAttribute (
"PointToPointMode",
197 "The device is configured in Point to Point mode",
201 .AddAttribute (
"TxQueue",
202 "A queue to use as the transmit queue in the device.",
205 MakePointerChecker<Queue> ())
206 .AddAttribute (
"DataRate",
207 "The default data rate for point to point links. Zero means infinite",
211 .AddTraceSource (
"PhyRxDrop",
212 "Trace source indicating a packet has been dropped "
213 "by the device during reception",
215 "ns3::Packet::TracedCallback")
447 if (
m_queue->GetNPackets () == 1)
456 m_channel->Send (p, protocolNumber, to, from,
this);
463 m_channel->Send (packet, protocolNumber, to, from,
this);
473 if (
m_queue->GetNPackets () == 0)
487 m_channel->Send (packet, proto, dst, src,
this);
virtual Address GetAddress(void) const
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
Mac48Address m_src
source address
void Write(const uint8_t *buffer, uint32_t size)
Simulation virtual time values and global simulation resolution.
EventId TransmitCompleteEvent
the Tx Complete event
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
AttributeValue implementation for Boolean.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Ptr< Node > m_node
Node this netDevice is associated to.
Hold variables of type string.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual Ptr< Channel > GetChannel(void) const
uint16_t m_protocolNumber
protocol number
TracedCallback m_linkChangeCallbacks
List of callbacks to fire if the link changes state (up or down).
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void AddPacketTag(const Tag &tag) const
Add a packet tag.
void Receive(Ptr< Packet > packet, uint16_t protocol, Mac48Address to, Mac48Address from)
Receive a packet from a connected SimpleChannel.
bool IsNull(void) const
Check for null implementation.
PacketType
Packet types are used as they are in Linux.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
bool IsBroadcast(void) const
virtual void SetIfIndex(const uint32_t index)
virtual void DoDispose(void)
Destructor implementation.
Packet addressed to multicast group.
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired().
virtual bool IsBroadcast(void) const
virtual bool NeedsArp(void) const
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
bool m_pointToPointMode
Flag indicating whether or not the NetDevice is a Point to Point model.
void SetProto(uint16_t proto)
Set the protocol number.
virtual bool IsMulticast(void) const
a polymophic address class
Ptr< const AttributeChecker > MakeDataRateChecker(void)
bool m_linkUp
Flag indicating whether or not the link is up.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Class for representing data rates.
virtual void SetNode(Ptr< Node > node)
void CopyTo(uint8_t buffer[6]) const
double CalculateTxTime(uint32_t bytes) const
Calculate transmission time.
void SetDst(Mac48Address dst)
Set the destination address.
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static Mac48Address GetMulticast(Ipv4Address address)
virtual void SetPromiscReceiveCallback(PromiscReceiveCallback cb)
virtual bool SetMtu(const uint16_t mtu)
This device assumes 48-bit mac addressing; there is also the possibility to add an ErrorModel if you ...
virtual bool IsPointToPoint(void) const
Return true if the net device is on a point-to-point link.
Mac48Address m_address
MAC address.
Ptr< Queue > m_queue
The Queue for outgoing packets.
Mac48Address GetSrc(void) const
Get the source address.
TAG_BUFFER_INLINE void WriteU16(uint16_t v)
Ptr< const AttributeAccessor > MakeDataRateAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
SimpleNetDevice tag to store source, destination and protocol of each packet.
virtual void Serialize(TagBuffer i) const
static Mac48Address ConvertFrom(const Address &address)
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
tag a set of bytes in a packet
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Hold objects of type Ptr.
virtual Address GetMulticast(Ipv4Address multicastGroup) const
Make and return a MAC multicast address using the provided multicast group.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Packet addressed to someone else.
virtual void SetReceiveCallback(NetDevice::ReceiveCallback cb)
virtual uint16_t GetMtu(void) const
void SetReceiveErrorModel(Ptr< ErrorModel > em)
Attach a receive ErrorModel to the SimpleNetDevice.
Mac48Address m_dst
destination address
void CopyFrom(const uint8_t buffer[6])
virtual Ptr< Node > GetNode(void) const
NetDevice::PromiscReceiveCallback m_promiscCallback
Promiscuous receive callback.
uint16_t GetProto(void) const
Get the protocol number.
Mac48Address GetDst(void) const
Get the destination address.
Describes an IPv6 address.
Ipv4 addresses are stored in host order in this class.
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
The trace source fired when the phy layer drops a packet it has received due to the error model being...
void SetSrc(Mac48Address src)
Set the source address.
void ConnectWithoutContext(const CallbackBase &callback)
Append a Callback to the chain (without a context).
Network layer to device interface.
virtual void AddLinkChangeCallback(Callback< void > callback)
AttributeValue implementation for DataRate.
bool RemovePacketTag(Tag &tag)
Remove a packet tag.
virtual void SetAddress(Address address)
Set the address of this interface.
Time Seconds(double value)
Construct a Time in the indicated unit.
Ptr< ErrorModel > m_receiveErrorModel
Receive error model.
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method.
void Read(uint8_t *buffer, uint32_t size)
virtual void DoDispose(void)
Destructor implementation.
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
NetDevice::ReceiveCallback m_rxCallback
Receive callback.
TAG_BUFFER_INLINE uint16_t ReadU16(void)
Ptr< SimpleChannel > m_channel
the channel the device is connected to
virtual void Deserialize(TagBuffer i)
void TransmitComplete(void)
The TransmitComplete method is used internally to finish the process of sending a packet out on the c...
void SetQueue(Ptr< Queue > queue)
Attach a queue to the SimpleNetDevice.
virtual bool IsBridge(void) const
Return true if the net device is acting as a bridge.
void SetChannel(Ptr< SimpleChannel > channel)
Attach a channel to this net device.
Ptr< Queue > GetQueue(void) const
Get a copy of the attached Queue.
DataRate m_bps
The device nominal Data rate.
a unique identifier for an interface.
virtual Address GetBroadcast(void) const
TypeId SetParent(TypeId tid)
void Print(std::ostream &os) const
virtual uint32_t GetIfIndex(void) const
static TypeId GetTypeId(void)
Get the type ID.
static TypeId GetTypeId(void)
Get the type ID.
virtual bool SupportsSendFrom(void) const
virtual bool IsLinkUp(void) const
virtual uint32_t GetSerializedSize(void) const
uint32_t m_ifIndex
Interface index.