Here, we explore the basic concepts and procedures to implement 5G Network in ns-3 on the system. Let’s start!
To implement 5G Network in ns3 contains the New radio (NR) module that obtainable in the ns-3 repository. Any types of module based on 5G network are worked by us .
Here are the procedures to set up the 5G network using the ns-3.
Step-by-Step Guide to Implement a 5G Network in ns-3
- Install ns-3 with NR Module:
- Ensure ns-3 is installed with the NR module. The NR module is available in the ns-3-dev repository.
git clone https://gitlab.com/nsnam/ns-3-dev.git
cd ns-3-dev
./ns3 configure –enable-examples –enable-tests
./ns3 build
- Create a Simulation Script:
- Create a new script file, e.g., 5g-simulation.cc.
- Include Necessary Headers:
#include “ns3/core-module.h”
#include “ns3/network-module.h”
#include “ns3/internet-module.h”
#include “ns3/point-to-point-module.h”
#include “ns3/mobility-module.h”
#include “ns3/applications-module.h”
#include “ns3/nr-module.h”
- Define the Main Function:
using namespace ns3;
int main (int argc, char *argv[])
{
CommandLine cmd;
cmd.Parse (argc, argv);
- Set Up the Network Topology:
- Create nodes for the gNB (5G base stations) and UEs (user equipment)
NodeContainer ueNodes;
ueNodes.Create (2); // Create 2 UEs
NodeContainer gnbNodes;
gnbNodes.Create (1); // Create 1 gNB
- Install the NR Network Devices:
- Install the NR network devices on the gNB and UEs
Ptr<NrHelper> nrHelper = CreateObject<NrHelper> ();
Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
nrHelper->SetEpcHelper (epcHelper);
Ptr<Node> pgw = epcHelper->GetPgwNode ();
// Install NR Devices to the gNB and UEs
NetDeviceContainer gnbNrDevs = nrHelper->InstallGnbDevice (gnbNodes);
NetDeviceContainer ueNrDevs = nrHelper->InstallUeDevice (ueNodes);
// Install the IP stack on the UEs
InternetStackHelper internet;
internet.Install (ueNodes);
// Assign IP addresses to the UEs
Ipv4InterfaceContainer ueIpIface;
ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueNrDevs));
// Attach the UEs to the gNB
nrHelper->Attach (ueNrDevs, gnbNrDevs.Get (0));
- Configure Mobility:
- Set up the mobility model for the gNB and UEs:
MobilityHelper mobility;
mobility.SetMobilityModel (“ns3::ConstantPositionMobilityModel”);
mobility.Install (gnbNodes);
mobility.SetMobilityModel (“ns3::ConstantVelocityMobilityModel”);
mobility.Install (ueNodes);
// Set initial positions and velocities for UEs
Ptr<ConstantVelocityMobilityModel> ueMobility1 = ueNodes.Get(0)->GetObject<ConstantVelocityMobilityModel>();
ueMobility1->SetPosition (Vector (0, 0, 0));
ueMobility1->SetVelocity (Vector (20, 0, 0)); // Moving at 20 m/s
Ptr<ConstantVelocityMobilityModel> ueMobility2 = ueNodes.Get(1)->GetObject<ConstantVelocityMobilityModel>();
ueMobility2->SetPosition (Vector (50, 0, 0));
ueMobility2->SetVelocity (Vector (-10, 0, 0)); // Moving at -10 m/s
- Install Applications:
- Create and install a UDP echo server application on one of the UEs
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (ueNodes.Get (0));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
// Create and install a UDP echo client application on the other UE:
UdpEchoClientHelper echoClient (ueIpIface.GetAddress (0), 9);
echoClient.SetAttribute (“MaxPackets”, UintegerValue (1));
echoClient.SetAttribute (“Interval”, TimeValue (Seconds (1.0)));
echoClient.SetAttribute (“PacketSize”, UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (ueNodes.Get (1));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
- Run the Simulation:
- Define the simulation stop time and start the simulator
Simulator::Stop (Seconds (10.0));
Simulator::Run ();
Simulator::Destroy ();
return 0;
Example Complete Script (5g-simulation.cc):
At the present, we provide the instances script to complete the 5g-simulation in the ns-3 environment
#include “ns3/core-module.h”
#include “ns3/network-module.h”
#include “ns3/internet-module.h”
#include “ns3/point-to-point-module.h”
#include “ns3/mobility-module.h”
#include “ns3/applications-module.h”
#include “ns3/nr-module.h”
using namespace ns3;
int main (int argc, char *argv[])
{
CommandLine cmd;
cmd.Parse (argc, argv);
NodeContainer ueNodes;
ueNodes.Create (2); // Create 2 UEs
NodeContainer gnbNodes;
gnbNodes.Create (1); // Create 1 gNB
Ptr<NrHelper> nrHelper = CreateObject<NrHelper> ();
Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
nrHelper->SetEpcHelper (epcHelper);
Ptr<Node> pgw = epcHelper->GetPgwNode ();
// Install NR Devices to the gNB and UEs
NetDeviceContainer gnbNrDevs = nrHelper->InstallGnbDevice (gnbNodes);
NetDeviceContainer ueNrDevs = nrHelper->InstallUeDevice (ueNodes);
// Install the IP stack on the UEs
InternetStackHelper internet;
internet.Install (ueNodes);
// Assign IP addresses to the UEs
Ipv4InterfaceContainer ueIpIface;
ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueNrDevs));
// Attach the UEs to the gNB
nrHelper->Attach (ueNrDevs, gnbNrDevs.Get (0));
// Set up the mobility model
MobilityHelper mobility;
mobility.SetMobilityModel (“ns3::ConstantPositionMobilityModel”);
mobility.Install (gnbNodes);
mobility.SetMobilityModel (“ns3::ConstantVelocityMobilityModel”);
mobility.Install (ueNodes);
// Set initial positions and velocities for UEs
Ptr<ConstantVelocityMobilityModel> ueMobility1 = ueNodes.Get(0)->GetObject<ConstantVelocityMobilityModel>();
ueMobility1->SetPosition (Vector (0, 0, 0));
ueMobility1->SetVelocity (Vector (20, 0, 0)); // Moving at 20 m/s
Ptr<ConstantVelocityMobilityModel> ueMobility2 = ueNodes.Get(1)->GetObject<ConstantVelocityMobilityModel>();
ueMobility2->SetPosition (Vector (50, 0, 0));
ueMobility2->SetVelocity (Vector (-10, 0, 0)); // Moving at -10 m/s
// Install Applications
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (ueNodes.Get (0));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
UdpEchoClientHelper echoClient (ueIpIface.GetAddress (0), 9);
echoClient.SetAttribute (“MaxPackets”, UintegerValue (1));
echoClient.SetAttribute (“Interval”, TimeValue (Seconds (1.0)));
echoClient.SetAttribute (“PacketSize”, UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (ueNodes.Get (1));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
Simulator::Stop (Seconds (10.0));
Simulator::Run ();
Simulator::Destroy ();
return 0;
}
Explanation:
At this place, we describe,
- Network Configuration:
- Nodes are created for the UEs and gNB.
- The NR network devices are installed on these nodes, and IP addresses are assigned.
- Mobility:
- The mobility model is set for the gNB and UEs. The UEs are given initial positions and velocities to simulate movement.
- Applications:
- A UDP echo server application is installed on one of the UEs.
- A UDP echo client application is installed on the other UE to simulate communication.
- Running the Simulation:
- The simulation is run for a specified duration, and then the simulator is destroyed to clean up.
In conclusion we all know that to simulate and compile 5G network in ns-3 and we supports the numerous kinds of 5G network mechanism. Stay on touch with us.