--- a/samples/main-adhoc-wifi.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/samples/main-adhoc-wifi.cc Thu Nov 22 14:27:22 2007 +0100
@@ -87,9 +87,9 @@
}
static void
-ReceivePacket (Ptr<Socket> socket, const Packet &packet, const Address &address)
+ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &address)
{
- g_bytesTotal += packet.GetSize ();
+ g_bytesTotal += packet->GetSize ();
}
static Ptr<Socket>
--- a/samples/main-ap-wifi.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/samples/main-ap-wifi.cc Thu Nov 22 14:27:22 2007 +0100
@@ -39,7 +39,7 @@
using namespace ns3;
void
-WifiNetDeviceTrace (const TraceContext &context, Packet p, Mac48Address address)
+WifiNetDeviceTrace (const TraceContext &context, Ptr<const Packet> p, Mac48Address address)
{
std::cout << context << " ad=" << address << " p: " << p << std::endl;
}
--- a/src/devices/wifi/dca-txop.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/dca-txop.cc Thu Nov 22 14:27:22 2007 +0100
@@ -96,7 +96,7 @@
DcaTxop::DcaTxop (uint32_t minCw, uint32_t maxCw, uint32_t aifsn, DcfManager *manager)
: m_manager (manager),
- m_hasCurrent (false),
+ m_currentPacket (0),
m_ssrc (0),
m_slrc (0)
@@ -158,7 +158,7 @@
}
void
-DcaTxop::Queue (Packet packet, WifiMacHeader const &hdr)
+DcaTxop::Queue (Ptr<const Packet> packet, WifiMacHeader const &hdr)
{
m_queue->Enqueue (packet, hdr);
StartAccessIfNeeded ();
@@ -167,7 +167,7 @@
void
DcaTxop::RestartAccessIfNeeded (void)
{
- if ((m_hasCurrent ||
+ if ((m_currentPacket != 0 ||
!m_queue->IsEmpty ()) &&
!m_dcf->IsAccessRequested ())
{
@@ -178,7 +178,7 @@
void
DcaTxop::StartAccessIfNeeded (void)
{
- if (!m_hasCurrent &&
+ if (m_currentPacket == 0 &&
!m_queue->IsEmpty () &&
!m_dcf->IsAccessRequested ())
{
@@ -203,7 +203,7 @@
bool
DcaTxop::NeedRts (void)
{
- if (m_currentPacket.GetSize () > Parameters ()->GetRtsCtsThreshold ())
+ if (m_currentPacket->GetSize () > Parameters ()->GetRtsCtsThreshold ())
{
return true;
}
@@ -216,7 +216,7 @@
bool
DcaTxop::NeedFragmentation (void)
{
- if (m_currentPacket.GetSize () > Parameters ()->GetFragmentationThreshold ())
+ if (m_currentPacket->GetSize () > Parameters ()->GetFragmentationThreshold ())
{
return true;
}
@@ -229,7 +229,7 @@
uint32_t
DcaTxop::GetNFragments (void)
{
- uint32_t nFragments = m_currentPacket.GetSize () / Parameters ()->GetFragmentationThreshold () + 1;
+ uint32_t nFragments = m_currentPacket->GetSize () / Parameters ()->GetFragmentationThreshold () + 1;
return nFragments;
}
void
@@ -241,7 +241,7 @@
uint32_t
DcaTxop::GetLastFragmentSize (void)
{
- uint32_t lastFragmentSize = m_currentPacket.GetSize () %
+ uint32_t lastFragmentSize = m_currentPacket->GetSize () %
Parameters ()->GetFragmentationThreshold ();
return lastFragmentSize;
}
@@ -283,23 +283,23 @@
}
}
-Packet
+Ptr<Packet>
DcaTxop::GetFragmentPacket (WifiMacHeader *hdr)
{
*hdr = m_currentHdr;
hdr->SetFragmentNumber (m_fragmentNumber);
uint32_t startOffset = m_fragmentNumber * GetFragmentSize ();
- Packet fragment;
+ Ptr<Packet> fragment;
if (IsLastFragment ())
{
hdr->SetNoMoreFragments ();
- fragment = m_currentPacket.CreateFragment (startOffset,
+ fragment = m_currentPacket->CreateFragment (startOffset,
GetLastFragmentSize ());
}
else
{
hdr->SetMoreFragments ();
- fragment = m_currentPacket.CreateFragment (startOffset,
+ fragment = m_currentPacket->CreateFragment (startOffset,
GetFragmentSize ());
}
return fragment;
@@ -308,23 +308,20 @@
bool
DcaTxop::NeedsAccess (void) const
{
- return !m_queue->IsEmpty () || m_hasCurrent;
+ return !m_queue->IsEmpty () || m_currentPacket != 0;
}
void
DcaTxop::NotifyAccessGranted (void)
{
- if (!m_hasCurrent)
+ if (m_currentPacket == 0)
{
if (m_queue->IsEmpty ())
{
MY_DEBUG ("queue empty");
return;
}
- bool found;
- m_currentPacket = m_queue->Dequeue (&m_currentHdr, &found);
- NS_ASSERT (found);
- m_hasCurrent = true;
- NS_ASSERT (m_hasCurrent);
+ m_currentPacket = m_queue->Dequeue (&m_currentHdr);
+ NS_ASSERT (m_currentPacket != 0);
uint16_t sequence = m_txMiddle->GetNextSequenceNumberfor (&m_currentHdr);
m_currentHdr.SetSequenceNumber (sequence);
m_currentHdr.SetFragmentNumber (0);
@@ -332,7 +329,7 @@
m_ssrc = 0;
m_slrc = 0;
m_fragmentNumber = 0;
- MY_DEBUG ("dequeued size="<<m_currentPacket.GetSize ()<<
+ MY_DEBUG ("dequeued size="<<m_currentPacket->GetSize ()<<
", to="<<m_currentHdr.GetAddr1 ()<<
", seq="<<m_currentHdr.GetSequenceControl ());
}
@@ -347,7 +344,7 @@
&m_currentHdr,
params,
m_transmissionListener);
- m_hasCurrent = false;
+ m_currentPacket = 0;
m_dcf->ResetCw ();
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
MY_DEBUG ("tx broadcast");
@@ -360,15 +357,15 @@
{
params.DisableRts ();
WifiMacHeader hdr;
- Packet fragment = GetFragmentPacket (&hdr);
+ Ptr<Packet> fragment = GetFragmentPacket (&hdr);
if (IsLastFragment ())
{
- MY_DEBUG ("fragmenting last fragment size="<<fragment.GetSize ());
+ MY_DEBUG ("fragmenting last fragment size="<<fragment->GetSize ());
params.DisableNextData ();
}
else
{
- MY_DEBUG ("fragmenting size="<<fragment.GetSize ());
+ MY_DEBUG ("fragmenting size="<<fragment->GetSize ());
params.EnableNextData (GetNextFragmentSize ());
}
Low ()->StartTransmission (fragment, &hdr, params,
@@ -387,14 +384,7 @@
MY_DEBUG ("tx unicast");
}
params.DisableNextData ();
- // We need to make a copy in case we need to
- // retransmit the packet: the MacLow modifies the input
- // Packet so, we would retransmit a modified packet
- // if we were not to make a copy.
- // XXX the comment above and the code below do not
- // make sense anymore. So, we should remove both.
- Packet copy = m_currentPacket;
- Low ()->StartTransmission (copy, &m_currentHdr,
+ Low ()->StartTransmission (m_currentPacket, &m_currentHdr,
params, m_transmissionListener);
}
}
@@ -428,7 +418,7 @@
if (m_ssrc > Parameters ()->GetMaxSsrc ())
{
// to reset the dcf.
- m_hasCurrent = false;
+ m_currentPacket = 0;
m_dcf->ResetCw ();
}
else
@@ -454,14 +444,14 @@
/* we are not fragmenting or we are done fragmenting
* so we can get rid of that packet now.
*/
- m_hasCurrent = false;
+ m_currentPacket = 0;
m_dcf->ResetCw ();
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
RestartAccessIfNeeded ();
}
else
{
- MY_DEBUG ("got ack. tx not done, size="<<m_currentPacket.GetSize ());
+ MY_DEBUG ("got ack. tx not done, size="<<m_currentPacket->GetSize ());
}
}
void
@@ -473,7 +463,7 @@
if (m_slrc > Parameters ()->GetMaxSlrc ())
{
// to reset the dcf.
- m_hasCurrent = false;
+ m_currentPacket = 0;
m_dcf->ResetCw ();
}
else
@@ -495,7 +485,7 @@
/* this callback is used only for fragments. */
NextFragment ();
WifiMacHeader hdr;
- Packet fragment = GetFragmentPacket (&hdr);
+ Ptr<Packet> fragment = GetFragmentPacket (&hdr);
MacLowTransmissionParameters params;
params.EnableAck ();
params.DisableRts ();
--- a/src/devices/wifi/dca-txop.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/dca-txop.h Thu Nov 22 14:27:22 2007 +0100
@@ -102,7 +102,7 @@
* Store the packet in the internal queue until it
* can be sent safely.
*/
- void Queue (Packet packet, WifiMacHeader const &hdr);
+ void Queue (Ptr<const Packet> packet, WifiMacHeader const &hdr);
private:
class TransmissionListener;
@@ -138,7 +138,7 @@
uint32_t GetFragmentSize (void);
bool IsLastFragment (void);
void NextFragment (void);
- Packet GetFragmentPacket (WifiMacHeader *hdr);
+ Ptr<Packet> GetFragmentPacket (WifiMacHeader *hdr);
Dcf *m_dcf;
DcfManager *m_manager;
@@ -153,8 +153,7 @@
bool m_accessOngoing;
- Packet m_currentPacket;
- bool m_hasCurrent;
+ Ptr<const Packet> m_currentPacket;
WifiMacHeader m_currentHdr;
uint32_t m_ssrc;
uint32_t m_slrc;
--- a/src/devices/wifi/mac-high-adhoc.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-high-adhoc.cc Thu Nov 22 14:27:22 2007 +0100
@@ -73,9 +73,9 @@
}
void
-MacHighAdhoc::Enqueue (Packet packet, Mac48Address to)
+MacHighAdhoc::Enqueue (Ptr<const Packet> packet, Mac48Address to)
{
- NS_LOG_DEBUG ("enqueue size="<<packet.GetSize ()<<", to="<<to);
+ NS_LOG_DEBUG ("enqueue size="<<packet->GetSize ()<<", to="<<to);
WifiMacHeader hdr;
hdr.SetType (WIFI_MAC_DATA);
hdr.SetAddr1 (to);
@@ -100,9 +100,9 @@
}
void
-MacHighAdhoc::Receive (Packet packet, WifiMacHeader const *hdr)
+MacHighAdhoc::Receive (Ptr<Packet> packet, WifiMacHeader const *hdr)
{
- NS_LOG_DEBUG ("received size="<<packet.GetSize ()<<", from="<<hdr->GetAddr2 ());
+ NS_LOG_DEBUG ("received size="<<packet->GetSize ()<<", from="<<hdr->GetAddr2 ());
m_callback (packet, hdr->GetAddr2 ());
}
--- a/src/devices/wifi/mac-high-adhoc.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-high-adhoc.h Thu Nov 22 14:27:22 2007 +0100
@@ -35,7 +35,7 @@
class MacHighAdhoc {
public:
- typedef Callback<void, Packet, const Mac48Address &> ForwardCallback;
+ typedef Callback<void, Ptr<Packet>, const Mac48Address &> ForwardCallback;
MacHighAdhoc ();
~MacHighAdhoc ();
@@ -48,10 +48,10 @@
Mac48Address GetBssid (void) const;
- void Enqueue (Packet packet, Mac48Address to);
+ void Enqueue (Ptr<const Packet> packet, Mac48Address to);
/* invoked by the MacLows. */
- void Receive (Packet packet, WifiMacHeader const*hdr);
+ void Receive (Ptr<Packet> packet, WifiMacHeader const*hdr);
private:
DcaTxop *m_dca;
WifiNetDevice *m_device;
--- a/src/devices/wifi/mac-high-nqap.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-high-nqap.cc Thu Nov 22 14:27:22 2007 +0100
@@ -91,7 +91,7 @@
SendOneBeacon ();
}
void
-MacHighNqap::ForwardDown (Packet packet, Mac48Address from, Mac48Address to)
+MacHighNqap::ForwardDown (Ptr<const Packet> packet, Mac48Address from, Mac48Address to)
{
WifiMacHeader hdr;
hdr.SetTypeData ();
@@ -103,7 +103,7 @@
m_dca->Queue (packet, hdr);
}
void
-MacHighNqap::Queue (Packet packet, Mac48Address to)
+MacHighNqap::Queue (Ptr<const Packet> packet, Mac48Address to)
{
ForwardDown (packet, m_device->GetSelfAddress (), to);
}
@@ -137,12 +137,12 @@
hdr.SetAddr3 (m_device->GetSelfAddress ());
hdr.SetDsNotFrom ();
hdr.SetDsNotTo ();
- Packet packet;
+ Ptr<Packet> packet = Create<Packet> ();
MgtProbeResponseHeader probe;
probe.SetSsid (m_device->GetSsid ());
probe.SetSupportedRates (GetSupportedRates ());
probe.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ());
- packet.AddHeader (probe);
+ packet->AddHeader (probe);
m_dca->Queue (packet, hdr);
}
@@ -157,7 +157,7 @@
hdr.SetAddr3 (m_device->GetSelfAddress ());
hdr.SetDsNotFrom ();
hdr.SetDsNotTo ();
- Packet packet;
+ Ptr<Packet> packet = Create<Packet> ();
MgtAssocResponseHeader assoc;
StatusCode code;
if (success)
@@ -170,7 +170,7 @@
}
assoc.SetSupportedRates (GetSupportedRates ());
assoc.SetStatusCode (code);
- packet.AddHeader (assoc);
+ packet->AddHeader (assoc);
m_dca->Queue (packet, hdr);
}
@@ -185,12 +185,12 @@
hdr.SetAddr3 (m_device->GetSelfAddress ());
hdr.SetDsNotFrom ();
hdr.SetDsNotTo ();
- Packet packet;
+ Ptr<Packet> packet = Create<Packet> ();
MgtBeaconHeader beacon;
beacon.SetSsid (m_device->GetSsid ());
beacon.SetSupportedRates (GetSupportedRates ());
beacon.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ());
- packet.AddHeader (beacon);
+ packet->AddHeader (beacon);
m_beaconDca->Queue (packet, hdr);
Simulator::Schedule (m_beaconInterval, &MacHighNqap::SendOneBeacon, this);
@@ -218,7 +218,7 @@
}
}
void
-MacHighNqap::Receive (Packet packet, WifiMacHeader const *hdr)
+MacHighNqap::Receive (Ptr<Packet> packet, WifiMacHeader const *hdr)
{
MacStation *station = m_stations->Lookup (hdr->GetAddr2 ());
@@ -267,7 +267,7 @@
// first, verify that the the station's supported
// rate set is compatible with our Basic Rate set
MgtAssocRequestHeader assocReq;
- packet.RemoveHeader (assocReq);
+ packet->RemoveHeader (assocReq);
SupportedRates rates = assocReq.GetSupportedRates ();
bool problem = false;
for (uint32_t i = 0; i < m_stations->GetNBasicModes (); i++)
--- a/src/devices/wifi/mac-high-nqap.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-high-nqap.h Thu Nov 22 14:27:22 2007 +0100
@@ -37,7 +37,7 @@
class MacHighNqap {
public:
- typedef Callback<void, Packet, const Mac48Address &> ForwardCallback;
+ typedef Callback<void, Ptr<Packet>, const Mac48Address &> ForwardCallback;
MacHighNqap ();
~MacHighNqap ();
@@ -50,13 +50,13 @@
void SetForwardCallback (ForwardCallback callback);
void SetBeaconInterval (Time interval);
- void Queue (Packet packet, Mac48Address to);
+ void Queue (Ptr<const Packet> packet, Mac48Address to);
void StartBeaconing (void);
- void Receive (Packet packet, WifiMacHeader const *hdr);
+ void Receive (Ptr<Packet> packet, WifiMacHeader const *hdr);
private:
- void ForwardDown (Packet packet, Mac48Address from, Mac48Address to);
+ void ForwardDown (Ptr<const Packet> packet, Mac48Address from, Mac48Address to);
void TxOk (WifiMacHeader const &hdr);
void TxFailed (WifiMacHeader const &hdr);
void SendProbeResp (Mac48Address to);
--- a/src/devices/wifi/mac-high-nqsta.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-high-nqsta.cc Thu Nov 22 14:27:22 2007 +0100
@@ -161,11 +161,11 @@
hdr.SetAddr3 (GetBroadcastBssid ());
hdr.SetDsNotFrom ();
hdr.SetDsNotTo ();
- Packet packet;
+ Ptr<Packet> packet = Create<Packet> ();
MgtProbeRequestHeader probe;
probe.SetSsid (m_device->GetSsid ());
probe.SetSupportedRates (GetSupportedRates ());
- packet.AddHeader (probe);
+ packet->AddHeader (probe);
m_dca->Queue (packet, hdr);
@@ -184,11 +184,11 @@
hdr.SetAddr3 (GetBssid ());
hdr.SetDsNotFrom ();
hdr.SetDsNotTo ();
- Packet packet;
+ Ptr<Packet> packet = Create<Packet> ();
MgtAssocRequestHeader assoc;
assoc.SetSsid (m_device->GetSsid ());
assoc.SetSupportedRates (GetSupportedRates ());
- packet.AddHeader (assoc);
+ packet->AddHeader (assoc);
m_dca->Queue (packet, hdr);
@@ -278,14 +278,14 @@
}
void
-MacHighNqsta::Queue (Packet packet, Mac48Address to)
+MacHighNqsta::Queue (Ptr<const Packet> packet, Mac48Address to)
{
if (!IsAssociated ())
{
TryToEnsureAssociated ();
return;
}
- //TRACE ("enqueue size="<<packet.GetSize ()<<", to="<<to);
+ //TRACE ("enqueue size="<<packet->GetSize ()<<", to="<<to);
WifiMacHeader hdr;
hdr.SetTypeData ();
hdr.SetAddr1 (GetBssid ());
@@ -297,7 +297,7 @@
}
void
-MacHighNqsta::Receive (Packet packet, WifiMacHeader const *hdr)
+MacHighNqsta::Receive (Ptr<Packet> packet, WifiMacHeader const *hdr)
{
NS_ASSERT (!hdr->IsCtl ());
if (hdr->GetAddr1 () != m_device->GetSelfAddress () &&
@@ -319,7 +319,7 @@
else if (hdr->IsBeacon ())
{
MgtBeaconHeader beacon;
- packet.RemoveHeader (beacon);
+ packet->RemoveHeader (beacon);
bool goodBeacon = false;
if (m_device->GetSsid ().IsBroadcast () ||
beacon.GetSsid ().IsEqual (m_device->GetSsid ()))
@@ -343,7 +343,7 @@
if (m_state == WAIT_PROBE_RESP)
{
MgtProbeResponseHeader probeResp;
- packet.RemoveHeader (probeResp);
+ packet->RemoveHeader (probeResp);
if (!probeResp.GetSsid ().IsEqual (m_device->GetSsid ()))
{
//not a probe resp for our ssid.
@@ -365,7 +365,7 @@
if (m_state == WAIT_ASSOC_RESP)
{
MgtAssocResponseHeader assocResp;
- packet.RemoveHeader (assocResp);
+ packet->RemoveHeader (assocResp);
if (m_assocRequestEvent.IsRunning ())
{
m_assocRequestEvent.Cancel ();
--- a/src/devices/wifi/mac-high-nqsta.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-high-nqsta.h Thu Nov 22 14:27:22 2007 +0100
@@ -40,7 +40,7 @@
class MacHighNqsta {
public:
- typedef Callback<void, Packet, const Mac48Address &> ForwardCallback;
+ typedef Callback<void, Ptr<Packet>, const Mac48Address &> ForwardCallback;
typedef Callback<void> AssociatedCallback;
typedef Callback<void> DisAssociatedCallback;
@@ -63,9 +63,9 @@
void StartActiveAssociation (void);
- void Queue (Packet packet, Mac48Address to);
+ void Queue (Ptr<const Packet> packet, Mac48Address to);
- void Receive (Packet packet, WifiMacHeader const *hdr);
+ void Receive (Ptr<Packet> packet, WifiMacHeader const *hdr);
private:
void SetBssid (Mac48Address bssid);
Mac48Address GetBroadcastBssid (void);
--- a/src/devices/wifi/mac-low.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-low.cc Thu Nov 22 14:27:22 2007 +0100
@@ -230,7 +230,7 @@
m_sendAckEvent (),
m_sendDataEvent (),
m_waitSifsEvent (),
- m_hasCurrent (false)
+ m_currentPacket (0)
{
m_lastNavDuration = Seconds (0);
m_lastNavStart = Seconds (0);
@@ -339,7 +339,7 @@
void
-MacLow::StartTransmission (Packet packet,
+MacLow::StartTransmission (Ptr<const Packet> packet,
WifiMacHeader const*hdr,
MacLowTransmissionParameters parameters,
MacLowTransmissionListener *listener)
@@ -358,13 +358,8 @@
* QapScheduler has taken access to the channel from
* one of the Edca of the QAP.
*/
- if (m_hasCurrent)
- {
- m_hasCurrent = false;
- }
- m_currentPacket = packet;
+ m_currentPacket = packet->Copy ();
m_currentHdr = *hdr;
- m_hasCurrent = true;
CancelAllEvents ();
m_listener = listener;
m_txParams = parameters;
@@ -387,7 +382,7 @@
}
void
-MacLow::ReceiveError (Packet packet, double rxSnr)
+MacLow::ReceiveError (Ptr<Packet> packet, double rxSnr)
{
MY_DEBUG ("rx failed ");
m_dropError (packet);
@@ -401,7 +396,7 @@
}
void
-MacLow::ReceiveOk (Packet packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
+MacLow::ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
{
/* A packet is received from the PHY.
* When we have handled this packet,
@@ -409,7 +404,7 @@
* packet queue.
*/
WifiMacHeader hdr;
- packet.RemoveHeader (hdr);
+ packet->RemoveHeader (hdr);
bool isPrevNavZero = IsNavZero ();
MY_DEBUG ("duration/id=" << hdr.GetDuration ());
@@ -444,11 +439,11 @@
else if (hdr.IsCts () &&
hdr.GetAddr1 () == m_device->GetSelfAddress () &&
m_ctsTimeoutEvent.IsRunning () &&
- m_hasCurrent)
+ m_currentPacket != 0)
{
MY_DEBUG ("receive cts from="<<m_currentHdr.GetAddr1 ());
SnrTag tag;
- packet.PeekTag (tag);
+ packet->PeekTag (tag);
MacStation *station = GetStation (m_currentHdr.GetAddr1 ());
station->ReportRxOk (rxSnr, txMode);
station->ReportRtsOk (rxSnr, txMode, tag.Get ());
@@ -471,7 +466,7 @@
{
MY_DEBUG ("receive ack from="<<m_currentHdr.GetAddr1 ());
SnrTag tag;
- packet.PeekTag (tag);
+ packet->PeekTag (tag);
MacStation *station = GetStation (m_currentHdr.GetAddr1 ());
station->ReportRxOk (rxSnr, txMode);
station->ReportDataOk (rxSnr, txMode, tag.Get ());
@@ -543,7 +538,7 @@
return;
rxPacket:
WifiMacTrailer fcs;
- packet.RemoveTrailer (fcs);
+ packet->RemoveTrailer (fcs);
m_rxCallback (packet, &hdr);
return;
}
@@ -605,7 +600,7 @@
MacLow::GetCurrentSize (void) const
{
WifiMacTrailer fcs;
- return m_currentPacket.GetSize () + m_currentHdr.GetSize () + fcs.GetSerializedSize ();
+ return m_currentPacket->GetSize () + m_currentHdr.GetSize () + fcs.GetSerializedSize ();
}
WifiMode
@@ -746,12 +741,12 @@
}
void
-MacLow::ForwardDown (Packet const packet, WifiMacHeader const* hdr,
+MacLow::ForwardDown (Ptr<const Packet> packet, WifiMacHeader const* hdr,
WifiMode txMode)
{
MY_DEBUG ("send " << hdr->GetTypeString () <<
", to=" << hdr->GetAddr1 () <<
- ", size=" << packet.GetSize () <<
+ ", size=" << packet->GetSize () <<
", mode=" << txMode <<
", duration=" << hdr->GetDuration () <<
", seq=0x"<< std::hex << m_currentHdr.GetSequenceControl () << std::dec);
@@ -761,7 +756,7 @@
* requirement from section 9.9.1.4 that each EDCAF update its NAV from the
* transmission of any other EDCAF within the same QSTA.
*/
- Time txDuration = m_phy->CalculateTxDuration (packet.GetSize (), txMode, WIFI_PREAMBLE_LONG);
+ Time txDuration = m_phy->CalculateTxDuration (packet->GetSize (), txMode, WIFI_PREAMBLE_LONG);
Simulator::Schedule (txDuration, &MacLow::NotifyNav, this, *hdr, txMode, WIFI_PREAMBLE_LONG);
}
@@ -774,7 +769,7 @@
// end of rx if there was a rx start before now.
MacStation *station = GetStation (m_currentHdr.GetAddr1 ());
station->ReportRtsFailed ();
- m_hasCurrent = false;
+ m_currentPacket = 0;
MacLowTransmissionListener *listener = m_listener;
m_listener = 0;
listener->MissedCts ();
@@ -862,10 +857,10 @@
NS_ASSERT (m_ctsTimeoutEvent.IsExpired ());
m_ctsTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::CtsTimeout, this);
- Packet packet;
- packet.AddHeader (rts);
+ Ptr<Packet> packet = Create<Packet> ();
+ packet->AddHeader (rts);
WifiMacTrailer fcs;
- packet.AddTrailer (fcs);
+ packet->AddTrailer (fcs);
ForwardDown (packet, &rts, rtsTxMode);
}
@@ -940,12 +935,12 @@
}
m_currentHdr.SetDuration (duration);
- m_currentPacket.AddHeader (m_currentHdr);
+ m_currentPacket->AddHeader (m_currentHdr);
WifiMacTrailer fcs;
- m_currentPacket.AddTrailer (fcs);
+ m_currentPacket->AddTrailer (fcs);
ForwardDown (m_currentPacket, &m_currentHdr, dataTxMode);
- m_hasCurrent = false;
+ m_currentPacket = 0;
}
bool
@@ -984,14 +979,14 @@
NS_ASSERT (duration >= MicroSeconds (0));
cts.SetDuration (duration);
- Packet packet;
- packet.AddHeader (cts);
+ Ptr<Packet> packet = Create<Packet> ();
+ packet->AddHeader (cts);
WifiMacTrailer fcs;
- packet.AddTrailer (fcs);
+ packet->AddTrailer (fcs);
struct SnrTag tag;
tag.Set (rtsSnr);
- packet.AddTag (tag);
+ packet->AddTag (tag);
ForwardDown (packet, &cts, ctsTxMode);
}
@@ -1002,7 +997,7 @@
/* send the third step in a
* RTS/CTS/DATA/ACK hanshake
*/
- NS_ASSERT (m_hasCurrent);
+ NS_ASSERT (m_currentPacket != 0);
WifiMode dataTxMode = GetDataTxMode (m_currentHdr.GetAddr1 (), GetCurrentSize ());
StartDataTxTimers ();
@@ -1012,12 +1007,12 @@
NS_ASSERT (duration >= MicroSeconds (0));
m_currentHdr.SetDuration (duration);
- m_currentPacket.AddHeader (m_currentHdr);
+ m_currentPacket->AddHeader (m_currentHdr);
WifiMacTrailer fcs;
- m_currentPacket.AddTrailer (fcs);
+ m_currentPacket->AddTrailer (fcs);
ForwardDown (m_currentPacket, &m_currentHdr, dataTxMode);
- m_hasCurrent = false;
+ m_currentPacket = 0;
}
void
@@ -1052,14 +1047,14 @@
NS_ASSERT (duration >= MicroSeconds (0));
ack.SetDuration (duration);
- Packet packet;
- packet.AddHeader (ack);
+ Ptr<Packet> packet = Create<Packet> ();
+ packet->AddHeader (ack);
WifiMacTrailer fcs;
- packet.AddTrailer (fcs);
+ packet->AddTrailer (fcs);
struct SnrTag tag;
tag.Set (dataSnr);
- packet.AddTag (tag);
+ packet->AddTag (tag);
ForwardDown (packet, &ack, ackTxMode);
}
--- a/src/devices/wifi/mac-low.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-low.h Thu Nov 22 14:27:22 2007 +0100
@@ -274,7 +274,7 @@
*/
class MacLow {
public:
- typedef Callback<void, Packet , WifiMacHeader const*> MacLowRxCallback;
+ typedef Callback<void, Ptr<Packet> , WifiMacHeader const*> MacLowRxCallback;
MacLow ();
~MacLow ();
@@ -318,7 +318,7 @@
* Start the transmission of the input packet and notify the listener
* of transmission events.
*/
- void StartTransmission (Packet packet,
+ void StartTransmission (Ptr<const Packet> packet,
WifiMacHeader const*hdr,
MacLowTransmissionParameters parameters,
MacLowTransmissionListener *listener);
@@ -332,7 +332,7 @@
* This method is typically invoked by the lower PHY layer to notify
* the MAC layer that a packet was successfully received.
*/
- void ReceiveOk (Packet packet, double rxSnr, WifiMode txMode, WifiPreamble preamble);
+ void ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble);
/**
* \param packet packet received.
* \param rxSnr snr of packet received.
@@ -340,7 +340,7 @@
* This method is typically invoked by the lower PHY layer to notify
* the MAC layer that a packet was unsuccessfully received.
*/
- void ReceiveError (Packet packet, double rxSnr);
+ void ReceiveError (Ptr<Packet> packet, double rxSnr);
private:
void CancelAllEvents (void);
uint32_t GetAckSize (void) const;
@@ -353,7 +353,7 @@
uint32_t GetCurrentSize (void) const;
Time NowUs (void) const;
MacStation *GetStation (Mac48Address to) const;
- void ForwardDown (Packet const packet, WifiMacHeader const *hdr,
+ void ForwardDown (Ptr<const Packet> packet, WifiMacHeader const *hdr,
WifiMode txMode);
Time CalculateOverallTxTime (uint32_t size,
Mac48Address to,
@@ -406,8 +406,7 @@
EventId m_waitSifsEvent;
EventId m_navCounterResetCtsMissed;
- Packet m_currentPacket;
- bool m_hasCurrent;
+ Ptr<Packet> m_currentPacket;
WifiMacHeader m_currentHdr;
MacLowTransmissionParameters m_txParams;
MacLowTransmissionListener *m_listener;
@@ -415,7 +414,7 @@
Time m_lastNavStart;
Time m_lastNavDuration;
- CallbackTraceSource<Packet> m_dropError;
+ CallbackTraceSource<Ptr<const Packet> > m_dropError;
};
} // namespace ns3
--- a/src/devices/wifi/mac-rx-middle.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-rx-middle.cc Thu Nov 22 14:27:22 2007 +0100
@@ -36,8 +36,8 @@
class OriginatorRxStatus {
private:
- typedef std::list<Packet> Fragments;
- typedef std::list<Packet>::const_iterator FragmentsCI;
+ typedef std::list<Ptr<const Packet> > Fragments;
+ typedef std::list<Ptr<const Packet> >::const_iterator FragmentsCI;
bool m_defragmenting;
uint16_t m_lastSequenceControl;
@@ -49,33 +49,29 @@
m_defragmenting = false;
}
~OriginatorRxStatus () {
- for (FragmentsCI i = m_fragments.begin (); i != m_fragments.end (); i++)
- {
- // XXX ?
- }
- m_fragments.erase (m_fragments.begin (), m_fragments.end ());
+ m_fragments.clear ();
}
bool IsDeFragmenting (void) {
return m_defragmenting;
}
- void AccumulateFirstFragment (Packet const packet) {
+ void AccumulateFirstFragment (Ptr<const Packet> packet) {
NS_ASSERT (!m_defragmenting);
m_defragmenting = true;
m_fragments.push_back (packet);
}
- Packet AccumulateLastFragment (Packet const packet) {
+ Ptr<Packet> AccumulateLastFragment (Ptr<const Packet> packet) {
NS_ASSERT (m_defragmenting);
m_fragments.push_back (packet);
m_defragmenting = false;
- Packet full;
+ Ptr<Packet> full = Create<Packet> ();
for (FragmentsCI i = m_fragments.begin (); i != m_fragments.end (); i++)
{
- full.AddAtEnd (*i);
+ full->AddAtEnd (*i);
}
m_fragments.erase (m_fragments.begin (), m_fragments.end ());
return full;
}
- void AccumulateFragment (Packet const packet) {
+ void AccumulateFragment (Ptr<const Packet> packet) {
NS_ASSERT (m_defragmenting);
m_fragments.push_back (packet);
}
@@ -196,9 +192,9 @@
return false;
}
-Packet
-MacRxMiddle::HandleFragments (Packet packet, WifiMacHeader const*hdr,
- OriginatorRxStatus *originator, bool *complete)
+Ptr<Packet>
+MacRxMiddle::HandleFragments (Ptr<Packet> packet, WifiMacHeader const*hdr,
+ OriginatorRxStatus *originator)
{
if (originator->IsDeFragmenting ())
{
@@ -208,7 +204,7 @@
{
TRACE ("accumulate fragment seq="<<hdr->GetSequenceNumber ()<<
", frag="<<hdr->GetFragmentNumber ()<<
- ", size="<<packet.GetSize ());
+ ", size="<<packet->GetSize ());
originator->AccumulateFragment (packet);
originator->SetSequenceControl (hdr->GetSequenceControl ());
}
@@ -216,8 +212,7 @@
{
TRACE ("non-ordered fragment");
}
- *complete = false;
- return Packet ();
+ return 0;
}
else
{
@@ -226,16 +221,14 @@
TRACE ("accumulate last fragment seq="<<hdr->GetSequenceNumber ()<<
", frag="<<hdr->GetFragmentNumber ()<<
", size="<<hdr->GetSize ());
- packet = originator->AccumulateLastFragment (packet);
+ Ptr<Packet> p = originator->AccumulateLastFragment (packet);
originator->SetSequenceControl (hdr->GetSequenceControl ());
- *complete = true;
- return packet;
+ return p;
}
else
{
TRACE ("non-ordered fragment");
- *complete = false;
- return Packet ();
+ return 0;
}
}
}
@@ -245,22 +238,20 @@
{
TRACE ("accumulate first fragment seq="<<hdr->GetSequenceNumber ()<<
", frag="<<hdr->GetFragmentNumber ()<<
- ", size="<<packet.GetSize ());
+ ", size="<<packet->GetSize ());
originator->AccumulateFirstFragment (packet);
originator->SetSequenceControl (hdr->GetSequenceControl ());
- *complete = false;
- return Packet ();
+ return 0;
}
else
{
- *complete = true;
return packet;
}
}
}
void
-MacRxMiddle::Receive (Packet packet, WifiMacHeader const *hdr)
+MacRxMiddle::Receive (Ptr<Packet> packet, WifiMacHeader const *hdr)
{
OriginatorRxStatus *originator = Lookup (hdr);
if (hdr->IsData ())
@@ -286,9 +277,8 @@
", frag="<<hdr->GetFragmentNumber ());
return;
}
- bool complete;
- Packet agregate = HandleFragments (packet, hdr, originator, &complete);
- if (!complete)
+ Ptr<Packet> agregate = HandleFragments (packet, hdr, originator);
+ if (agregate == 0)
{
return;
}
--- a/src/devices/wifi/mac-rx-middle.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/mac-rx-middle.h Thu Nov 22 14:27:22 2007 +0100
@@ -35,19 +35,19 @@
class MacRxMiddle
{
public:
- typedef Callback<void, Packet , WifiMacHeader const *> ForwardUpCallback;
+ typedef Callback<void, Ptr<Packet> , WifiMacHeader const *> ForwardUpCallback;
MacRxMiddle ();
~MacRxMiddle ();
void SetForwardCallback (ForwardUpCallback callback);
- void Receive (Packet packet, WifiMacHeader const *hdr);
+ void Receive (Ptr<Packet> packet, WifiMacHeader const *hdr);
private:
OriginatorRxStatus *Lookup (WifiMacHeader const*hdr);
bool IsDuplicate (WifiMacHeader const *hdr, OriginatorRxStatus *originator) const;
- Packet HandleFragments (Packet packet, WifiMacHeader const*hdr,
- OriginatorRxStatus *originator, bool *complete);
+ Ptr<Packet> HandleFragments (Ptr<Packet> packet, WifiMacHeader const*hdr,
+ OriginatorRxStatus *originator);
bool SequenceControlSmaller (int seqa, int seqb);
typedef std::map <Mac48Address, OriginatorRxStatus *, std::less<Mac48Address> > Originators;
--- a/src/devices/wifi/wifi-channel.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-channel.cc Thu Nov 22 14:27:22 2007 +0100
@@ -57,7 +57,7 @@
m_deviceList.push_back (std::make_pair (device, callback));
}
void
-WifiChannel::Send (Ptr<NetDevice> sender, const Packet &packet, double txPowerDbm,
+WifiChannel::Send (Ptr<NetDevice> sender, Ptr<const Packet> packet, double txPowerDbm,
WifiMode wifiMode, WifiPreamble preamble) const
{
Ptr<MobilityModel> senderMobility = sender->GetNode ()->QueryInterface<MobilityModel> (MobilityModel::iid);
@@ -71,15 +71,16 @@
double rxPowerDbm = m_loss->GetRxPower (txPowerDbm, senderMobility, receiverMobility);
NS_LOG_DEBUG ("propagation: txPower="<<txPowerDbm<<"dbm, rxPower="<<rxPowerDbm<<"dbm, "<<
"distance="<<senderMobility->GetDistanceFrom (receiverMobility)<<"m, delay="<<delay);
+ Ptr<Packet> copy = packet->Copy ();
Simulator::Schedule (delay, &WifiChannel::Receive, this,
- j, packet, rxPowerDbm, wifiMode, preamble);
+ j, copy, rxPowerDbm, wifiMode, preamble);
}
j++;
}
}
void
-WifiChannel::Receive (uint32_t i, const Packet &packet, double rxPowerDbm,
+WifiChannel::Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm,
WifiMode txMode, WifiPreamble preamble) const
{
m_deviceList[i].second (packet, rxPowerDbm, txMode, preamble);
--- a/src/devices/wifi/wifi-channel.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-channel.h Thu Nov 22 14:27:22 2007 +0100
@@ -53,7 +53,7 @@
* arg3: the tx mode of the packet to receive
* arg4: the preamble of the packet to receive
*/
- typedef Callback<void,Packet,double,WifiMode,WifiPreamble> ReceiveCallback;
+ typedef Callback<void,Ptr<Packet>,double,WifiMode,WifiPreamble> ReceiveCallback;
WifiChannel ();
virtual ~WifiChannel ();
@@ -94,12 +94,12 @@
* This method should not be invoked by normal users. It is
* currently invoked only from WifiPhy::Send.
*/
- void Send (Ptr<NetDevice> sender, const Packet &packet, double txPowerDbm,
+ void Send (Ptr<NetDevice> sender, Ptr<const Packet> packet, double txPowerDbm,
WifiMode wifiMode, WifiPreamble preamble) const;
private:
typedef std::vector<std::pair<Ptr<NetDevice>, ReceiveCallback> > DeviceList;
- void Receive (uint32_t i, const Packet &packet, double rxPowerDbm,
+ void Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm,
WifiMode txMode, WifiPreamble preamble) const;
/**
* \param i index of the requested network interface.
--- a/src/devices/wifi/wifi-mac-queue.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-mac-queue.cc Thu Nov 22 14:27:22 2007 +0100
@@ -27,9 +27,9 @@
namespace ns3 {
-WifiMacQueue::Item::Item (Packet packet,
- WifiMacHeader const &hdr,
- Time tstamp)
+WifiMacQueue::Item::Item (Ptr<const Packet> packet,
+ WifiMacHeader const &hdr,
+ Time tstamp)
: packet (packet), hdr (hdr), tstamp (tstamp)
{}
@@ -53,7 +53,7 @@
m_maxDelay = delay;
}
void
-WifiMacQueue::Enqueue (Packet packet, WifiMacHeader const &hdr)
+WifiMacQueue::Enqueue (Ptr<const Packet> packet, WifiMacHeader const &hdr)
{
Cleanup ();
if (m_size == m_maxSize)
@@ -88,8 +88,8 @@
m_queue.erase (m_queue.begin (), end);
}
-Packet
-WifiMacQueue::Dequeue (WifiMacHeader *hdr, bool *found)
+Ptr<const Packet>
+WifiMacQueue::Dequeue (WifiMacHeader *hdr)
{
Cleanup ();
if (!m_queue.empty ())
@@ -98,11 +98,9 @@
m_queue.pop_front ();
m_size--;
*hdr = i.hdr;
- *found = true;
return i.packet;
}
- *found = false;
- return Packet ();
+ return 0;
}
--- a/src/devices/wifi/wifi-mac-queue.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-mac-queue.h Thu Nov 22 14:27:22 2007 +0100
@@ -53,8 +53,8 @@
void SetMaxSize (uint32_t maxSize);
void SetMaxDelay (Time delay);
- void Enqueue (Packet packet, WifiMacHeader const &hdr);
- Packet Dequeue (WifiMacHeader *hdr, bool *found);
+ void Enqueue (Ptr<const Packet> packet, WifiMacHeader const &hdr);
+ Ptr<const Packet> Dequeue (WifiMacHeader *hdr);
void Flush (void);
@@ -64,10 +64,10 @@
private:
void Cleanup (void);
struct Item {
- Item (Packet packet,
+ Item (Ptr<const Packet> packet,
WifiMacHeader const&hdr,
Time tstamp);
- Packet packet;
+ Ptr<const Packet> packet;
WifiMacHeader hdr;
Time tstamp;
};
--- a/src/devices/wifi/wifi-net-device.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-net-device.cc Thu Nov 22 14:27:22 2007 +0100
@@ -299,29 +299,27 @@
NotifyConnected ();
}
bool
-WifiNetDevice::SendTo (const Packet &packet, const Address &to, uint16_t protocolNumber)
+WifiNetDevice::SendTo (Ptr<Packet> packet, const Address &to, uint16_t protocolNumber)
{
NS_ASSERT (Mac48Address::IsMatchingType (to));
Mac48Address realTo = Mac48Address::ConvertFrom (to);
- Packet p = packet;
-
LlcSnapHeader llc;
llc.SetType (protocolNumber);
- p.AddHeader (llc);
+ packet->AddHeader (llc);
- m_txLogger (p, realTo);
+ m_txLogger (packet, realTo);
- return DoSendTo (p, realTo);
+ return DoSendTo (packet, realTo);
}
void
-WifiNetDevice::DoForwardUp (Packet packet, const Mac48Address &from)
+WifiNetDevice::DoForwardUp (Ptr<Packet> packet, const Mac48Address &from)
{
m_rxLogger (packet, from);
LlcSnapHeader llc;
- packet.RemoveHeader (llc);
+ packet->RemoveHeader (llc);
NetDevice::ForwardUp (packet, llc.GetType (), from);
}
Mac48Address
@@ -415,7 +413,7 @@
m_ssid = ssid;
}
bool
-AdhocWifiNetDevice::DoSendTo (const Packet &packet, Mac48Address const &to)
+AdhocWifiNetDevice::DoSendTo (Ptr<const Packet> packet, Mac48Address const &to)
{
m_high->Enqueue (packet, to);
return true;
@@ -492,7 +490,7 @@
m_high->StartActiveAssociation ();
}
bool
-NqstaWifiNetDevice::DoSendTo (const Packet &packet, Mac48Address const &to)
+NqstaWifiNetDevice::DoSendTo (Ptr<const Packet> packet, Mac48Address const &to)
{
m_high->Queue (packet, to);
return true;
@@ -599,7 +597,7 @@
m_high->StartBeaconing ();
}
bool
-NqapWifiNetDevice::DoSendTo (const Packet &packet, Mac48Address const & to)
+NqapWifiNetDevice::DoSendTo (Ptr<const Packet> packet, Mac48Address const & to)
{
m_high->Queue (packet, to);
return true;
--- a/src/devices/wifi/wifi-net-device.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-net-device.h Thu Nov 22 14:27:22 2007 +0100
@@ -106,20 +106,20 @@
// inherited from parent.
virtual bool DoNeedsArp (void) const;
virtual Ptr<Channel> DoGetChannel (void) const;
- virtual bool SendTo (const Packet &packet, const Address &to, uint16_t protocolNumber);
+ virtual bool SendTo (Ptr<Packet> packet, const Address &to, uint16_t protocolNumber);
virtual Ptr<TraceResolver> GetTraceResolver (void) const;
// defined for children
virtual void NotifyConnected (void) = 0;
- virtual bool DoSendTo (const Packet &packet, const Mac48Address &to) = 0;
+ virtual bool DoSendTo (Ptr<const Packet> packet, const Mac48Address &to) = 0;
// private helper
void Construct (void);
- CallbackTraceSource<Packet, Mac48Address> m_rxLogger;
- CallbackTraceSource<Packet, Mac48Address> m_txLogger;
+ CallbackTraceSource<Ptr<const Packet>, Mac48Address> m_rxLogger;
+ CallbackTraceSource<Ptr<const Packet>, Mac48Address> m_txLogger;
protected:
WifiNetDevice (Ptr<Node> node);
WifiNetDevice (Ptr<Node> node, Mac48Address self);
- void DoForwardUp (Packet packet, const Mac48Address &from);
+ void DoForwardUp (Ptr<Packet> packet, const Mac48Address &from);
virtual void DoDispose (void);
DcaTxop *CreateDca (uint32_t minCw, uint32_t maxCw, uint32_t aifsn) const;
@@ -156,7 +156,7 @@
private:
void DoConstruct (void);
void ForwardUp (void);
- virtual bool DoSendTo (const Packet &packet, Mac48Address const & to);
+ virtual bool DoSendTo (Ptr<const Packet> packet, Mac48Address const & to);
virtual void NotifyConnected (void);
Ssid m_ssid;
@@ -200,7 +200,7 @@
void DoConstruct (void);
void Associated (void);
void DisAssociated (void);
- virtual bool DoSendTo (const Packet &packet, Mac48Address const & to);
+ virtual bool DoSendTo (Ptr<const Packet> packet, Mac48Address const & to);
virtual void NotifyConnected (void);
friend class WifiNetDeviceFactory;
Ssid m_ssid;
@@ -234,7 +234,7 @@
virtual void DoDispose (void);
private:
void DoConstruct (void);
- virtual bool DoSendTo (const Packet &packet, Mac48Address const & to);
+ virtual bool DoSendTo (Ptr<const Packet> packet, Mac48Address const & to);
virtual void NotifyConnected (void);
friend class WifiNetDeviceFactory;
Ssid m_ssid;
--- a/src/devices/wifi/wifi-phy.cc Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-phy.cc Thu Nov 22 14:27:22 2007 +0100
@@ -253,17 +253,17 @@
m_syncErrorCallback = callback;
}
void
-WifiPhy::ReceivePacket (Packet const packet,
+WifiPhy::ReceivePacket (Ptr<Packet> packet,
double rxPowerDbm,
WifiMode txMode,
enum WifiPreamble preamble)
{
rxPowerDbm += m_rxGainDb;
double rxPowerW = DbmToW (rxPowerDbm);
- Time rxDuration = CalculateTxDuration (packet.GetSize (), txMode, preamble);
+ Time rxDuration = CalculateTxDuration (packet->GetSize (), txMode, preamble);
Time endRx = Simulator::Now () + rxDuration;
- Ptr<RxEvent> event = Create<RxEvent> (packet.GetSize (),
+ Ptr<RxEvent> event = Create<RxEvent> (packet->GetSize (),
txMode,
preamble,
rxDuration,
@@ -344,7 +344,7 @@
}
void
-WifiPhy::SendPacket (Packet const packet, WifiMode txMode, WifiPreamble preamble, uint8_t txPower)
+WifiPhy::SendPacket (Ptr<const Packet> packet, WifiMode txMode, WifiPreamble preamble, uint8_t txPower)
{
/* Transmission can happen if:
* - we are syncing on a packet. It is the responsability of the
@@ -358,7 +358,7 @@
m_endSyncEvent.Cancel ();
}
- Time txDuration = CalculateTxDuration (packet.GetSize (), txMode, preamble);
+ Time txDuration = CalculateTxDuration (packet->GetSize (), txMode, preamble);
NotifyTxStart (txDuration);
SwitchToTx (txDuration);
m_channel->Send (m_device, packet, GetPowerDbm (txPower) + m_txGainDb, txMode, preamble);
@@ -1189,7 +1189,7 @@
void
-WifiPhy::EndSync (Packet const packet, Ptr<RxEvent> event)
+WifiPhy::EndSync (Ptr<Packet> packet, Ptr<RxEvent> event)
{
NS_ASSERT (IsStateSync ());
NS_ASSERT (event->GetEndTime () == Simulator::Now ());
@@ -1206,7 +1206,7 @@
double per = CalculatePer (event, &ni);
NS_LOG_DEBUG ("mode="<<(event->GetPayloadMode ().GetPhyRate ())<<
", ber="<<(1-GetChunkSuccessRate (event->GetPayloadMode (), snr, 1))<<
- ", snr="<<snr<<", per="<<per<<", size="<<packet.GetSize ());
+ ", snr="<<snr<<", per="<<per<<", size="<<packet->GetSize ());
if (m_random.GetValue () > per)
{
--- a/src/devices/wifi/wifi-phy.h Thu Nov 22 10:44:48 2007 +0100
+++ b/src/devices/wifi/wifi-phy.h Thu Nov 22 14:27:22 2007 +0100
@@ -112,12 +112,12 @@
* arg3: mode of packet
* arg4: type of preamble used for packet.
*/
- typedef Callback<void,Packet, double, WifiMode, enum WifiPreamble> SyncOkCallback;
+ typedef Callback<void,Ptr<Packet>, double, WifiMode, enum WifiPreamble> SyncOkCallback;
/**
* arg1: packet received unsuccessfully
* arg2: snr of packet
*/
- typedef Callback<void,Packet, double> SyncErrorCallback;
+ typedef Callback<void,Ptr<Packet>, double> SyncErrorCallback;
/**
* \param device the device which contains this PHY.
@@ -156,7 +156,7 @@
* \param txPowerLevel a power level to use to send this packet. The real
* transmission power is calculated as txPowerMin + txPowerLevel * (txPowerMax - txPowerMin) / nTxLevels
*/
- void SendPacket (Packet const packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel);
+ void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel);
/**
* \param listener the new listener
@@ -278,7 +278,7 @@
double CalculateSnr (double signal, double noiseInterference, WifiMode mode) const;
double CalculateChunkSuccessRate (double snir, Time delay, WifiMode mode) const;
double CalculatePer (Ptr<const RxEvent> event, NiChanges *ni) const;
- void EndSync (Packet const packet, Ptr<RxEvent> event);
+ void EndSync (Ptr<Packet> packet, Ptr<RxEvent> event);
double Log2 (double val) const;
double GetBpskBer (double snr, uint32_t signalSpread, uint32_t phyRate) const;
double GetQamBer (double snr, unsigned int m, uint32_t signalSpread, uint32_t phyRate) const;
@@ -297,7 +297,7 @@
uint32_t adFree, uint32_t adFreePlusOne) const;
double GetChunkSuccessRate (WifiMode mode, double snr, uint32_t nbits) const;
/* rxPower unit is Watt */
- void ReceivePacket (Packet packet,
+ void ReceivePacket (Ptr<Packet> packet,
double rxPowerDbm,
WifiMode mode,
WifiPreamble preamble);