bug 702: make global routing robust to link/device events
This commit is contained in:
@@ -18,7 +18,10 @@
|
||||
|
||||
|
||||
// This script exercises global routing code in a mixed point-to-point
|
||||
// and csma/cd environment
|
||||
// and csma/cd environment. We bring up and down interfaces and observe
|
||||
// the effect on global routing. We explicitly enable the attribute
|
||||
// to respond to interface events, so that routes are recomputed
|
||||
// automatically.
|
||||
//
|
||||
// Network topology
|
||||
//
|
||||
@@ -41,33 +44,20 @@
|
||||
// n1 to n6 is via the direct point-to-point link
|
||||
// At time 1s, start CBR traffic flow from n1 to n6
|
||||
// At time 2s, set the n1 point-to-point interface to down. Packets
|
||||
// will start to be dropped
|
||||
// At time 3s, call RecomputeRoutingTables() and traffic will
|
||||
// start flowing again on the alternate path
|
||||
// At time 4s, re-enable the n1/n6 interface to up. Will not change routing
|
||||
// At time 5s, call RecomputeRoutingTables() and traffic will start flowing
|
||||
// again on the original path
|
||||
// will be diverted to the n1-n2-n5-n6 path
|
||||
// At time 4s, re-enable the n1/n6 interface to up. n1-n6 route restored.
|
||||
// At time 6s, set the n6-n1 point-to-point Ipv4 interface to down (note, this
|
||||
// keeps the point-to-point link "up" from n1's perspective). Packets
|
||||
// will traverse the link and be dropped at n6 upon receipt. These drops
|
||||
// are not visible in the pcap trace but in the ascii trace.
|
||||
// At time 7s, call RecomputeRoutingTables() and traffic will flow again
|
||||
// through the path n1-n2-n5-n6
|
||||
// At time 8s, bring the interface back up.
|
||||
// At time 9s, call RecomputeRoutingTables() and traffic will flow again
|
||||
// through the path n1-n6
|
||||
// keeps the point-to-point link "up" from n1's perspective). Traffic will
|
||||
// flow through the path n1-n2-n5-n6
|
||||
// At time 8s, bring the interface back up. Path n1-n6 is restored
|
||||
// At time 10s, stop the first flow.
|
||||
// At time 11s, start a new flow, but to n6's other IP address (the one
|
||||
// on the n1/n6 p2p link)
|
||||
// At time 12s, bring the n1 interface down between n1 and n6. Packets
|
||||
// will start to be dropped
|
||||
// At time 13s, call RecomputeRoutingTables() and traffic will
|
||||
// start flowing again on the alternate path
|
||||
// will be diverted to the alternate path
|
||||
// At time 14s, re-enable the n1/n6 interface to up. This will change
|
||||
// routing back to n1-n6 since the interface up notification will cause
|
||||
// a new local interface route, at higher priority than global routing
|
||||
// At time 15s, call RecomputeRoutingTables(), but there is no effect
|
||||
// since global routing is lower in priority than static routing
|
||||
// At time 16s, stop the second flow.
|
||||
|
||||
// - Tracing of queues and packet receptions to file "dynamic-global-routing.tr"
|
||||
@@ -89,6 +79,10 @@ NS_LOG_COMPONENT_DEFINE ("DynamicGlobalRoutingExample");
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
// The below value configures the default behavior of global routing.
|
||||
// By default, it is disabled. To respond to interface events, set to true
|
||||
Config::SetDefault ("ns3::Ipv4GlobalRouting::RespondToInterfaceEvents", BooleanValue (true));
|
||||
|
||||
// Allow the user to override any of the defaults and the above
|
||||
// Bind ()s at run-time, via command-line arguments
|
||||
CommandLine cmd;
|
||||
@@ -206,9 +200,7 @@ main (int argc, char *argv[])
|
||||
uint32_t ipv4ifIndex1 = 2;
|
||||
|
||||
Simulator::Schedule (Seconds (2),&Ipv4::SetDown,ipv41, ipv4ifIndex1);
|
||||
Simulator::Schedule (Seconds (3),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
|
||||
Simulator::Schedule (Seconds (4),&Ipv4::SetUp,ipv41, ipv4ifIndex1);
|
||||
Simulator::Schedule (Seconds (5),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
|
||||
|
||||
Ptr<Node> n6 = c.Get (6);
|
||||
Ptr<Ipv4> ipv46 = n6->GetObject<Ipv4> ();
|
||||
@@ -216,14 +208,10 @@ main (int argc, char *argv[])
|
||||
// then the next p2p is numbered 2
|
||||
uint32_t ipv4ifIndex6 = 2;
|
||||
Simulator::Schedule (Seconds (6),&Ipv4::SetDown,ipv46, ipv4ifIndex6);
|
||||
Simulator::Schedule (Seconds (7),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
|
||||
Simulator::Schedule (Seconds (8),&Ipv4::SetUp,ipv46, ipv4ifIndex6);
|
||||
Simulator::Schedule (Seconds (9),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
|
||||
|
||||
Simulator::Schedule (Seconds (12),&Ipv4::SetDown,ipv41, ipv4ifIndex1);
|
||||
Simulator::Schedule (Seconds (13),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
|
||||
Simulator::Schedule (Seconds (14),&Ipv4::SetUp,ipv41, ipv4ifIndex1);
|
||||
Simulator::Schedule (Seconds (15),&Ipv4GlobalRoutingHelper::RecomputeRoutingTables);
|
||||
|
||||
NS_LOG_INFO ("Run Simulation.");
|
||||
Simulator::Run ();
|
||||
|
||||
Reference in New Issue
Block a user