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