diff options
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.h | 176 |
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 |