branch merge

This commit is contained in:
Craig Dowell
2008-03-26 21:28:27 -07:00
15 changed files with 257 additions and 277 deletions

View File

@@ -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;

View File

@@ -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 @@ main (int argc, char *argv[])
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 @@ main (int argc, char *argv[])
// 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

View File

@@ -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 @@ main (int argc, char *argv[])
// 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);
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));
NetDeviceContainer d1d2 = p2p.Build (n1n2);
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 @@ main (int argc, char *argv[])
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

View File

@@ -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 @@ main (int argc, char *argv[])
// 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"));
Ipv4AddressHelper ipv4;
ipv4.SetBase ("10.1.1.0", "255.255.255.0");
ipv4.Allocate (d0d2);
PointToPointTopology::AddIpv4Addresses (
channel1, n1, Ipv4Address("10.1.2.1"),
n2, Ipv4Address("10.1.2.2"));
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

View File

@@ -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 @@ int main (int argc, char *argv[])
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 @@ int main (int argc, char *argv[])
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

View File

@@ -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;

View File

@@ -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;

View File

@@ -50,7 +50,7 @@ PointToPointNetDevice::GetTypeId (void)
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 @@ void PointToPointNetDevice::AddReceiveErrorModel (Ptr<ErrorModel> em)
NS_LOG_PARAMS ("(" << em << ")");
m_receiveErrorModel = em;
AggregateObject (em);
}
void PointToPointNetDevice::Receive (Ptr<Packet> packet)

View File

@@ -120,10 +120,11 @@ Ipv4AddressHelper::NewNetwork (void)
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 @@ Ipv4AddressHelper::Allocate (const NetDeviceContainer &c)
ipv4->SetNetworkMask (ifIndex, m_mask);
ipv4->SetMetric (ifIndex, 1);
ipv4->SetUp (ifIndex);
retval.Add (ipv4, ifIndex);
}
return retval;
}
const uint32_t N_BITS = 32;

View File

@@ -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 @@ public:
* @see SetBase
* @see NewNetwork
*/
void Allocate (const NetDeviceContainer &c);
Ipv4InterfaceContainer Allocate (const NetDeviceContainer &c);
private:
uint32_t NumAddressBits (uint32_t maskbits) const;

View File

@@ -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

View File

@@ -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 */

View File

@@ -15,6 +15,21 @@ NodeContainer::NodeContainer (const NodeContainer &a, const NodeContainer &b)
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

View File

@@ -35,6 +35,9 @@ public:
*/
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.
*/

View File

@@ -17,6 +17,7 @@ def build(bld):
'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 @@ def build(bld):
'on-off-helper.h',
'packet-sink-helper.h',
'packet-socket-helper.h',
'ipv4-interface-container.h',
]