--- a/examples/csma-broadcast.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/examples/csma-broadcast.cc Wed Mar 26 21:28:27 2008 -0700
@@ -35,6 +35,7 @@
#include "ns3/core-module.h"
#include "ns3/helper-module.h"
#include "ns3/internet-node-module.h"
+#include "ns3/simulator-module.h"
using namespace ns3;
--- a/examples/mixed-global-routing.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/examples/mixed-global-routing.cc Wed Mar 26 21:28:27 2008 -0700
@@ -36,36 +36,12 @@
#include <string>
#include <cassert>
-#include "ns3/log.h"
-
-#include "ns3/command-line.h"
-#include "ns3/ptr.h"
-#include "ns3/random-variable.h"
-#include "ns3/config.h"
-
-#include "ns3/simulator.h"
-#include "ns3/nstime.h"
-#include "ns3/data-rate.h"
-
+#include "ns3/core-module.h"
+#include "ns3/helper-module.h"
+#include "ns3/simulator-module.h"
#include "ns3/ascii-trace.h"
#include "ns3/pcap-trace.h"
-#include "ns3/internet-node.h"
-#include "ns3/point-to-point-channel.h"
-#include "ns3/point-to-point-net-device.h"
-#include "ns3/csma-channel.h"
-#include "ns3/csma-net-device.h"
-#include "ns3/csma-topology.h"
-#include "ns3/csma-ipv4-topology.h"
-#include "ns3/mac48-address.h"
-#include "ns3/ipv4-address.h"
-#include "ns3/ipv4.h"
-#include "ns3/socket.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/ipv4-route.h"
-#include "ns3/point-to-point-topology.h"
-#include "ns3/onoff-application.h"
#include "ns3/global-route-manager.h"
-#include "ns3/uinteger.h"
using namespace ns3;
@@ -114,68 +90,49 @@
cmd.Parse (argc, argv);
NS_LOG_INFO ("Create nodes.");
- Ptr<Node> n0 = CreateObject<InternetNode> ();
- Ptr<Node> n1 = CreateObject<InternetNode> ();
- Ptr<Node> n2 = CreateObject<InternetNode> ();
- Ptr<Node> n3 = CreateObject<InternetNode> ();
- Ptr<Node> n4 = CreateObject<InternetNode> ();
- Ptr<Node> n5 = CreateObject<InternetNode> ();
- Ptr<Node> n6 = CreateObject<InternetNode> ();
+ NodeContainer c;
+ c.Create (7);
+ NodeContainer n0n2 = NodeContainer (c.Get (0), c.Get (2));
+ NodeContainer n1n2 = NodeContainer (c.Get (1), c.Get (2));
+ NodeContainer n5n6 = NodeContainer (c.Get (5), c.Get (6));
+ NodeContainer n2345 = NodeContainer (c.Get (2), c.Get (3), c.Get (4), c.Get (5));
+
+ InternetStackHelper internet;
+ internet.Build (c);
// We create the channels first without any IP addressing information
NS_LOG_INFO ("Create channels.");
- Ptr<PointToPointChannel> channel0 =
- PointToPointTopology::AddPointToPointLink (
- n0, n2, DataRate (5000000), MilliSeconds (2));
+ PointToPointHelper p2p;
+ p2p.SetChannelParameter ("BitRate", DataRate (5000000));
+ p2p.SetChannelParameter ("Delay", MilliSeconds (2));
+ NetDeviceContainer d0d2 = p2p.Build (n0n2);
- Ptr<PointToPointChannel> channel1 =
- PointToPointTopology::AddPointToPointLink (
- n1, n2, DataRate (5000000), MilliSeconds (2));
-
- Ptr<PointToPointChannel> channel2 =
- PointToPointTopology::AddPointToPointLink (
- n5, n6, DataRate (1500000), MilliSeconds (10));
+ NetDeviceContainer d1d2 = p2p.Build (n1n2);
+
+ p2p.SetChannelParameter ("BitRate", DataRate (1500000));
+ p2p.SetChannelParameter ("Delay", MilliSeconds (10));
+ NetDeviceContainer d5d6 = p2p.Build (n5n6);
// We create the channels first without any IP addressing information
- Ptr<CsmaChannel> channelc0 =
- CsmaTopology::CreateCsmaChannel(
- DataRate(5000000), MilliSeconds(2));
-
- NS_LOG_INFO ("Build Topology.");
- uint32_t n2ifIndex = CsmaIpv4Topology::AddIpv4CsmaNetDevice (n2, channelc0,
- Mac48Address("10:54:23:54:23:50"));
- uint32_t n3ifIndex = CsmaIpv4Topology::AddIpv4CsmaNetDevice (n3, channelc0,
- Mac48Address("10:54:23:54:23:51"));
- uint32_t n4ifIndex = CsmaIpv4Topology::AddIpv4CsmaNetDevice (n4, channelc0,
- Mac48Address("10:54:23:54:23:52"));
- uint32_t n5ifIndex = CsmaIpv4Topology::AddIpv4CsmaNetDevice (n5, channelc0,
- Mac48Address("10:54:23:54:23:53"));
-
+ CsmaHelper csma;
+ csma.SetChannelParameter ("BitRate", DataRate (5000000));
+ csma.SetChannelParameter ("Delay", MilliSeconds (2));
+ NetDeviceContainer d2345 = csma.Build (n2345);
+
// Later, we add IP addresses.
NS_LOG_INFO ("Assign IP Addresses.");
- PointToPointTopology::AddIpv4Addresses (
- channel0, n0, Ipv4Address ("10.1.1.1"),
- n2, Ipv4Address ("10.1.1.2"));
-
- PointToPointTopology::AddIpv4Addresses (
- channel1, n1, Ipv4Address ("10.1.2.1"),
- n2, Ipv4Address ("10.1.2.2"));
-
- PointToPointTopology::AddIpv4Addresses (
- channel2, n5, Ipv4Address ("10.1.3.1"),
- n6, Ipv4Address ("10.1.3.2"));
+ Ipv4AddressHelper ipv4;
+ ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+ ipv4.Allocate (d0d2);
- CsmaIpv4Topology::AddIpv4Address (
- n2, n2ifIndex, Ipv4Address("10.250.1.1"), Ipv4Mask("255.255.255.0"));
+ ipv4.SetBase ("10.1.2.0", "255.255.255.0");
+ ipv4.Allocate (d1d2);
- CsmaIpv4Topology::AddIpv4Address (
- n3, n3ifIndex, Ipv4Address("10.250.1.2"), Ipv4Mask("255.255.255.0"));
-
- CsmaIpv4Topology::AddIpv4Address (
- n4, n4ifIndex, Ipv4Address("10.250.1.3"), Ipv4Mask("255.255.255.0"));
-
- CsmaIpv4Topology::AddIpv4Address (
- n5, n5ifIndex, Ipv4Address("10.250.1.4"), Ipv4Mask("255.255.255.0"));
+ ipv4.SetBase ("10.1.3.0", "255.255.255.0");
+ Ipv4InterfaceContainer i5i6 = ipv4.Allocate (d5d6);
+
+ ipv4.SetBase ("10.250.1.0", "255.255.255.0");
+ ipv4.Allocate (d2345);
// Create router nodes, initialize routing database and set up the routing
// tables in the nodes.
@@ -185,17 +142,15 @@
// 210 bytes at a rate of 448 Kb/s
NS_LOG_INFO ("Create Applications.");
uint16_t port = 9; // Discard port (RFC 863)
- Ptr<OnOffApplication> ooff =
- CreateObject<OnOffApplication> ("Remote", Address (InetSocketAddress ("10.1.3.2", port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"),
- "OnTime", ConstantVariable (1),
- "OffTime", ConstantVariable (0),
- "DataRate", DataRate("300bps"),
- "PacketSize", Uinteger (50));
- n0->AddApplication (ooff);
- // Start the application
- ooff->Start (Seconds (1.0));
- ooff->Stop (Seconds (10.0));
+ OnOffHelper onoff;
+ onoff.SetAppAttribute ("OnTime", ConstantVariable (1));
+ onoff.SetAppAttribute ("OffTime", ConstantVariable (0));
+ onoff.SetAppAttribute ("DataRate", DataRate("300bps"));
+ onoff.SetAppAttribute ("PacketSize", Uinteger (50));
+ onoff.SetUdpRemote (i5i6.GetAddress (1), port);
+ ApplicationContainer apps = onoff.Build (c.Get (0));
+ apps.Start (Seconds (1.0));
+ apps.Stop (Seconds (10.0));
// Configure tracing of all enqueue, dequeue, and NetDevice receive events
// Trace output will be sent to the simple-global-routing.tr file
--- a/examples/simple-alternate-routing.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/examples/simple-alternate-routing.cc Wed Mar 26 21:28:27 2008 -0700
@@ -37,32 +37,12 @@
#include <string>
#include <cassert>
-#include "ns3/log.h"
-
-#include "ns3/command-line.h"
-#include "ns3/ptr.h"
-#include "ns3/random-variable.h"
-#include "ns3/config.h"
-#include "ns3/uinteger.h"
-
-#include "ns3/simulator.h"
-#include "ns3/nstime.h"
-#include "ns3/data-rate.h"
-
+#include "ns3/core-module.h"
+#include "ns3/simulator-module.h"
+#include "ns3/helper-module.h"
+#include "ns3/global-route-manager.h"
#include "ns3/ascii-trace.h"
#include "ns3/pcap-trace.h"
-#include "ns3/internet-node.h"
-#include "ns3/point-to-point-channel.h"
-#include "ns3/point-to-point-net-device.h"
-#include "ns3/ipv4-address.h"
-#include "ns3/ipv4.h"
-#include "ns3/socket.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/ipv4-route.h"
-#include "ns3/point-to-point-topology.h"
-#include "ns3/onoff-application.h"
-#include "ns3/packet-sink.h"
-#include "ns3/global-route-manager.h"
using namespace ns3;
@@ -128,50 +108,50 @@
// Here, we will explicitly create four nodes. In more sophisticated
// topologies, we could configure a node factory.
NS_LOG_INFO ("Create nodes.");
- Ptr<Node> n0 = CreateObject<InternetNode> ();
- Ptr<Node> n1 = CreateObject<InternetNode> ();
- Ptr<Node> n2 = CreateObject<InternetNode> ();
- Ptr<Node> n3 = CreateObject<InternetNode> ();
+ NodeContainer c;
+ c.Create (4);
+ NodeContainer n0n2 = NodeContainer (c.Get (0), c.Get (2));
+ NodeContainer n1n2 = NodeContainer (c.Get (1), c.Get (2));
+ NodeContainer n3n2 = NodeContainer (c.Get (3), c.Get (2));
+ NodeContainer n1n3 = NodeContainer (c.Get (1), c.Get (3));
// We create the channels first without any IP addressing information
NS_LOG_INFO ("Create channels.");
- Ptr<PointToPointChannel> channel0 =
- PointToPointTopology::AddPointToPointLink (
- n0, n2, DataRate (5000000), MilliSeconds (2));
+ PointToPointHelper p2p;
+ p2p.SetChannelParameter ("BitRate", DataRate (5000000));
+ p2p.SetChannelParameter ("Delay", MilliSeconds (2));
+ NetDeviceContainer d0d2 = p2p.Build (n0n2);
+
+ NetDeviceContainer d1d2 = p2p.Build (n1n2);
- Ptr<PointToPointChannel> channel1 =
- PointToPointTopology::AddPointToPointLink (
- n1, n2, DataRate (5000000), MilliSeconds (2));
-
- Ptr<PointToPointChannel> channel2 =
- PointToPointTopology::AddPointToPointLink (
- n2, n3, DataRate (1500000), MilliSeconds (10));
-
- Ptr<PointToPointChannel> channel3 =
- PointToPointTopology::AddPointToPointLink (
- n1, n3, DataRate (1500000), MilliSeconds (100));
+ p2p.SetChannelParameter ("BitRate", DataRate(1500000));
+ p2p.SetChannelParameter ("Delay", MilliSeconds (10));
+ NetDeviceContainer d3d2 = p2p.Build (n3n2);
+
+ p2p.SetChannelParameter ("Delay", MilliSeconds (100));
+ NetDeviceContainer d1d3 = p2p.Build (n1n3);
+
+ InternetStackHelper internet;
+ internet.Build (c);
// Later, we add IP addresses. The middle two octets correspond to
// the channel number.
NS_LOG_INFO ("Assign IP Addresses.");
- PointToPointTopology::AddIpv4Addresses (
- channel0, n0, Ipv4Address ("10.0.0.1"),
- n2, Ipv4Address ("10.0.0.2"));
+ Ipv4AddressHelper ipv4;
+ ipv4.SetBase ("10.0.0.0", "255.255.255.0");
+ ipv4.Allocate (d0d2);
- PointToPointTopology::AddIpv4Addresses (
- channel1, n1, Ipv4Address ("10.1.1.1"),
- n2, Ipv4Address ("10.1.1.2"));
+ ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+ Ipv4InterfaceContainer i1i2 = ipv4.Allocate (d1d2);
- PointToPointTopology::AddIpv4Addresses (
- channel2, n2, Ipv4Address ("10.2.2.1"),
- n3, Ipv4Address ("10.2.2.2"));
+ ipv4.SetBase ("10.2.2.0", "255.255.255.0");
+ ipv4.Allocate (d3d2);
- PointToPointTopology::AddIpv4Addresses (
- channel3, n1, Ipv4Address ("10.3.3.1"),
- n3, Ipv4Address ("10.3.3.2"));
+ ipv4.SetBase ("10.3.3.0", "255.255.255.0");
+ Ipv4InterfaceContainer i1i3 = ipv4.Allocate (d1d3);
- PointToPointTopology::SetIpv4Metric (
- channel3, n1, n3, sampleMetric);
+ i1i3.SetMetric (0, sampleMetric);
+ i1i3.SetMetric (1, sampleMetric);
// Create router nodes, initialize routing database and set up the routing
// tables in the nodes.
@@ -182,24 +162,20 @@
uint16_t port = 9; // Discard port (RFC 863)
// Create a flow from n3 to n1, starting at time 1.1 seconds
- Ptr<OnOffApplication> ooff =
- CreateObject<OnOffApplication> ("Remote", Address (InetSocketAddress ("10.1.1.1", port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"),
- "OnTime", ConstantVariable (1),
- "OffTime", ConstantVariable (0));
- n3->AddApplication (ooff);
- // Start the application
- ooff->Start (Seconds (1.1));
- ooff->Stop (Seconds (10.0));
+ OnOffHelper onoff;
+ onoff.SetAppAttribute ("OnTime", ConstantVariable (1));
+ onoff.SetAppAttribute ("OffTime", ConstantVariable (0));
+ onoff.SetUdpRemote (i1i2.GetAddress (0), port);
+ ApplicationContainer apps = onoff.Build (c.Get (3));
+ apps.Start (Seconds (1.1));
+ apps.Start (Seconds (10.0));
// Create a packet sink to receive these packets
- Ptr<PacketSink> sink =
- CreateObject<PacketSink> ("Remote", Address (InetSocketAddress (Ipv4Address::GetAny (), port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"));
- n1->AddApplication (sink);
- // Start the sink
- sink->Start (Seconds (1.1));
- sink->Stop (Seconds (10.0));
+ PacketSinkHelper sink;
+ sink.SetupUdp (Ipv4Address::GetAny (), port);
+ apps = sink.Build (c.Get (1));
+ apps.Start (Seconds (1.1));
+ apps.Stop (Seconds (10.0));
// Configure tracing of all enqueue, dequeue, and NetDevice receive events
// Trace output will be sent to the simple-alternate-routing.tr file
--- a/examples/simple-error-model.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/examples/simple-error-model.cc Wed Mar 26 21:28:27 2008 -0700
@@ -38,34 +38,13 @@
// - Tracing of queues and packet receptions to file
// "simple-error-model.tr"
-#include "ns3/log.h"
-#include "ns3/assert.h"
-#include "ns3/command-line.h"
-#include "ns3/ptr.h"
-#include "ns3/config.h"
-#include "ns3/uinteger.h"
-#include "ns3/string.h"
-
-#include "ns3/simulator.h"
-#include "ns3/nstime.h"
-#include "ns3/data-rate.h"
-
+#include "ns3/core-module.h"
+#include "ns3/common-module.h"
+#include "ns3/simulator-module.h"
+#include "ns3/helper-module.h"
#include "ns3/ascii-trace.h"
#include "ns3/pcap-trace.h"
-#include "ns3/internet-node.h"
-#include "ns3/random-variable.h"
-#include "ns3/point-to-point-channel.h"
-#include "ns3/point-to-point-net-device.h"
-#include "ns3/ipv4-address.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/ipv4.h"
-#include "ns3/socket.h"
-#include "ns3/ipv4-route.h"
-#include "ns3/point-to-point-topology.h"
-#include "ns3/onoff-application.h"
-#include "ns3/packet-sink.h"
-#include "ns3/error-model.h"
-#include "ns3/double.h"
+#include "ns3/global-route-manager.h"
using namespace ns3;
@@ -96,122 +75,92 @@
// Here, we will explicitly create four nodes. In more sophisticated
// topologies, we could configure a node factory.
NS_LOG_INFO ("Create nodes.");
- Ptr<Node> n0 = CreateObject<InternetNode> ();
- Ptr<Node> n1 = CreateObject<InternetNode> ();
- Ptr<Node> n2 = CreateObject<InternetNode> ();
- Ptr<Node> n3 = CreateObject<InternetNode> ();
+ NodeContainer c;
+ c.Create (4);
+ NodeContainer n0n2 = NodeContainer (c.Get (0), c.Get (2));
+ NodeContainer n1n2 = NodeContainer (c.Get (1), c.Get (2));
+ NodeContainer n3n2 = NodeContainer (c.Get (3), c.Get (2));
+
+ InternetStackHelper internet;
+ internet.Build (c);
// We create the channels first without any IP addressing information
NS_LOG_INFO ("Create channels.");
- Ptr<PointToPointChannel> channel0 =
- PointToPointTopology::AddPointToPointLink (
- n0, n2, DataRate(5000000), MilliSeconds(2));
+ PointToPointHelper p2p;
+ p2p.SetChannelParameter ("BitRate", DataRate (5000000));
+ p2p.SetChannelParameter ("Delay", MilliSeconds (2));
+ NetDeviceContainer d0d2 = p2p.Build (n0n2);
- Ptr<PointToPointChannel> channel1 =
- PointToPointTopology::AddPointToPointLink (
- n1, n2, DataRate(5000000), MilliSeconds(2));
-
- Ptr<PointToPointChannel> channel2 =
- PointToPointTopology::AddPointToPointLink (
- n2, n3, DataRate(1500000), MilliSeconds(10));
+ NetDeviceContainer d1d2 = p2p.Build (n1n2);
+
+ p2p.SetChannelParameter ("BitRate", DataRate (1500000));
+ p2p.SetChannelParameter ("Delay", MilliSeconds (10));
+ NetDeviceContainer d3d2 = p2p.Build (n3n2);
// Later, we add IP addresses.
NS_LOG_INFO ("Assign IP Addresses.");
- PointToPointTopology::AddIpv4Addresses (
- channel0, n0, Ipv4Address("10.1.1.1"),
- n2, Ipv4Address("10.1.1.2"));
-
- PointToPointTopology::AddIpv4Addresses (
- channel1, n1, Ipv4Address("10.1.2.1"),
- n2, Ipv4Address("10.1.2.2"));
+ Ipv4AddressHelper ipv4;
+ ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+ ipv4.Allocate (d0d2);
- PointToPointTopology::AddIpv4Addresses (
- channel2, n2, Ipv4Address("10.1.3.1"),
- n3, Ipv4Address("10.1.3.2"));
+ ipv4.SetBase ("10.1.2.0", "255.255.255.0");
+ Ipv4InterfaceContainer i1i2 = ipv4.Allocate (d1d2);
- // Finally, we add static routes. These three steps (Channel and
- // NetDevice creation, IP Address assignment, and routing) are
- // separated because there may be a need to postpone IP Address
- // assignment (emulation) or modify to use dynamic routing
- NS_LOG_INFO ("Add Static Routes.");
- PointToPointTopology::AddIpv4Routes(n0, n2, channel0);
- PointToPointTopology::AddIpv4Routes(n1, n2, channel1);
- PointToPointTopology::AddIpv4Routes(n2, n3, channel2);
+ ipv4.SetBase ("10.1.3.0", "255.255.255.0");
+ Ipv4InterfaceContainer i3i2 = ipv4.Allocate (d3d2);
+
+ NS_LOG_INFO ("Use global routing.");
+ GlobalRouteManager::PopulateRoutingTables ();
// Create the OnOff application to send UDP datagrams of size
// 210 bytes at a rate of 448 Kb/s
NS_LOG_INFO ("Create Applications.");
uint16_t port = 9; // Discard port (RFC 863)
- Ptr<OnOffApplication> ooff =
- CreateObject<OnOffApplication> ("Remote", Address (InetSocketAddress ("10.1.3.2", port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"),
- "OnTime", ConstantVariable(1),
- "OffTime", ConstantVariable(0));
- n0->AddApplication (ooff);
- // Start the application
- ooff->Start(Seconds(1.0));
- ooff->Stop (Seconds(10.0));
+ OnOffHelper onoff;
+ onoff.SetUdpRemote (i3i2.GetAddress (1), port);
+ onoff.SetAppAttribute ("OnTime", ConstantVariable(1));
+ onoff.SetAppAttribute ("OffTime", ConstantVariable(0));
+ ApplicationContainer apps = onoff.Build (c.Get (0));
+ apps.Start(Seconds(1.0));
+ apps.Stop (Seconds(10.0));
// Create an optional packet sink to receive these packets
- Ptr<PacketSink> sink = CreateObject<PacketSink> ("Local", Address (InetSocketAddress (Ipv4Address::GetAny (), port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"));
- n3->AddApplication (sink);
- // Start the sink
- sink->Start (Seconds (1.0));
- sink->Stop (Seconds (10.0));
+ PacketSinkHelper sink;
+ sink.SetupUdp (Ipv4Address::GetAny (), port);
+ apps = sink.Build (c.Get (3));
+ apps.Start (Seconds (1.0));
+ apps.Stop (Seconds (10.0));
// Create a similar flow from n3 to n1, starting at time 1.1 seconds
- ooff = CreateObject<OnOffApplication> ("Remote", Address (InetSocketAddress ("10.1.2.1", port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"),
- "OnTime", ConstantVariable(1),
- "OffTime", ConstantVariable(0));
- n3->AddApplication (ooff);
- // Start the application
- ooff->Start(Seconds(1.1));
- ooff->Stop (Seconds(10.0));
+ onoff.SetUdpRemote (i1i2.GetAddress (0), port);
+ apps = onoff.Build (c.Get (3));
+ apps.Start(Seconds(1.1));
+ apps.Stop (Seconds(10.0));
// Create a packet sink to receive these packets
- sink = CreateObject<PacketSink> ("Local", Address (InetSocketAddress (Ipv4Address::GetAny (), port)),
- "Protocol", TypeId::LookupByName ("ns3::Udp"));
- n1->AddApplication (sink);
- // Start the sink
- sink->Start (Seconds (1.1));
- sink->Stop (Seconds (10.0));
-
- // Here, finish off packet routing configuration
- // This will likely set by some global StaticRouting object in the future
- NS_LOG_INFO ("Set Default Routes.");
- Ptr<Ipv4> ipv4;
- ipv4 = n0->GetObject<Ipv4> ();
- ipv4->SetDefaultRoute (Ipv4Address ("10.1.1.2"), 1);
- ipv4 = n3->GetObject<Ipv4> ();
- ipv4->SetDefaultRoute (Ipv4Address ("10.1.3.1"), 1);
+ sink.SetupUdp (Ipv4Address::GetAny (), port);
+ apps = sink.Build (c.Get (1));
+ apps.Start (Seconds (1.1));
+ apps.Stop (Seconds (10.0));
//
// Error model
//
- // We want to add an error model to node 3's NetDevice
- // We can obtain a handle to the NetDevice via the channel and node
- // pointers
- Ptr<PointToPointNetDevice> nd3 = PointToPointTopology::GetNetDevice
- (n3, channel2);
// Create an ErrorModel based on the implementation (constructor)
// specified by the default classId
Ptr<RateErrorModel> em = CreateObject<RateErrorModel> ("RanVar", UniformVariable (0.0, 1.0),
- "Rate", Double (0.001));
- nd3->AddReceiveErrorModel (em);
+ "ErrorRate", Double (0.001));
+ d3d2.Get (0)->SetAttribute ("ReceiveErrorModel", em);
// Now, let's use the ListErrorModel and explicitly force a loss
// of the packets with pkt-uids = 11 and 17 on node 2, device 0
- Ptr<PointToPointNetDevice> nd2 = PointToPointTopology::GetNetDevice
- (n2, channel0);
std::list<uint32_t> sampleList;
sampleList.push_back (11);
sampleList.push_back (17);
// This time, we'll explicitly create the error model we want
Ptr<ListErrorModel> pem = CreateObject<ListErrorModel> ();
pem->SetList (sampleList);
- nd2->AddReceiveErrorModel (pem);
+ d0d2.Get (1)->SetAttribute ("ReceiveErrorModel", pem);
// Configure tracing of all enqueue, dequeue, and NetDevice receive events
// Trace output will be sent to the simple-error-model.tr file
--- a/examples/tcp-large-transfer.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/examples/tcp-large-transfer.cc Wed Mar 26 21:28:27 2008 -0700
@@ -36,12 +36,13 @@
#include "ns3/core-module.h"
#include "ns3/helper-module.h"
+#include "ns3/node-module.h"
+#include "ns3/global-route-manager.h"
+#include "ns3/simulator-module.h"
#include "ns3/ascii-trace.h"
#include "ns3/pcap-trace.h"
-#include "ns3/internet-node-module.h"
-
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("TcpLargeTransfer");
@@ -149,7 +150,7 @@
ipv4.SetBase ("10.1.3.0", "255.255.255.0");
ipv4.Allocate (dev0);
ipv4.SetBase ("10.1.2.0", "255.255.255.0");
- ipv4.Allocate (dev1);
+ Ipv4InterfaceContainer ipInterfs = ipv4.Allocate (dev1);
// and setup ip routing tables to get total ip-level connectivity.
GlobalRouteManager::PopulateRoutingTables ();
@@ -177,7 +178,7 @@
Ptr<Socket> localSocket = socketFactory->CreateSocket ();
localSocket->Bind ();
Simulator::ScheduleNow (&StartFlow, localSocket, nBytes,
- Ipv4Address ("10.1.2.2"), servPort);
+ ipInterfs.GetAddress (1), servPort);
// Configure tracing of all enqueue, dequeue, and NetDevice receive events
// Trace output will be sent to the simple-examples.tr file
--- a/samples/main-random-topology.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/samples/main-random-topology.cc Wed Mar 26 21:28:27 2008 -0700
@@ -3,6 +3,7 @@
#include "ns3/core-module.h"
#include "ns3/mobility-module.h"
#include "ns3/helper-module.h"
+#include "ns3/simulator-module.h"
using namespace ns3;
--- a/samples/main-random-walk.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/samples/main-random-walk.cc Wed Mar 26 21:28:27 2008 -0700
@@ -3,6 +3,7 @@
#include "ns3/core-module.h"
#include "ns3/helper-module.h"
#include "ns3/mobility-module.h"
+#include "ns3/simulator-module.h"
using namespace ns3;
--- a/src/devices/point-to-point/point-to-point-net-device.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/src/devices/point-to-point/point-to-point-net-device.cc Wed Mar 26 21:28:27 2008 -0700
@@ -50,7 +50,7 @@
DataRate ("10Mb/s"),
MakeDataRateAccessor (&PointToPointNetDevice::m_bps),
MakeDataRateChecker ())
- .AddAttribute ("RxErrorModel", "XXX",
+ .AddAttribute ("ReceiveErrorModel", "XXX",
Ptr<ErrorModel> (0),
MakePtrAccessor (&PointToPointNetDevice::m_receiveErrorModel),
MakePtrChecker<ErrorModel> ())
@@ -224,7 +224,6 @@
NS_LOG_PARAMS ("(" << em << ")");
m_receiveErrorModel = em;
- AggregateObject (em);
}
void PointToPointNetDevice::Receive (Ptr<Packet> packet)
--- a/src/helper/ipv4-address-helper.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/src/helper/ipv4-address-helper.cc Wed Mar 26 21:28:27 2008 -0700
@@ -120,10 +120,11 @@
return Ipv4Address (m_network << m_shift);
}
- void
+Ipv4InterfaceContainer
Ipv4AddressHelper::Allocate (const NetDeviceContainer &c)
{
NS_LOG_FUNCTION;
+ Ipv4InterfaceContainer retval;
for (uint32_t i = 0; i < c.GetN (); ++i) {
Ptr<NetDevice> device = c.Get (i);
@@ -145,7 +146,9 @@
ipv4->SetNetworkMask (ifIndex, m_mask);
ipv4->SetMetric (ifIndex, 1);
ipv4->SetUp (ifIndex);
+ retval.Add (ipv4, ifIndex);
}
+ return retval;
}
const uint32_t N_BITS = 32;
--- a/src/helper/ipv4-address-helper.h Wed Mar 26 21:28:13 2008 -0700
+++ b/src/helper/ipv4-address-helper.h Wed Mar 26 21:28:27 2008 -0700
@@ -20,7 +20,8 @@
#define IPV4_ADDRESS_HELPER_H
#include "ns3/ipv4-address.h"
-#include "ns3/net-device-container.h"
+#include "net-device-container.h"
+#include "ipv4-interface-container.h"
namespace ns3 {
@@ -164,7 +165,7 @@
* @see SetBase
* @see NewNetwork
*/
- void Allocate (const NetDeviceContainer &c);
+ Ipv4InterfaceContainer Allocate (const NetDeviceContainer &c);
private:
uint32_t NumAddressBits (uint32_t maskbits) const;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/helper/ipv4-interface-container.cc Wed Mar 26 21:28:27 2008 -0700
@@ -0,0 +1,34 @@
+#include "ipv4-interface-container.h"
+#include "ns3/node-list.h"
+
+namespace ns3 {
+
+Ipv4InterfaceContainer::Ipv4InterfaceContainer ()
+{}
+
+uint32_t
+Ipv4InterfaceContainer::GetN (void) const
+{
+ return m_interfaces.size ();
+}
+Ipv4Address
+Ipv4InterfaceContainer::GetAddress (uint32_t i) const
+{
+ Ptr<Ipv4> ipv4 = m_interfaces[i].first;
+ uint32_t interface = m_interfaces[i].second;
+ return ipv4->GetAddress (interface);
+}
+void
+Ipv4InterfaceContainer::SetMetric (uint32_t i, uint16_t metric)
+{
+ Ptr<Ipv4> ipv4 = m_interfaces[i].first;
+ uint32_t interface = m_interfaces[i].second;
+ ipv4->SetMetric (interface, metric);
+}
+void
+Ipv4InterfaceContainer::Add (Ptr<Ipv4> ipv4, uint32_t interface)
+{
+ m_interfaces.push_back (std::make_pair (ipv4, interface));
+}
+
+} // namespace ns3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/helper/ipv4-interface-container.h Wed Mar 26 21:28:27 2008 -0700
@@ -0,0 +1,39 @@
+#ifndef IPV4_INTERFACE_CONTAINER_H
+#define IPV4_INTERFACE_CONTAINER_H
+
+#include <stdint.h>
+#include <vector>
+#include "ns3/ipv4.h"
+#include "ns3/ipv4-address.h"
+
+namespace ns3 {
+
+/**
+ * \brief keep track of a set of ipv4 interfaces.
+ *
+ */
+class Ipv4InterfaceContainer
+{
+public:
+ /**
+ * Create an empty Ipv4InterfaceContainer.
+ */
+ Ipv4InterfaceContainer ();
+
+ /**
+ * \returns the number of interfaces stored in this Ipv4InterfaceContainer.
+ */
+ uint32_t GetN (void) const;
+
+ Ipv4Address GetAddress (uint32_t i) const;
+ void SetMetric (uint32_t i, uint16_t metric);
+
+ void Add (Ptr<Ipv4> ipv4, uint32_t interface);
+
+ private:
+ std::vector<std::pair<Ptr<Ipv4>,uint32_t> > m_interfaces;
+};
+
+} // namespace ns3
+
+#endif /* IPV4_INTERFACE_CONTAINER_H */
--- a/src/helper/node-container.cc Wed Mar 26 21:28:13 2008 -0700
+++ b/src/helper/node-container.cc Wed Mar 26 21:28:27 2008 -0700
@@ -15,6 +15,21 @@
Add (a);
Add (b);
}
+NodeContainer::NodeContainer (const NodeContainer &a, const NodeContainer &b,
+ const NodeContainer &c)
+{
+ Add (a);
+ Add (b);
+ Add (c);
+}
+NodeContainer::NodeContainer (const NodeContainer &a, const NodeContainer &b,
+ const NodeContainer &c, const NodeContainer &d)
+{
+ Add (a);
+ Add (b);
+ Add (c);
+ Add (d);
+}
NodeContainer::Iterator
NodeContainer::Begin (void) const
--- a/src/helper/node-container.h Wed Mar 26 21:28:13 2008 -0700
+++ b/src/helper/node-container.h Wed Mar 26 21:28:27 2008 -0700
@@ -35,6 +35,9 @@
*/
NodeContainer (const NodeContainer &a, const NodeContainer &b);
+ NodeContainer (const NodeContainer &a, const NodeContainer &b, const NodeContainer &c);
+ NodeContainer (const NodeContainer &a, const NodeContainer &b, const NodeContainer &c, const NodeContainer &d);
+
/**
* \returns an iterator to the start of the vector of node pointers.
*/
--- a/src/helper/wscript Wed Mar 26 21:28:13 2008 -0700
+++ b/src/helper/wscript Wed Mar 26 21:28:27 2008 -0700
@@ -17,6 +17,7 @@
'on-off-helper.cc',
'packet-sink-helper.cc',
'packet-socket-helper.cc',
+ 'ipv4-interface-container.cc',
]
headers = bld.create_obj('ns3header')
@@ -36,4 +37,5 @@
'on-off-helper.h',
'packet-sink-helper.h',
'packet-socket-helper.h',
+ 'ipv4-interface-container.h',
]