diff --git a/examples/csma-broadcast.cc b/examples/csma-broadcast.cc index 856c6cb20..45fb3bab3 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 cbc84ea25..a7d989b0f 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/common/pcap-writer.cc b/src/common/pcap-writer.cc index 991675441..a4a39bc3e 100644 --- a/src/common/pcap-writer.cc +++ b/src/common/pcap-writer.cc @@ -111,12 +111,20 @@ PcapWriter::WriteData (uint8_t const*buffer, uint32_t size) void PcapWriter::Write32 (uint32_t data) { - WriteData ((uint8_t*)&data, 4); + uint8_t buffer[4]; + buffer[0] = (data >> 0) & 0xff; + buffer[1] = (data >> 8) & 0xff; + buffer[2] = (data >> 16) & 0xff; + buffer[3] = (data >> 24) & 0xff; + WriteData (buffer, 4); } void PcapWriter::Write16 (uint16_t data) { - WriteData((uint8_t*)&data, 2); + uint8_t buffer[2]; + buffer[0] = (data >> 0) & 0xff; + buffer[1] = (data >> 8) & 0xff; + WriteData (buffer, 2); } } // namespace ns3 diff --git a/src/core/command-line.cc b/src/core/command-line.cc index 50da1f1a7..63fc18657 100644 --- a/src/core/command-line.cc +++ b/src/core/command-line.cc @@ -42,7 +42,7 @@ CommandLine::Item::~Item () {} void -CommandLine::Parse (int &iargc, char *argv[]) const +CommandLine::Parse (int iargc, char *argv[]) const { int argc = iargc; for (argc--, argv++; argc > 0; argc--, argv++) diff --git a/src/core/command-line.h b/src/core/command-line.h index 0d6039d7f..2a5948361 100644 --- a/src/core/command-line.h +++ b/src/core/command-line.h @@ -64,7 +64,7 @@ public: * Obviously, this method will parse the input command-line arguments and * will attempt to handle them all. */ - void Parse (int &argc, char *argv[]) const; + void Parse (int argc, char *argv[]) const; private: class Item { diff --git a/src/core/config.cc b/src/core/config.cc index 89cf1a9a0..23233bf79 100644 --- a/src/core/config.cc +++ b/src/core/config.cc @@ -191,7 +191,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 4223d729b..ede4e43ba 100644 --- a/src/core/object.cc +++ b/src/core/object.cc @@ -140,6 +140,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 8a2319a4a..0015e39aa 100644 --- a/src/core/traced-value.h +++ b/src/core/traced-value.h @@ -137,6 +137,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/devices/wifi/dca-txop.cc b/src/devices/wifi/dca-txop.cc index d3d2a6b38..836d3dd92 100644 --- a/src/devices/wifi/dca-txop.cc +++ b/src/devices/wifi/dca-txop.cc @@ -383,6 +383,7 @@ DcaTxop::NotifyAccessGranted (void) m_currentPacket = 0; m_dcf->ResetCw (); m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ())); + StartAccessIfNeeded (); MY_DEBUG ("tx broadcast"); } else diff --git a/src/internet-node/arp-l3-protocol.cc b/src/internet-node/arp-l3-protocol.cc index 6dc017623..42509bc2a 100644 --- a/src/internet-node/arp-l3-protocol.cc +++ b/src/internet-node/arp-l3-protocol.cc @@ -108,6 +108,11 @@ ArpL3Protocol::Receive(Ptr device, Ptr packet, uint16_t proto arp.GetDestinationIpv4Address () << "; we have address " << cache->GetInterface ()->GetAddress ()); + /** + * Note: we do not update the ARP cache when we receive an ARP request + * from an unknown node. See bug #107 + */ + if (arp.IsRequest () && arp.GetDestinationIpv4Address () == cache->GetInterface ()->GetAddress ()) { diff --git a/src/internet-node/tcp-socket.cc b/src/internet-node/tcp-socket.cc index ed4a00e8f..91bab4d04 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), @@ -680,6 +695,7 @@ bool TcpSocket::ProcessPacketAction (Actions_t a, Ptr p, // TCP SYN consumes one byte m_nextRxSequence = tcpHeader.GetSequenceNumber() + SequenceNumber(1); m_nextTxSequence = tcpHeader.GetAckNumber (); + m_firstPendingSequence = m_nextTxSequence; //bug 166 NS_LOG_DEBUG ("TcpSocket " << this << " ACK_TX_1" << " nextRxSeq " << m_nextRxSequence); SendEmptyPacket (TcpHeader::ACK); @@ -899,7 +915,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/internet-node/udp-socket.cc b/src/internet-node/udp-socket.cc index 383870c34..33ceac8fc 100644 --- a/src/internet-node/udp-socket.cc +++ b/src/internet-node/udp-socket.cc @@ -300,14 +300,15 @@ UdpSocket::DoSendTo (Ptr p, Ipv4Address dest, uint16_t port) NotifyDataSent (p->GetSize ()); } NS_LOG_LOGIC ("Limited broadcast end."); + return p->GetSize(); } else if (ipv4->GetIfIndexForDestination(dest, localIfIndex)) { NS_LOG_LOGIC ("Route exists"); - m_udp->Send (p, ipv4->GetAddress (localIfIndex), dest, + m_udp->Send (p->Copy (), ipv4->GetAddress (localIfIndex), dest, m_endPoint->GetLocalPort (), port); NotifyDataSent (p->GetSize ()); - return 0; + return p->GetSize();; } else { @@ -478,7 +479,7 @@ UdpSocketTest::RunTests (void) m_receivedPacket = Create (); m_receivedPacket2 = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234), - Create (123)), 0); + Create (123)), 123); Simulator::Run (); NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // second interface should receive it @@ -489,7 +490,7 @@ UdpSocketTest::RunTests (void) m_receivedPacket = Create (); m_receivedPacket2 = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), - Create (123)), 0); + Create (123)), 123); Simulator::Run (); NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); // second socket should not receive it (it is bound specifically to the second interface's address @@ -509,7 +510,7 @@ UdpSocketTest::RunTests (void) m_receivedPacket = Create (); m_receivedPacket2 = Create (); NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), - Create (123)), 0); + Create (123)), 123); Simulator::Run (); NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 123); diff --git a/src/node/address.cc b/src/node/address.cc index 2268ae4a9..fe1efd131 100644 --- a/src/node/address.cc +++ b/src/node/address.cc @@ -111,9 +111,10 @@ ATTRIBUTE_HELPER_CPP (Address); bool operator == (const Address &a, const Address &b) { - NS_ASSERT (a.m_type == b.m_type || - a.m_type == 0 || - b.m_type == 0); + if (a.m_type != b.m_type) + { + return false; + } NS_ASSERT (a.GetLength() == b.GetLength()); return memcmp (a.m_data, b.m_data, a.m_len) == 0; } diff --git a/src/node/tcp.cc b/src/node/tcp.cc index 9758cd7eb..77e02362f 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)", - UintegerValue (536), - MakeUintegerAccessor (&Tcp::m_defaultSegSize), - MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultAdvertisedWindowSize", + .AddAttribute ("DefaultSegmentSize", + "Default TCP maximum segment size in bytes (may be adjusted based on MTU discovery)", + UintegerValue (536), + MakeUintegerAccessor (&Tcp::m_defaultSegSize), + MakeUintegerChecker ()) + .AddAttribute ("DefaultAdvertisedWindowSize", "Default TCP advertised window size (bytes)", UintegerValue (0xffff), MakeUintegerAccessor (&Tcp::m_defaultAdvWin), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultSlowStartThreshold", + .AddAttribute ("DefaultSlowStartThreshold", "Default TCP slow start threshold (bytes)", UintegerValue (0xffff), MakeUintegerAccessor (&Tcp::m_defaultSsThresh), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultTxBufferSize", + .AddAttribute ("DefaultTxBufferSize", "Default TCP maximum transmit buffer size (bytes)", UintegerValue (0xffffffffl), MakeUintegerAccessor (&Tcp::m_defaultTxBuffer), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultRxBufferSize", + .AddAttribute ("DefaultRxBufferSize", "Default TCP maximum receive buffer size (bytes)", UintegerValue (0xffffffffl), MakeUintegerAccessor (&Tcp::m_defaultRxBuffer), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultInitialCongestionWindowSize", + .AddAttribute ("DefaultInitialCongestionWindowSize", "Default TCP initial congestion window size (segments)", UintegerValue (1), MakeUintegerAccessor (&Tcp::m_defaultInitialCwnd), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultConnTimeout", + .AddAttribute ("DefaultConnTimeout", "Default TCP retransmission timeout when opening connection (seconds)", UintegerValue (3), MakeUintegerAccessor (&Tcp::m_defaultConnTimeout), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultConnCount", + .AddAttribute ("DefaultConnCount", "Default number of connection attempts (SYN retransmissions) before returning failure", UintegerValue (6), MakeUintegerAccessor (&Tcp::m_defaultConnCount), MakeUintegerChecker ()) - .AddAttribute ("TcpDefaultDelAckTimeout", + .AddAttribute ("DefaultDelAckTimeout", "Default timeout value for TCP delayed acks, in seconds", DoubleValue (0.2), MakeDoubleAccessor (&Tcp::m_defaultDelAckTimeout), MakeDoubleChecker ()) - .AddAttribute ("TcpDefaultDelAckCount", + .AddAttribute ("DefaultDelAckCount", "Default number of packets to wait before sending a TCP ack", UintegerValue (2), MakeUintegerAccessor (&Tcp::m_defaultDelAckCount), diff --git a/src/routing/olsr/olsr-agent-impl.cc b/src/routing/olsr/olsr-agent-impl.cc index c8b589119..5c27a7d6b 100644 --- a/src/routing/olsr/olsr-agent-impl.cc +++ b/src/routing/olsr/olsr-agent-impl.cc @@ -572,12 +572,15 @@ AgentImpl::MprComputation() // (not in RFC but I think is needed: remove the 2-hop // neighbors reachable by the MPR from N2) for (TwoHopNeighborSet::iterator twoHopNeigh = N2.begin (); - twoHopNeigh != N2.end (); twoHopNeigh++) + twoHopNeigh != N2.end (); ) { if (twoHopNeigh->neighborMainAddr == neighbor->neighborMainAddr) { twoHopNeigh = N2.erase (twoHopNeigh); - twoHopNeigh--; + } + else + { + twoHopNeigh++; } } } @@ -617,12 +620,15 @@ AgentImpl::MprComputation() } // Remove the nodes from N2 which are now covered by a node in the MPR set. for (TwoHopNeighborSet::iterator twoHopNeigh = N2.begin (); - twoHopNeigh != N2.end (); twoHopNeigh++) + twoHopNeigh != N2.end (); ) { if (coveredTwoHopNeighbors.find (twoHopNeigh->twoHopNeighborAddr) != coveredTwoHopNeighbors.end ()) { twoHopNeigh = N2.erase (twoHopNeigh); - twoHopNeigh--; + } + else + { + twoHopNeigh++; } } @@ -699,12 +705,15 @@ AgentImpl::MprComputation() { mprSet.insert (max->neighborMainAddr); for (TwoHopNeighborSet::iterator twoHopNeigh = N2.begin (); - twoHopNeigh != N2.end (); twoHopNeigh++) + twoHopNeigh != N2.end (); ) { if (twoHopNeigh->neighborMainAddr == max->neighborMainAddr) { twoHopNeigh = N2.erase (twoHopNeigh); - twoHopNeigh--; + } + else + { + twoHopNeigh++; } } } diff --git a/src/routing/olsr/olsr-state.cc b/src/routing/olsr/olsr-state.cc index 545407a4b..ad4cb8723 100644 --- a/src/routing/olsr/olsr-state.cc +++ b/src/routing/olsr/olsr-state.cc @@ -64,12 +64,15 @@ void OlsrState::EraseMprSelectorTuples (const Ipv4Address &mainAddr) { for (MprSelectorSet::iterator it = m_mprSelectorSet.begin (); - it != m_mprSelectorSet.end (); it++) + it != m_mprSelectorSet.end ();) { if (it->mainAddr == mainAddr) { it = m_mprSelectorSet.erase (it); - it--; + } + else + { + it++; } } } @@ -203,15 +206,18 @@ OlsrState::EraseTwoHopNeighborTuples (const Ipv4Address &neighborMainAddr, const Ipv4Address &twoHopNeighborAddr) { for (TwoHopNeighborSet::iterator it = m_twoHopNeighborSet.begin (); - it != m_twoHopNeighborSet.end (); it++) + it != m_twoHopNeighborSet.end ();) { if (it->neighborMainAddr == neighborMainAddr && it->twoHopNeighborAddr == twoHopNeighborAddr) { it = m_twoHopNeighborSet.erase (it); - it--; // FIXME: is this correct in the case 'it' pointed to the first element? m_modified = true; } + else + { + it++; + } } } @@ -219,13 +225,17 @@ void OlsrState::EraseTwoHopNeighborTuples (const Ipv4Address &neighborMainAddr) { for (TwoHopNeighborSet::iterator it = m_twoHopNeighborSet.begin (); - it != m_twoHopNeighborSet.end (); it++) + it != m_twoHopNeighborSet.end ();) { - if (it->neighborMainAddr == neighborMainAddr) { - it = m_twoHopNeighborSet.erase (it); - it--; - m_modified = true; - } + if (it->neighborMainAddr == neighborMainAddr) + { + it = m_twoHopNeighborSet.erase (it); + m_modified = true; + } + else + { + it++; + } } } @@ -385,14 +395,17 @@ void OlsrState::EraseOlderTopologyTuples (const Ipv4Address &lastAddr, uint16_t ansn) { for (TopologySet::iterator it = m_topologySet.begin(); - it != m_topologySet.end(); it++) + it != m_topologySet.end();) { if (it->lastAddr == lastAddr && it->sequenceNumber < ansn) { it = m_topologySet.erase (it); - it--; m_modified = true; } + else + { + it++; + } } } diff --git a/src/simulator/scheduler-heap.cc b/src/simulator/heap-scheduler.cc similarity index 84% rename from src/simulator/scheduler-heap.cc rename to src/simulator/heap-scheduler.cc index d26f8a959..41f174d39 100644 --- a/src/simulator/scheduler-heap.cc +++ b/src/simulator/heap-scheduler.cc @@ -31,7 +31,7 @@ * to move one if statement out of the loop. */ -#include "scheduler-heap.h" +#include "heap-scheduler.h" #include "event-impl.h" #include "ns3/assert.h" @@ -52,7 +52,7 @@ std::cout << "HEAP TRACE " << x << std::endl; namespace ns3 { -SchedulerHeap::SchedulerHeap () +HeapScheduler::HeapScheduler () { // we purposedly waste an item at the start of // the array to make sure the indexes in the @@ -61,57 +61,57 @@ SchedulerHeap::SchedulerHeap () m_heap.push_back (std::make_pair (static_cast(0), emptyKey)); } -SchedulerHeap::~SchedulerHeap () +HeapScheduler::~HeapScheduler () {} uint32_t -SchedulerHeap::Parent (uint32_t id) const +HeapScheduler::Parent (uint32_t id) const { return id / 2; } uint32_t -SchedulerHeap::Sibling (uint32_t id) const +HeapScheduler::Sibling (uint32_t id) const { return id + 1; } uint32_t -SchedulerHeap::LeftChild (uint32_t id) const +HeapScheduler::LeftChild (uint32_t id) const { return id * 2; } uint32_t -SchedulerHeap::RightChild (uint32_t id) const +HeapScheduler::RightChild (uint32_t id) const { return id * 2 + 1; } uint32_t -SchedulerHeap::Root (void) const +HeapScheduler::Root (void) const { return 1; } bool -SchedulerHeap::IsRoot (uint32_t id) const +HeapScheduler::IsRoot (uint32_t id) const { return (id == Root ())?true:false; } uint32_t -SchedulerHeap::Last (void) const +HeapScheduler::Last (void) const { return m_heap.size () - 1; } bool -SchedulerHeap::IsBottom (uint32_t id) const +HeapScheduler::IsBottom (uint32_t id) const { return (id >= m_heap.size ())?true:false; } void -SchedulerHeap::Exch (uint32_t a, uint32_t b) +HeapScheduler::Exch (uint32_t a, uint32_t b) { NS_ASSERT (b < m_heap.size () && a < m_heap.size ()); TRACE ("Exch " << a << ", " << b); @@ -121,7 +121,7 @@ SchedulerHeap::Exch (uint32_t a, uint32_t b) } bool -SchedulerHeap::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const +HeapScheduler::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const { if (a->m_ts < b->m_ts) { @@ -142,25 +142,25 @@ SchedulerHeap::IsLowerStrictly (Scheduler::EventKey const*a, Scheduler::EventKey } bool -SchedulerHeap::IsLessStrictly (uint32_t a, uint32_t b) const +HeapScheduler::IsLessStrictly (uint32_t a, uint32_t b) const { return IsLowerStrictly (&m_heap[a].second, &m_heap[b].second); } uint32_t -SchedulerHeap::Smallest (uint32_t a, uint32_t b) const +HeapScheduler::Smallest (uint32_t a, uint32_t b) const { return IsLessStrictly (a,b)?a:b; } bool -SchedulerHeap::IsEmpty (void) const +HeapScheduler::IsEmpty (void) const { return (m_heap.size () == 1)?true:false; } void -SchedulerHeap::BottomUp (void) +HeapScheduler::BottomUp (void) { uint32_t index = Last (); while (!IsRoot (index) && @@ -172,7 +172,7 @@ SchedulerHeap::BottomUp (void) } void -SchedulerHeap::TopDown (uint32_t start) +HeapScheduler::TopDown (uint32_t start) { uint32_t index = start; uint32_t right = RightChild (index); @@ -207,7 +207,7 @@ SchedulerHeap::TopDown (uint32_t start) void -SchedulerHeap::Insert (const EventId &id) +HeapScheduler::Insert (const EventId &id) { // acquire single ref EventImpl *event = id.PeekEventImpl (); @@ -220,13 +220,13 @@ SchedulerHeap::Insert (const EventId &id) } EventId -SchedulerHeap::PeekNext (void) const +HeapScheduler::PeekNext (void) const { std::pair next = m_heap[Root ()]; return EventId (next.first, next.second.m_ts, next.second.m_uid); } EventId -SchedulerHeap::RemoveNext (void) +HeapScheduler::RemoveNext (void) { std::pair next = m_heap[Root ()]; Exch (Root (), Last ()); @@ -237,7 +237,7 @@ SchedulerHeap::RemoveNext (void) bool -SchedulerHeap::Remove (const EventId &id) +HeapScheduler::Remove (const EventId &id) { uint32_t uid = id.GetUid (); for (uint32_t i = 1; i < m_heap.size (); i++) diff --git a/src/simulator/scheduler-heap.h b/src/simulator/heap-scheduler.h similarity index 95% rename from src/simulator/scheduler-heap.h rename to src/simulator/heap-scheduler.h index 3b2f74f32..20e8165e7 100644 --- a/src/simulator/scheduler-heap.h +++ b/src/simulator/heap-scheduler.h @@ -29,10 +29,10 @@ namespace ns3 { class EventHolder; -class SchedulerHeap : public Scheduler { +class HeapScheduler : public Scheduler { public: - SchedulerHeap (); - virtual ~SchedulerHeap (); + HeapScheduler (); + virtual ~HeapScheduler (); virtual void Insert (const EventId &id); virtual bool IsEmpty (void) const; diff --git a/src/simulator/scheduler-list.cc b/src/simulator/list-scheduler.cc similarity index 87% rename from src/simulator/scheduler-list.cc rename to src/simulator/list-scheduler.cc index 3514b2519..78459434a 100644 --- a/src/simulator/scheduler-list.cc +++ b/src/simulator/list-scheduler.cc @@ -18,7 +18,7 @@ * Author: Mathieu Lacage */ -#include "scheduler-list.h" +#include "list-scheduler.h" #include "event-impl.h" #include #include @@ -27,13 +27,13 @@ namespace ns3 { -SchedulerList::SchedulerList () +ListScheduler::ListScheduler () {} -SchedulerList::~SchedulerList () +ListScheduler::~ListScheduler () {} bool -SchedulerList::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const +ListScheduler::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const { if (a->m_ts < b->m_ts) { @@ -51,7 +51,7 @@ SchedulerList::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b } void -SchedulerList::Insert (const EventId &id) +ListScheduler::Insert (const EventId &id) { Scheduler::EventKey key; // acquire refcount on EventImpl @@ -70,19 +70,19 @@ SchedulerList::Insert (const EventId &id) m_events.push_back (std::make_pair (event, key)); } bool -SchedulerList::IsEmpty (void) const +ListScheduler::IsEmpty (void) const { return m_events.empty (); } EventId -SchedulerList::PeekNext (void) const +ListScheduler::PeekNext (void) const { std::pair next = m_events.front (); return EventId (next.first, next.second.m_ts, next.second.m_uid); } EventId -SchedulerList::RemoveNext (void) +ListScheduler::RemoveNext (void) { std::pair next = m_events.front (); m_events.pop_front (); @@ -90,7 +90,7 @@ SchedulerList::RemoveNext (void) } bool -SchedulerList::Remove (const EventId &id) +ListScheduler::Remove (const EventId &id) { for (EventsI i = m_events.begin (); i != m_events.end (); i++) { diff --git a/src/simulator/scheduler-list.h b/src/simulator/list-scheduler.h similarity index 94% rename from src/simulator/scheduler-list.h rename to src/simulator/list-scheduler.h index 86dfc991f..c4e70398b 100644 --- a/src/simulator/scheduler-list.h +++ b/src/simulator/list-scheduler.h @@ -31,10 +31,10 @@ namespace ns3 { class EventImpl; -class SchedulerList : public Scheduler { +class ListScheduler : public Scheduler { public: - SchedulerList (); - virtual ~SchedulerList (); + ListScheduler (); + virtual ~ListScheduler (); virtual void Insert (const EventId &id); virtual bool IsEmpty (void) const; diff --git a/src/simulator/scheduler-map.cc b/src/simulator/map-scheduler.cc similarity index 88% rename from src/simulator/scheduler-map.cc rename to src/simulator/map-scheduler.cc index 0c5024c9b..9726c4b66 100644 --- a/src/simulator/scheduler-map.cc +++ b/src/simulator/map-scheduler.cc @@ -19,7 +19,7 @@ * The idea to use a std c++ map came from GTNetS */ -#include "scheduler-map.h" +#include "map-scheduler.h" #include "event-impl.h" #include "ns3/assert.h" #include @@ -37,9 +37,9 @@ std::cout << "MAP TRACE " << x << std::endl; namespace ns3 { -SchedulerMap::SchedulerMap () +MapScheduler::MapScheduler () {} -SchedulerMap::~SchedulerMap () +MapScheduler::~MapScheduler () {} /* Note the invariants which this function must provide: @@ -48,7 +48,7 @@ SchedulerMap::~SchedulerMap () * - transitivity: f(x,y) and f(y,z) => f(x,z) */ bool -SchedulerMap::EventKeyCompare::operator () (struct EventKey const&a, struct EventKey const&b) +MapScheduler::EventKeyCompare::operator () (struct EventKey const&a, struct EventKey const&b) { if (a.m_ts < b.m_ts) { @@ -71,7 +71,7 @@ SchedulerMap::EventKeyCompare::operator () (struct EventKey const&a, struct Even void -SchedulerMap::Insert (const EventId &id) +MapScheduler::Insert (const EventId &id) { // acquire a single ref EventImpl *event = id.PeekEventImpl (); @@ -85,13 +85,13 @@ SchedulerMap::Insert (const EventId &id) } bool -SchedulerMap::IsEmpty (void) const +MapScheduler::IsEmpty (void) const { return m_list.empty (); } EventId -SchedulerMap::PeekNext (void) const +MapScheduler::PeekNext (void) const { EventMapCI i = m_list.begin (); NS_ASSERT (i != m_list.end ()); @@ -99,7 +99,7 @@ SchedulerMap::PeekNext (void) const return EventId (i->second, i->first.m_ts, i->first.m_uid); } EventId -SchedulerMap::RemoveNext (void) +MapScheduler::RemoveNext (void) { EventMapI i = m_list.begin (); std::pair next = *i; @@ -108,7 +108,7 @@ SchedulerMap::RemoveNext (void) } bool -SchedulerMap::Remove (const EventId &id) +MapScheduler::Remove (const EventId &id) { Scheduler::EventKey key; key.m_ts = id.GetTs (); diff --git a/src/simulator/scheduler-map.h b/src/simulator/map-scheduler.h similarity index 84% rename from src/simulator/scheduler-map.h rename to src/simulator/map-scheduler.h index 56e3587d0..cc49ecd34 100644 --- a/src/simulator/scheduler-map.h +++ b/src/simulator/map-scheduler.h @@ -30,10 +30,10 @@ namespace ns3 { class EventImpl; -class SchedulerMap : public Scheduler { +class MapScheduler : public Scheduler { public: - SchedulerMap (); - virtual ~SchedulerMap (); + MapScheduler (); + virtual ~MapScheduler (); virtual void Insert (const EventId &id); virtual bool IsEmpty (void) const; @@ -47,9 +47,9 @@ private: bool operator () (struct EventKey const&a, struct EventKey const&b); }; - typedef std::map EventMap; - typedef std::map::iterator EventMapI; - typedef std::map::const_iterator EventMapCI; + typedef std::map EventMap; + typedef std::map::iterator EventMapI; + typedef std::map::const_iterator EventMapCI; EventMap m_list; diff --git a/src/simulator/nstime.h b/src/simulator/nstime.h index a163599b7..8fef4231c 100644 --- a/src/simulator/nstime.h +++ b/src/simulator/nstime.h @@ -274,6 +274,7 @@ TimeUnit operator * (TimeUnit const &lhs, TimeUnit const &rhs) template TimeUnit operator / (TimeUnit const &lhs, TimeUnit const &rhs) { + NS_ASSERT (rhs.GetHighPrecision ().GetDouble () != 0); HighPrecision retval = lhs.GetHighPrecision (); retval.Div (rhs.GetHighPrecision ()); return TimeUnit (retval); diff --git a/src/simulator/simulator.cc b/src/simulator/simulator.cc index 750bb52b6..66ee627d0 100644 --- a/src/simulator/simulator.cc +++ b/src/simulator/simulator.cc @@ -399,9 +399,7 @@ SimulatorPrivate::GetMaximumSimulationTime (void) const }; // namespace ns3 -#include "scheduler-list.h" -#include "scheduler-heap.h" -#include "scheduler-map.h" +#include "map-scheduler.h" namespace ns3 { @@ -424,7 +422,7 @@ Simulator::GetPriv (void) if (m_priv == 0) { m_priv = CreateObject (); - Ptr scheduler = CreateObject (); + Ptr scheduler = CreateObject (); m_priv->SetScheduler (scheduler); } TRACE_S ("priv " << m_priv); @@ -570,6 +568,8 @@ Simulator::GetMaximumSimulationTime (void) #include "ns3/test.h" #include "ns3/ptr.h" +#include "list-scheduler.h" +#include "heap-scheduler.h" namespace ns3 { @@ -940,19 +940,19 @@ SimulatorTests::RunTests (void) bool result = true; Simulator::Destroy (); - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); if (!RunOneTest ()) { result = false; } Simulator::Destroy (); - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); if (!RunOneTest ()) { result = false; } Simulator::Destroy (); - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); if (!RunOneTest ()) { result = false; diff --git a/src/simulator/wscript b/src/simulator/wscript index 5d6963394..d41c5a356 100644 --- a/src/simulator/wscript +++ b/src/simulator/wscript @@ -53,9 +53,9 @@ def build(bld): 'time.cc', 'event-id.cc', 'scheduler.cc', - 'scheduler-list.cc', - 'scheduler-heap.cc', - 'scheduler-map.cc', + 'list-scheduler.cc', + 'map-scheduler.cc', + 'heap-scheduler.cc', 'event-impl.cc', 'simulator.cc', 'timer.cc', @@ -71,9 +71,9 @@ def build(bld): 'event-impl.h', 'simulator.h', 'scheduler.h', - 'scheduler-list.h', - 'scheduler-map.h', - 'scheduler-heap.h', + 'list-scheduler.h', + 'map-scheduler.h', + 'heap-scheduler.h', 'simulation-singleton.h', 'timer.h', 'timer-impl.h', diff --git a/utils/bench-simulator.cc b/utils/bench-simulator.cc index 2bfdd686f..6b9eb2c2b 100644 --- a/utils/bench-simulator.cc +++ b/utils/bench-simulator.cc @@ -18,11 +18,8 @@ * Author: Mathieu Lacage */ -#include "ns3/simulator.h" -#include "ns3/scheduler-list.h" -#include "ns3/scheduler-map.h" -#include "ns3/scheduler-heap.h" -#include "ns3/system-wall-clock-ms.h" +#include "ns3/simulator-module.h" +#include "ns3/core-module.h" #include #include #include @@ -161,15 +158,15 @@ int main (int argc, char *argv[]) { if (strcmp ("--list", argv[0]) == 0) { - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); } else if (strcmp ("--heap", argv[0]) == 0) { - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); } else if (strcmp ("--map", argv[0]) == 0) { - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); } else if (strcmp ("--debug", argv[0]) == 0) { diff --git a/utils/replay-simulation.cc b/utils/replay-simulation.cc index 00fb6d1d3..1ce94dab9 100644 --- a/utils/replay-simulation.cc +++ b/utils/replay-simulation.cc @@ -18,12 +18,8 @@ * Author: Mathieu Lacage */ -#include "ns3/simulator.h" -#include "ns3/scheduler-list.h" -#include "ns3/scheduler-map.h" -#include "ns3/scheduler-heap.h" -#include "ns3/nstime.h" -#include "ns3/system-wall-clock-ms.h" +#include "ns3/simulator-module.h" +#include "ns3/core-module.h" #include #include #include @@ -317,15 +313,15 @@ int main (int argc, char *argv[]) { if (is_map) { - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); } else if (is_list) { - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); } else if (is_heap) { - Simulator::SetScheduler (CreateObject ()); + Simulator::SetScheduler (CreateObject ()); } log.Run (); Simulator::Destroy (); diff --git a/wscript b/wscript index 02682e459..98a0c2198 100644 --- a/wscript +++ b/wscript @@ -340,9 +340,6 @@ def shutdown(): run_program(Params.g_options.run, get_command_template()) raise SystemExit(0) - if Params.g_options.command_template: - Params.fatal("Option --command-template requires the option --run to be given") - def _run_waf_check(): ## generate the trace sources list docs env = Params.g_build.env_of_name('default')