aboutsummaryrefslogtreecommitdiffstats
path: root/emu-radio/lte-emulator/extensions/tap-point-to-point-epc-helper.h
diff options
context:
space:
mode:
Diffstat (limited to 'emu-radio/lte-emulator/extensions/tap-point-to-point-epc-helper.h')
-rw-r--r--emu-radio/lte-emulator/extensions/tap-point-to-point-epc-helper.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/emu-radio/lte-emulator/extensions/tap-point-to-point-epc-helper.h b/emu-radio/lte-emulator/extensions/tap-point-to-point-epc-helper.h
new file mode 100644
index 00000000..2fd79763
--- /dev/null
+++ b/emu-radio/lte-emulator/extensions/tap-point-to-point-epc-helper.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef TAP_POINT_TO_POINT_EPC_HELPER_H
+#define TAP_POINT_TO_POINT_EPC_HELPER_H
+
+#include <ns3/object.h>
+#include <ns3/ipv4-address-helper.h>
+#include <ns3/data-rate.h>
+#include <ns3/epc-tft.h>
+#include <ns3/eps-bearer.h>
+#include <ns3/epc-helper.h>
+
+namespace ns3 {
+
+class Node;
+class NetDevice;
+class VirtualNetDevice;
+class EpcSgwPgwApplication;
+class EpcX2;
+class EpcMme;
+
+/**
+ * \ingroup lte
+ * \brief Create an EPC network with PointToPoint links
+ *
+ * This Helper will create an EPC network topology comprising of a
+ * single node that implements both the SGW and PGW functionality, and
+ * an MME node. The S1-U, X2-U and X2-C interfaces are realized over
+ * PointToPoint links.
+ */
+
+/**
+ * NOTE: TapPointToPointEpcHelper is modified from PointToPointEpcHelper in ns3 lte module to support
+ * tap device used with lte device and configuration of UE IP address
+ */
+class TapPointToPointEpcHelper : public EpcHelper
+{
+public:
+
+ /**
+ * Constructor
+ * \param ueSubnetAddr the ue subent ip prefix to be used for configuration, default value is "7.0.0.0"
+ * \param ueSubnetMask UesubnetMask is by default "255.0.0.0"
+ */
+ TapPointToPointEpcHelper (std::string ueSubnetAddr="7.0.0.0", std::string ueSubnetMask="255.0.0.0", uint32_t id=1);
+
+ /**
+ * Destructor
+ */
+ virtual ~TapPointToPointEpcHelper ();
+
+ // inherited from Object
+ /**
+ * Register this type.
+ * \return The object TypeId.
+ */
+ static TypeId GetTypeId (void);
+ virtual void DoDispose ();
+
+ // inherited from EpcHelper
+ virtual void AddEnb (Ptr<Node> enbNode, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId);
+ virtual void AddUe (Ptr<NetDevice> ueLteDevice, uint64_t imsi);
+ virtual void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2);
+ virtual uint8_t ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
+ virtual Ptr<Node> GetPgwNode ();
+ virtual Ipv4InterfaceContainer AssignUeIpv4Address (NetDeviceContainer ueDevices);
+ virtual Ipv4Address GetUeDefaultGatewayAddress ();
+
+ /** \brief explicity assign IP address to an UE device
+ *
+ */
+ Ipv4InterfaceContainer AssignUeIpv4Address (Ptr<NetDevice> ueLteDevice, Ipv4Address ueIpAddress);
+
+ private:
+
+ /**
+ * helper to assign addresses to UE devices as well as to the TUN device of the SGW/PGW
+ */
+ Ipv4AddressHelper m_ueAddressHelper;
+
+ /**
+ * SGW-PGW network element
+ */
+ Ptr<Node> m_sgwPgw;
+
+ /**
+ * SGW-PGW application
+ */
+ Ptr<EpcSgwPgwApplication> m_sgwPgwApp;
+
+ /**
+ * TUN device implementing tunneling of user data over GTP-U/UDP/IP
+ */
+ Ptr<VirtualNetDevice> m_tunDevice;
+
+ /**
+ * MME network element
+ */
+ Ptr<EpcMme> m_mme;
+
+ /**
+ * S1-U interfaces
+ */
+
+ /**
+ * helper to assign addresses to S1-U NetDevices
+ */
+ Ipv4AddressHelper m_s1uIpv4AddressHelper;
+
+ /**
+ * The data rate to be used for the next S1-U link to be created
+ */
+ DataRate m_s1uLinkDataRate;
+
+ /**
+ * The delay to be used for the next S1-U link to be created
+ */
+ Time m_s1uLinkDelay;
+
+ /**
+ * 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.
+ */
+ uint16_t m_s1uLinkMtu;
+
+ /**
+ * UDP port where the GTP-U Socket is bound, fixed by the standard as 2152
+ */
+ uint16_t m_gtpuUdpPort;
+
+ /**
+ * Map storing for each IMSI the corresponding eNB NetDevice
+ */
+ std::map<uint64_t, Ptr<NetDevice> > m_imsiEnbDeviceMap;
+
+ /**
+ * helper to assign addresses to X2 NetDevices
+ */
+ Ipv4AddressHelper m_x2Ipv4AddressHelper;
+
+ /**
+ * The data rate to be used for the next X2 link to be created
+ */
+ DataRate m_x2LinkDataRate;
+
+ /**
+ * The delay to be used for the next X2 link to be created
+ */
+ Time m_x2LinkDelay;
+
+ /**
+ * The MTU of the next X2 link to be created. Note that,
+ * because of some big X2 messages, you need a big MTU.
+ */
+ uint16_t m_x2LinkMtu;
+
+};
+
+} // namespace ns3
+
+#endif // TAP_POINT_TO_POINT_EPC_HELPER_H