diff --git a/examples/csma-broadcast.cc b/examples/csma-broadcast.cc index 09f6a597b..fdda66c49 100644 --- a/examples/csma-broadcast.cc +++ b/examples/csma-broadcast.cc @@ -74,10 +74,8 @@ main (int argc, char *argv[]) NetDeviceContainer n0 = csma.Install (c0); NetDeviceContainer n1 = csma.Install (c1); - InternetStackHelper internet; - internet.Install (c0); - internet.Install (c1); + internet.Install (c); NS_LOG_INFO ("Assign IP Addresses."); Ipv4AddressHelper ipv4; diff --git a/examples/csma-multicast.cc b/examples/csma-multicast.cc index 5465e6668..d0a4f4457 100644 --- a/examples/csma-multicast.cc +++ b/examples/csma-multicast.cc @@ -84,8 +84,7 @@ main (int argc, char *argv[]) NS_LOG_INFO ("Add IP Stack."); InternetStackHelper internet; - internet.Install (c0); - internet.Install (c1); + internet.Install (c); NS_LOG_INFO ("Assign IP Addresses."); Ipv4AddressHelper ipv4Addr; diff --git a/src/core/config.cc b/src/core/config.cc index cd47003e8..409d05557 100644 --- a/src/core/config.cc +++ b/src/core/config.cc @@ -190,7 +190,7 @@ Resolver::DoResolve (std::string path, Ptr root) { // This is a call to GetObject std::string tidString = item.substr (1, item.size () - 1); - NS_LOG_DEBUG ("GetObject="< object = root->GetObject (tid); if (object == 0) diff --git a/src/core/object.cc b/src/core/object.cc index 1586307c9..25f812829 100644 --- a/src/core/object.cc +++ b/src/core/object.cc @@ -114,6 +114,13 @@ Object::AggregateObject (Ptr o) NS_ASSERT (!o->m_disposed); NS_ASSERT (CheckLoose ()); NS_ASSERT (o->CheckLoose ()); + + if (DoGetObject (o->m_tid)) + { + NS_FATAL_ERROR ("Object::AggregateObject(): " + "Multiple aggregation of objects of type " << o->m_tid.GetName ()); + } + Object *other = PeekPointer (o); Object *next = m_next; m_next = other->m_next; diff --git a/src/core/traced-value.h b/src/core/traced-value.h index 6210d42b1..1e45aeaec 100644 --- a/src/core/traced-value.h +++ b/src/core/traced-value.h @@ -118,6 +118,12 @@ private: TracedCallback m_cb; }; +template +std::ostream& operator << (std::ostream& os, const TracedValue& rhs) +{ + return os< bool operator == (const TracedValue &lhs, const TracedValue &rhs) { diff --git a/src/internet-node/tcp-socket.cc b/src/internet-node/tcp-socket.cc index 40a511444..58495f5bf 100644 --- a/src/internet-node/tcp-socket.cc +++ b/src/internet-node/tcp-socket.cc @@ -31,6 +31,7 @@ #include "tcp-typedefs.h" #include "ns3/simulator.h" #include "ns3/packet.h" +#include "ns3/trace-source-accessor.h" #include @@ -40,6 +41,20 @@ using namespace std; namespace ns3 { +NS_OBJECT_ENSURE_REGISTERED (TcpSocket); + +TypeId +TcpSocket::GetTypeId () +{ + static TypeId tid = TypeId("ns3::TcpSocket") + .SetParent () + .AddTraceSource ("CongestionWindow", + "The TCP connection's congestion window", + MakeTraceSourceAccessor (&TcpSocket::m_cWnd)) + ; + return tid; +} + TcpSocket::TcpSocket () : m_skipRetxResched (false), m_dupAckCount (0), @@ -899,7 +914,7 @@ uint32_t TcpSocket::Window () { NS_LOG_FUNCTION; NS_LOG_LOGIC ("TcpSocket::Window() "< #include "ns3/callback.h" +#include "ns3/traced-value.h" #include "ns3/socket.h" #include "ns3/ptr.h" #include "ns3/ipv4-address.h" @@ -31,6 +32,7 @@ #include "sequence-number.h" #include "rtt-estimator.h" + namespace ns3 { class Ipv4EndPoint; @@ -42,6 +44,7 @@ class TcpHeader; class TcpSocket : public Socket { public: + static TypeId GetTypeId (void); /** * Create an unbound tcp socket. */ @@ -152,12 +155,12 @@ private: SequenceNumber m_firstPendingSequence; // Window management - uint32_t m_segmentSize; // SegmentSize - uint32_t m_rxWindowSize; - uint32_t m_advertisedWindowSize; // Window to advertise to peer - uint32_t m_cWnd; // Congestion window - uint32_t m_ssThresh; // Slow Start Threshold - uint32_t m_initialCWnd; // Initial (and reset) value for cWnd + uint32_t m_segmentSize; //SegmentSize + uint32_t m_rxWindowSize; + uint32_t m_advertisedWindowSize; //Window to advertise + TracedValue m_cWnd; //Congestion window + uint32_t m_ssThresh; //Slow Start Threshold + uint32_t m_initialCWnd; //Initial cWnd value // Round trip time estimation Ptr m_rtt; diff --git a/src/node/tcp.cc b/src/node/tcp.cc index b911082b1..e3fb9ced9 100644 --- a/src/node/tcp.cc +++ b/src/node/tcp.cc @@ -30,52 +30,52 @@ Tcp::GetTypeId (void) { static TypeId tid = TypeId ("ns3::Tcp") .SetParent () - .AddAttribute ("TcpDefaultSegmentSize", - "Default TCP maximum segment size in bytes (may be adjusted based on MTU discovery)", - Uinteger (536), - MakeUintegerAccessor (&Tcp::m_defaultSegSize), - MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultAdvertisedWindowSize", + .AddAttribute ("DefaultSegmentSize", + "Default TCP maximum segment size in bytes (may be adjusted based on MTU discovery)", + Uinteger (536), + MakeUintegerAccessor (&Tcp::m_defaultSegSize), + MakeUintegerChecker ()) + .AddAttribute ("DefaultAdvertisedWindowSize", "Default TCP advertised window size (bytes)", Uinteger (0xffff), MakeUintegerAccessor (&Tcp::m_defaultAdvWin), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultSlowStartThreshold", + .AddAttribute ("DefaultSlowStartThreshold", "Default TCP slow start threshold (bytes)", Uinteger (0xffff), MakeUintegerAccessor (&Tcp::m_defaultSsThresh), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultTxBufferSize", + .AddAttribute ("DefaultTxBufferSize", "Default TCP maximum transmit buffer size (bytes)", Uinteger (0xffffffffl), MakeUintegerAccessor (&Tcp::m_defaultTxBuffer), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultRxBufferSize", + .AddAttribute ("DefaultRxBufferSize", "Default TCP maximum receive buffer size (bytes)", Uinteger (0xffffffffl), MakeUintegerAccessor (&Tcp::m_defaultRxBuffer), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultInitialCongestionWindowSize", + .AddAttribute ("DefaultInitialCongestionWindowSize", "Default TCP initial congestion window size (segments)", Uinteger (1), MakeUintegerAccessor (&Tcp::m_defaultInitialCwnd), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultConnTimeout", + .AddAttribute ("DefaultConnTimeout", "Default TCP retransmission timeout when opening connection (seconds)", Uinteger (3), MakeUintegerAccessor (&Tcp::m_defaultConnTimeout), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultConnCount", + .AddAttribute ("DefaultConnCount", "Default number of connection attempts (SYN retransmissions) before returning failure", Uinteger (6), MakeUintegerAccessor (&Tcp::m_defaultConnCount), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultDelAckTimeout", + .AddAttribute ("DefaultDelAckTimeout", "Default timeout value for TCP delayed acks, in seconds", Double (0.2), MakeDoubleAccessor (&Tcp::m_defaultDelAckTimeout), MakeDoubleChecker ()) - .AddAttribute ("TcpDefaultDelAckCount", + .AddAttribute ("DefaultDelAckCount", "Default number of packets to wait before sending a TCP ack", Uinteger (2), MakeUintegerAccessor (&Tcp::m_defaultDelAckCount),