20 #include "ns3/queue.h" 21 #include "ns3/simulator.h" 22 #include "ns3/mac48-address.h" 23 #include "ns3/llc-snap-header.h" 24 #include "ns3/error-model.h" 25 #include "ns3/trace-source-accessor.h" 26 #include "ns3/uinteger.h" 27 #include "ns3/pointer.h" 28 #include "ns3/net-device-queue-interface.h" 42 static TypeId tid =
TypeId (
"ns3::PointToPointNetDevice")
44 .SetGroupName (
"PointToPoint")
46 .AddAttribute (
"Mtu",
"The MAC-level Maximum Transmission Unit",
50 MakeUintegerChecker<uint16_t> ())
51 .AddAttribute (
"Address",
52 "The MAC address of this device.",
56 .AddAttribute (
"DataRate",
57 "The default data rate for point to point links",
61 .AddAttribute (
"ReceiveErrorModel",
62 "The receiver error model used to simulate packet loss",
65 MakePointerChecker<ErrorModel> ())
66 .AddAttribute (
"InterframeGap",
67 "The time to wait between packet (frame) transmissions",
76 .AddAttribute (
"TxQueue",
77 "A queue to use as the transmit queue in the device.",
86 .AddTraceSource (
"MacTx",
87 "Trace source indicating a packet has arrived " 88 "for transmission by this device",
90 "ns3::Packet::TracedCallback")
91 .AddTraceSource (
"MacTxDrop",
92 "Trace source indicating a packet has been dropped " 93 "by the device before transmission",
95 "ns3::Packet::TracedCallback")
96 .AddTraceSource (
"MacPromiscRx",
97 "A packet has been received by this device, " 98 "has been passed up from the physical layer " 99 "and is being forwarded up the local protocol stack. " 100 "This is a promiscuous trace,",
102 "ns3::Packet::TracedCallback")
103 .AddTraceSource (
"MacRx",
104 "A packet has been received by this device, " 105 "has been passed up from the physical layer " 106 "and is being forwarded up the local protocol stack. " 107 "This is a non-promiscuous trace,",
109 "ns3::Packet::TracedCallback")
112 .AddTraceSource (
"MacRxDrop",
113 "Trace source indicating a packet was dropped " 114 "before being forwarded up the stack",
116 "ns3::Packet::TracedCallback")
122 .AddTraceSource (
"PhyTxBegin",
123 "Trace source indicating a packet has begun " 124 "transmitting over the channel",
126 "ns3::Packet::TracedCallback")
127 .AddTraceSource (
"PhyTxEnd",
128 "Trace source indicating a packet has been " 129 "completely transmitted over the channel",
131 "ns3::Packet::TracedCallback")
132 .AddTraceSource (
"PhyTxDrop",
133 "Trace source indicating a packet has been " 134 "dropped by the device during transmission",
136 "ns3::Packet::TracedCallback")
139 .AddTraceSource (
"PhyRxBegin",
140 "Trace source indicating a packet has begun " 141 "being received by the device",
143 "ns3::Packet::TracedCallback")
145 .AddTraceSource (
"PhyRxEnd",
146 "Trace source indicating a packet has been " 147 "completely received by the device",
149 "ns3::Packet::TracedCallback")
150 .AddTraceSource (
"PhyRxDrop",
151 "Trace source indicating a packet has been " 152 "dropped by the device during reception",
154 "ns3::Packet::TracedCallback")
161 .AddTraceSource (
"Sniffer",
162 "Trace source simulating a non-promiscuous packet sniffer " 163 "attached to the device",
165 "ns3::Packet::TracedCallback")
166 .AddTraceSource (
"PromiscSniffer",
167 "Trace source simulating a promiscuous packet sniffer " 168 "attached to the device",
170 "ns3::Packet::TracedCallback")
178 m_txMachineState (READY),
293 bool result =
m_channel->TransmitStart (p,
this, txTime);
323 NS_LOG_LOGIC (
"No pending packets in device queue after tx complete");
371 uint16_t protocol = 0;
546 uint16_t protocolNumber)
599 uint16_t protocolNumber)
656 for (std::size_t i = 0; i <
m_channel->GetNDevices (); ++i)
661 return tmp->GetAddress ();
690 case 0x0021:
return 0x0800;
691 case 0x0057:
return 0x86DD;
692 default:
NS_ASSERT_MSG (
false,
"PPP Protocol number not defined!");
703 case 0x0800:
return 0x0021;
704 case 0x86DD:
return 0x0057;
705 default:
NS_ASSERT_MSG (
false,
"PPP Protocol number not defined!");
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
virtual uint16_t GetMtu(void) const
void SetReceiveErrorModel(Ptr< ErrorModel > em)
Attach a receive ErrorModel to the PointToPointNetDevice.
virtual void DoInitialize(void)
Initialize() implementation.
PointToPointNetDevice()
Construct a PointToPointNetDevice.
uint64_t GetUid(void) const
Returns the packet's Uid.
Simulation virtual time values and global simulation resolution.
NetDevice::ReceiveCallback m_rxCallback
Receive callback.
void NotifyLinkUp(void)
Make the link up and running.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
static TypeId GetTypeId(void)
Get the TypeId.
The transmitter is busy transmitting a packet.
virtual uint32_t GetIfIndex(void) const
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
The trace source fired when the phy layer drops a packet before it tries to transmit it...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
uint32_t m_mtu
The Maximum Transmission Unit.
Ptr< AttributeChecker > MakePointerChecker(void)
Create a PointerChecker for a type.
virtual ~PointToPointNetDevice()
Destroy a PointToPointNetDevice.
static const uint16_t DEFAULT_MTU
Default MTU.
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
The trace source fired when a packet ends the reception process from the medium.
virtual bool NeedsArp(void) const
Ptr< Node > m_node
Node owning this NetDevice.
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
The trace source fired when the phy layer drops a packet it has received.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
virtual Ptr< Channel > GetChannel(void) const
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
The trace source fired when a packet begins the transmission process on the medium.
Address GetRemote(void) const
virtual bool IsLinkUp(void) const
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Ptr< Packet > m_currentPkt
Current packet processed.
virtual Ptr< Node > GetNode(void) const
static uint16_t EtherToPpp(uint16_t protocol)
Ethernet to PPP protocol number mapping.
Ptr< const AttributeChecker > MakeMac48AddressChecker(void)
virtual void DoDispose(void)
Destructor implementation.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
virtual Address GetBroadcast(void) const
Ptr< Queue< Packet > > m_queue
The Queue which this PointToPointNetDevice uses as a packet source.
TracedCallback< Ptr< const Packet > > m_macRxTrace
The trace source fired for packets successfully received by the device immediately before being forwa...
Ptr< const AttributeAccessor > MakeMac48AddressAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
The transmitter is ready to begin transmission of a packet.
bool ProcessHeader(Ptr< Packet > p, uint16_t ¶m)
Removes, from a packet of data, all headers and trailers that relate to the protocol implemented by t...
a polymophic address class
Ptr< const AttributeChecker > MakeDataRateChecker(void)
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
static uint16_t PppToEther(uint16_t protocol)
PPP to Ethernet protocol number mapping.
Class for representing data rates.
virtual bool IsPointToPoint(void) const
Return true if the net device is on a point-to-point link.
virtual void SetPromiscReceiveCallback(PromiscReceiveCallback cb)
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.
virtual void SetAddress(Address address)
Set the address of this interface.
AttributeValue implementation for Time.
Hold an unsigned integer type.
void TransmitComplete(void)
Stop Sending a Packet Down the Wire and Begin the Interframe Gap.
TracedCallback m_linkChangeCallbacks
Callback for the link change event.
TracedCallback< Ptr< const Packet > > m_snifferTrace
A trace source that emulates a non-promiscuous protocol sniffer connected to the device.
Ptr< NetDeviceQueueInterface > m_queueInterface
NetDevice queue interface.
bool TransmitStart(Ptr< Packet > p)
Start Sending a Packet Down the Wire.
void SetInterframeGap(Time t)
Set the interframe gap used to separate packets.
NetDevice::PromiscReceiveCallback m_promiscCallback
Receive callback.
Mac48Address m_address
Mac48Address of this NetDevice.
Ptr< const AttributeAccessor > MakeDataRateAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Time m_tInterframeGap
The interframe gap that the Net Device uses to throttle packet transmission.
virtual void AddLinkChangeCallback(Callback< void > callback)
static Mac48Address ConvertFrom(const Address &address)
virtual void SetReceiveCallback(NetDevice::ReceiveCallback cb)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< Queue< Packet > > GetQueue(void) const
Get a copy of the attached Queue.
virtual Address GetMulticast(Ipv4Address multicastGroup) const
Make and return a MAC multicast address using the provided multicast group.
Hold objects of type Ptr<T>.
virtual void DoInitialize(void)
Initialize() implementation.
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...
void DoMpiReceive(Ptr< Packet > p)
Handler for MPI receive event.
DataRate m_bps
The data rate that the Net Device uses to simulate packet transmission timing.
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
virtual bool IsBridge(void) const
Return true if the net device is acting as a bridge.
Ptr< PointToPointChannel > m_channel
The PointToPointChannel to which this PointToPointNetDevice has been attached.
TracedCallback< Ptr< const Packet > > m_promiscSnifferTrace
A trace source that emulates a promiscuous mode protocol sniffer connected to the device...
Ptr< ErrorModel > m_receiveErrorModel
Error model for receive packet events.
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
Describes an IPv6 address.
Ipv4 addresses are stored in host order in this class.
uint32_t m_ifIndex
Index of the interface.
TracedCallback< Ptr< const Packet > > m_macPromiscRxTrace
The trace source fired for packets successfully received by the device immediately before being forwa...
virtual bool IsBroadcast(void) const
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
The trace source fired when a packet begins the reception process from the medium – when the simulat...
void ConnectWithoutContext(const CallbackBase &callback)
Append a Callback to the chain (without a context).
TxMachineState m_txMachineState
The state of the Net Device transmit state machine.
TracedCallback< Ptr< const Packet > > m_macTxDropTrace
The trace source fired when packets coming into the "top" of the device at the L3/L2 transition are d...
Network layer to device interface.
virtual bool SetMtu(const uint16_t mtu)
virtual void SetIfIndex(const uint32_t index)
AttributeValue implementation for DataRate.
AttributeValue implementation for Mac48Address.
virtual Address GetAddress(void) const
void SetDataRate(DataRate bps)
Set the Data Rate used for transmission of packets.
TracedCallback< Ptr< const Packet > > m_macRxDropTrace
The trace source fired for packets successfully received by the device but are dropped before being f...
void Receive(Ptr< Packet > p)
Receive a packet from a connected PointToPointChannel.
virtual bool IsMulticast(void) const
Time Seconds(double value)
Construct a Time in the indicated unit.
bool Attach(Ptr< PointToPointChannel > ch)
Attach the device to a channel.
virtual void DoDispose(void)
Dispose of the object.
virtual void SetNode(Ptr< Node > node)
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
bool m_linkUp
Identify if the link is up or not.
virtual bool SupportsSendFrom(void) const
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
bool IsNull(void) const
Check for null implementation.
void AddHeader(Ptr< Packet > p, uint16_t protocolNumber)
Adds the necessary headers and trailers to a packet of data in order to respect the protocol implemen...
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface.
Time CalculateBytesTxTime(uint32_t bytes) const
Calculate transmission time.
TracedCallback< Ptr< const Packet > > m_macTxTrace
The trace source fired when packets come into the "top" of the device at the L3/L2 transition...
TypeId SetParent(TypeId tid)
Set the parent TypeId.
void AddHeader(const Header &header)
Add header to this packet.
void SetQueue(Ptr< Queue< Packet > > queue)
Attach a queue to the PointToPointNetDevice.
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace
The trace source fired when a packet ends the transmission process on the medium. ...