A Discrete-Event Network Simulator
API
point-to-point-epc-helper.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011-2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Jaume Nin <jnin@cttc.es>
19  * Nicola Baldo <nbaldo@cttc.es>
20  * Manuel Requena <manuel.requena@cttc.es>
21  * (most of the code refactored to no-backhaul-epc-helper.cc)
22  */
23 
24 #include "ns3/boolean.h"
25 #include "ns3/string.h"
26 #include "ns3/log.h"
27 #include "ns3/point-to-point-helper.h"
28 
29 #include "ns3/point-to-point-epc-helper.h"
30 
31 namespace ns3 {
32 
33 NS_LOG_COMPONENT_DEFINE ("PointToPointEpcHelper");
34 
35 NS_OBJECT_ENSURE_REGISTERED (PointToPointEpcHelper);
36 
37 
40 {
41  NS_LOG_FUNCTION (this);
42  // To access the attribute value within the constructor
44 
45  // since we use point-to-point links for the backhaul links,
46  // we use a /30 subnet which can hold exactly two addresses
47  // (remember that net broadcast and null address are not valid)
48  m_s1uIpv4AddressHelper.SetBase ("10.0.0.0", "255.255.255.252");
49  m_s1apIpv4AddressHelper.SetBase ("11.0.0.0", "255.255.255.252");
50 }
51 
53 {
54  NS_LOG_FUNCTION (this);
55 }
56 
57 TypeId
59 {
61  static TypeId tid = TypeId ("ns3::PointToPointEpcHelper")
63  .SetGroupName ("Lte")
64  .AddConstructor<PointToPointEpcHelper> ()
65  .AddAttribute ("S1uLinkDataRate",
66  "The data rate to be used for the next S1-U link to be created",
67  DataRateValue (DataRate ("10Gb/s")),
70  .AddAttribute ("S1uLinkDelay",
71  "The delay to be used for the next S1-U link to be created",
72  TimeValue (Seconds (0)),
74  MakeTimeChecker ())
75  .AddAttribute ("S1uLinkMtu",
76  "The MTU of the next S1-U link to be created. Note that, because of the additional GTP/UDP/IP tunneling overhead, you need a MTU larger than the end-to-end MTU that you want to support.",
77  UintegerValue (2000),
79  MakeUintegerChecker<uint16_t> ())
80  .AddAttribute ("S1uLinkPcapPrefix",
81  "Prefix for Pcap generated by S1-U link",
82  StringValue ("s1u"),
85  .AddAttribute ("S1uLinkEnablePcap",
86  "Enable Pcap for X2 link",
87  BooleanValue (false),
90  ;
91  return tid;
92 }
93 
94 TypeId
96 {
97  return GetTypeId ();
98 }
99 
100 void
102 {
103  NS_LOG_FUNCTION (this);
105 }
106 
107 
108 void
109 PointToPointEpcHelper::AddEnb (Ptr<Node> enb, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId)
110 {
111  NS_LOG_FUNCTION (this << enb << lteEnbNetDevice << cellId);
112 
113  NoBackhaulEpcHelper::AddEnb (enb, lteEnbNetDevice, cellId);
114 
115  // create a point to point link between the eNB and the SGW with
116  // the corresponding new NetDevices on each side
117  Ptr<Node> sgw = GetSgwNode ();
118 
119  PointToPointHelper p2ph;
122  p2ph.SetChannelAttribute ("Delay", TimeValue (m_s1uLinkDelay));
123  NetDeviceContainer enbSgwDevices = p2ph.Install (enb, sgw);
124  NS_LOG_LOGIC ("Ipv4 ifaces of the eNB after installing p2p dev: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());
125 
127  {
129  }
130 
132  Ipv4InterfaceContainer enbSgwIpIfaces = m_s1uIpv4AddressHelper.Assign (enbSgwDevices);
133  NS_LOG_LOGIC ("number of Ipv4 ifaces of the eNB after assigning Ipv4 addr to S1 dev: " << enb->GetObject<Ipv4> ()->GetNInterfaces ());
134 
135  Ipv4Address enbS1uAddress = enbSgwIpIfaces.GetAddress (0);
136  Ipv4Address sgwS1uAddress = enbSgwIpIfaces.GetAddress (1);
137 
138  NoBackhaulEpcHelper::AddS1Interface (enb, enbS1uAddress, sgwS1uAddress, cellId);
139 }
140 
141 } // namespace ns3
Ptr< const AttributeChecker > MakeStringChecker(void)
Definition: string.cc:30
DataRate m_s1uLinkDataRate
The data rate to be used for the next S1-U link to be created.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
AttributeValue implementation for Boolean.
Definition: boolean.h:36
virtual void AddEnb(Ptr< Node > enbNode, Ptr< NetDevice > lteEnbNetDevice, uint16_t cellId)
Add an eNB to the EPC.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
static TypeId GetTypeId(void)
Register this type.
Hold variables of type string.
Definition: string.h:41
NetDeviceContainer Install(NodeContainer c)
uint16_t m_s1uLinkMtu
The MTU of the next S1-U link to be created.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: boolean.h:85
std::string m_s1uLinkPcapPrefix
Prefix for the PCAP file for the S1 link.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
Build a set of PointToPointNetDevice objects.
TypeId GetInstanceTypeId() const
Get the most derived TypeId for this Object.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
Ptr< const AttributeChecker > MakeDataRateChecker(void)
Definition: data-rate.cc:30
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Definition: time.cc:449
Class for representing data rates.
Definition: data-rate.h:88
void EnablePcapAll(std::string prefix, bool promiscuous=false)
Enable pcap output on each device (which is of the appropriate type) in the set of all nodes created ...
Time m_s1uLinkDelay
The delay to be used for the next S1-U link to be created.
AttributeValue implementation for Time.
Definition: nstime.h:1132
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
Hold an unsigned integer type.
Definition: uinteger.h:44
List of Attribute name, value and checker triples used to construct Objects.
holds a vector of ns3::NetDevice pointers
virtual void AddS1Interface(Ptr< Node > enb, Ipv4Address enbAddress, Ipv4Address sgwAddress, uint16_t cellId=0)
Add an S1 interface between an eNB and a SGW.
virtual void DoDispose()
Destructor implementation.
Ptr< const AttributeAccessor > MakeDataRateAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: data-rate.h:242
virtual void AddEnb(Ptr< Node > enbNode, Ptr< NetDevice > lteEnbNetDevice, uint16_t cellId)
Add an eNB to the EPC.
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:76
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:464
Create an EPC network with PointToPoint links between the core network nodes.
virtual void DoDispose()
Destructor implementation.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Definition: boolean.cc:121
void ConstructSelf(const AttributeConstructionList &attributes)
Complete construction of ObjectBase; invoked by derived classes.
Definition: object-base.cc:80
Create an EPC network with PointToPoint links in the backhaul network.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: nstime.h:1133
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Ipv4AddressHelper m_s1uIpv4AddressHelper
S1-U interfaces.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
AttributeValue implementation for DataRate.
Definition: data-rate.h:242
virtual ~PointToPointEpcHelper()
Destructor.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1070
bool m_s1uLinkEnablePcap
Enable PCAP generation for S1 link.
Ipv4Address NewNetwork(void)
Increment the network number and reset the IP address counter to the base value provided in the SetBa...
Ptr< const AttributeAccessor > MakeStringAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: string.h:42
virtual Ptr< Node > GetSgwNode() const
Get the SGW node.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: uinteger.h:45
Ipv4AddressHelper m_s1apIpv4AddressHelper
Helper to assign addresses to S1-MME NetDevices.
a unique identifier for an interface.
Definition: type-id.h:58
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:923
virtual uint32_t GetNInterfaces(void) const =0
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.