--- a/RELEASE_NOTES Sat Feb 28 15:16:47 2015 +0100
+++ b/RELEASE_NOTES Sat Feb 28 18:20:46 2015 +0100
@@ -21,9 +21,13 @@
New user-visible features
-------------------------
+- (network) CalculateTxTime has been declared obsolete.
+ CalculateBytesTxTime and CalculateBitsTxTime are to be used instead.
+ The reurn value is a Time, instead of a double.
Bugs fixed
----------
+- Bug 1974 - CalculateTxTime should return a Time, not a double
- Bug 2073 - NDisc cache entries update timer might be stuck in a loop
Known issues
--- a/src/csma/model/csma-net-device.cc Sat Feb 28 15:16:47 2015 +0100
+++ b/src/csma/model/csma-net-device.cc Sat Feb 28 18:20:46 2015 +0100
@@ -520,7 +520,7 @@
m_txMachineState = BUSY;
m_phyTxBeginTrace (m_currentPkt);
- Time tEvent = Seconds (m_bps.CalculateTxTime (m_currentPkt->GetSize ()));
+ Time tEvent = m_bps.CalculateBytesTxTime (m_currentPkt->GetSize ());
NS_LOG_LOGIC ("Schedule TransmitCompleteEvent in " << tEvent.GetSeconds () << "sec");
Simulator::Schedule (tEvent, &CsmaNetDevice::TransmitCompleteEvent, this);
}
@@ -656,7 +656,7 @@
//
// We use the Ethernet interframe gap of 96 bit times.
//
- m_tInterframeGap = Seconds (m_bps.CalculateTxTime (96/8));
+ m_tInterframeGap = m_bps.CalculateBytesTxTime (96/8);
//
// This device is up whenever a channel is attached to it.
--- a/src/network/bindings/modulegen__gcc_ILP32.py Sat Feb 28 15:16:47 2015 +0100
+++ b/src/network/bindings/modulegen__gcc_ILP32.py Sat Feb 28 18:20:46 2015 +0100
@@ -769,8 +769,8 @@
def register_Ns3Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## address.h (module 'network'): ns3::Address::Address() [constructor]
cls.add_constructor([])
@@ -1540,11 +1540,21 @@
cls.add_constructor([param('uint64_t', 'bps')])
## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
cls.add_constructor([param('std::string', 'rate')])
+ ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBitsTxTime(uint32_t bits) const [member function]
+ cls.add_method('CalculateBitsTxTime',
+ 'ns3::Time',
+ [param('uint32_t', 'bits')],
+ is_const=True)
+ ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBytesTxTime(uint32_t bytes) const [member function]
+ cls.add_method('CalculateBytesTxTime',
+ 'ns3::Time',
+ [param('uint32_t', 'bytes')],
+ is_const=True)
## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
cls.add_method('CalculateTxTime',
'double',
[param('uint32_t', 'bytes')],
- is_const=True)
+ deprecated=True, is_const=True)
## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
cls.add_method('GetBitRate',
'uint64_t',
@@ -1740,8 +1750,8 @@
def register_Ns3Ipv4Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
@@ -1911,8 +1921,8 @@
def register_Ns3Ipv6Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
cls.add_constructor([])
@@ -2168,8 +2178,8 @@
def register_Ns3Mac16Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
@@ -2205,8 +2215,8 @@
def register_Ns3Mac48Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
@@ -2277,8 +2287,8 @@
def register_Ns3Mac64Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Mac64Address const &', 'arg0')])
@@ -3548,8 +3558,8 @@
def register_Ns3TypeId_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
cls.add_constructor([param('char const *', 'name')])
@@ -3759,10 +3769,8 @@
return
def register_Ns3Int64x64_t_methods(root_module, cls):
- cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('!=')
cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
- cls.add_output_stream_operator()
cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
@@ -3773,6 +3781,8 @@
cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
+ cls.add_output_stream_operator()
+ cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('==')
cls.add_binary_comparison_operator('>=')
## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
@@ -5404,10 +5414,8 @@
return
def register_Ns3Time_methods(root_module, cls):
- cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('!=')
cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
- cls.add_output_stream_operator()
cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
@@ -5415,6 +5423,8 @@
cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('>')
cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
+ cls.add_output_stream_operator()
+ cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('==')
cls.add_binary_comparison_operator('>=')
## nstime.h (module 'core'): ns3::Time::Time() [constructor]
--- a/src/network/bindings/modulegen__gcc_LP64.py Sat Feb 28 15:16:47 2015 +0100
+++ b/src/network/bindings/modulegen__gcc_LP64.py Sat Feb 28 18:20:46 2015 +0100
@@ -769,8 +769,8 @@
def register_Ns3Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## address.h (module 'network'): ns3::Address::Address() [constructor]
cls.add_constructor([])
@@ -1540,11 +1540,21 @@
cls.add_constructor([param('uint64_t', 'bps')])
## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
cls.add_constructor([param('std::string', 'rate')])
+ ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBitsTxTime(uint32_t bits) const [member function]
+ cls.add_method('CalculateBitsTxTime',
+ 'ns3::Time',
+ [param('uint32_t', 'bits')],
+ is_const=True)
+ ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBytesTxTime(uint32_t bytes) const [member function]
+ cls.add_method('CalculateBytesTxTime',
+ 'ns3::Time',
+ [param('uint32_t', 'bytes')],
+ is_const=True)
## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
cls.add_method('CalculateTxTime',
'double',
[param('uint32_t', 'bytes')],
- is_const=True)
+ deprecated=True, is_const=True)
## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
cls.add_method('GetBitRate',
'uint64_t',
@@ -1740,8 +1750,8 @@
def register_Ns3Ipv4Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
@@ -1911,8 +1921,8 @@
def register_Ns3Ipv6Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
cls.add_constructor([])
@@ -2168,8 +2178,8 @@
def register_Ns3Mac16Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
@@ -2205,8 +2215,8 @@
def register_Ns3Mac48Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
@@ -2277,8 +2287,8 @@
def register_Ns3Mac64Address_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
cls.add_constructor([param('ns3::Mac64Address const &', 'arg0')])
@@ -3548,8 +3558,8 @@
def register_Ns3TypeId_methods(root_module, cls):
cls.add_binary_comparison_operator('!=')
+ cls.add_binary_comparison_operator('<')
cls.add_output_stream_operator()
- cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('==')
## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
cls.add_constructor([param('char const *', 'name')])
@@ -3759,10 +3769,8 @@
return
def register_Ns3Int64x64_t_methods(root_module, cls):
- cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('!=')
cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
- cls.add_output_stream_operator()
cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
@@ -3773,6 +3781,8 @@
cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
+ cls.add_output_stream_operator()
+ cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('==')
cls.add_binary_comparison_operator('>=')
## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
@@ -5404,10 +5414,8 @@
return
def register_Ns3Time_methods(root_module, cls):
- cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('!=')
cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
- cls.add_output_stream_operator()
cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
@@ -5415,6 +5423,8 @@
cls.add_binary_comparison_operator('<')
cls.add_binary_comparison_operator('>')
cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
+ cls.add_output_stream_operator()
+ cls.add_binary_comparison_operator('<=')
cls.add_binary_comparison_operator('==')
cls.add_binary_comparison_operator('>=')
## nstime.h (module 'core'): ns3::Time::Time() [constructor]
--- a/src/network/utils/data-rate.cc Sat Feb 28 15:16:47 2015 +0100
+++ b/src/network/utils/data-rate.cc Sat Feb 28 18:20:46 2015 +0100
@@ -232,6 +232,20 @@
return static_cast<double>(bytes)*8/m_bps;
}
+Time DataRate::CalculateBytesTxTime (uint32_t bytes) const
+{
+ NS_LOG_FUNCTION (this << bytes);
+ // \todo avoid to use double (if possible).
+ return Seconds (static_cast<double>(bytes)*8/m_bps);
+}
+
+Time DataRate::CalculateBitsTxTime (uint32_t bits) const
+{
+ NS_LOG_FUNCTION (this << bits);
+ // \todo avoid to use double (if possible).
+ return Seconds (static_cast<double>(bits)/m_bps);
+}
+
uint64_t DataRate::GetBitRate () const
{
NS_LOG_FUNCTION (this);
--- a/src/network/utils/data-rate.h Sat Feb 28 15:16:47 2015 +0100
+++ b/src/network/utils/data-rate.h Sat Feb 28 18:20:46 2015 +0100
@@ -27,6 +27,7 @@
#include "ns3/nstime.h"
#include "ns3/attribute.h"
#include "ns3/attribute-helper.h"
+#include "ns3/deprecated.h"
namespace ns3 {
@@ -42,9 +43,9 @@
* from strings, natural multiplication e.g.:
* \code
* DataRate x("56kbps");
- * double nBits = x*ns3::Seconds(19.2);
+ * double nBits = x*ns3::Seconds (19.2);
* uint32_t nBytes = 20;
- * double txtime = x.CalclulateTxTime(nBytes);
+ * Time txtime = x.CalculateBytesTxTime (nBytes);
* \endcode
* This class also supports the regular comparison operators \c <, \c >,
* \c <=, \c >=, \c ==, and \c !=
@@ -164,9 +165,27 @@
*
* Calculates the transmission time at this data rate
* \param bytes The number of bytes (not bits) for which to calculate
+ * \return The transmission time for the number of bytes specified
+ */
+ Time CalculateBytesTxTime (uint32_t bytes) const;
+
+ /**
+ * \brief Calculate transmission time
+ *
+ * Calculates the transmission time at this data rate
+ * \param bits The number of bits (not bytes) for which to calculate
+ * \return The transmission time for the number of bits specified
+ */
+ Time CalculateBitsTxTime (uint32_t bits) const;
+
+ /**
+ * \brief Calculate transmission time
+ *
+ * Calculates the transmission time at this data rate
+ * \param bytes The number of bytes (not bits) for which to calculate
* \return The transmission time in seconds for the number of bytes specified
*/
- double CalculateTxTime (uint32_t bytes) const;
+ double CalculateTxTime (uint32_t bytes) const NS_DEPRECATED;
/**
* Get the underlying bitrate
--- a/src/network/utils/simple-net-device.cc Sat Feb 28 15:16:47 2015 +0100
+++ b/src/network/utils/simple-net-device.cc Sat Feb 28 18:20:46 2015 +0100
@@ -451,7 +451,7 @@
Time txTime = Time (0);
if (m_bps > DataRate (0))
{
- txTime = Seconds (m_bps.CalculateTxTime (packet->GetSize ()));
+ txTime = m_bps.CalculateBytesTxTime (packet->GetSize ());
}
m_channel->Send (p, protocolNumber, to, from, this);
TransmitCompleteEvent = Simulator::Schedule (txTime, &SimpleNetDevice::TransmitComplete, this);
@@ -491,7 +491,7 @@
Time txTime = Time (0);
if (m_bps > DataRate (0))
{
- txTime = Seconds (m_bps.CalculateTxTime (packet->GetSize ()));
+ txTime = m_bps.CalculateBytesTxTime (packet->GetSize ());
}
TransmitCompleteEvent = Simulator::Schedule (txTime, &SimpleNetDevice::TransmitComplete, this);
}
--- a/src/point-to-point/model/point-to-point-net-device.cc Sat Feb 28 15:16:47 2015 +0100
+++ b/src/point-to-point/model/point-to-point-net-device.cc Sat Feb 28 18:20:46 2015 +0100
@@ -246,7 +246,7 @@
m_currentPkt = p;
m_phyTxBeginTrace (m_currentPkt);
- Time txTime = Seconds (m_bps.CalculateTxTime (p->GetSize ()));
+ Time txTime = m_bps.CalculateBytesTxTime (p->GetSize ());
Time txCompleteTime = txTime + m_tInterframeGap;
NS_LOG_LOGIC ("Schedule TransmitCompleteEvent in " << txCompleteTime.GetSeconds () << "sec");
--- a/src/spectrum/model/half-duplex-ideal-phy.cc Sat Feb 28 15:16:47 2015 +0100
+++ b/src/spectrum/model/half-duplex-ideal-phy.cc Sat Feb 28 18:20:46 2015 +0100
@@ -288,8 +288,8 @@
m_txPacket = p;
ChangeState (TX);
Ptr<HalfDuplexIdealPhySignalParameters> txParams = Create<HalfDuplexIdealPhySignalParameters> ();
- double txTimeSeconds = m_rate.CalculateTxTime (p->GetSize ());
- txParams->duration = Seconds (txTimeSeconds);
+ Time txTimeSeconds = m_rate.CalculateBytesTxTime (p->GetSize ());
+ txParams->duration = txTimeSeconds;
txParams->txPhy = GetObject<SpectrumPhy> ();
txParams->txAntenna = m_antenna;
txParams->psd = m_txPsd;
@@ -297,7 +297,7 @@
NS_LOG_LOGIC (this << " tx power: " << 10 * std::log10 (Integral (*(txParams->psd))) + 30 << " dBm");
m_channel->StartTx (txParams);
- Simulator::Schedule (Seconds (txTimeSeconds), &HalfDuplexIdealPhy::EndTx, this);
+ Simulator::Schedule (txTimeSeconds, &HalfDuplexIdealPhy::EndTx, this);
}
break;