26#include <ns3/callback.h>
28#include <ns3/ipv4-l3-protocol.h>
29#include <ns3/ipv6-l3-protocol.h>
30#include <ns3/llc-snap-header.h>
33#include <ns3/object-factory.h>
34#include <ns3/object-map.h>
35#include <ns3/packet-burst.h>
36#include <ns3/packet.h>
37#include <ns3/pointer.h>
38#include <ns3/simulator.h>
39#include <ns3/trace-source-accessor.h>
40#include <ns3/uinteger.h>
53 TypeId(
"ns3::LteEnbNetDevice")
55 .AddConstructor<LteEnbNetDevice>()
56 .AddAttribute(
"LteEnbRrc",
57 "The RRC associated to this EnbNetDevice",
61 .AddAttribute(
"LteHandoverAlgorithm",
62 "The handover algorithm associated to this EnbNetDevice",
68 "The automatic neighbour relation function associated to this EnbNetDevice",
72 .AddAttribute(
"LteFfrAlgorithm",
73 "The FFR algorithm associated to this EnbNetDevice",
77 .AddAttribute(
"LteEnbComponentCarrierManager",
78 "The RRC associated to this EnbNetDevice",
82 .AddAttribute(
"ComponentCarrierMap",
83 "List of component carriers.",
89 "Uplink Transmission Bandwidth Configuration in number of Resource Blocks",
96 "Downlink Transmission Bandwidth Configuration in number of Resource Blocks",
101 .AddAttribute(
"CellId",
106 .AddAttribute(
"DlEarfcn",
107 "Downlink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "
108 "as per 3GPP 36.101 Section 5.7.3.",
112 .AddAttribute(
"UlEarfcn",
113 "Uplink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "
114 "as per 3GPP 36.101 Section 5.7.3.",
120 "The Closed Subscriber Group (CSG) identity that this eNodeB belongs to",
126 "If true, only UEs which are members of the CSG (i.e. same CSG ID) "
127 "can gain access to the eNodeB, therefore enforcing closed access mode. "
128 "Otherwise, the eNodeB operates as a non-CSG cell and implements open access mode.",
137 : m_isConstructed(false),
138 m_isConfigured(false),
140 m_componentCarrierManager(nullptr)
224 std::vector<uint16_t> cellIds;
226 cellIds.reserve(
m_ccMap.size());
229 cellIds.push_back(it.second->GetCellId());
237 return m_rrc->HasCellId(cellId);
348std::map<uint8_t, Ptr<ComponentCarrierBaseStation>>
369 it->second->Initialize();
389 "unsupported protocol " << protocolNumber
390 <<
", only IPv4 and IPv6 are supported");
391 return m_rrc->SendData(packet);
a polymophic address class
AttributeValue implementation for Boolean.
static const uint16_t PROT_NUMBER
Protocol number (0x0800)
static const uint16_t PROT_NUMBER
The protocol number for IPv6 (0x86DD).
void SetUlEarfcn(uint32_t earfcn)
std::map< uint8_t, Ptr< ComponentCarrierBaseStation > > GetCcMap() const
bool HasCellId(uint16_t cellId) const
void UpdateConfig()
Propagate attributes and configuration to sub-modules.
uint32_t m_dlEarfcn
DEPRECATE - It is maintained for backward compatibility after adding CA feature- downlink carrier fre...
void SetCsgId(uint32_t csgId)
Associate the eNodeB device with a particular CSG.
Ptr< LteHandoverAlgorithm > m_handoverAlgorithm
the handover algorithm
void SetDlEarfcn(uint32_t earfcn)
void SetCcMap(std::map< uint8_t, Ptr< ComponentCarrierBaseStation > > ccm)
Set the ComponentCarrier Map of the Enb.
bool m_isConfigured
is configured?
bool GetCsgIndication() const
Returns the CSG indication flag of the eNodeB.
void SetUlBandwidth(uint16_t bw)
uint16_t m_dlBandwidth
DEPRECATE - It is maintained for backward compatibility after adding CA feature- downlink bandwidth i...
bool m_isConstructed
is constructed?
uint32_t GetCsgId() const
Returns the CSG ID of the eNodeB.
uint16_t GetDlBandwidth() const
uint32_t GetUlEarfcn() const
uint32_t GetDlEarfcn() const
Ptr< LteEnbRrc > GetRrc() const
void SetCsgIndication(bool csgIndication)
Enable or disable the CSG indication flag.
Ptr< LteEnbRrc > m_rrc
the RRC
Ptr< LteEnbPhy > GetPhy() const
uint16_t m_cellId
Cell Identifier.
uint16_t GetUlBandwidth() const
void DoInitialize() override
Initialize() implementation.
std::vector< uint16_t > GetCellIds() const
Ptr< LteEnbComponentCarrierManager > GetComponentCarrierManager() const
bool m_csgIndication
CSG indication.
void SetDlBandwidth(uint16_t bw)
uint32_t m_ulEarfcn
DEPRECATE - It is maintained for backward compatibility after adding CA feature- uplink carrier frequ...
Ptr< LteFfrAlgorithm > m_ffrAlgorithm
DEPRECATED - It is maintained for backward compatibility after adding CA feature.
Ptr< LteEnbComponentCarrierManager > m_componentCarrierManager
the component carrier manager of this eNb
~LteEnbNetDevice() override
static TypeId GetTypeId()
Get the type ID.
bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber) override
Ptr< LteEnbMac > GetMac() const
std::map< uint8_t, Ptr< ComponentCarrierBaseStation > > m_ccMap
ComponentCarrier map.
uint16_t GetCellId() const
uint16_t m_ulBandwidth
DEPRECATE - It is maintained for backward compatibility after adding CA feature- uplink bandwidth in ...
void DoDispose() override
Destructor implementation.
LteNetDevice provides basic implementation for all LTE network devices.
void DoDispose() override
Destructor implementation.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Hold an unsigned integer type.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeChecker > MakeBooleanChecker()
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
ObjectPtrContainerValue ObjectMapValue
ObjectMapValue is an alias for ObjectPtrContainerValue.
Ptr< const AttributeAccessor > MakeObjectMapAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector.
Ptr< const AttributeChecker > MakeObjectMapChecker()
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Ptr< AttributeChecker > MakePointerChecker()
Create a PointerChecker for a type.
Ptr< const AttributeChecker > MakeUintegerChecker()
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.