examples/dynamic-global-routing.cc
author Tom Henderson <tomh@tomh.org>
Thu, 11 Dec 2008 12:43:11 -0800
changeset 4012 7dc122811f0c
child 4020 4fa0b1ed5240
permissions -rw-r--r--
add dynamic global routing example script
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4012
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
/*
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
 * This program is free software; you can redistribute it and/or modify
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
 * it under the terms of the GNU General Public License version 2 as
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
 * published by the Free Software Foundation;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
 *
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
 * This program is distributed in the hope that it will be useful,
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
 * GNU General Public License for more details.
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
 *
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
 * You should have received a copy of the GNU General Public License
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
 * along with this program; if not, write to the Free Software
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
 *
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
 * Contributed by:  Luis Cortes (cortes@gatech.edu)
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
 */
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
// This script exercises global routing code in a mixed point-to-point
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
// and csma/cd environment
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
//
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
// Network topology
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
//
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
//  n0
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
//     \ p-p
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    27
//      \          (shared csma/cd)
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
//       n2 -------------------------n3
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    29
//      /            |        | 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
//     / p-p        n4        n5 ---------- n6
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    31
//   n1                             p-p
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
//   |                                      |
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
//   ----------------------------------------
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
//                p-p
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
//
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
// - at time 1 CBR/UDP flow from n1 to n6's IP address on the n5/n6 link
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    37
// - at time 10, start similar flow from n1 to n6's address on the n1/n6 link
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
//
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    39
//  Order of events
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    40
//  At pre-simulation time, configure global routes.  Shortest path from
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    41
//  n1 to n6 is via the direct point-to-point link
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    42
//  At time 1s, start CBR traffic flow from n1 to n6
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    43
//  At time 2s, set the n1 point-to-point interface to down.  Packets
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    44
//    will start to be dropped 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    45
//  At time 3s, call RecomputeGlobalRoutes() and traffic will
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    46
//    start flowing again on the alternate path
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    47
//  At time 4s, re-enable the n1/n6 interface to up.  Will not change routing
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    48
//  At time 5s, call RecomputeGlobalRoutes() and traffic will start flowing 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    49
//    again on the original path
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
//  At time 6s, set the n6-n1 point-to-point Ipv4 interface to down (note, this
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    51
//    keeps the point-to-point link "up" from n1's perspective).  Packets
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    52
//    will traverse the link and be dropped at n6 upon receipt.  These drops
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    53
//    are not visible in the pcap trace but in the ascii trace.
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    54
//  At time 7s, call RecomputeGlobalRoutes() and traffic will flow again
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
//    through the path n1-n2-n5-n6
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
//  At time 8s, bring the interface back up.
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    57
//  At time 9s, call RecomputeGlobalRoutes() and traffic will flow again
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    58
//    through the path n1-n6
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
//  At time 10s, stop the first flow.  
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
//  At time 11s, start a new flow, but to n6's other IP address (the one
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    61
//    on the n1/n6 p2p link)
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    62
//  At time 12s, bring the n1 interface down between n1 and n6.  Packets
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    63
//    will start to be dropped 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
//  At time 13s, call RecomputeGlobalRoutes() and traffic will
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    65
//    start flowing again on the alternate path
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    66
//  At time 14s, re-enable the n1/n6 interface to up.  Will not change routing
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    67
//  At time 15s, call RecomputeGlobalRoutes() and traffic will start flowing 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    68
//    again on the original path
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    69
//  At time 16s, stop the second flow.  
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    70
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    71
// - Tracing of queues and packet receptions to file "dynamic-global-routing.tr"
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    72
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    73
#include <iostream>
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    74
#include <fstream>
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    75
#include <string>
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    76
#include <cassert>
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    77
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    78
#include "ns3/core-module.h"
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    79
#include "ns3/simulator-module.h"
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    80
#include "ns3/node-module.h"
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    81
#include "ns3/helper-module.h"
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    82
#include "ns3/global-route-manager.h"
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    83
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    84
using namespace ns3;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    85
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    86
NS_LOG_COMPONENT_DEFINE ("DynamicGlobalRoutingExample");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    87
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    88
int 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    89
main (int argc, char *argv[])
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    90
{
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    91
  // Allow the user to override any of the defaults and the above
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    92
  // Bind ()s at run-time, via command-line arguments
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    93
  CommandLine cmd;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    94
  cmd.Parse (argc, argv);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    95
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    96
  NS_LOG_INFO ("Create nodes.");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    97
  NodeContainer c;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    98
  c.Create (7);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    99
  NodeContainer n0n2 = NodeContainer (c.Get (0), c.Get (2));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   100
  NodeContainer n1n2 = NodeContainer (c.Get (1), c.Get (2));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   101
  NodeContainer n5n6 = NodeContainer (c.Get (5), c.Get (6));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   102
  NodeContainer n1n6 = NodeContainer (c.Get (1), c.Get (6));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   103
  NodeContainer n2345 = NodeContainer (c.Get (2), c.Get (3), c.Get (4), c.Get (5));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   104
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   105
  InternetStackHelper internet;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   106
  internet.Install (c);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   107
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   108
  // We create the channels first without any IP addressing information
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   109
  NS_LOG_INFO ("Create channels.");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   110
  PointToPointHelper p2p;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   111
  p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   112
  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   113
  NetDeviceContainer d0d2 = p2p.Install (n0n2);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   114
  NetDeviceContainer d1d6 = p2p.Install (n1n6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   115
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   116
  NetDeviceContainer d1d2 = p2p.Install (n1n2);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   117
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   118
  p2p.SetDeviceAttribute ("DataRate", StringValue ("1500kbps"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   119
  p2p.SetChannelAttribute ("Delay", StringValue ("10ms"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   120
  NetDeviceContainer d5d6 = p2p.Install (n5n6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   121
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   122
  // We create the channels first without any IP addressing information
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   123
  CsmaHelper csma;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   124
  csma.SetChannelAttribute ("DataRate", StringValue ("5Mbps"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   125
  csma.SetChannelAttribute ("Delay", StringValue ("2ms"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   126
  NetDeviceContainer d2345 = csma.Install (n2345);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   127
  
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   128
  // Later, we add IP addresses.  
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   129
  NS_LOG_INFO ("Assign IP Addresses.");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   130
  Ipv4AddressHelper ipv4;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   131
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   132
  ipv4.Assign (d0d2);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   133
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   134
  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   135
  ipv4.Assign (d1d2);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   136
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   137
  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   138
  Ipv4InterfaceContainer i5i6 = ipv4.Assign (d5d6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   139
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   140
  ipv4.SetBase ("10.250.1.0", "255.255.255.0");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   141
  ipv4.Assign (d2345);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   142
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   143
  ipv4.SetBase ("172.16.1.0", "255.255.255.0");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   144
  Ipv4InterfaceContainer i1i6 = ipv4.Assign (d1d6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   145
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   146
  // Create router nodes, initialize routing database and set up the routing
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   147
  // tables in the nodes.
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   148
  GlobalRouteManager::PopulateRoutingTables ();
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   149
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   150
  // Create the OnOff application to send UDP datagrams of size
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   151
  // 210 bytes at a rate of 448 Kb/s
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   152
  NS_LOG_INFO ("Create Applications.");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   153
  uint16_t port = 9;   // Discard port (RFC 863)
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   154
  OnOffHelper onoff ("ns3::UdpSocketFactory",
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   155
                     InetSocketAddress (i5i6.GetAddress (1), port));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   156
  onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   157
  onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   158
  onoff.SetAttribute ("DataRate", StringValue ("2kbps"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   159
  onoff.SetAttribute ("PacketSize", UintegerValue (50));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   160
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   161
  ApplicationContainer apps = onoff.Install (c.Get (1));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   162
  apps.Start (Seconds (1.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   163
  apps.Stop (Seconds (10.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   164
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   165
  // Create a second OnOff application to send UDP datagrams of size
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   166
  // 210 bytes at a rate of 448 Kb/s
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   167
  OnOffHelper onoff2 ("ns3::UdpSocketFactory",
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   168
                     InetSocketAddress (i1i6.GetAddress (1), port));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   169
  onoff2.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   170
  onoff2.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   171
  onoff2.SetAttribute ("DataRate", StringValue ("2kbps"));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   172
  onoff2.SetAttribute ("PacketSize", UintegerValue (50));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   173
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   174
  ApplicationContainer apps2 = onoff2.Install (c.Get (1));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   175
  apps2.Start (Seconds (11.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   176
  apps2.Stop (Seconds (16.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   177
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   178
  // Create an optional packet sink to receive these packets
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   179
  PacketSinkHelper sink ("ns3::UdpSocketFactory",
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   180
    Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   181
  apps = sink.Install (c.Get (6));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   182
  apps.Start (Seconds (1.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   183
  apps.Stop (Seconds (10.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   184
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   185
  PacketSinkHelper sink2 ("ns3::UdpSocketFactory",
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   186
    Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   187
  apps2 = sink2.Install (c.Get (6));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   188
  apps2.Start (Seconds (11.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   189
  apps2.Stop (Seconds (16.0));
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   190
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   191
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   192
  std::ofstream ascii;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   193
  ascii.open ("dynamic-global-routing.tr");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   194
  PointToPointHelper::EnablePcapAll ("dynamic-global-routing");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   195
  PointToPointHelper::EnableAsciiAll (ascii);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   196
  CsmaHelper::EnablePcapAll ("dynamic-global-routing");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   197
  CsmaHelper::EnableAsciiAll (ascii);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   198
  InternetStackHelper::EnableAsciiAll (ascii);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   199
 
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   200
  Ptr<Node> n1 = c.Get (1);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   201
  Ptr<Ipv4> ipv41 = n1->GetObject<Ipv4> ();
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   202
  // The first ifIndex is 0 for loopback, then the first p2p is numbered 1,
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   203
  // then the next p2p is numbered 2
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   204
  uint32_t ipv4ifIndex1 = 2;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   205
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   206
  Simulator::Schedule (Seconds (2),&Ipv4::SetDown,ipv41, ipv4ifIndex1);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   207
  Simulator::Schedule (Seconds (3),&GlobalRouteManager::RecomputeRoutingTables);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   208
  Simulator::Schedule (Seconds (4),&Ipv4::SetUp,ipv41, ipv4ifIndex1);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   209
  Simulator::Schedule (Seconds (5),&GlobalRouteManager::RecomputeRoutingTables);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   210
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   211
  Ptr<Node> n6 = c.Get (6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   212
  Ptr<Ipv4> ipv46 = n6->GetObject<Ipv4> ();
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   213
  // The first ifIndex is 0 for loopback, then the first p2p is numbered 1,
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   214
  // then the next p2p is numbered 2
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   215
  uint32_t ipv4ifIndex6 = 2;
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   216
  Simulator::Schedule (Seconds (6),&Ipv4::SetDown,ipv46, ipv4ifIndex6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   217
  Simulator::Schedule (Seconds (7),&GlobalRouteManager::RecomputeRoutingTables);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   218
  Simulator::Schedule (Seconds (8),&Ipv4::SetUp,ipv46, ipv4ifIndex6);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   219
  Simulator::Schedule (Seconds (9),&GlobalRouteManager::RecomputeRoutingTables);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   220
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   221
  Simulator::Schedule (Seconds (12),&Ipv4::SetDown,ipv41, ipv4ifIndex1);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   222
  Simulator::Schedule (Seconds (13),&GlobalRouteManager::RecomputeRoutingTables);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   223
  Simulator::Schedule (Seconds (14),&Ipv4::SetUp,ipv41, ipv4ifIndex1);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   224
  Simulator::Schedule (Seconds (15),&GlobalRouteManager::RecomputeRoutingTables);
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   225
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   226
  NS_LOG_INFO ("Run Simulation.");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   227
  Simulator::Run ();
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   228
  Simulator::Destroy ();
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   229
  NS_LOG_INFO ("Done.");
7dc122811f0c add dynamic global routing example script
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   230
}