Fixed valgrind errors
This commit is contained in:
@@ -147,9 +147,11 @@ Experiment::CreateDualModes (uint32_t fc)
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Experiment::Run (UanHelper &uan, uint32_t param)
|
||||
Experiment::Run (uint32_t param)
|
||||
{
|
||||
|
||||
UanHelper uan;
|
||||
|
||||
m_bytesTotal=0;
|
||||
|
||||
uint32_t nNodes;
|
||||
@@ -166,6 +168,10 @@ Experiment::Run (UanHelper &uan, uint32_t param)
|
||||
}
|
||||
Time pDelay = Seconds((double) m_maxRange / 1500.0);
|
||||
|
||||
uan.SetPhy ("ns3::UanPhyDual",
|
||||
"SupportedModesPhy1", UanModesListValue (m_dataModes),
|
||||
"SupportedModesPhy2", UanModesListValue (m_controlModes));
|
||||
|
||||
uan.SetMac ("ns3::UanMacRcGw",
|
||||
"NumberOfRates", UintegerValue (m_numRates),
|
||||
"NumberOfNodes", UintegerValue (nNodes),
|
||||
@@ -241,12 +247,6 @@ Experiment::Run (UanHelper &uan, uint32_t param)
|
||||
sinkSocket->SetRecvCallback (MakeCallback (&Experiment::ReceivePacket, this));
|
||||
|
||||
Simulator::Stop (m_simTime + Seconds(0.6));
|
||||
|
||||
chan = 0;
|
||||
sinkNode = 0;
|
||||
sinkSocket = 0;
|
||||
pos = 0;
|
||||
|
||||
Simulator::Run ();
|
||||
Simulator::Destroy ();
|
||||
|
||||
@@ -279,15 +279,12 @@ main(int argc, char *argv[])
|
||||
|
||||
exp.CreateDualModes (12000);
|
||||
|
||||
UanHelper uan;
|
||||
uan.SetPhy ("ns3::UanPhyDual",
|
||||
"SupportedModesPhy1", UanModesListValue (exp.m_dataModes),
|
||||
"SupportedModesPhy2", UanModesListValue (exp.m_controlModes));
|
||||
;
|
||||
|
||||
Gnuplot2dDataset ds;
|
||||
for (uint32_t param=exp.m_simMin; param<=exp.m_simMax; param += exp.m_simStep)
|
||||
{
|
||||
uint32_t bytesRx = exp.Run (uan, param);
|
||||
uint32_t bytesRx = exp.Run (param);
|
||||
NS_LOG_DEBUG ("param=" << param << ": Received " << bytesRx << " bytes at sink");
|
||||
|
||||
double util = bytesRx*8.0/(exp.m_simTime.GetSeconds ()*exp.m_totalRate);
|
||||
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
bool upperblock,
|
||||
std::string name);
|
||||
void CreateDualModes (uint32_t fc);
|
||||
uint32_t Run (UanHelper &uan, uint32_t param);
|
||||
uint32_t Run (uint32_t param);
|
||||
|
||||
Experiment();
|
||||
|
||||
|
||||
@@ -65,25 +65,55 @@ UanChannel::GetTypeId ()
|
||||
|
||||
UanChannel::UanChannel ()
|
||||
: Channel (),
|
||||
m_prop (0)
|
||||
m_prop (0),
|
||||
m_cleared (false)
|
||||
{
|
||||
}
|
||||
|
||||
UanChannel::~UanChannel ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanChannel::DoDispose ()
|
||||
UanChannel::Clear ()
|
||||
{
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
UanDeviceList::iterator it = m_devList.begin ();
|
||||
for (; it != m_devList.end (); it++)
|
||||
{
|
||||
it->first = 0;
|
||||
it->second = 0;
|
||||
if (it->first)
|
||||
{
|
||||
it->first->Clear ();
|
||||
it->first = 0;
|
||||
}
|
||||
if (it->second)
|
||||
{
|
||||
it->second->Clear ();
|
||||
it->second = 0;
|
||||
}
|
||||
}
|
||||
m_devList.clear ();
|
||||
m_prop = 0;
|
||||
m_noise = 0;
|
||||
if (m_prop)
|
||||
{
|
||||
m_prop->Clear ();
|
||||
m_prop = 0;
|
||||
}
|
||||
if (m_noise)
|
||||
{
|
||||
m_noise->Clear ();
|
||||
m_noise = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
UanChannel::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
Channel::DoDispose ();
|
||||
}
|
||||
void
|
||||
|
||||
@@ -94,10 +94,16 @@ public:
|
||||
*/
|
||||
double GetNoiseDbHz (double fKhz);
|
||||
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
void Clear (void);
|
||||
|
||||
private:
|
||||
UanDeviceList m_devList;
|
||||
Ptr<UanPropModel> m_prop;
|
||||
Ptr<UanNoiseModel> m_noise;
|
||||
bool m_cleared;
|
||||
|
||||
void SendUp (uint32_t i, Ptr<Packet> packet, double rxPowerDb, UanTxMode txMode, UanPdp pdp);
|
||||
protected:
|
||||
|
||||
@@ -35,7 +35,8 @@ namespace ns3
|
||||
NS_OBJECT_ENSURE_REGISTERED (UanMacAloha);
|
||||
|
||||
UanMacAloha::UanMacAloha ()
|
||||
: UanMac ()
|
||||
: UanMac (),
|
||||
m_cleared (false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -43,10 +44,25 @@ UanMacAloha::~UanMacAloha ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanMacAloha::Clear ()
|
||||
{
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
if (m_phy)
|
||||
{
|
||||
m_phy->Clear ();
|
||||
m_phy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UanMacAloha::DoDispose ()
|
||||
{
|
||||
m_phy = 0;
|
||||
Clear ();
|
||||
UanMac::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -54,11 +54,13 @@ public:
|
||||
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb);
|
||||
virtual void AttachPhy (Ptr<UanPhy> phy);
|
||||
virtual Address GetBroadcast (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
private:
|
||||
UanAddress m_address;
|
||||
Ptr<UanPhy> m_phy;
|
||||
Callback<void, Ptr<Packet>, const UanAddress& > m_forUpCb;
|
||||
bool m_cleared;
|
||||
|
||||
/**
|
||||
* \brief Receive packet from lower layer (passed to PHY as callback)
|
||||
|
||||
@@ -38,7 +38,8 @@ UanMacCw::UanMacCw ()
|
||||
: UanMac (),
|
||||
m_phy (0),
|
||||
m_pktTx (0),
|
||||
m_state (IDLE)
|
||||
m_state (IDLE),
|
||||
m_cleared (false)
|
||||
|
||||
{
|
||||
}
|
||||
@@ -48,12 +49,27 @@ UanMacCw::~UanMacCw ()
|
||||
}
|
||||
|
||||
void
|
||||
UanMacCw::DoDispose ()
|
||||
UanMacCw::Clear ()
|
||||
{
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
m_pktTx = 0;
|
||||
m_phy = 0;
|
||||
if (m_phy)
|
||||
{
|
||||
m_phy->Clear ();
|
||||
m_phy = 0;
|
||||
}
|
||||
m_sendEvent.Cancel ();
|
||||
m_txEndEvent.Cancel ();
|
||||
}
|
||||
|
||||
void
|
||||
UanMacCw::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
UanMac::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ public:
|
||||
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
|
||||
virtual void AttachPhy (Ptr<UanPhy> phy);
|
||||
virtual Address GetBroadcast (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
// PHY listeners
|
||||
/// Function called by UanPhy object to notify of packet reception
|
||||
@@ -111,6 +112,8 @@ private:
|
||||
EventId m_txEndEvent;
|
||||
State m_state;
|
||||
|
||||
bool m_cleared;
|
||||
|
||||
void PhyRxPacketGood (Ptr<Packet> packet, double sinr, UanTxMode mode);
|
||||
void PhyRxPacketError (Ptr<Packet> packet, double sinr);
|
||||
void SaveTimer (void);
|
||||
|
||||
@@ -54,7 +54,8 @@ operator < (UanAddress &a, UanAddress &b)
|
||||
UanMacRcGw::UanMacRcGw ()
|
||||
: UanMac (),
|
||||
m_state (IDLE),
|
||||
m_currentRateNum (0)
|
||||
m_currentRateNum (0),
|
||||
m_cleared (false)
|
||||
{
|
||||
UanHeaderCommon ch;
|
||||
UanHeaderRcRts rts;
|
||||
@@ -75,8 +76,18 @@ UanMacRcGw::~UanMacRcGw ()
|
||||
}
|
||||
|
||||
void
|
||||
UanMacRcGw::DoDispose ()
|
||||
UanMacRcGw::Clear ()
|
||||
{
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
if (m_phy)
|
||||
{
|
||||
m_phy->Clear ();
|
||||
m_phy = 0;
|
||||
}
|
||||
m_propDelay.clear ();
|
||||
std::map<UanAddress, AckData>::iterator it = m_ackData.begin ();
|
||||
for (; it != m_ackData.end (); it++)
|
||||
@@ -86,6 +97,12 @@ UanMacRcGw::DoDispose ()
|
||||
m_ackData.clear ();
|
||||
m_requests.clear ();
|
||||
m_sortedRes.clear ();
|
||||
}
|
||||
|
||||
void
|
||||
UanMacRcGw::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
UanMac::DoDispose ();
|
||||
}
|
||||
TypeId
|
||||
|
||||
@@ -72,6 +72,7 @@ public:
|
||||
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
|
||||
virtual void AttachPhy (Ptr<UanPhy> phy);
|
||||
virtual Address GetBroadcast (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
private:
|
||||
enum State {
|
||||
@@ -125,6 +126,8 @@ private:
|
||||
std::map<UanAddress, Request> m_requests;
|
||||
std::set<std::pair<Time, UanAddress> > m_sortedRes;
|
||||
|
||||
bool m_cleared;
|
||||
|
||||
TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
|
||||
|
||||
// Start time, min p-delay, reservations, frames, bytes, window size, ctl rate, retry rate
|
||||
|
||||
@@ -156,7 +156,8 @@ UanMacRc::UanMacRc ()
|
||||
m_state (UNASSOCIATED),
|
||||
m_rtsBlocked (false),
|
||||
m_currentRate (10),
|
||||
m_frameNo (0)
|
||||
m_frameNo (0),
|
||||
m_cleared (false)
|
||||
{
|
||||
UanHeaderCommon ch;
|
||||
UanHeaderRcCts ctsh;
|
||||
@@ -171,9 +172,18 @@ UanMacRc::~UanMacRc ()
|
||||
}
|
||||
|
||||
void
|
||||
UanMacRc::DoDispose ()
|
||||
UanMacRc::Clear ()
|
||||
{
|
||||
m_phy = 0;
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
if (m_phy)
|
||||
{
|
||||
m_phy->Clear ();
|
||||
m_phy = 0;
|
||||
}
|
||||
std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it;
|
||||
for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++)
|
||||
{
|
||||
@@ -183,7 +193,12 @@ UanMacRc::DoDispose ()
|
||||
m_resList.clear ();
|
||||
m_startAgain.Cancel ();
|
||||
m_rtsEvent.Cancel ();
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
UanMacRc::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
UanMac::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -151,6 +151,7 @@ public:
|
||||
virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
|
||||
virtual void AttachPhy (Ptr<UanPhy> phy);
|
||||
virtual Address GetBroadcast (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
private:
|
||||
enum State {
|
||||
@@ -180,6 +181,8 @@ private:
|
||||
uint32_t m_ctsSizeN;
|
||||
uint32_t m_ctsSizeG;
|
||||
|
||||
bool m_cleared;
|
||||
|
||||
std::list<std::pair <Ptr<Packet>, UanAddress > > m_pktQueue;
|
||||
std::list<Reservation> m_resList;
|
||||
|
||||
|
||||
@@ -84,6 +84,11 @@ public:
|
||||
*/
|
||||
virtual Address GetBroadcast (void) const = 0;
|
||||
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void) = 0;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -38,7 +38,8 @@ NS_OBJECT_ENSURE_REGISTERED (UanNetDevice);
|
||||
|
||||
UanNetDevice::UanNetDevice ()
|
||||
: NetDevice (),
|
||||
m_mtu (64000)
|
||||
m_mtu (64000),
|
||||
m_cleared (false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -46,14 +47,41 @@ UanNetDevice::~UanNetDevice ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanNetDevice::Clear ()
|
||||
{
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
m_node = 0;
|
||||
if (m_channel)
|
||||
{
|
||||
m_channel->Clear ();
|
||||
m_channel = 0;
|
||||
}
|
||||
if (m_mac)
|
||||
{
|
||||
m_mac->Clear ();
|
||||
m_mac = 0;
|
||||
}
|
||||
if (m_phy)
|
||||
{
|
||||
m_phy->Clear ();
|
||||
m_phy = 0;
|
||||
}
|
||||
if (m_trans)
|
||||
{
|
||||
m_trans->Clear ();
|
||||
m_trans = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UanNetDevice::DoDispose ()
|
||||
{
|
||||
m_node = 0;
|
||||
m_channel = 0;
|
||||
m_mac = 0;
|
||||
m_phy = 0;
|
||||
m_trans = 0;
|
||||
Clear ();
|
||||
NetDevice::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -90,6 +90,11 @@ public:
|
||||
*/
|
||||
void SetTransducer (Ptr<UanTransducer> trans);
|
||||
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
void Clear (void);
|
||||
|
||||
// Purely virtual functions from base class
|
||||
virtual void SetIfIndex (const uint32_t index);
|
||||
virtual uint32_t GetIfIndex (void) const;
|
||||
@@ -134,6 +139,9 @@ private:
|
||||
|
||||
TracedCallback<Ptr<const Packet>, UanAddress> m_rxLogger;
|
||||
TracedCallback<Ptr<const Packet>, UanAddress> m_txLogger;
|
||||
|
||||
bool m_cleared;
|
||||
|
||||
protected:
|
||||
virtual void DoDispose ();
|
||||
};
|
||||
|
||||
@@ -34,6 +34,12 @@ public:
|
||||
*/
|
||||
virtual double GetNoiseDbHz (double fKhz) const = 0;
|
||||
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void);
|
||||
|
||||
virtual void DoDispose (void);
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -131,11 +131,24 @@ UanPhyDual::~UanPhyDual ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyDual::Clear ()
|
||||
{
|
||||
if (m_phy1)
|
||||
{
|
||||
m_phy1->Clear ();
|
||||
m_phy1 = 0;
|
||||
}
|
||||
if (m_phy2)
|
||||
{
|
||||
m_phy2->Clear ();
|
||||
m_phy2 = 0;
|
||||
}
|
||||
}
|
||||
void
|
||||
UanPhyDual::DoDispose ()
|
||||
{
|
||||
m_phy1 = 0;
|
||||
m_phy2 = 0;
|
||||
Clear ();
|
||||
UanPhy::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ public:
|
||||
virtual Ptr<UanTransducer> GetTransducer (void);
|
||||
virtual uint32_t GetNModes (void);
|
||||
virtual UanTxMode GetMode (uint32_t n);
|
||||
virtual void Clear (void);
|
||||
|
||||
/**
|
||||
* /returns True if Phy1 is Idle
|
||||
|
||||
@@ -352,7 +352,8 @@ UanPhyGen::UanPhyGen ()
|
||||
m_txPwrDb (0),
|
||||
m_rxThreshDb (0),
|
||||
m_ccaThreshDb (0),
|
||||
m_pktRx (0)
|
||||
m_pktRx (0),
|
||||
m_cleared (false)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -362,17 +363,52 @@ UanPhyGen::~UanPhyGen ()
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyGen::Clear ()
|
||||
{
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
m_listeners.clear ();
|
||||
if (m_channel)
|
||||
{
|
||||
m_channel->Clear ();
|
||||
m_channel = 0;
|
||||
}
|
||||
if (m_transducer)
|
||||
{
|
||||
m_transducer->Clear ();
|
||||
m_transducer = 0;
|
||||
}
|
||||
if (m_device)
|
||||
{
|
||||
m_device->Clear ();
|
||||
m_device = 0;
|
||||
}
|
||||
if (m_mac)
|
||||
{
|
||||
m_mac->Clear ();
|
||||
m_mac = 0;
|
||||
}
|
||||
if (m_per)
|
||||
{
|
||||
m_per->Clear ();
|
||||
m_per = 0;
|
||||
}
|
||||
if (m_sinr)
|
||||
{
|
||||
m_sinr->Clear ();
|
||||
m_sinr = 0;
|
||||
}
|
||||
m_pktRx = 0;
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyGen::DoDispose ()
|
||||
{
|
||||
m_listeners.clear ();
|
||||
m_channel = 0;
|
||||
m_transducer = 0;
|
||||
m_device = 0;
|
||||
m_mac = 0;
|
||||
m_per = 0;
|
||||
m_sinr = 0;
|
||||
m_pktRx = 0;
|
||||
Clear ();
|
||||
UanPhy::DoDispose ();
|
||||
}
|
||||
|
||||
|
||||
@@ -195,6 +195,7 @@ public:
|
||||
virtual uint32_t GetNModes (void);
|
||||
virtual UanTxMode GetMode (uint32_t n);
|
||||
virtual Ptr<Packet> GetPacketRx (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
private:
|
||||
typedef std::list<UanPhyListener *> ListenerList;
|
||||
@@ -225,6 +226,8 @@ private:
|
||||
UanPdp m_pktRxPdp;
|
||||
UanTxMode m_pktRxMode;
|
||||
|
||||
bool m_cleared;
|
||||
|
||||
TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxOkLogger;
|
||||
TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxErrLogger;
|
||||
TracedCallback<Ptr<const Packet>, double, UanTxMode > m_txLogger;
|
||||
|
||||
49
src/devices/uan/uan-phy.cc
Normal file
49
src/devices/uan/uan-phy.cc
Normal file
@@ -0,0 +1,49 @@
|
||||
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2009 University of Washington
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Author: Leonard Tracy <lentracy@gmail.com>
|
||||
*/
|
||||
|
||||
#include "uan-phy.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
void
|
||||
UanPhyCalcSinr::Clear ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyCalcSinr::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
Object::DoDispose ();
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyPer::Clear ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanPhyPer::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
Object::DoDispose ();
|
||||
}
|
||||
|
||||
} //namespace ns3
|
||||
@@ -59,6 +59,13 @@ public:
|
||||
UanPdp pdp,
|
||||
const UanTransducer::ArrivalList &arrivalList
|
||||
) const = 0;
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void);
|
||||
|
||||
virtual void DoDispose (void);
|
||||
|
||||
/**
|
||||
* \param db dB value
|
||||
* \returns kilopascals
|
||||
@@ -77,6 +84,7 @@ public:
|
||||
{
|
||||
return 10 * log10 (kp);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -96,6 +104,12 @@ public:
|
||||
* \returns Probability of packet error
|
||||
*/
|
||||
virtual double CalcPer (Ptr<Packet> pkt, double sinrDb, UanTxMode mode) = 0;
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void);
|
||||
|
||||
virtual void DoDispose (void);
|
||||
};
|
||||
|
||||
|
||||
@@ -334,6 +348,11 @@ public:
|
||||
* \returns Packet currently being received in PHY
|
||||
*/
|
||||
virtual Ptr<Packet> GetPacketRx (void) const = 0;
|
||||
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -336,4 +336,16 @@ UanPdp::CreateImpulsePdp (void)
|
||||
return pdp;
|
||||
}
|
||||
|
||||
void
|
||||
UanPropModel::Clear (void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
UanPropModel::DoDispose (void)
|
||||
{
|
||||
Clear ();
|
||||
Object::DoDispose ();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -241,6 +241,12 @@ public:
|
||||
*/
|
||||
virtual Time GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b, UanTxMode mode) = 0;
|
||||
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void);
|
||||
|
||||
virtual void DoDispose (void);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -35,7 +35,8 @@ NS_OBJECT_ENSURE_REGISTERED (UanTransducerHd);
|
||||
UanTransducerHd::UanTransducerHd ()
|
||||
: UanTransducer (),
|
||||
m_state (RX),
|
||||
m_endTxTime (Seconds (0))
|
||||
m_endTxTime (Seconds (0)),
|
||||
m_cleared (false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -44,13 +45,27 @@ UanTransducerHd::~UanTransducerHd ()
|
||||
}
|
||||
|
||||
void
|
||||
UanTransducerHd::DoDispose ()
|
||||
UanTransducerHd::Clear ()
|
||||
{
|
||||
m_channel = 0;
|
||||
if (m_cleared)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_cleared = true;
|
||||
if (m_channel)
|
||||
{
|
||||
m_channel->Clear ();
|
||||
m_channel = 0;
|
||||
}
|
||||
|
||||
UanPhyList::iterator it = m_phyList.begin ();
|
||||
for (; it != m_phyList.end (); it++)
|
||||
{
|
||||
*it = 0;
|
||||
if (*it)
|
||||
{
|
||||
(*it)->Clear ();
|
||||
*it = 0;
|
||||
}
|
||||
}
|
||||
ArrivalList::iterator ait = m_arrivalList.begin ();
|
||||
for (; ait != m_arrivalList.end (); ait++)
|
||||
@@ -60,7 +75,12 @@ UanTransducerHd::DoDispose ()
|
||||
m_phyList.clear ();
|
||||
m_arrivalList.clear ();
|
||||
m_endTxEvent.Cancel ();
|
||||
}
|
||||
|
||||
void
|
||||
UanTransducerHd::DoDispose ()
|
||||
{
|
||||
Clear ();
|
||||
UanTransducer::DoDispose ();
|
||||
}
|
||||
TypeId
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
virtual Ptr<UanChannel> GetChannel (void) const;
|
||||
virtual void AddPhy (Ptr<UanPhy>);
|
||||
virtual const UanPhyList &GetPhyList (void) const;
|
||||
virtual void Clear (void);
|
||||
|
||||
private:
|
||||
State m_state;
|
||||
@@ -58,6 +59,7 @@ private:
|
||||
Ptr<UanChannel> m_channel;
|
||||
EventId m_endTxEvent;
|
||||
Time m_endTxTime;
|
||||
bool m_cleared;
|
||||
|
||||
void RemoveArrival (UanPacketArrival arrival);
|
||||
void EndTx (void);
|
||||
|
||||
@@ -186,6 +186,11 @@ public:
|
||||
* \returns List of all Phy's this transducer sends packets to.
|
||||
*/
|
||||
virtual const UanPhyList &GetPhyList (void) const = 0;
|
||||
/**
|
||||
* Clears all pointer references
|
||||
*/
|
||||
virtual void Clear (void) = 0;
|
||||
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -22,7 +22,9 @@ def build(bld):
|
||||
'uan-header-rc.cc',
|
||||
'uan-mac-rc.cc',
|
||||
'uan-mac-rc-gw.cc',
|
||||
# 'uan-test.cc'
|
||||
'uan-test.cc',
|
||||
'uan-phy.cc',
|
||||
'uan-noise-model.cc'
|
||||
]
|
||||
headers = bld.new_task_gen('ns3header')
|
||||
headers.module = 'uan'
|
||||
|
||||
Reference in New Issue
Block a user