Static Routing (Wired)

[Topology] (put the file under scratch)

#include <iostream>

#include <fstream>

#include <string>

#include <cassert>


#include "ns3/core-module.h"

#include "ns3/network-module.h"

#include "ns3/internet-module.h"

#include "ns3/point-to-point-module.h"

#include "ns3/csma-module.h"

#include "ns3/applications-module.h"

#include "ns3/ipv4-static-routing-helper.h"


using namespace ns3;


NS_LOG_COMPONENT_DEFINE ("StaticRoutingSlash32Test");



main (int argc, char *argv[])


  LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);

  LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);


  CommandLine cmd (__FILE__);

  cmd.Parse (argc, argv);


   /* Build nodes. */

  NodeContainer term_0;

  term_0.Create (1);

  NodeContainer term_1;

  term_1.Create (1);

  NodeContainer router_0;

  router_0.Create (1);

  NodeContainer router_1;

  router_1.Create (1);


  /* Build link. */

  PointToPointHelper p2p_p2p_0;

  p2p_p2p_0.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));

  p2p_p2p_0.SetChannelAttribute ("Delay", StringValue ("1ms"));

  PointToPointHelper p2p_p2p_1;

  p2p_p2p_1.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));

  p2p_p2p_1.SetChannelAttribute ("Delay", StringValue ("1ms"));

  PointToPointHelper p2p_p2p_2;

  p2p_p2p_2.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));

  p2p_p2p_2.SetChannelAttribute ("Delay", StringValue ("1ms"));


  /* Build link net device container. */

  NodeContainer all_p2p_0;

  all_p2p_0.Add (router_0);

  all_p2p_0.Add (term_0);

  NetDeviceContainer ndc_p2p_0 = p2p_p2p_0.Install (all_p2p_0);

  NodeContainer all_p2p_1;

  all_p2p_1.Add (router_0);

  all_p2p_1.Add (router_1);

  NetDeviceContainer ndc_p2p_1 = p2p_p2p_1.Install (all_p2p_1);

  NodeContainer all_p2p_2;

  all_p2p_2.Add (router_1);

  all_p2p_2.Add (term_1);

  NetDeviceContainer ndc_p2p_2 = p2p_p2p_2.Install (all_p2p_2);


  /* Install the IP stack. */

  InternetStackHelper internetStackH;

  internetStackH.Install (term_0);

  internetStackH.Install (term_1);

  internetStackH.Install (router_0);

  internetStackH.Install (router_1);


  /* IP assign. */

  Ipv4AddressHelper ipv4;

  ipv4.SetBase ("", "");

  Ipv4InterfaceContainer iface_ndc_p2p_0 = ipv4.Assign (ndc_p2p_0);

  ipv4.SetBase ("", "");

  Ipv4InterfaceContainer iface_ndc_p2p_1 = ipv4.Assign (ndc_p2p_1);

  ipv4.SetBase ("", "");

  Ipv4InterfaceContainer iface_ndc_p2p_2 = ipv4.Assign (ndc_p2p_2);


  //Ipv4GlobalRoutingHelper::PopulateRoutingTables ();


  Ptr<Ipv4> ipv4N0 = term_0.Get (0)->GetObject<Ipv4> ();

  Ptr<Ipv4> ipv4R0 = router_0.Get (0)->GetObject<Ipv4> ();

  Ptr<Ipv4> ipv4R1 = router_1.Get (0)->GetObject<Ipv4> ();

  Ptr<Ipv4> ipv4N1 = term_1.Get (0)->GetObject<Ipv4> (); 


  Ipv4StaticRoutingHelper ipv4RoutingHelper;

  // Create static routes from N0 to R0

  Ptr<Ipv4StaticRouting> staticRoutingN0 = ipv4RoutingHelper.GetStaticRouting (ipv4N0);

  staticRoutingN0->AddHostRouteTo (Ipv4Address (""), Ipv4Address (""), 1);


  // The ifIndex we want on node R0 is 2; 0 corresponds to loopback, 1 to the first point to point link (N0-R1)

  // 2 to the second point to point link (R0-R1)

  Ptr<Ipv4StaticRouting> staticRoutingR0 = ipv4RoutingHelper.GetStaticRouting (ipv4R0);

  staticRoutingR0->AddHostRouteTo (Ipv4Address (""), Ipv4Address (""), 2);

  staticRoutingR0->AddHostRouteTo (Ipv4Address (""), Ipv4Address (""), 1);


  Ptr<Ipv4StaticRouting> staticRoutingR1 = ipv4RoutingHelper.GetStaticRouting (ipv4R1);

  staticRoutingR1->AddHostRouteTo (Ipv4Address (""), Ipv4Address (""), 2);  

  staticRoutingR1->AddHostRouteTo (Ipv4Address (""), Ipv4Address (""), 1); 


  Ptr<Ipv4StaticRouting> staticRoutingN1 = ipv4RoutingHelper.GetStaticRouting (ipv4N1);

  staticRoutingN1->AddHostRouteTo (Ipv4Address (""), Ipv4Address (""), 1);


  UdpEchoServerHelper echoServer (9);

  ApplicationContainer serverApps = echoServer.Install (term_1.Get(0));

  serverApps.Start (Seconds (1.0));

  serverApps.Stop (Seconds (10.0));


  UdpEchoClientHelper echoClient (iface_ndc_p2p_2.GetAddress (1), 9);

  echoClient.SetAttribute ("MaxPackets", UintegerValue (1));

  echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));

  echoClient.SetAttribute ("PacketSize", UintegerValue (1024));


  ApplicationContainer clientApps =

  echoClient.Install (term_0.Get(0));

  clientApps.Start (Seconds (2.0));

  clientApps.Stop (Seconds (10.0));


  Simulator::Stop (Seconds (11.0));

  Simulator::Run ();

  Simulator::Destroy ();


  return 0;





If you remove the red lines, you can only get

The server cannot receive the packet sent from client.




Back to NS3 Learning Guide

Last Modified: 2022/2/11 done



Dr. Chih-Heng Ke

Department of Computer Science and Information Engineering, National Quemoy University, Kinmen, Taiwan