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/net-device-queue-interface.h"
87 void Print (std::ostream &os)
const;
103 .SetGroupName(
"Network")
191 .SetGroupName(
"Network")
193 .AddAttribute (
"ReceiveErrorModel",
194 "The receiver error model used to simulate packet loss",
197 MakePointerChecker<ErrorModel> ())
198 .AddAttribute (
"PointToPointMode",
199 "The device is configured in Point to Point mode",
203 .AddAttribute (
"TxQueue",
204 "A queue to use as the transmit queue in the device.",
208 .AddAttribute (
"DataRate",
209 "The default data rate for point to point links. Zero means infinite",
213 .AddTraceSource (
"PhyRxDrop",
214 "Trace source indicating a packet has been dropped "
215 "by the device during reception",
217 "ns3::Packet::TracedCallback")
492 m_channel->Send (p, protocolNumber, to, from,
this);
499 m_channel->Send (packet, protocolNumber, to, from,
this);
509 if (
m_queue->GetNPackets () == 0)
523 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 GetDst(void) const
Get the destination address.
Mac48Address m_src
source address
void Write(const uint8_t *buffer, uint32_t size)
virtual void DoInitialize(void)
Initialize() implementation.
Simulation virtual time values and global simulation resolution.
EventId TransmitCompleteEvent
the Tx Complete event
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 "...
AttributeValue implementation for Boolean.
virtual void DoInitialize(void)
Initialize() implementation.
virtual uint32_t GetSerializedSize(void) const
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Ptr< Node > m_node
Node this netDevice is associated to.
Time CalculateBytesTxTime(uint32_t bytes) const
Calculate transmission time.
Hold variables of type string.
virtual Ptr< Channel > GetChannel(void) const
Ptr< AttributeChecker > MakePointerChecker(void)
Create a PointerChecker for a type.
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.
Mac48Address GetSrc(void) const
Get the source address.
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
void SetDst(Mac48Address dst)
Set the destination address.
virtual void SetIfIndex(const uint32_t index)
Packet addressed to multicast group.
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired().
virtual void DoDispose(void)
Destructor implementation.
virtual bool IsBroadcast(void) const
virtual bool NeedsArp(void) const
bool m_pointToPointMode
Flag indicating whether or not the NetDevice is a Point to Point model.
virtual void Deserialize(TagBuffer i)
virtual void Serialize(TagBuffer i) const
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 SetProto(uint16_t proto)
Set the protocol number.
void CopyTo(uint8_t buffer[6]) const
NS_ASSERT_MSG(false,"Ipv4AddressGenerator::MaskToIndex(): Impossible")
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
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.
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.
static Mac48Address ConvertFrom(const Address &address)
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
Ptr< Queue< Packet > > m_queue
The Queue for outgoing packets.
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)
static TypeId GetTypeId(void)
Get the type ID.
virtual uint16_t GetMtu(void) const
void SetReceiveErrorModel(Ptr< ErrorModel > em)
Attach a receive ErrorModel to the SimpleNetDevice.
Ptr< Queue< Packet > > GetQueue(void) const
Get a copy of the attached Queue.
Mac48Address m_dst
destination address
void CopyFrom(const uint8_t buffer[6])
virtual Ptr< Node > GetNode(void) const
uint16_t GetProto(void) const
Get the protocol number.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
NetDevice::PromiscReceiveCallback m_promiscCallback
Promiscuous receive callback.
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...
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
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.
void SetQueue(Ptr< Queue< Packet > > queue)
Attach a queue to the SimpleNetDevice.
bool RemovePacketTag(Tag &tag)
Remove a packet tag.
virtual void SetAddress(Address address)
Set the address of this interface.
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
void TransmitComplete(void)
The TransmitComplete method is used internally to finish the process of sending a packet out on the c...
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
void SetSrc(Mac48Address src)
Set the source address.
virtual bool IsBridge(void) const
Return true if the net device is acting as a bridge.
void Print(std::ostream &os) const
Ptr< NetDeviceQueueInterface > m_queueInterface
NetDevice queue interface.
void SetChannel(Ptr< SimpleChannel > channel)
Attach a channel to this net device.
DataRate m_bps
The device nominal Data rate.
a unique identifier for an interface.
virtual Address GetBroadcast(void) const
TypeId SetParent(TypeId tid)
Set the parent TypeId.
virtual uint32_t GetIfIndex(void) const
static TypeId GetTypeId(void)
Get the type ID.
virtual bool SupportsSendFrom(void) const
virtual bool IsLinkUp(void) const
uint32_t m_ifIndex
Interface index.