From 048daabdab742e7cb4cedb28382cca96b18d5703 Mon Sep 17 00:00:00 2001 From: Biljana Bojovic Date: Thu, 26 Jan 2017 08:32:10 +0100 Subject: [PATCH] lte: minor modifications to prepare module for model refactoring --- src/lte/bindings/modulegen__gcc_ILP32.py | 50 +++++++++++- src/lte/bindings/modulegen__gcc_LP64.py | 50 +++++++++++- src/lte/helper/lte-helper.cc | 97 +++++++++++++++++++++++- src/lte/helper/lte-helper.h | 92 +++++++++++++++++++++- src/lte/model/lte-enb-mac.cc | 27 ++++++- src/lte/model/lte-enb-mac.h | 21 +++++ src/lte/model/lte-ue-net-device.cc | 9 ++- 7 files changed, 338 insertions(+), 8 deletions(-) diff --git a/src/lte/bindings/modulegen__gcc_ILP32.py b/src/lte/bindings/modulegen__gcc_ILP32.py index 07dd974d8..1afafaa28 100644 --- a/src/lte/bindings/modulegen__gcc_ILP32.py +++ b/src/lte/bindings/modulegen__gcc_ILP32.py @@ -13303,7 +13303,7 @@ def register_Ns3CcHelper_methods(root_module, cls): 'void', [], is_virtual=True) - ## cc-helper.h (module 'lte'): std::map,std::less,std::allocator > > > ns3::CcHelper::EquallySpacedCcs() [member function] + ## cc-helper.h (module 'lte'): std::map, std::less, std::allocator > > > ns3::CcHelper::EquallySpacedCcs() [member function] cls.add_method('EquallySpacedCcs', 'std::map< unsigned char, ns3::Ptr< ns3::ComponentCarrier > >', []) @@ -16072,6 +16072,10 @@ def register_Ns3LteEnbMac_methods(root_module, cls): cls.add_method('GetFfMacSchedSapUser', 'ns3::FfMacSchedSapUser *', []) + ## lte-enb-mac.h (module 'lte'): ns3::LteCcmMacSapProvider * ns3::LteEnbMac::GetLteCcmMacSapProvider() [member function] + cls.add_method('GetLteCcmMacSapProvider', + 'ns3::LteCcmMacSapProvider *', + []) ## lte-enb-mac.h (module 'lte'): ns3::LteEnbCmacSapProvider * ns3::LteEnbMac::GetLteEnbCmacSapProvider() [member function] cls.add_method('GetLteEnbCmacSapProvider', 'ns3::LteEnbCmacSapProvider *', @@ -16101,6 +16105,10 @@ def register_Ns3LteEnbMac_methods(root_module, cls): cls.add_method('SetFfMacSchedSapProvider', 'void', [param('ns3::FfMacSchedSapProvider *', 's')]) + ## lte-enb-mac.h (module 'lte'): void ns3::LteEnbMac::SetLteCcmMacSapUser(ns3::LteCcmMacSapUser * s) [member function] + cls.add_method('SetLteCcmMacSapUser', + 'void', + [param('ns3::LteCcmMacSapUser *', 's')]) ## lte-enb-mac.h (module 'lte'): void ns3::LteEnbMac::SetLteEnbCmacSapUser(ns3::LteEnbCmacSapUser * s) [member function] cls.add_method('SetLteEnbCmacSapUser', 'void', @@ -17445,6 +17453,16 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('EnableUlTxPhyTraces', 'void', []) + ## lte-helper.h (module 'lte'): ns3::Ptr ns3::LteHelper::GetDownlinkSpectrumChannel() const [member function] + cls.add_method('GetDownlinkSpectrumChannel', + 'ns3::Ptr< ns3::SpectrumChannel >', + [], + is_const=True) + ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetEnbComponentCarrierManagerType() const [member function] + cls.add_method('GetEnbComponentCarrierManagerType', + 'std::string', + [], + is_const=True) ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetFfrAlgorithmType() const [member function] cls.add_method('GetFfrAlgorithmType', 'std::string', @@ -17473,6 +17491,16 @@ def register_Ns3LteHelper_methods(root_module, cls): 'ns3::TypeId', [], is_static=True) + ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetUeComponentCarrierManagerType() const [member function] + cls.add_method('GetUeComponentCarrierManagerType', + 'std::string', + [], + is_const=True) + ## lte-helper.h (module 'lte'): ns3::Ptr ns3::LteHelper::GetUplinkSpectrumChannel() const [member function] + cls.add_method('GetUplinkSpectrumChannel', + 'ns3::Ptr< ns3::SpectrumChannel >', + [], + is_const=True) ## lte-helper.h (module 'lte'): void ns3::LteHelper::HandoverRequest(ns3::Time hoTime, ns3::Ptr ueDev, ns3::Ptr sourceEnbDev, ns3::Ptr targetEnbDev) [member function] cls.add_method('HandoverRequest', 'void', @@ -17485,6 +17513,10 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('InstallUeDevice', 'ns3::NetDeviceContainer', [param('ns3::NodeContainer', 'c')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetCcPhyParams(std::map, std::less, std::allocator > > > ccmap) [member function] + cls.add_method('SetCcPhyParams', + 'void', + [param('std::map< unsigned char, ns3::Ptr< ns3::ComponentCarrier > >', 'ccmap')]) ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbAntennaModelAttribute(std::string n, ns3::AttributeValue const & v) [member function] cls.add_method('SetEnbAntennaModelAttribute', 'void', @@ -17493,6 +17525,14 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('SetEnbAntennaModelType', 'void', [param('std::string', 'type')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbComponentCarrierManagerAttribute(std::string n, ns3::AttributeValue const & v) [member function] + cls.add_method('SetEnbComponentCarrierManagerAttribute', + 'void', + [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbComponentCarrierManagerType(std::string type) [member function] + cls.add_method('SetEnbComponentCarrierManagerType', + 'void', + [param('std::string', 'type')]) ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbDeviceAttribute(std::string n, ns3::AttributeValue const & v) [member function] cls.add_method('SetEnbDeviceAttribute', 'void', @@ -17557,6 +17597,14 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('SetUeAntennaModelType', 'void', [param('std::string', 'type')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeComponentCarrierManagerAttribute(std::string n, ns3::AttributeValue const & v) [member function] + cls.add_method('SetUeComponentCarrierManagerAttribute', + 'void', + [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeComponentCarrierManagerType(std::string type) [member function] + cls.add_method('SetUeComponentCarrierManagerType', + 'void', + [param('std::string', 'type')]) ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeDeviceAttribute(std::string n, ns3::AttributeValue const & v) [member function] cls.add_method('SetUeDeviceAttribute', 'void', diff --git a/src/lte/bindings/modulegen__gcc_LP64.py b/src/lte/bindings/modulegen__gcc_LP64.py index 4c532c371..1471462dc 100644 --- a/src/lte/bindings/modulegen__gcc_LP64.py +++ b/src/lte/bindings/modulegen__gcc_LP64.py @@ -13303,7 +13303,7 @@ def register_Ns3CcHelper_methods(root_module, cls): 'void', [], is_virtual=True) - ## cc-helper.h (module 'lte'): std::map,std::less,std::allocator > > > ns3::CcHelper::EquallySpacedCcs() [member function] + ## cc-helper.h (module 'lte'): std::map, std::less, std::allocator > > > ns3::CcHelper::EquallySpacedCcs() [member function] cls.add_method('EquallySpacedCcs', 'std::map< unsigned char, ns3::Ptr< ns3::ComponentCarrier > >', []) @@ -16072,6 +16072,10 @@ def register_Ns3LteEnbMac_methods(root_module, cls): cls.add_method('GetFfMacSchedSapUser', 'ns3::FfMacSchedSapUser *', []) + ## lte-enb-mac.h (module 'lte'): ns3::LteCcmMacSapProvider * ns3::LteEnbMac::GetLteCcmMacSapProvider() [member function] + cls.add_method('GetLteCcmMacSapProvider', + 'ns3::LteCcmMacSapProvider *', + []) ## lte-enb-mac.h (module 'lte'): ns3::LteEnbCmacSapProvider * ns3::LteEnbMac::GetLteEnbCmacSapProvider() [member function] cls.add_method('GetLteEnbCmacSapProvider', 'ns3::LteEnbCmacSapProvider *', @@ -16101,6 +16105,10 @@ def register_Ns3LteEnbMac_methods(root_module, cls): cls.add_method('SetFfMacSchedSapProvider', 'void', [param('ns3::FfMacSchedSapProvider *', 's')]) + ## lte-enb-mac.h (module 'lte'): void ns3::LteEnbMac::SetLteCcmMacSapUser(ns3::LteCcmMacSapUser * s) [member function] + cls.add_method('SetLteCcmMacSapUser', + 'void', + [param('ns3::LteCcmMacSapUser *', 's')]) ## lte-enb-mac.h (module 'lte'): void ns3::LteEnbMac::SetLteEnbCmacSapUser(ns3::LteEnbCmacSapUser * s) [member function] cls.add_method('SetLteEnbCmacSapUser', 'void', @@ -17445,6 +17453,16 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('EnableUlTxPhyTraces', 'void', []) + ## lte-helper.h (module 'lte'): ns3::Ptr ns3::LteHelper::GetDownlinkSpectrumChannel() const [member function] + cls.add_method('GetDownlinkSpectrumChannel', + 'ns3::Ptr< ns3::SpectrumChannel >', + [], + is_const=True) + ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetEnbComponentCarrierManagerType() const [member function] + cls.add_method('GetEnbComponentCarrierManagerType', + 'std::string', + [], + is_const=True) ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetFfrAlgorithmType() const [member function] cls.add_method('GetFfrAlgorithmType', 'std::string', @@ -17473,6 +17491,16 @@ def register_Ns3LteHelper_methods(root_module, cls): 'ns3::TypeId', [], is_static=True) + ## lte-helper.h (module 'lte'): std::string ns3::LteHelper::GetUeComponentCarrierManagerType() const [member function] + cls.add_method('GetUeComponentCarrierManagerType', + 'std::string', + [], + is_const=True) + ## lte-helper.h (module 'lte'): ns3::Ptr ns3::LteHelper::GetUplinkSpectrumChannel() const [member function] + cls.add_method('GetUplinkSpectrumChannel', + 'ns3::Ptr< ns3::SpectrumChannel >', + [], + is_const=True) ## lte-helper.h (module 'lte'): void ns3::LteHelper::HandoverRequest(ns3::Time hoTime, ns3::Ptr ueDev, ns3::Ptr sourceEnbDev, ns3::Ptr targetEnbDev) [member function] cls.add_method('HandoverRequest', 'void', @@ -17485,6 +17513,10 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('InstallUeDevice', 'ns3::NetDeviceContainer', [param('ns3::NodeContainer', 'c')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetCcPhyParams(std::map, std::less, std::allocator > > > ccmap) [member function] + cls.add_method('SetCcPhyParams', + 'void', + [param('std::map< unsigned char, ns3::Ptr< ns3::ComponentCarrier > >', 'ccmap')]) ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbAntennaModelAttribute(std::string n, ns3::AttributeValue const & v) [member function] cls.add_method('SetEnbAntennaModelAttribute', 'void', @@ -17493,6 +17525,14 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('SetEnbAntennaModelType', 'void', [param('std::string', 'type')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbComponentCarrierManagerAttribute(std::string n, ns3::AttributeValue const & v) [member function] + cls.add_method('SetEnbComponentCarrierManagerAttribute', + 'void', + [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbComponentCarrierManagerType(std::string type) [member function] + cls.add_method('SetEnbComponentCarrierManagerType', + 'void', + [param('std::string', 'type')]) ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetEnbDeviceAttribute(std::string n, ns3::AttributeValue const & v) [member function] cls.add_method('SetEnbDeviceAttribute', 'void', @@ -17557,6 +17597,14 @@ def register_Ns3LteHelper_methods(root_module, cls): cls.add_method('SetUeAntennaModelType', 'void', [param('std::string', 'type')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeComponentCarrierManagerAttribute(std::string n, ns3::AttributeValue const & v) [member function] + cls.add_method('SetUeComponentCarrierManagerAttribute', + 'void', + [param('std::string', 'n'), param('ns3::AttributeValue const &', 'v')]) + ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeComponentCarrierManagerType(std::string type) [member function] + cls.add_method('SetUeComponentCarrierManagerType', + 'void', + [param('std::string', 'type')]) ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetUeDeviceAttribute(std::string n, ns3::AttributeValue const & v) [member function] cls.add_method('SetUeDeviceAttribute', 'void', diff --git a/src/lte/helper/lte-helper.cc b/src/lte/helper/lte-helper.cc index 7bc04cc8b..78455854d 100644 --- a/src/lte/helper/lte-helper.cc +++ b/src/lte/helper/lte-helper.cc @@ -45,6 +45,8 @@ #include #include #include +#include +#include #include #include #include @@ -61,6 +63,9 @@ #include #include #include +#include +#include +#include namespace ns3 { @@ -200,6 +205,34 @@ TypeId LteHelper::GetTypeId (void) BooleanValue (true), MakeBooleanAccessor (&LteHelper::m_usePdschForCqiGeneration), MakeBooleanChecker ()) + .AddAttribute ("EnbComponentCarrierManager", + "The type of Component Carrier Manager to be used for eNBs. " + "The allowed values for this attributes are the type names " + "of any class inheriting ns3::LteEnbComponentCarrierManager.", + StringValue ("ns3::NoOpComponentCarrierManager"), + MakeStringAccessor (&LteHelper::SetEnbComponentCarrierManagerType, + &LteHelper::GetEnbComponentCarrierManagerType), + MakeStringChecker ()) + .AddAttribute ("UeComponentCarrierManager", + "The type of Component Carrier Manager to be used for UEs. " + "The allowed values for this attributes are the type names " + "of any class inheriting ns3::LteUeComponentCarrierManager.", + StringValue ("ns3::SimpleUeComponentCarrierManager"), + MakeStringAccessor (&LteHelper::SetUeComponentCarrierManagerType, + &LteHelper::GetUeComponentCarrierManagerType), + MakeStringChecker ()) + .AddAttribute ("UseCa", + "If true, Carrier Aggregation feature is enabled and a valid Component Carrier Map is expected." + "If false, single carrier simulation.", + BooleanValue (false), + MakeBooleanAccessor (&LteHelper::m_useCa), + MakeBooleanChecker ()) + .AddAttribute ("NumberOfComponentCarriers", + "Set the number of Component carrier to use " + "If it is more than one and m_useCa is false, it will raise an error ", + UintegerValue (1), + MakeUintegerAccessor (&LteHelper::m_noOfCcs), + MakeUintegerChecker (1, 3)) ; return tid; } @@ -213,6 +246,18 @@ LteHelper::DoDispose () Object::DoDispose (); } +Ptr +LteHelper::GetUplinkSpectrumChannel (void) const +{ + return m_uplinkChannel; +} + +Ptr +LteHelper::GetDownlinkSpectrumChannel (void) const +{ + return m_downlinkChannel; +} + void LteHelper::SetEpcHelper (Ptr h) @@ -285,8 +330,50 @@ LteHelper::SetHandoverAlgorithmAttribute (std::string n, const AttributeValue &v } -void -LteHelper::SetPathlossModelType (std::string type) +std::string +LteHelper::GetEnbComponentCarrierManagerType () const +{ + return m_enbComponentCarrierManagerFactory.GetTypeId ().GetName (); +} + +void +LteHelper::SetEnbComponentCarrierManagerType (std::string type) +{ + NS_LOG_FUNCTION (this << type); + m_enbComponentCarrierManagerFactory = ObjectFactory (); + m_enbComponentCarrierManagerFactory.SetTypeId (type); +} + +void +LteHelper::SetEnbComponentCarrierManagerAttribute (std::string n, const AttributeValue &v) +{ + NS_LOG_FUNCTION (this << n); + m_enbComponentCarrierManagerFactory.Set (n, v); +} + +std::string +LteHelper::GetUeComponentCarrierManagerType () const +{ + return m_ueComponentCarrierManagerFactory.GetTypeId ().GetName (); +} + +void +LteHelper::SetUeComponentCarrierManagerType (std::string type) +{ + NS_LOG_FUNCTION (this << type); + m_ueComponentCarrierManagerFactory = ObjectFactory (); + m_ueComponentCarrierManagerFactory.SetTypeId (type); +} + +void +LteHelper::SetUeComponentCarrierManagerAttribute (std::string n, const AttributeValue &v) +{ + NS_LOG_FUNCTION (this << n); + m_ueComponentCarrierManagerFactory.Set (n, v); +} + +void +LteHelper::SetPathlossModelType (std::string type) { NS_LOG_FUNCTION (this << type); m_dlPathlossModelFactory = ObjectFactory (); @@ -377,6 +464,12 @@ LteHelper::SetSpectrumChannelAttribute (std::string n, const AttributeValue &v) m_channelFactory.Set (n, v); } +void +LteHelper::SetCcPhyParams ( std::map< uint8_t, Ptr > ccMapParams) +{ + NS_LOG_FUNCTION (this); + m_componentCarrierPhyParams = ccMapParams; +} NetDeviceContainer LteHelper::InstallEnbDevice (NodeContainer c) diff --git a/src/lte/helper/lte-helper.h b/src/lte/helper/lte-helper.h index 0204aaaca..088a1e61b 100644 --- a/src/lte/helper/lte-helper.h +++ b/src/lte/helper/lte-helper.h @@ -37,6 +37,9 @@ #include #include #include +#include +#include +#include namespace ns3 { @@ -76,6 +79,7 @@ class SpectrumPropagationLossModel; * * Handover algorithm * * FFR (frequency reuse) algorithm * * ANR (automatic neighbour relation) + * * CCM (Carrier Component Manager) * + EPC related models (EPC application, Internet stack, X2 interface) * - UE node(s) * + Mobility model @@ -263,7 +267,15 @@ public: */ void SetUeAntennaModelAttribute (std::string n, const AttributeValue &v); - /** + /** + * This method is used to send the ComponentCarrier map created with CcHelper + * to the helper, the structure will be used within InstallSingleEnbDevice + * + * \param ccmap, the component carrier map + */ + void SetCcPhyParams (std::map< uint8_t, Ptr > ccmap); + + /** * Set the type of spectrum channel to be used in both DL and UL. * * \param type type of spectrum channel model, must be a type name of any @@ -280,6 +292,51 @@ public: */ void SetSpectrumChannelAttribute (std::string n, const AttributeValue &v); + /** + * Set the type of carrier component algorithm to be used by eNodeB devices. + * + * \param type type of carrier component manager + * + */ + void SetEnbComponentCarrierManagerType (std::string type); + + /** + * + * \return the carrier enb component carrier manager type + */ + std::string GetEnbComponentCarrierManagerType () const; + + /** + * Set an attribute for the enb component carrier manager to be created. + * + * \param n the name of the attribute + * \param v the value of the attribute + */ + void SetEnbComponentCarrierManagerAttribute (std::string n, const AttributeValue &v); + + /** + * Set the type of Component Carrier Manager to be used by Ue devices. + * + * \param type type of UE Component Carrier Manager + * + */ + void SetUeComponentCarrierManagerType (std::string type); + + + /** + * + * \return the carrier ue component carrier manager type + */ + std::string GetUeComponentCarrierManagerType () const; + + /** + * Set an attribute for the ue component carrier manager to be created. + * + * \param n the name of the attribute + * \param v the value of the attribute + */ + void SetUeComponentCarrierManagerAttribute (std::string n, const AttributeValue &v); + /** * Create a set of eNodeB devices. * @@ -590,6 +647,18 @@ public: */ int64_t AssignStreams (NetDeviceContainer c, int64_t stream); + /** + * \return a pointer to the SpectrumChannel instance used for the uplink + */ + Ptr GetUplinkSpectrumChannel (void) const; + + + /** + * \return a pointer to the SpectrumChannel instance used for the downlink + */ + Ptr GetDownlinkSpectrumChannel (void) const; + + protected: // inherited from Object virtual void DoInitialize (void); @@ -653,6 +722,10 @@ private: ObjectFactory m_ffrAlgorithmFactory; /// Factory of handover algorithm object. ObjectFactory m_handoverAlgorithmFactory; + /// Factory of enb component carrier manager object. + ObjectFactory m_enbComponentCarrierManagerFactory; + /// Factory of ue component carrier manager object. + ObjectFactory m_ueComponentCarrierManagerFactory; /// Factory of LteEnbNetDevice objects. ObjectFactory m_enbNetDeviceFactory; /// Factory of antenna object for eNodeB. @@ -732,7 +805,22 @@ private: */ bool m_usePdschForCqiGeneration; -}; // end of `class LteHelper` + /** + * The `UseCa` attribute. If true, Carrier Aggregation is enabled. + * Hence, the helper will expec a valid component carrier map + * If it is false, the component carrier will be created within the LteHelper + * this is to mantain the backwards compatibility with user script + */ + bool m_useCa; + + /** + * This contains all the information about each component carrier + */ + std::map< uint8_t, Ptr > m_componentCarrierPhyParams; + + uint16_t m_noOfCcs; + +}; // end of `class LteHelper` } // namespace ns3 diff --git a/src/lte/model/lte-enb-mac.cc b/src/lte/model/lte-enb-mac.cc index 050dbad28..c1e0eb1b5 100644 --- a/src/lte/model/lte-enb-mac.cc +++ b/src/lte/model/lte-enb-mac.cc @@ -38,6 +38,7 @@ #include #include "ns3/lte-mac-sap.h" +#include "ns3/lte-enb-cmac-sap.h" #include @@ -353,7 +354,8 @@ LteEnbMac::GetTypeId (void) } -LteEnbMac::LteEnbMac () +LteEnbMac::LteEnbMac (): +m_ccmMacSapUser (0) { NS_LOG_FUNCTION (this); m_macSapProvider = new EnbMacMemberLteMacSapProvider (this); @@ -361,6 +363,7 @@ LteEnbMac::LteEnbMac () m_schedSapUser = new EnbMacMemberFfMacSchedSapUser (this); m_cschedSapUser = new EnbMacMemberFfMacCschedSapUser (this); m_enbPhySapUser = new EnbMacMemberLteEnbPhySapUser (this); + m_ccmMacSapProvider = new MemberLteCcmMacSapProvider (this); } @@ -384,6 +387,7 @@ LteEnbMac::DoDispose () delete m_schedSapUser; delete m_cschedSapUser; delete m_enbPhySapUser; + delete m_ccmMacSapProvider; } void @@ -455,8 +459,19 @@ LteEnbMac::GetLteEnbPhySapUser () return m_enbPhySapUser; } +void +LteEnbMac::SetLteCcmMacSapUser (LteCcmMacSapUser* s) +{ + m_ccmMacSapUser = s; +} +LteCcmMacSapProvider* +LteEnbMac::GetLteCcmMacSapProvider () +{ + return m_ccmMacSapProvider; +} + void LteEnbMac::DoSubframeIndication (uint32_t frameNo, uint32_t subframeNo) { @@ -680,6 +695,16 @@ LteEnbMac::ReceiveBsrMessage (MacCeListElement_s bsr) m_ulCeReceived.push_back (bsr); } +void +LteEnbMac::DoReportMacCeToScheduler (MacCeListElement_s bsr) +{ + NS_LOG_FUNCTION (this); + NS_LOG_DEBUG (this << " bsr Size " << (uint16_t) m_ulCeReceived.size ()); + //send to LteCcmMacSapUser + m_ulCeReceived.push_back (bsr); // this to called when LteUlCcmSapProvider::ReportMacCeToScheduler is called + NS_LOG_DEBUG (this << " bsr Size after push_back " << (uint16_t) m_ulCeReceived.size ()); +} + void LteEnbMac::DoReceivePhyPdu (Ptr p) diff --git a/src/lte/model/lte-enb-mac.h b/src/lte/model/lte-enb-mac.h index 716d02bd0..cfac060cc 100644 --- a/src/lte/model/lte-enb-mac.h +++ b/src/lte/model/lte-enb-mac.h @@ -38,6 +38,7 @@ #include "ns3/trace-source-accessor.h" #include #include +#include namespace ns3 { @@ -57,6 +58,7 @@ class LteEnbMac : public Object friend class EnbMacMemberFfMacSchedSapUser; friend class EnbMacMemberFfMacCschedSapUser; friend class EnbMacMemberLteEnbPhySapUser; + friend class MemberLteCcmMacSapProvider; public: static TypeId GetTypeId (void); @@ -123,6 +125,19 @@ public: */ void SetLteEnbPhySapProvider (LteEnbPhySapProvider* s); + /** + * \brief Get the eNB-ComponetCarrierManager SAP User + * \return a pointer to the SAP User of the ComponetCarrierManager + */ + LteCcmMacSapProvider* GetLteCcmMacSapProvider (); + + /** + * \brief Set the ComponentCarrierManager SAP user + * \param s a pointer to the ComponentCarrierManager provider + */ + void SetLteCcmMacSapUser (LteCcmMacSapUser* s); + + /** * TracedCallback signature for DL scheduling events. * @@ -207,6 +222,9 @@ private: void DoSubframeIndication (uint32_t frameNo, uint32_t subframeNo); void DoReceiveRachPreamble (uint8_t prachId); + // forwarded by LteCcmMacSapProvider + void DoReportMacCeToScheduler (MacCeListElement_s bsr); + public: // legacy public for use the Phy callback void DoReceivePhyPdu (Ptr p); @@ -249,6 +267,9 @@ private: LteEnbPhySapProvider* m_enbPhySapProvider; LteEnbPhySapUser* m_enbPhySapUser; + // Sap For ComponentCarrierManager 'Uplink case' + LteCcmMacSapProvider* m_ccmMacSapProvider; + LteCcmMacSapUser* m_ccmMacSapUser; /** * frame number of current subframe indication */ diff --git a/src/lte/model/lte-ue-net-device.cc b/src/lte/model/lte-ue-net-device.cc index bc23d09af..19cfc9046 100644 --- a/src/lte/model/lte-ue-net-device.cc +++ b/src/lte/model/lte-ue-net-device.cc @@ -194,6 +194,13 @@ LteUeNetDevice::GetPhy (void) const return m_phy; } +Ptr +LteUeNetDevice::GetComponentCarrierManager (void) const +{ + NS_LOG_FUNCTION (this); + return m_componentCarrierManager; +} + Ptr LteUeNetDevice::GetNas (void) const { @@ -281,7 +288,7 @@ LteUeNetDevice::Send (Ptr packet, const Address& dest, uint16_t protocol NS_LOG_FUNCTION (this << dest << protocolNumber); if (protocolNumber != Ipv4L3Protocol::PROT_NUMBER) { - NS_LOG_INFO("unsupported protocol " << protocolNumber << ", only IPv4 is supported"); + NS_LOG_INFO ("unsupported protocol " << protocolNumber << ", only IPv4 is supported"); return true; } return m_nas->Send (packet);