128 column pages
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
Backoff::Backoff()
|
||||
Backoff::Backoff ()
|
||||
{
|
||||
m_slotTime = MicroSeconds(1);
|
||||
m_minSlots = 1;
|
||||
@@ -33,8 +33,7 @@ Backoff::Backoff()
|
||||
ResetBackoffTime();
|
||||
}
|
||||
|
||||
Backoff::Backoff(Time slotTime, uint32_t minSlots, uint32_t maxSlots,
|
||||
uint32_t ceiling, uint32_t maxRetries)
|
||||
Backoff::Backoff(Time slotTime, uint32_t minSlots, uint32_t maxSlots, uint32_t ceiling, uint32_t maxRetries)
|
||||
{
|
||||
m_slotTime = slotTime;
|
||||
m_minSlots = minSlots;
|
||||
@@ -50,32 +49,42 @@ Backoff::GetBackoffTime (void)
|
||||
uint32_t ceiling;
|
||||
|
||||
if ((m_ceiling > 0) &&(m_numBackoffRetries > m_ceiling))
|
||||
ceiling = m_ceiling;
|
||||
{
|
||||
ceiling = m_ceiling;
|
||||
}
|
||||
else
|
||||
ceiling = m_numBackoffRetries;
|
||||
{
|
||||
ceiling = m_numBackoffRetries;
|
||||
}
|
||||
|
||||
uint32_t minSlot = m_minSlots;
|
||||
uint32_t maxSlot = (uint32_t)pow(2, ceiling) - 1;
|
||||
uint32_t maxSlot = (uint32_t)pow (2, ceiling) - 1;
|
||||
if (maxSlot > m_maxSlots)
|
||||
maxSlot = m_maxSlots;
|
||||
{
|
||||
maxSlot = m_maxSlots;
|
||||
}
|
||||
|
||||
uint32_t backoffSlots =
|
||||
(uint32_t)UniformVariable::GetSingleValue(minSlot, maxSlot);
|
||||
uint32_t backoffSlots = (uint32_t)UniformVariable::GetSingleValue(minSlot, maxSlot);
|
||||
|
||||
backoff = Scalar(backoffSlots) * m_slotTime;
|
||||
return (backoff);
|
||||
}
|
||||
|
||||
void Backoff::ResetBackoffTime (void)
|
||||
void
|
||||
Backoff::ResetBackoffTime (void)
|
||||
{
|
||||
m_numBackoffRetries = 0;
|
||||
}
|
||||
|
||||
bool Backoff::MaxRetriesReached(void) {
|
||||
bool
|
||||
Backoff::MaxRetriesReached (void)
|
||||
{
|
||||
return (m_numBackoffRetries >= m_maxRetries);
|
||||
}
|
||||
|
||||
void Backoff::IncrNumRetries(void) {
|
||||
void
|
||||
Backoff::IncrNumRetries (void)
|
||||
{
|
||||
m_numBackoffRetries++;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,49 +36,63 @@ namespace ns3 {
|
||||
|
||||
class Backoff {
|
||||
public:
|
||||
uint32_t m_minSlots; // Minimum number of backoff slots (when
|
||||
// multiplied by m_slotTime, determines minimum
|
||||
// backoff time)
|
||||
uint32_t m_maxSlots; // Maximim number of backoff slots (when
|
||||
// multiplied by m_slotTime, determines
|
||||
// maximum backoff time)
|
||||
uint32_t m_ceiling; // Caps the exponential function when the
|
||||
// number of retries reaches m_ceiling
|
||||
uint32_t m_maxRetries; // Maximum number of transmission retries
|
||||
// before the packet is dropped.
|
||||
Time m_slotTime; // Length of one slot. A slot time, it usually
|
||||
// the packet transmission time, if the packet
|
||||
// size is fixed.
|
||||
/**
|
||||
* Minimum number of backoff slots (when multiplied by m_slotTime, determines minimum backoff time)
|
||||
*/
|
||||
uint32_t m_minSlots;
|
||||
|
||||
Backoff();
|
||||
Backoff(Time slotTime, uint32_t minSlots, uint32_t maxSlots,
|
||||
uint32_t ceiling, uint32_t maxRetries);
|
||||
/**
|
||||
* Maximim number of backoff slots (when multiplied by m_slotTime, determines maximum backoff time)
|
||||
*/
|
||||
uint32_t m_maxSlots;
|
||||
|
||||
/**
|
||||
* Caps the exponential function when the number of retries reaches m_ceiling.
|
||||
*/
|
||||
uint32_t m_ceiling;
|
||||
|
||||
/**
|
||||
* Maximum number of transmission retries before the packet is dropped.
|
||||
*/
|
||||
uint32_t m_maxRetries;
|
||||
|
||||
/**
|
||||
* Length of one slot. A slot time, it usually the packet transmission time, if the packet size is fixed.
|
||||
*/
|
||||
Time m_slotTime;
|
||||
|
||||
Backoff (void);
|
||||
Backoff (Time slotTime, uint32_t minSlots, uint32_t maxSlots, uint32_t ceiling, uint32_t maxRetries);
|
||||
|
||||
/**
|
||||
* \return The amount of time that the net device should wait before
|
||||
* trying to retransmit the packet
|
||||
*/
|
||||
Time GetBackoffTime();
|
||||
|
||||
/**
|
||||
* Indicates to the backoff object that the last packet was
|
||||
* successfully transmitted and that the number of retries should be
|
||||
* reset to 0.
|
||||
*/
|
||||
void ResetBackoffTime();
|
||||
void ResetBackoffTime (void);
|
||||
|
||||
/**
|
||||
* \return True if the maximum number of retries has been reached
|
||||
*/
|
||||
bool MaxRetriesReached();
|
||||
bool MaxRetriesReached (void);
|
||||
|
||||
/**
|
||||
* Increments the number of retries by 1.
|
||||
*/
|
||||
void IncrNumRetries();
|
||||
void IncrNumRetries (void);
|
||||
|
||||
private:
|
||||
uint32_t m_numBackoffRetries; // Number of times that the
|
||||
// transmitter has tried to
|
||||
// unsuccessfully transmit the current
|
||||
// packet
|
||||
|
||||
/**
|
||||
* Number of times that the transmitter has tried to unsuccessfully transmit the current packet.
|
||||
*/
|
||||
uint32_t m_numBackoffRetries;
|
||||
};
|
||||
|
||||
}; // namespace ns3
|
||||
|
||||
@@ -37,8 +37,7 @@ CsmaChannel::GetTypeId (void)
|
||||
.SetParent<Channel> ()
|
||||
.AddConstructor<CsmaChannel> ()
|
||||
.AddAttribute ("DataRate",
|
||||
"The transmission data rate to be provided to devices "
|
||||
"connected to the channel",
|
||||
"The transmission data rate to be provided to devices connected to the channel",
|
||||
DataRateValue (DataRate (0xffffffff)),
|
||||
MakeDataRateAccessor (&CsmaChannel::m_bps),
|
||||
MakeDataRateChecker ())
|
||||
@@ -126,16 +125,15 @@ CsmaChannel::Detach (uint32_t deviceId)
|
||||
{
|
||||
if (!m_deviceList[deviceId].active)
|
||||
{
|
||||
NS_LOG_WARN ("CsmaChannel::Detach(): "
|
||||
"Device is already detached (" << deviceId << ")");
|
||||
NS_LOG_WARN ("CsmaChannel::Detach(): Device is already detached (" << deviceId << ")");
|
||||
return false;
|
||||
}
|
||||
|
||||
m_deviceList[deviceId].active = false;
|
||||
|
||||
if ((m_state == TRANSMITTING) && (m_currentSrc == deviceId))
|
||||
{
|
||||
NS_LOG_WARN ("CsmaChannel::Detach(): Device is currently" <<
|
||||
"transmitting (" << deviceId << ")");
|
||||
NS_LOG_WARN ("CsmaChannel::Detach(): Device is currently" << "transmitting (" << deviceId << ")");
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -178,8 +176,7 @@ CsmaChannel::TransmitStart (Ptr<Packet> p, uint32_t srcId)
|
||||
|
||||
if (!IsActive(srcId))
|
||||
{
|
||||
NS_LOG_ERROR ("CsmaChannel::TransmitStart(): "
|
||||
"Seclected source is not currently attached to network");
|
||||
NS_LOG_ERROR ("CsmaChannel::TransmitStart(): Seclected source is not currently attached to network");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -209,8 +206,7 @@ CsmaChannel::TransmitEnd()
|
||||
|
||||
if (!IsActive (m_currentSrc))
|
||||
{
|
||||
NS_LOG_ERROR ("CsmaChannel::TransmitEnd(): "
|
||||
"Seclected source was detached before the end of the transmission");
|
||||
NS_LOG_ERROR ("CsmaChannel::TransmitEnd(): Seclected source was detached before the end of the transmission");
|
||||
retVal = false;
|
||||
}
|
||||
|
||||
@@ -259,10 +255,6 @@ CsmaChannel::GetNumActDevices (void)
|
||||
return numActDevices;
|
||||
}
|
||||
|
||||
//
|
||||
// This is not the number of active devices. This is the total number
|
||||
// of devices even if some were detached after.
|
||||
//
|
||||
uint32_t
|
||||
CsmaChannel::GetNDevices (void) const
|
||||
{
|
||||
|
||||
@@ -32,39 +32,37 @@ class Packet;
|
||||
|
||||
class CsmaNetDevice;
|
||||
|
||||
/**
|
||||
* \brief CsmaNetDevice Record
|
||||
*
|
||||
* Stores the information related to each net device that is
|
||||
* connected to the channel.
|
||||
*/
|
||||
class CsmaDeviceRec {
|
||||
public:
|
||||
Ptr< CsmaNetDevice > devicePtr; /// Pointer to the net device
|
||||
bool active; /// Is net device enabled to TX/RX
|
||||
|
||||
CsmaDeviceRec();
|
||||
CsmaDeviceRec(Ptr< CsmaNetDevice > device);
|
||||
|
||||
/**
|
||||
* \brief CsmaNetDevice Record
|
||||
*
|
||||
* Stores the information related to each net device that is
|
||||
* connected to the channel.
|
||||
* \return If the net device pointed to by the devicePtr is active
|
||||
* and ready to RX/TX.
|
||||
*/
|
||||
class CsmaDeviceRec {
|
||||
public:
|
||||
Ptr< CsmaNetDevice > devicePtr; /// Pointer to the net device
|
||||
bool active; /// Is net device enabled to TX/RX
|
||||
bool IsActive();
|
||||
};
|
||||
|
||||
CsmaDeviceRec();
|
||||
CsmaDeviceRec(Ptr< CsmaNetDevice > device);
|
||||
/*
|
||||
* \return If the net device pointed to by the devicePtr is active
|
||||
* and ready to RX/TX.
|
||||
*/
|
||||
bool IsActive();
|
||||
/**
|
||||
* Current state of the channel
|
||||
*/
|
||||
enum WireState
|
||||
{
|
||||
IDLE, /**< Channel is IDLE, no packet is being transmitted */
|
||||
TRANSMITTING, /**< Channel is BUSY, a packet is being written by a net device */
|
||||
PROPAGATING /**< Channel is BUSY, packet is propagating to all attached net devices */
|
||||
};
|
||||
|
||||
/**
|
||||
* Current state of the channel
|
||||
*/
|
||||
enum WireState
|
||||
{
|
||||
IDLE, /**< Channel is IDLE, no packet is being
|
||||
transmitted */
|
||||
TRANSMITTING, /**< Channel is BUSY, a packet is being written
|
||||
by a net device */
|
||||
PROPAGATING /**< Channel is BUSY, packet is propagating to
|
||||
all attached net devices */
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Csma Channel.
|
||||
*
|
||||
|
||||
@@ -39,61 +39,61 @@ namespace ns3 {
|
||||
|
||||
NS_OBJECT_ENSURE_REGISTERED (CsmaNetDevice);
|
||||
|
||||
TypeId
|
||||
TypeId
|
||||
CsmaNetDevice::GetTypeId (void)
|
||||
{
|
||||
static TypeId tid = TypeId ("ns3::CsmaNetDevice")
|
||||
.SetParent<NetDevice> ()
|
||||
.AddConstructor<CsmaNetDevice> ()
|
||||
.AddAttribute ("Address",
|
||||
"The MAC address of this device.",
|
||||
Mac48AddressValue (Mac48Address ("ff:ff:ff:ff:ff:ff")),
|
||||
MakeMac48AddressAccessor (&CsmaNetDevice::m_address),
|
||||
MakeMac48AddressChecker ())
|
||||
"The MAC address of this device.",
|
||||
Mac48AddressValue (Mac48Address ("ff:ff:ff:ff:ff:ff")),
|
||||
MakeMac48AddressAccessor (&CsmaNetDevice::m_address),
|
||||
MakeMac48AddressChecker ())
|
||||
.AddAttribute ("PayloadLength",
|
||||
"The max PHY-level payload length of packets sent over this device.",
|
||||
UintegerValue (DEFAULT_FRAME_LENGTH),
|
||||
MakeUintegerAccessor (&CsmaNetDevice::m_maxPayloadLength),
|
||||
MakeUintegerChecker<uint16_t> ())
|
||||
"The max PHY-level payload length of packets sent over this device.",
|
||||
UintegerValue (DEFAULT_FRAME_LENGTH),
|
||||
MakeUintegerAccessor (&CsmaNetDevice::m_maxPayloadLength),
|
||||
MakeUintegerChecker<uint16_t> ())
|
||||
.AddAttribute ("MTU",
|
||||
"The MAC-level MTU (client payload) of packets sent over this device.",
|
||||
UintegerValue (DEFAULT_MTU),
|
||||
MakeUintegerAccessor (&CsmaNetDevice::m_mtu),
|
||||
MakeUintegerChecker<uint16_t> ())
|
||||
"The MAC-level MTU (client payload) of packets sent over this device.",
|
||||
UintegerValue (DEFAULT_MTU),
|
||||
MakeUintegerAccessor (&CsmaNetDevice::m_mtu),
|
||||
MakeUintegerChecker<uint16_t> ())
|
||||
.AddAttribute ("EncapsulationMode",
|
||||
"The link-layer encapsulation type to use.",
|
||||
EnumValue (LLC),
|
||||
MakeEnumAccessor (&CsmaNetDevice::m_encapMode),
|
||||
MakeEnumChecker (ETHERNET_V1, "EthernetV1",
|
||||
IP_ARP, "IpArp",
|
||||
RAW, "Raw",
|
||||
LLC, "Llc"))
|
||||
"The link-layer encapsulation type to use.",
|
||||
EnumValue (LLC),
|
||||
MakeEnumAccessor (&CsmaNetDevice::m_encapMode),
|
||||
MakeEnumChecker (ETHERNET_V1, "EthernetV1",
|
||||
IP_ARP, "IpArp",
|
||||
RAW, "Raw",
|
||||
LLC, "Llc"))
|
||||
.AddAttribute ("SendEnable",
|
||||
"Enable or disable the transmitter section of the device.",
|
||||
BooleanValue (true),
|
||||
MakeBooleanAccessor (&CsmaNetDevice::m_sendEnable),
|
||||
MakeBooleanChecker ())
|
||||
"Enable or disable the transmitter section of the device.",
|
||||
BooleanValue (true),
|
||||
MakeBooleanAccessor (&CsmaNetDevice::m_sendEnable),
|
||||
MakeBooleanChecker ())
|
||||
.AddAttribute ("ReceiveEnable",
|
||||
"Enable or disable the receiver section of the device.",
|
||||
BooleanValue (true),
|
||||
MakeBooleanAccessor (&CsmaNetDevice::m_receiveEnable),
|
||||
MakeBooleanChecker ())
|
||||
"Enable or disable the receiver section of the device.",
|
||||
BooleanValue (true),
|
||||
MakeBooleanAccessor (&CsmaNetDevice::m_receiveEnable),
|
||||
MakeBooleanChecker ())
|
||||
.AddAttribute ("RxErrorModel",
|
||||
"The receiver error model used to simulate packet loss",
|
||||
PointerValue (),
|
||||
MakePointerAccessor (&CsmaNetDevice::m_receiveErrorModel),
|
||||
MakePointerChecker<ErrorModel> ())
|
||||
"The receiver error model used to simulate packet loss",
|
||||
PointerValue (),
|
||||
MakePointerAccessor (&CsmaNetDevice::m_receiveErrorModel),
|
||||
MakePointerChecker<ErrorModel> ())
|
||||
.AddAttribute ("TxQueue",
|
||||
"A queue to use as the transmit queue in the device.",
|
||||
PointerValue (),
|
||||
MakePointerAccessor (&CsmaNetDevice::m_queue),
|
||||
MakePointerChecker<Queue> ())
|
||||
"A queue to use as the transmit queue in the device.",
|
||||
PointerValue (),
|
||||
MakePointerAccessor (&CsmaNetDevice::m_queue),
|
||||
MakePointerChecker<Queue> ())
|
||||
.AddTraceSource ("Rx",
|
||||
"The trace source to fire on reception of a MAC packet.",
|
||||
MakeTraceSourceAccessor (&CsmaNetDevice::m_rxTrace))
|
||||
"The trace source to fire on reception of a MAC packet.",
|
||||
MakeTraceSourceAccessor (&CsmaNetDevice::m_rxTrace))
|
||||
.AddTraceSource ("Drop",
|
||||
"Trace source to fire on when a MAC packet is dropped.",
|
||||
MakeTraceSourceAccessor (&CsmaNetDevice::m_dropTrace))
|
||||
"Trace source to fire on when a MAC packet is dropped.",
|
||||
MakeTraceSourceAccessor (&CsmaNetDevice::m_dropTrace))
|
||||
;
|
||||
return tid;
|
||||
}
|
||||
@@ -148,14 +148,14 @@ CsmaNetDevice::SetReceiveEnable (bool receiveEnable)
|
||||
CsmaNetDevice::IsSendEnabled (void)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
return (m_sendEnable);
|
||||
return m_sendEnable;
|
||||
}
|
||||
|
||||
bool
|
||||
CsmaNetDevice::IsReceiveEnabled (void)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
return (m_receiveEnable);
|
||||
return m_receiveEnable;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -166,12 +166,7 @@ CsmaNetDevice::SetInterframeGap (Time t)
|
||||
}
|
||||
|
||||
void
|
||||
CsmaNetDevice::SetBackoffParams (
|
||||
Time slotTime,
|
||||
uint32_t minSlots,
|
||||
uint32_t maxSlots,
|
||||
uint32_t ceiling,
|
||||
uint32_t maxRetries)
|
||||
CsmaNetDevice::SetBackoffParams (Time slotTime, uint32_t minSlots, uint32_t maxSlots, uint32_t ceiling, uint32_t maxRetries)
|
||||
{
|
||||
NS_LOG_FUNCTION (slotTime << minSlots << maxSlots << ceiling << maxRetries);
|
||||
m_backoff.m_slotTime = slotTime;
|
||||
@@ -182,11 +177,7 @@ CsmaNetDevice::SetBackoffParams (
|
||||
}
|
||||
|
||||
void
|
||||
CsmaNetDevice::AddHeader (
|
||||
Ptr<Packet> p,
|
||||
Mac48Address source,
|
||||
Mac48Address dest,
|
||||
uint16_t protocolNumber)
|
||||
CsmaNetDevice::AddHeader (Ptr<Packet> p, Mac48Address source, Mac48Address dest, uint16_t protocolNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION (p << source << dest << protocolNumber);
|
||||
|
||||
@@ -210,24 +201,24 @@ CsmaNetDevice::AddHeader (
|
||||
{
|
||||
case IP_ARP:
|
||||
NS_LOG_LOGIC ("Encapsulating packet as IP_ARP (type interpretation)");
|
||||
//
|
||||
// This corresponds to the type interpretation of the lengthType field.
|
||||
//
|
||||
//
|
||||
// This corresponds to the type interpretation of the lengthType field.
|
||||
//
|
||||
lengthType = protocolNumber;
|
||||
break;
|
||||
case ETHERNET_V1:
|
||||
NS_LOG_LOGIC ("Encapsulating packet as ETHERNET_V1 "
|
||||
"(length interpretation)");
|
||||
//
|
||||
// This corresponds to the length interpretation of the lengthType field.
|
||||
// The ethernet header and trailer are not counted, see RFC 1042 and
|
||||
// http://standards.ieee.org/getieee802/download/802.3-2005_section1.pdf,
|
||||
// Section 3.2.6 a. We just include the size of the "payload."
|
||||
//
|
||||
//
|
||||
// This corresponds to the length interpretation of the lengthType field.
|
||||
// The ethernet header and trailer are not counted, see RFC 1042 and
|
||||
// http://standards.ieee.org/getieee802/download/802.3-2005_section1.pdf,
|
||||
// Section 3.2.6 a. We just include the size of the "payload."
|
||||
//
|
||||
lengthType = p->GetSize ();
|
||||
NS_ASSERT_MSG (lengthType <= m_maxPayloadLength,
|
||||
"CsmaNetDevice::AddHeader(): 802.3 Length/Type field: "
|
||||
"length interpretation must not exceed device max payload length");
|
||||
"CsmaNetDevice::AddHeader(): 802.3 Length/Type field: "
|
||||
"length interpretation must not exceed device max payload length");
|
||||
break;
|
||||
case LLC:
|
||||
{
|
||||
@@ -236,10 +227,10 @@ CsmaNetDevice::AddHeader (
|
||||
LlcSnapHeader llc;
|
||||
llc.SetType (protocolNumber);
|
||||
p->AddHeader (llc);
|
||||
//
|
||||
// This corresponds to the length interpretation of the lengthType field,
|
||||
// but with an LLC/SNAP header added to the payload.
|
||||
//
|
||||
//
|
||||
// This corresponds to the length interpretation of the lengthType field,
|
||||
// but with an LLC/SNAP header added to the payload.
|
||||
//
|
||||
lengthType = p->GetSize ();
|
||||
NS_ASSERT_MSG (lengthType <= m_maxPayloadLength,
|
||||
"CsmaNetDevice::AddHeader(): 802.3 Length/Type field with LLC/SNAP: "
|
||||
@@ -309,18 +300,18 @@ CsmaNetDevice::TransmitStart ()
|
||||
|
||||
NS_LOG_LOGIC ("m_currentPkt=" << m_currentPkt);
|
||||
NS_LOG_LOGIC ("UID is " << m_currentPkt->GetUid ());
|
||||
//
|
||||
// This function is called to start the process of transmitting a packet.
|
||||
// We need to tell the channel that we've started wiggling the wire and
|
||||
// schedule an event that will be executed when it's time to tell the
|
||||
// channel that we're done wiggling the wire.
|
||||
//
|
||||
//
|
||||
// This function is called to start the process of transmitting a packet.
|
||||
// We need to tell the channel that we've started wiggling the wire and
|
||||
// schedule an event that will be executed when it's time to tell the
|
||||
// channel that we're done wiggling the wire.
|
||||
//
|
||||
NS_ASSERT_MSG ((m_txMachineState == READY) || (m_txMachineState == BACKOFF),
|
||||
"Must be READY to transmit. Tx state is: " << m_txMachineState);
|
||||
"Must be READY to transmit. Tx state is: " << m_txMachineState);
|
||||
|
||||
//
|
||||
// Only transmit if send side of net device is enabled
|
||||
//
|
||||
//
|
||||
// Only transmit if send side of net device is enabled
|
||||
//
|
||||
if (IsSendEnabled () == false)
|
||||
{
|
||||
return;
|
||||
@@ -328,16 +319,16 @@ CsmaNetDevice::TransmitStart ()
|
||||
|
||||
if (m_channel->GetState () != IDLE)
|
||||
{
|
||||
//
|
||||
// The channel is busy -- backoff and rechedule TransmitStart ()
|
||||
//
|
||||
//
|
||||
// The channel is busy -- backoff and rechedule TransmitStart ()
|
||||
//
|
||||
m_txMachineState = BACKOFF;
|
||||
|
||||
if (m_backoff.MaxRetriesReached ())
|
||||
{
|
||||
//
|
||||
// Too many retries, abort transmission of packet
|
||||
//
|
||||
//
|
||||
// Too many retries, abort transmission of packet
|
||||
//
|
||||
TransmitAbort ();
|
||||
}
|
||||
else
|
||||
@@ -345,38 +336,33 @@ CsmaNetDevice::TransmitStart ()
|
||||
m_backoff.IncrNumRetries ();
|
||||
Time backoffTime = m_backoff.GetBackoffTime ();
|
||||
|
||||
NS_LOG_LOGIC ("Channel busy, backing off for " <<
|
||||
backoffTime.GetSeconds () << " sec");
|
||||
NS_LOG_LOGIC ("Channel busy, backing off for " << backoffTime.GetSeconds () << " sec");
|
||||
|
||||
Simulator::Schedule (backoffTime, &CsmaNetDevice::TransmitStart,
|
||||
this);
|
||||
Simulator::Schedule (backoffTime, &CsmaNetDevice::TransmitStart, this);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// The channel is free, transmit the packet
|
||||
//
|
||||
//
|
||||
// The channel is free, transmit the packet
|
||||
//
|
||||
m_txMachineState = BUSY;
|
||||
Time tEvent = Seconds (m_bps.CalculateTxTime (m_currentPkt->GetSize ()));
|
||||
|
||||
NS_LOG_LOGIC ("Schedule TransmitCompleteEvent in " <<
|
||||
tEvent.GetSeconds () << "sec");
|
||||
NS_LOG_LOGIC ("Schedule TransmitCompleteEvent in " << tEvent.GetSeconds () << "sec");
|
||||
|
||||
Simulator::Schedule (tEvent, &CsmaNetDevice::TransmitCompleteEvent,
|
||||
this);
|
||||
Simulator::Schedule (tEvent, &CsmaNetDevice::TransmitCompleteEvent, this);
|
||||
|
||||
if (m_channel->TransmitStart (m_currentPkt, m_deviceId) == false)
|
||||
{
|
||||
NS_LOG_WARN ("Channel transmit start did not work at " <<
|
||||
tEvent.GetSeconds () << "sec");
|
||||
NS_LOG_WARN ("Channel transmit start did not work at " << tEvent.GetSeconds () << "sec");
|
||||
m_txMachineState = READY;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Transmission succeeded, reset the backoff time parameters.
|
||||
//
|
||||
//
|
||||
// Transmission succeeded, reset the backoff time parameters.
|
||||
//
|
||||
m_backoff.ResetBackoffTime ();
|
||||
}
|
||||
}
|
||||
@@ -390,17 +376,15 @@ CsmaNetDevice::TransmitAbort (void)
|
||||
|
||||
NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")");
|
||||
|
||||
//
|
||||
// Since we were transmitting a packet, that packet had better be on the
|
||||
// transmit queue.
|
||||
//
|
||||
//
|
||||
// Since we were transmitting a packet, that packet had better be on the transmit queue.
|
||||
//
|
||||
m_currentPkt = m_queue->Dequeue ();
|
||||
NS_ASSERT_MSG (m_currentPkt != 0, "No Packet on queue during"
|
||||
"CsmaNetDevice::TransmitAbort()");
|
||||
NS_ASSERT_MSG (m_currentPkt != 0, "No Packet on queue during CsmaNetDevice::TransmitAbort()");
|
||||
|
||||
//
|
||||
// The last one failed. Let's try to transmit the next one (if there)
|
||||
//
|
||||
//
|
||||
// The last one failed. Let's try to transmit the next one (if there)
|
||||
//
|
||||
m_backoff.ResetBackoffTime ();
|
||||
m_txMachineState = READY;
|
||||
TransmitStart ();
|
||||
@@ -411,12 +395,12 @@ CsmaNetDevice::TransmitCompleteEvent (void)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
|
||||
//
|
||||
// This function is called to finish the process of transmitting a packet.
|
||||
// We need to tell the channel that we've stopped wiggling the wire and
|
||||
// schedule an event that will be executed when it's time to re-enable
|
||||
// the transmitter after the interframe gap.
|
||||
//
|
||||
//
|
||||
// This function is called to finish the process of transmitting a packet.
|
||||
// We need to tell the channel that we've stopped wiggling the wire and
|
||||
// schedule an event that will be executed when it's time to re-enable
|
||||
// the transmitter after the interframe gap.
|
||||
//
|
||||
NS_ASSERT_MSG (m_txMachineState == BUSY, "Must be BUSY if transmitting");
|
||||
NS_ASSERT (m_channel->GetState () == TRANSMITTING);
|
||||
m_txMachineState = GAP;
|
||||
@@ -424,11 +408,9 @@ CsmaNetDevice::TransmitCompleteEvent (void)
|
||||
NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")");
|
||||
m_channel->TransmitEnd ();
|
||||
|
||||
NS_LOG_LOGIC ("Schedule TransmitReadyEvent in "
|
||||
<< m_tInterframeGap.GetSeconds () << "sec");
|
||||
NS_LOG_LOGIC ("Schedule TransmitReadyEvent in " << m_tInterframeGap.GetSeconds () << "sec");
|
||||
|
||||
Simulator::Schedule (m_tInterframeGap, &CsmaNetDevice::TransmitReadyEvent,
|
||||
this);
|
||||
Simulator::Schedule (m_tInterframeGap, &CsmaNetDevice::TransmitReadyEvent, this);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -436,17 +418,17 @@ CsmaNetDevice::TransmitReadyEvent (void)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
|
||||
//
|
||||
// This function is called to enable the transmitter after the interframe
|
||||
// gap has passed. If there are pending transmissions, we use this opportunity
|
||||
// to start the next transmit.
|
||||
//
|
||||
//
|
||||
// This function is called to enable the transmitter after the interframe
|
||||
// gap has passed. If there are pending transmissions, we use this opportunity
|
||||
// to start the next transmit.
|
||||
//
|
||||
NS_ASSERT_MSG (m_txMachineState == GAP, "Must be in interframe gap");
|
||||
m_txMachineState = READY;
|
||||
|
||||
//
|
||||
// Get the next packet from the queue for transmitting
|
||||
//
|
||||
//
|
||||
// Get the next packet from the queue for transmitting
|
||||
//
|
||||
if (m_queue->IsEmpty ())
|
||||
{
|
||||
return;
|
||||
@@ -454,8 +436,7 @@ CsmaNetDevice::TransmitReadyEvent (void)
|
||||
else
|
||||
{
|
||||
m_currentPkt = m_queue->Dequeue ();
|
||||
NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitReadyEvent():"
|
||||
" IsEmpty false but no Packet on queue?");
|
||||
NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitReadyEvent(): IsEmpty false but no Packet on queue?");
|
||||
TransmitStart ();
|
||||
}
|
||||
}
|
||||
@@ -469,19 +450,19 @@ CsmaNetDevice::Attach (Ptr<CsmaChannel> ch)
|
||||
|
||||
m_deviceId = m_channel->Attach (this);
|
||||
|
||||
//
|
||||
// The channel provides us with the transmitter data rate.
|
||||
//
|
||||
//
|
||||
// The channel provides us with the transmitter data rate.
|
||||
//
|
||||
m_bps = m_channel->GetDataRate ();
|
||||
|
||||
//
|
||||
// We use the Ethernet interframe gap of 96 bit times.
|
||||
//
|
||||
//
|
||||
// We use the Ethernet interframe gap of 96 bit times.
|
||||
//
|
||||
m_tInterframeGap = Seconds (m_bps.CalculateTxTime (96/8));
|
||||
|
||||
//
|
||||
// This device is up whenever a channel is attached to it.
|
||||
//
|
||||
//
|
||||
// This device is up whenever a channel is attached to it.
|
||||
//
|
||||
NotifyLinkUp ();
|
||||
return true;
|
||||
}
|
||||
@@ -500,25 +481,25 @@ CsmaNetDevice::SetReceiveErrorModel (Ptr<ErrorModel> em)
|
||||
m_receiveErrorModel = em;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
CsmaNetDevice::Receive (Ptr<Packet> packet, Ptr<CsmaNetDevice> senderDevice)
|
||||
{
|
||||
NS_LOG_FUNCTION (packet << senderDevice);
|
||||
NS_LOG_LOGIC ("UID is " << packet->GetUid ());
|
||||
|
||||
//
|
||||
// We never forward up packets that we sent. Real devices don't do this since
|
||||
// their receivers are disabled during send, so we don't. Drop the packet
|
||||
// silently (no tracing) since it would really never get here in a real device.
|
||||
//
|
||||
//
|
||||
// We never forward up packets that we sent. Real devices don't do this since
|
||||
// their receivers are disabled during send, so we don't. Drop the packet
|
||||
// silently (no tracing) since it would really never get here in a real device.
|
||||
//
|
||||
if (senderDevice == this)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Only receive if the send side of net device is enabled
|
||||
//
|
||||
//
|
||||
// Only receive if the send side of net device is enabled
|
||||
//
|
||||
if (IsReceiveEnabled () == false)
|
||||
{
|
||||
m_dropTrace (packet);
|
||||
@@ -530,17 +511,16 @@ CsmaNetDevice::Receive (Ptr<Packet> packet, Ptr<CsmaNetDevice> senderDevice)
|
||||
m_rxTrace (packet);
|
||||
if (!m_promiscRxCallback.IsNull ())
|
||||
{
|
||||
m_promiscRxCallback (this, packet, 0, GetBroadcast (),
|
||||
GetAddress (), PACKET_HOST);
|
||||
m_promiscRxCallback (this, packet, 0, GetBroadcast (), GetAddress (), PACKET_HOST);
|
||||
}
|
||||
m_rxCallback (this, packet, 0, GetBroadcast ());
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Trace sinks will expect complete packets, not packets without some of the
|
||||
// headers.
|
||||
//
|
||||
//
|
||||
// Trace sinks will expect complete packets, not packets without some of the
|
||||
// headers.
|
||||
//
|
||||
Ptr<Packet> originalPacket = packet->Copy ();
|
||||
|
||||
EthernetTrailer trailer;
|
||||
@@ -553,14 +533,14 @@ CsmaNetDevice::Receive (Ptr<Packet> packet, Ptr<CsmaNetDevice> senderDevice)
|
||||
NS_LOG_LOGIC ("Pkt source is " << header.GetSource ());
|
||||
NS_LOG_LOGIC ("Pkt destination is " << header.GetDestination ());
|
||||
|
||||
//
|
||||
// An IP 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).
|
||||
//
|
||||
// We are going to receive all packets destined to any multicast address,
|
||||
// which means clearing the low-order 23 bits the header destination
|
||||
//
|
||||
//
|
||||
// An IP 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).
|
||||
//
|
||||
// We are going to receive all packets destined to any multicast address,
|
||||
// which means clearing the low-order 23 bits the header destination
|
||||
//
|
||||
Mac48Address mcDest;
|
||||
uint8_t mcBuf[6];
|
||||
|
||||
@@ -581,10 +561,9 @@ CsmaNetDevice::Receive (Ptr<Packet> packet, Ptr<CsmaNetDevice> senderDevice)
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// variable <protocol> must be initialized to avoid a compiler warning in the
|
||||
// RAW case that breaks the optimized build.
|
||||
//
|
||||
//
|
||||
// variable <protocol> must be initialized to avoid a compiler warning in the RAW case that breaks the optimized build.
|
||||
//
|
||||
uint16_t protocol = 0;
|
||||
|
||||
switch (m_encapMode)
|
||||
@@ -629,8 +608,7 @@ CsmaNetDevice::Receive (Ptr<Packet> packet, Ptr<CsmaNetDevice> senderDevice)
|
||||
|
||||
if (!m_promiscRxCallback.IsNull ())
|
||||
{
|
||||
m_promiscRxCallback (this, packet, protocol, header.GetSource (),
|
||||
header.GetDestination (), packetType);
|
||||
m_promiscRxCallback (this, packet, protocol, header.GetSource (), header.GetDestination (), packetType);
|
||||
}
|
||||
|
||||
if (packetType != PACKET_OTHERHOST)
|
||||
@@ -762,49 +740,55 @@ CsmaNetDevice::GetMulticast (void) const
|
||||
CsmaNetDevice::MakeMulticastAddress (Ipv4Address multicastGroup) const
|
||||
{
|
||||
NS_LOG_FUNCTION (multicastGroup);
|
||||
//
|
||||
// First, get the generic multicast address.
|
||||
//
|
||||
//
|
||||
// First, get the generic multicast address.
|
||||
//
|
||||
Address hardwareDestination = GetMulticast ();
|
||||
|
||||
NS_LOG_LOGIC ("Device multicast address: " << hardwareDestination);
|
||||
//
|
||||
// It's our address, and we know we're playing with an EUI-48 address here
|
||||
// primarily since we know that by construction, but also since the parameter
|
||||
// is an Ipv4Address.
|
||||
//
|
||||
|
||||
//
|
||||
// It's our address, and we know we're playing with an EUI-48 address here
|
||||
// primarily since we know that by construction, but also since the parameter
|
||||
// is an Ipv4Address.
|
||||
//
|
||||
Mac48Address etherAddr = Mac48Address::ConvertFrom (hardwareDestination);
|
||||
//
|
||||
// We now have the multicast address in an abstract 48-bit container. We
|
||||
// need to pull it out so we can play with it. When we're done, we have the
|
||||
// high order bits in etherBuffer[0], etc.
|
||||
//
|
||||
|
||||
//
|
||||
// We now have the multicast address in an abstract 48-bit container. We
|
||||
// need to pull it out so we can play with it. When we're done, we have the
|
||||
// high order bits in etherBuffer[0], etc.
|
||||
//
|
||||
uint8_t etherBuffer[6];
|
||||
etherAddr.CopyTo (etherBuffer);
|
||||
//
|
||||
// Now we need to pull the raw bits out of the Ipv4 destination address.
|
||||
//
|
||||
|
||||
//
|
||||
// Now we need to pull the raw bits out of the Ipv4 destination address.
|
||||
//
|
||||
uint8_t ipBuffer[4];
|
||||
multicastGroup.Serialize (ipBuffer);
|
||||
//
|
||||
// RFC 1112 says that an Ipv4 host group address is mapped to an EUI-48
|
||||
// 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).
|
||||
//
|
||||
|
||||
//
|
||||
// RFC 1112 says that an Ipv4 host group address is mapped to an EUI-48
|
||||
// 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).
|
||||
//
|
||||
etherBuffer[3] |= ipBuffer[1] & 0x7f;
|
||||
etherBuffer[4] = ipBuffer[2];
|
||||
etherBuffer[5] = ipBuffer[3];
|
||||
//
|
||||
// Now, etherBuffer has the desired ethernet multicast address. We have to
|
||||
// suck these bits back into the Mac48Address,
|
||||
//
|
||||
|
||||
//
|
||||
// Now, etherBuffer has the desired ethernet multicast address. We have to
|
||||
// suck these bits back into the Mac48Address,
|
||||
//
|
||||
etherAddr.CopyFrom (etherBuffer);
|
||||
//
|
||||
// Implicit conversion (operator Address ()) is defined for Mac48Address, so
|
||||
// use it by just returning the EUI-48 address which is automagically converted
|
||||
// to an Address.
|
||||
//
|
||||
|
||||
//
|
||||
// Implicit conversion (operator Address ()) is defined for Mac48Address, so
|
||||
// use it by just returning the EUI-48 address which is automagically converted
|
||||
// to an Address.
|
||||
//
|
||||
NS_LOG_LOGIC ("multicast address is " << etherAddr);
|
||||
|
||||
return etherAddr;
|
||||
@@ -817,20 +801,15 @@ CsmaNetDevice::IsPointToPoint (void) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
CsmaNetDevice::Send (Ptr<Packet> packet,
|
||||
const Address& dest,
|
||||
uint16_t protocolNumber)
|
||||
bool
|
||||
CsmaNetDevice::Send (Ptr<Packet> packet,const Address& dest, uint16_t protocolNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION (packet << dest << protocolNumber);
|
||||
return SendFrom (packet, m_address, dest, protocolNumber);
|
||||
}
|
||||
|
||||
bool
|
||||
CsmaNetDevice::SendFrom (Ptr<Packet> packet,
|
||||
const Address& src,
|
||||
const Address& dest,
|
||||
uint16_t protocolNumber)
|
||||
bool
|
||||
CsmaNetDevice::SendFrom (Ptr<Packet> packet, const Address& src, const Address& dest, uint16_t protocolNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION (packet << src << dest << protocolNumber);
|
||||
NS_LOG_LOGIC ("p=" << packet);
|
||||
@@ -838,9 +817,9 @@ CsmaNetDevice::SendFrom (Ptr<Packet> packet,
|
||||
|
||||
NS_ASSERT (IsLinkUp ());
|
||||
|
||||
//
|
||||
// Only transmit if send side of net device is enabled
|
||||
//
|
||||
//
|
||||
// Only transmit if send side of net device is enabled
|
||||
//
|
||||
if (IsSendEnabled () == false)
|
||||
{
|
||||
return false;
|
||||
@@ -850,23 +829,24 @@ CsmaNetDevice::SendFrom (Ptr<Packet> packet,
|
||||
Mac48Address source = Mac48Address::ConvertFrom (src);
|
||||
AddHeader (packet, source, destination, protocolNumber);
|
||||
|
||||
//
|
||||
// Place the packet to be sent on the send queue
|
||||
//
|
||||
//
|
||||
// Place the packet to be sent on the send queue
|
||||
//
|
||||
if (m_queue->Enqueue(packet) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
//
|
||||
// If the device is idle, we need to start a transmission. Otherwise,
|
||||
// the transmission will be started when the current packet finished
|
||||
// transmission (see TransmitCompleteEvent)
|
||||
//
|
||||
|
||||
//
|
||||
// If the device is idle, we need to start a transmission. Otherwise,
|
||||
// the transmission will be started when the current packet finished
|
||||
// transmission (see TransmitCompleteEvent)
|
||||
//
|
||||
if (m_txMachineState == READY)
|
||||
{
|
||||
//
|
||||
// The next packet to be transmitted goes in m_currentPkt
|
||||
//
|
||||
//
|
||||
// The next packet to be transmitted goes in m_currentPkt
|
||||
//
|
||||
m_currentPkt = m_queue->Dequeue ();
|
||||
if (m_currentPkt != 0)
|
||||
{
|
||||
@@ -931,14 +911,14 @@ CsmaNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb)
|
||||
m_rxCallback = cb;
|
||||
}
|
||||
|
||||
void
|
||||
void
|
||||
CsmaNetDevice::SetPromiscReceiveCallback (NetDevice::PromiscReceiveCallback cb)
|
||||
{
|
||||
NS_LOG_FUNCTION (&cb);
|
||||
m_promiscRxCallback = cb;
|
||||
}
|
||||
|
||||
bool
|
||||
bool
|
||||
CsmaNetDevice::SupportsPromiscuous () const
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
* Set the backoff parameters used to determine the wait to retry
|
||||
* transmitting a packet when the channel is busy.
|
||||
*
|
||||
* @see Attach ()
|
||||
* \see Attach ()
|
||||
* \param slotTime Length of a packet slot (or average packet time)
|
||||
* \param minSlots Minimum number of slots to wait
|
||||
* \param maxSlots Maximum number of slots to wait
|
||||
@@ -118,8 +118,8 @@ public:
|
||||
*
|
||||
* The function Attach is used to add a CsmaNetDevice to a CsmaChannel.
|
||||
*
|
||||
* @see SetDataRate ()
|
||||
* @see SetInterframeGap ()
|
||||
* \see SetDataRate ()
|
||||
* \see SetInterframeGap ()
|
||||
* \param ch a pointer to the channel to which this object is being attached.
|
||||
*/
|
||||
bool Attach (Ptr<CsmaChannel> ch);
|
||||
@@ -131,8 +131,8 @@ public:
|
||||
* level topology objects to implement a particular queueing method such as
|
||||
* DropTail or RED.
|
||||
*
|
||||
* @see Queue
|
||||
* @see DropTailQueue
|
||||
* \see Queue
|
||||
* \see DropTailQueue
|
||||
* \param queue a Ptr to the queue for being assigned to the device.
|
||||
*/
|
||||
void SetQueue (Ptr<Queue> queue);
|
||||
@@ -143,8 +143,8 @@ public:
|
||||
* The CsmaNetDevice may optionally include an ErrorModel in
|
||||
* the packet receive chain to simulate data errors in during transmission.
|
||||
*
|
||||
* @see ErrorModel
|
||||
* @param em a pointer to the ErrorModel
|
||||
* \see ErrorModel
|
||||
* \param em a pointer to the ErrorModel
|
||||
*/
|
||||
void SetReceiveErrorModel (Ptr<ErrorModel> em);
|
||||
|
||||
@@ -156,7 +156,7 @@ public:
|
||||
* used by the channel to indicate that the last bit of a packet has
|
||||
* arrived at the device.
|
||||
*
|
||||
* @see CsmaChannel
|
||||
* \see CsmaChannel
|
||||
* \param p a reference to the received packet
|
||||
* \param sender the CsmaNetDevice that transmitted the packet in the first place
|
||||
*/
|
||||
@@ -216,7 +216,7 @@ public:
|
||||
virtual Address GetMulticast (void) const;
|
||||
|
||||
/**
|
||||
* @brief Make and return a MAC multicast address using the provided
|
||||
* \brief 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
|
||||
@@ -228,14 +228,14 @@ public:
|
||||
* to an EUI-48-based CSMA device. This MAC address is encapsulated in an
|
||||
* abstract Address to avoid dependencies on the exact address format.
|
||||
*
|
||||
* @param multicastGroup The IP address for the multicast group destination
|
||||
* \param multicastGroup The IP address for the multicast group destination
|
||||
* of the packet.
|
||||
* @return The MAC multicast Address used to send packets to the provided
|
||||
* \return The MAC multicast Address used to send packets to the provided
|
||||
* multicast group.
|
||||
*
|
||||
* @see Ipv4Address
|
||||
* @see Mac48Address
|
||||
* @see Address
|
||||
* \see Ipv4Address
|
||||
* \see Mac48Address
|
||||
* \see Address
|
||||
*/
|
||||
virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
|
||||
|
||||
@@ -368,8 +368,8 @@ private:
|
||||
* If the channel is found to be BUSY, this method reschedules itself for
|
||||
* execution at a later time (within the backoff period).
|
||||
*
|
||||
* @see CsmaChannel::TransmitStart ()
|
||||
* @see TransmitCompleteEvent ()
|
||||
* \see CsmaChannel::TransmitStart ()
|
||||
* \see TransmitCompleteEvent ()
|
||||
*/
|
||||
void TransmitStart ();
|
||||
|
||||
@@ -386,8 +386,8 @@ private:
|
||||
* method, the net device also schedules the TransmitReadyEvent at which
|
||||
* time the transmitter becomes ready to send the next packet.
|
||||
*
|
||||
* @see CsmaChannel::TransmitEnd ()
|
||||
* @see TransmitReadyEvent ()
|
||||
* \see CsmaChannel::TransmitEnd ()
|
||||
* \see TransmitReadyEvent ()
|
||||
*/
|
||||
void TransmitCompleteEvent (void);
|
||||
|
||||
@@ -403,7 +403,7 @@ private:
|
||||
* If a packet is in the queue, it is extracted for the queue as the
|
||||
* next packet to be transmitted by the net device.
|
||||
*
|
||||
* @see TransmitStart ()
|
||||
* \see TransmitStart ()
|
||||
*/
|
||||
void TransmitReadyEvent (void);
|
||||
|
||||
@@ -451,7 +451,7 @@ private:
|
||||
|
||||
/**
|
||||
* The state of the Net Device transmit state machine.
|
||||
* @see TxMachineState
|
||||
* \see TxMachineState
|
||||
*/
|
||||
TxMachineState m_txMachineState;
|
||||
|
||||
@@ -465,14 +465,14 @@ private:
|
||||
/**
|
||||
* The data rate that the Net Device uses to simulate packet transmission
|
||||
* timing.
|
||||
* @see class DataRate
|
||||
* \see class DataRate
|
||||
*/
|
||||
DataRate m_bps;
|
||||
|
||||
/**
|
||||
* The interframe gap that the Net Device uses insert time between packet
|
||||
* transmission
|
||||
* @see class Time
|
||||
* \see class Time
|
||||
*/
|
||||
Time m_tInterframeGap;
|
||||
|
||||
@@ -493,7 +493,7 @@ private:
|
||||
/**
|
||||
* The CsmaChannel to which this CsmaNetDevice has been
|
||||
* attached.
|
||||
* @see class CsmaChannel
|
||||
* \see class CsmaChannel
|
||||
*/
|
||||
Ptr<CsmaChannel> m_channel;
|
||||
|
||||
@@ -501,8 +501,8 @@ private:
|
||||
* The Queue which this CsmaNetDevice uses as a packet source.
|
||||
* Management of this Queue has been delegated to the CsmaNetDevice
|
||||
* and it has the responsibility for deletion.
|
||||
* @see class Queue
|
||||
* @see class DropTailQueue
|
||||
* \see class Queue
|
||||
* \see class DropTailQueue
|
||||
*/
|
||||
Ptr<Queue> m_queue;
|
||||
|
||||
@@ -515,7 +515,7 @@ private:
|
||||
* The trace source for the packet reception events that the device can
|
||||
* fire.
|
||||
*
|
||||
* @see class CallBackTraceSource
|
||||
* \see class CallBackTraceSource
|
||||
*/
|
||||
TracedCallback<Ptr<const Packet> > m_rxTrace;
|
||||
|
||||
@@ -523,7 +523,7 @@ private:
|
||||
* The trace source for the packet drop events that the device can
|
||||
* fire.
|
||||
*
|
||||
* @see class CallBackTraceSource
|
||||
* \see class CallBackTraceSource
|
||||
*/
|
||||
TracedCallback<Ptr<const Packet> > m_dropTrace;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user