24 #include <ns3/llc-snap-header.h>    25 #include <ns3/simulator.h>    26 #include <ns3/callback.h>    28 #include <ns3/packet.h>    29 #include <ns3/lte-net-device.h>    30 #include <ns3/packet-burst.h>    31 #include <ns3/uinteger.h>    32 #include <ns3/trace-source-accessor.h>    33 #include <ns3/pointer.h>    35 #include <ns3/lte-amc.h>    36 #include <ns3/lte-enb-mac.h>    37 #include <ns3/lte-enb-net-device.h>    38 #include <ns3/lte-enb-rrc.h>    39 #include <ns3/lte-ue-net-device.h>    40 #include <ns3/lte-enb-phy.h>    41 #include <ns3/ff-mac-scheduler.h>    42 #include <ns3/lte-handover-algorithm.h>    43 #include <ns3/lte-anr.h>    44 #include <ns3/lte-ffr-algorithm.h>    45 #include <ns3/ipv4-l3-protocol.h>    46 #include <ns3/ipv6-l3-protocol.h>    47 #include <ns3/abort.h>    49 #include <ns3/lte-enb-component-carrier-manager.h>    50 #include <ns3/object-map.h>    51 #include <ns3/object-factory.h>    63     TypeId (
"ns3::LteEnbNetDevice")
    65     .AddConstructor<LteEnbNetDevice> ()
    66     .AddAttribute (
"LteEnbRrc",
    67                    "The RRC associated to this EnbNetDevice",
    70                    MakePointerChecker <LteEnbRrc> ())
    71     .AddAttribute (
"LteHandoverAlgorithm",
    72                    "The handover algorithm associated to this EnbNetDevice",
    75                    MakePointerChecker <LteHandoverAlgorithm> ())
    76     .AddAttribute (
"LteAnr",
    77                    "The automatic neighbour relation function associated to this EnbNetDevice",
    80                    MakePointerChecker <LteAnr> ())
    81     .AddAttribute (
"LteFfrAlgorithm",
    82                    "The FFR algorithm associated to this EnbNetDevice",
    85                    MakePointerChecker <LteFfrAlgorithm> ())
    86     .AddAttribute (
"LteEnbComponentCarrierManager",
    87                    "The RRC associated to this EnbNetDevice",
    90                    MakePointerChecker <LteEnbComponentCarrierManager> ())
    91     .AddAttribute (
"ComponentCarrierMap", 
"List of component carriers.",
    94                    MakeObjectMapChecker<ComponentCarrierEnb> ())
    95     .AddAttribute (
"UlBandwidth",
    96                    "Uplink Transmission Bandwidth Configuration in number of Resource Blocks",
   100                    MakeUintegerChecker<uint8_t> ())
   101     .AddAttribute (
"DlBandwidth",
   102                    "Downlink Transmission Bandwidth Configuration in number of Resource Blocks",
   106                    MakeUintegerChecker<uint8_t> ())
   107     .AddAttribute (
"CellId",
   111                    MakeUintegerChecker<uint16_t> ())
   112     .AddAttribute (
"DlEarfcn",
   113                    "Downlink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "   114                    "as per 3GPP 36.101 Section 5.7.3. ",
   117                    MakeUintegerChecker<uint32_t> (0, 262143))
   118     .AddAttribute (
"UlEarfcn",
   119                    "Uplink E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "   120                    "as per 3GPP 36.101 Section 5.7.3. ",
   123                    MakeUintegerChecker<uint32_t> (0, 262143))
   124     .AddAttribute (
"CsgId",
   125                    "The Closed Subscriber Group (CSG) identity that this eNodeB belongs to",
   129                    MakeUintegerChecker<uint32_t> ())
   130     .AddAttribute (
"CsgIndication",
   131                    "If true, only UEs which are members of the CSG (i.e. same CSG ID) "   132                    "can gain access to the eNodeB, therefore enforcing closed access mode. "   133                    "Otherwise, the eNodeB operates as a non-CSG cell and implements open access mode.",
   143   : m_isConstructed (false),
   144     m_isConfigured (false),
   146     m_componentCarrierManager(0)
   176   for (uint32_t i = 0; i < 
m_ccMap.size (); i++)
   202   return DynamicCast<ComponentCarrierEnb> (
m_ccMap.at (index))->
GetMac ();
   208   return DynamicCast<ComponentCarrierEnb> (
m_ccMap.at (index))->
GetPhy ();
   234       if (it.second->GetCellId () == cellId)
   350 std::map < uint8_t, Ptr<ComponentCarrierBaseStation> >
   371        it->second->Initialize ();
   373   m_rrc->Initialize ();
   379       m_anr->Initialize ();
   392                    "unsupported protocol " << protocolNumber << 
", only IPv4 and IPv6 are supported");
   393   return m_rrc->SendData (packet);
 uint32_t GetDlEarfcn() const
