ns-3
|
A Device for a Csma Network Link. More...
#include <csma-net-device.h>
Public Types | |
enum | EncapsulationMode { ILLEGAL, DIX, LLC } |
![]() | |
enum | PacketType { PACKET_HOST = 1, NS3_PACKET_HOST = PACKET_HOST, PACKET_BROADCAST, NS3_PACKET_BROADCAST = PACKET_BROADCAST, PACKET_MULTICAST, NS3_PACKET_MULTICAST = PACKET_MULTICAST, PACKET_OTHERHOST, NS3_PACKET_OTHERHOST = PACKET_OTHERHOST } |
typedef Callback< bool, Ptr < NetDevice >, Ptr< const Packet >, uint16_t, const Address & > | ReceiveCallback |
typedef Callback< bool, Ptr < NetDevice >, Ptr< const Packet >, uint16_t, const Address &, const Address &, enum PacketType > | PromiscReceiveCallback |
Public Member Functions | |
CsmaNetDevice () | |
virtual | ~CsmaNetDevice () |
void | SetInterframeGap (Time t) |
void | SetBackoffParams (Time slotTime, uint32_t minSlots, uint32_t maxSlots, uint32_t maxRetries, uint32_t ceiling) |
bool | Attach (Ptr< CsmaChannel > ch) |
void | SetQueue (Ptr< Queue > queue) |
Ptr< Queue > | GetQueue (void) const |
void | SetReceiveErrorModel (Ptr< ErrorModel > em) |
void | Receive (Ptr< Packet > p, Ptr< CsmaNetDevice > sender) |
bool | IsSendEnabled (void) |
void | SetSendEnable (bool enable) |
bool | IsReceiveEnabled (void) |
void | SetReceiveEnable (bool enable) |
void | SetEncapsulationMode (CsmaNetDevice::EncapsulationMode mode) |
CsmaNetDevice::EncapsulationMode | GetEncapsulationMode (void) |
virtual void | SetIfIndex (const uint32_t index) |
virtual uint32_t | GetIfIndex (void) const |
virtual Ptr< Channel > | GetChannel (void) const |
virtual bool | SetMtu (const uint16_t mtu) |
virtual uint16_t | GetMtu (void) const |
virtual void | SetAddress (Address address) |
virtual Address | GetAddress (void) const |
virtual bool | IsLinkUp (void) const |
virtual void | AddLinkChangeCallback (Callback< void > callback) |
virtual bool | IsBroadcast (void) const |
virtual Address | GetBroadcast (void) const |
virtual bool | IsMulticast (void) const |
virtual Address | GetMulticast (Ipv4Address multicastGroup) const |
Make and return a MAC multicast address using the provided multicast group. | |
virtual bool | IsPointToPoint (void) const |
virtual bool | IsBridge (void) const |
virtual bool | Send (Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber) |
virtual bool | SendFrom (Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber) |
virtual Ptr< Node > | GetNode (void) const |
virtual void | SetNode (Ptr< Node > node) |
virtual bool | NeedsArp (void) const |
virtual void | SetReceiveCallback (NetDevice::ReceiveCallback cb) |
virtual Address | GetMulticast (Ipv6Address addr) const |
Get the MAC multicast address corresponding to the IPv6 address provided. | |
virtual void | SetPromiscReceiveCallback (PromiscReceiveCallback cb) |
virtual bool | SupportsSendFrom (void) const |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
This method returns the TypeId associated to ns3::CsmaNetDevice. |
Protected Member Functions | |
virtual void | DoDispose (void) |
void | AddHeader (Ptr< Packet > p, Mac48Address source, Mac48Address dest, uint16_t protocolNumber) |
A Device for a Csma Network Link.
The Csma net device class is analogous to layer 1 and 2 of the TCP stack. The NetDevice takes a raw packet of bytes and creates a protocol specific packet from them.
Enumeration of the types of packets supported in the class.
ILLEGAL |
Encapsulation mode not set |
DIX |
DIX II / Ethernet II packet |
LLC |
802.2 LLC/SNAP Packet |
ns3::CsmaNetDevice::CsmaNetDevice | ( | ) |
Construct a CsmaNetDevice
This is the default constructor for a CsmaNetDevice.
References DIX, NS_LOG_FUNCTION, and ns3::Seconds().
|
virtual |
Destroy a CsmaNetDevice
This is the destructor for a CsmaNetDevice.
References NS_LOG_FUNCTION_NOARGS.
|
protected |
Adds the necessary headers and trailers to a packet of data in order to respect the packet type
p | Packet to which header should be added |
source | MAC source address from which packet should be sent |
dest | MAC destination address to which packet should be sent |
protocolNumber | In some protocols, identifies the type of payload contained in this packet. |
References ns3::Packet::AddAtEnd(), ns3::Packet::AddHeader(), ns3::Packet::AddTrailer(), ns3::EthernetTrailer::CalcFcs(), ns3::Node::ChecksumEnabled(), DIX, ns3::EthernetTrailer::EnableFcs(), GetMtu(), ns3::Packet::GetSize(), ILLEGAL, LLC, NS_ASSERT_MSG, NS_FATAL_ERROR, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::EthernetHeader::SetDestination(), ns3::EthernetHeader::SetLengthType(), and ns3::EthernetHeader::SetSource().
Referenced by SendFrom().
|
virtual |
callback | the callback to invoke |
Add a callback invoked whenever the link status changes to UP. This callback is typically used by the IP/ARP layer to flush the ARP cache and by IPv6 stack to flush NDISC cache whenever the link goes up.
Implements ns3::NetDevice.
References ns3::TracedCallback< T1, T2, T3, T4, T5, T6, T7, T8 >::ConnectWithoutContext(), and NS_LOG_FUNCTION.
bool ns3::CsmaNetDevice::Attach | ( | Ptr< CsmaChannel > | ch | ) |
Attach the device to a channel.
The function Attach is used to add a CsmaNetDevice to a CsmaChannel.
ch | a pointer to the channel to which this object is being attached. |
References ns3::CsmaChannel::Attach(), ns3::DataRate::CalculateTxTime(), ns3::CsmaChannel::GetDataRate(), NS_LOG_FUNCTION, and ns3::Seconds().
|
protectedvirtual |
Perform any object release functionality required to break reference cycles in reference counted objects held by the device.
Reimplemented from ns3::Object.
References NS_LOG_FUNCTION_NOARGS.
|
virtual |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
|
virtual |
Calling this method is invalid if IsBroadcast returns not true.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
CsmaNetDevice::EncapsulationMode ns3::CsmaNetDevice::GetEncapsulationMode | ( | void | ) |
Get the encapsulation mode of this device.
References NS_LOG_FUNCTION_NOARGS.
|
virtual |
|
virtual |
This value is typically used by the IP layer to perform IP fragmentation when needed.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
Referenced by AddHeader(), and GetTypeId().
|
virtual |
Make and return a MAC multicast address using the provided multicast group.
RFC 1112 says that an Ipv4 host group address is mapped to an Ethernet multicast address by placing the low-order 23-bits of the IP address into the low-order 23 bits of the Ethernet multicast address 01-00-5E-00-00-00 (hex).
This method performs the multicast address creation function appropriate to an EUI-48-based CSMA device. This MAC address is encapsulated in an abstract Address to avoid dependencies on the exact address format.
multicastGroup | The IP address for the multicast group destination of the packet. |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by GetMulticast().
|
virtual |
Get the MAC multicast address corresponding to the IPv6 address provided.
addr | IPv6 address |
Implements ns3::NetDevice.
References GetMulticast(), and NS_LOG_LOGIC.
Get the node to which this device is attached.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
Get a copy of the attached Queue.
References NS_LOG_FUNCTION_NOARGS.
|
static |
This method returns the TypeId associated to ns3::CsmaNetDevice.
This object is accessible through the following paths with Config::Set and Config::Connect:
Attributes defined for this type:
TraceSources defined for this type:
Reimplemented from ns3::NetDevice.
References DIX, GetMtu(), LLC, ns3::MakeTraceSourceAccessor(), SetEncapsulationMode(), SetMtu(), and ns3::TypeId::SetParent().
|
virtual |
|
virtual |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
|
virtual |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
Referenced by SendFrom().
|
virtual |
|
virtual |
Is this a point to point link?
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
bool ns3::CsmaNetDevice::IsReceiveEnabled | ( | void | ) |
Is the receive side of the network device enabled?
References NS_LOG_FUNCTION_NOARGS.
Referenced by Receive().
bool ns3::CsmaNetDevice::IsSendEnabled | ( | void | ) |
Is the send side of the network device enabled?
References NS_LOG_FUNCTION_NOARGS.
Referenced by SendFrom().
|
virtual |
Does this device need to use the address resolution protocol?
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.
void ns3::CsmaNetDevice::Receive | ( | Ptr< Packet > | p, |
Ptr< CsmaNetDevice > | sender | ||
) |
Receive a packet from a connected CsmaChannel.
The CsmaNetDevice receives packets from its connected channel and forwards them up the protocol stack. This is the public method used by the channel to indicate that the last bit of a packet has arrived at the device.
p | a reference to the received packet |
sender | the CsmaNetDevice that transmitted the packet in the first place |
References ns3::EthernetTrailer::CheckFcs(), ns3::Node::ChecksumEnabled(), ns3::Packet::Copy(), ns3::EthernetTrailer::EnableFcs(), ns3::EthernetHeader::GetDestination(), ns3::EthernetHeader::GetLengthType(), ns3::Packet::GetSize(), ns3::EthernetHeader::GetSource(), ns3::Packet::GetUid(), ns3::Mac48Address::IsBroadcast(), ns3::ErrorModel::IsCorrupt(), ns3::Mac48Address::IsGroup(), IsReceiveEnabled(), NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, ns3::NetDevice::PACKET_BROADCAST, ns3::NetDevice::PACKET_HOST, ns3::NetDevice::PACKET_MULTICAST, ns3::NetDevice::PACKET_OTHERHOST, ns3::Packet::RemoveAtEnd(), ns3::Packet::RemoveHeader(), and ns3::Packet::RemoveTrailer().
Referenced by ns3::CsmaChannel::TransmitEnd().
|
virtual |
Start sending a packet down the channel.
packet | packet to send |
dest | layer 2 destination address |
protocolNumber | protocol number |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION, and SendFrom().
|
virtual |
Start sending a packet down the channel, with MAC spoofing
packet | packet to send |
source | layer 2 source address |
dest | layer 2 destination address |
protocolNumber | protocol number |
Implements ns3::NetDevice.
References AddHeader(), ns3::Mac48Address::ConvertFrom(), ns3::Queue::Dequeue(), ns3::Queue::Enqueue(), ns3::Packet::GetUid(), ns3::Queue::IsEmpty(), IsLinkUp(), IsSendEnabled(), NS_ASSERT, NS_ASSERT_MSG, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by Send().
|
virtual |
Set the address of this interface
address | address to set |
Implements ns3::NetDevice.
References ns3::Mac48Address::ConvertFrom(), and NS_LOG_FUNCTION_NOARGS.
void ns3::CsmaNetDevice::SetBackoffParams | ( | Time | slotTime, |
uint32_t | minSlots, | ||
uint32_t | maxSlots, | ||
uint32_t | maxRetries, | ||
uint32_t | ceiling | ||
) |
Set the backoff parameters used to determine the wait to retry transmitting a packet when the channel is busy.
slotTime | Length of a packet slot (or average packet time) |
minSlots | Minimum number of slots to wait |
maxSlots | Maximum number of slots to wait |
maxRetries | Maximum number of retries before packet is discard |
ceiling | Cap on the exponential function when calculating max slots |
References ns3::Backoff::m_ceiling, ns3::Backoff::m_maxRetries, ns3::Backoff::m_maxSlots, ns3::Backoff::m_minSlots, ns3::Backoff::m_slotTime, and NS_LOG_FUNCTION.
void ns3::CsmaNetDevice::SetEncapsulationMode | ( | CsmaNetDevice::EncapsulationMode | mode | ) |
Set the encapsulation mode of this device.
mode | The encapsulation mode of this device. |
References NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by GetTypeId().
|
virtual |
void ns3::CsmaNetDevice::SetInterframeGap | ( | Time | t | ) |
Set the interframe gap used to separate packets. The interframe gap defines the minimum space required between packets sent by this device. As in Ethernet, it defaults to 96 bit times.
t | the interframe gap time |
References NS_LOG_FUNCTION.
|
virtual |
mtu | MTU value, in bytes, to set for the device |
Override for default MTU defined on a per-type basis.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by GetTypeId().
Set the node to which this device is being attached.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION.
|
virtual |
cb | callback to invoke whenever a packet has been received in promiscuous mode and must be forwarded to the higher layers. |
Enables netdevice promiscuous mode and sets the callback that will handle promiscuous mode packets. Note, promiscuous mode packets means all packets, including those packets that can be sensed by the netdevice but which are intended to be received by other hosts.
Implements ns3::NetDevice.
References NS_LOG_FUNCTION.
Attach a queue to the CsmaNetDevice.
The CsmaNetDevice "owns" a queue. This queue may be set by higher level topology objects to implement a particular queueing method such as DropTail or RED.
queue | a Ptr to the queue for being assigned to the device. |
References NS_LOG_FUNCTION.
|
virtual |
Set the callback to be used to notify higher layers when a packet has been received.
cb | The callback. |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION.
void ns3::CsmaNetDevice::SetReceiveEnable | ( | bool | enable | ) |
Enable or disable the receive side of the network device.
enable | Enable the receive side if true, otherwise disable. |
References NS_LOG_FUNCTION.
void ns3::CsmaNetDevice::SetReceiveErrorModel | ( | Ptr< ErrorModel > | em | ) |
Attach a receive ErrorModel to the CsmaNetDevice.
The CsmaNetDevice may optionally include an ErrorModel in the packet receive chain to simulate data errors in during transmission.
em | a pointer to the ErrorModel |
References NS_LOG_FUNCTION.
void ns3::CsmaNetDevice::SetSendEnable | ( | bool | enable | ) |
Enable or disable the send side of the network device.
enable | Enable the send side if true, otherwise disable. |
References NS_LOG_FUNCTION.
|
virtual |
Implements ns3::NetDevice.
References NS_LOG_FUNCTION_NOARGS.