21 #include "ns3/core-module.h" 22 #include "ns3/network-module.h" 23 #include "ns3/internet-module.h" 24 #include "ns3/mobility-module.h" 25 #include "ns3/lte-module.h" 26 #include "ns3/applications-module.h" 27 #include "ns3/point-to-point-module.h" 28 #include "ns3/config-store-module.h" 41 <<
" UE IMSI " << imsi
42 <<
": connected to CellId " << cellid
43 <<
" with RNTI " << rnti
52 uint16_t targetCellId)
55 <<
" UE IMSI " << imsi
56 <<
": previously connected to CellId " << cellid
57 <<
" with RNTI " << rnti
58 <<
", doing handover to CellId " << targetCellId
69 <<
" UE IMSI " << imsi
70 <<
": successful handover to CellId " << cellid
71 <<
" with RNTI " << rnti
82 <<
" eNB CellId " << cellid
83 <<
": successful connection of UE with IMSI " << imsi
93 uint16_t targetCellId)
96 <<
" eNB CellId " << cellid
97 <<
": start handover of UE with IMSI " << imsi
99 <<
" to CellId " << targetCellId
110 <<
" eNB CellId " << cellid
111 <<
": completed handover of UE with IMSI " << imsi
123 main (
int argc,
char *argv[])
140 uint16_t numberOfUes = 1;
141 uint16_t numberOfEnbs = 2;
142 uint16_t numBearersPerUe = 2;
144 double distance = 100.0;
145 bool disableDl =
false;
146 bool disableUl =
false;
157 cmd.AddValue (
"numberOfUes",
"Number of UEs", numberOfUes);
158 cmd.AddValue (
"numberOfEnbs",
"Number of eNodeBs", numberOfEnbs);
159 cmd.AddValue (
"simTime",
"Total duration of the simulation", simTime);
160 cmd.AddValue (
"disableDl",
"Disable downlink data flows", disableDl);
161 cmd.AddValue (
"disableUl",
"Disable uplink data flows", disableUl);
162 cmd.Parse (argc, argv);
171 Ptr<Node> pgw = epcHelper->GetPgwNode ();
175 remoteHostContainer.
Create (1);
178 internet.
Install (remoteHostContainer);
187 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
200 enbNodes.
Create (numberOfEnbs);
201 ueNodes.
Create (numberOfUes);
205 for (uint16_t i = 0; i < numberOfEnbs; i++)
207 positionAlloc->
Add (Vector (distance * 2 * i - distance, 0, 0));
209 for (uint16_t i = 0; i < numberOfUes; i++)
211 positionAlloc->
Add (Vector (0, 0, 0));
214 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
215 mobility.SetPositionAllocator (positionAlloc);
230 for (uint16_t i = 0; i < numberOfUes; i++)
232 lteHelper->
Attach (ueLteDevs.
Get (i), enbLteDevs.
Get (0));
239 uint16_t dlPort = 10000;
240 uint16_t ulPort = 20000;
249 for (uint32_t u = 0; u < numberOfUes; ++u)
254 ueStaticRouting->
SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
256 for (uint32_t b = 0; b < numBearersPerUe; ++b)
268 clientApps.Add (dlClientHelper.Install (remoteHost));
271 serverApps.Add (dlPacketSinkHelper.Install (ue));
288 serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
328 Config::Connect (
"/NodeList/*/DeviceList/*/LteEnbRrc/ConnectionEstablished",
330 Config::Connect (
"/NodeList/*/DeviceList/*/LteUeRrc/ConnectionEstablished",
holds a vector of ns3::Application pointers.
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
uint8_t Add(PacketFilter f)
add a PacketFilter to the Traffic Flow Template
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
Simulation virtual time values and global simulation resolution.
static Ipv4Address GetAny(void)
AttributeValue implementation for Boolean.
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
void SetDefaultRoute(Ipv4Address nextHop, uint32_t interface, uint32_t metric=0)
Add a default route to the static routing table.
void HandoverRequest(Time hoTime, Ptr< NetDevice > ueDev, Ptr< NetDevice > sourceEnbDev, Ptr< NetDevice > targetEnbDev)
Manually trigger an X2-based handover.
NetDeviceContainer Install(NodeContainer c)
a class to represent an Ipv4 address mask
static void Run(void)
Run the simulation.
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
aggregate IP/TCP/UDP functionality to existing Nodes.
uint16_t localPortEnd
end of the port number range of the UE
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
Build a set of PointToPointNetDevice objects.
void NotifyConnectionEstablishedEnb(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti)
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
uint8_t ActivateDedicatedEpsBearer(NetDeviceContainer ueDevices, EpsBearer bearer, Ptr< EpcTft > tft)
Activate a dedicated EPS bearer on a given set of UE devices.
void SetHandoverAlgorithmType(std::string type)
Set the type of handover algorithm to be used by eNodeB devices.
void NotifyHandoverEndOkUe(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti)
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Class for representing data rates.
void EnablePdcpTraces(void)
Enable trace sinks for PDCP layer.
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
AttributeValue implementation for Time.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Hold an unsigned integer type.
void NotifyConnectionEstablishedUe(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti)
holds a vector of ns3::NetDevice pointers
void EnablePhyTraces(void)
Enable trace sinks for PHY layer.
Parse command-line arguments.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
void Connect(std::string path, const CallbackBase &cb)
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
void NotifyHandoverEndOkEnb(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti)
Access to the IPv4 forwarding table, interfaces, and configuration.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
uint16_t remotePortEnd
end of the port number range of the remote host
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
void AddX2Interface(NodeContainer enbNodes)
Create an X2 interface between all the eNBs in a given set.
This class contains the specification of EPS Bearers.
static Time Now(void)
Return the current simulation virtual time.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Ptr< RadioBearerStatsCalculator > GetPdcpStats(void)
Helper class used to assign positions and mobility models to nodes.
void AddNetworkRouteTo(Ipv4Address network, Ipv4Mask networkMask, Ipv4Address nextHop, uint32_t interface, uint32_t metric=0)
Add a network route to the static routing table.
Ipv4 addresses are stored in host order in this class.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
void SetEpcHelper(Ptr< EpcHelper > h)
Set the EpcHelper to be used to setup the EPC network in conjunction with the setup of the LTE radio ...
Helper class that adds ns3::Ipv4StaticRouting objects.
AttributeValue implementation for DataRate.
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetDefault(std::string name, const AttributeValue &value)
void Add(Vector v)
Add a position to the list of positions.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void NotifyHandoverStartUe(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint16_t targetCellId)
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
void NotifyHandoverStartEnb(std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint16_t targetCellId)
This class can be used to hold variables of floating point type such as 'double' or 'float'...
Non-GBR TCP-based Video (Buffered Streaming, e.g., www, e-mail...)
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
uint16_t remotePortStart
start of the port number range of the remote host
Ptr< Ipv4StaticRouting > GetStaticRouting(Ptr< Ipv4 > ipv4) const
Try and find the static routing protocol as either the main routing protocol or in the list of routin...
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Implement the data structure representing a TrafficFlowTemplate Packet Filter.
uint16_t localPortStart
start of the port number range of the UE