Smart pointer class similar to boost::intrusive_ptr. 
#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. 
void SetUlEarfcn(uint32_t earfcn)
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
virtual void DoDispose(void)
Destructor implementation. 
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Ptr< LteEnbComponentCarrierManager > GetComponentCarrierManager() const
uint16_t m_ulBandwidth
DEPRECATE - It is maintained for backward compatibility after adding CA feature- uplink bandwidth in ...
uint32_t m_dlEarfcn
DEPRECATE - It is maintained for backward compatibility after adding CA feature- downlink carrier fre...
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
uint32_t GetCsgId() const
Returns the CSG ID of the eNodeB. 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
Ptr< LteEnbComponentCarrierManager > m_componentCarrierManager
the component carrier manager of this eNb 
bool m_isConstructed
is constructed? 
void SetUlBandwidth(uint16_t bw)
a polymophic address class 
void UpdateConfig()
Propagate attributes and configuration to sub-modules. 
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
uint16_t GetCellId() const
Hold an unsigned integer type. 
Ptr< LteEnbRrc > m_rrc
the RRC 
virtual void DoInitialize(void)
Initialize() implementation. 
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC. 
Ptr< LteEnbPhy > GetPhy(void) const
uint16_t GetUlBandwidth() const
static TypeId GetTypeId(void)
Get the type ID. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
void SetDlBandwidth(uint16_t bw)
Ptr< LteFfrAlgorithm > m_ffrAlgorithm
DEPRECATED - It is maintained for backward compatibility after adding CA feature. ...
Hold objects of type Ptr<T>. 
uint32_t GetUlEarfcn() const
void SetDlEarfcn(uint32_t earfcn)
virtual void DoDispose(void)
Destructor implementation. 
void SetCcMap(std::map< uint8_t, Ptr< ComponentCarrierBaseStation > > ccm)
Set the ComponentCarrier Map of the Enb. 
void SetCsgIndication(bool csgIndication)
Enable or disable the CSG indication flag. 
uint16_t GetDlBandwidth() const
uint32_t m_ulEarfcn
DEPRECATE - It is maintained for backward compatibility after adding CA feature- uplink carrier frequ...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
bool m_csgIndication
CSG indication. 
bool m_isConfigured
is configured? 
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message. 
Ptr< LteEnbMac > GetMac(void) const
Ptr< const AttributeChecker > MakeBooleanChecker(void)
  
std::map< uint8_t, Ptr< ComponentCarrierBaseStation > > m_ccMap
ComponentCarrier map. 
Ptr< LteHandoverAlgorithm > m_handoverAlgorithm
the handover algorithm 
uint16_t m_cellId
Cell Identifier. 
Ptr< const AttributeAccessor > MakeObjectMapAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector. 
void SetCsgId(uint32_t csgId)
Associate the eNodeB device with a particular CSG. 
virtual ~LteEnbNetDevice(void)
Container for a set of ns3::Object pointers. 
LteNetDevice provides basic implementation for all LTE network devices. 
std::map< uint8_t, Ptr< ComponentCarrierBaseStation > > GetCcMap(void) const
bool GetCsgIndication() const
Returns the CSG indication flag of the eNodeB. 
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
 Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface. 
Ptr< LteEnbRrc > GetRrc() const
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
bool HasCellId(uint16_t cellId) const
static const uint16_t PROT_NUMBER
The protocol number for IPv6 (0x86DD). 
static const uint16_t PROT_NUMBER
Protocol number (0x0800) 
uint16_t m_dlBandwidth
DEPRECATE - It is maintained for backward compatibility after adding CA feature- downlink bandwidth i...