diff --git a/src/lte/bindings/modulegen__gcc_ILP32.py b/src/lte/bindings/modulegen__gcc_ILP32.py index 996977471..8742c1048 100644 --- a/src/lte/bindings/modulegen__gcc_ILP32.py +++ b/src/lte/bindings/modulegen__gcc_ILP32.py @@ -6796,10 +6796,14 @@ def register_Ns3LteRrcSapMeasResults_methods(root_module, cls): cls.add_constructor([param('ns3::LteRrcSap::MeasResults const &', 'arg0')]) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::haveMeasResultNeighCells [variable] cls.add_instance_attribute('haveMeasResultNeighCells', 'bool', is_const=False) + ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::haveScellsMeas [variable] + cls.add_instance_attribute('haveScellsMeas', 'bool', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::measId [variable] cls.add_instance_attribute('measId', 'uint8_t', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::measResultListEutra [variable] cls.add_instance_attribute('measResultListEutra', 'std::list< ns3::LteRrcSap::MeasResultEutra >', is_const=False) + ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::measScellResultList [variable] + cls.add_instance_attribute('measScellResultList', 'ns3::LteRrcSap::MeasResultServFreqList', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::rsrpResult [variable] cls.add_instance_attribute('rsrpResult', 'uint8_t', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::rsrqResult [variable] @@ -12924,6 +12928,11 @@ def register_Ns3Asn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('std::bitset< 6u > *', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-asn1-header.h (module 'lte'): ns3::Buffer::Iterator ns3::Asn1Header::DeserializeSequence(std::bitset<7u> * optionalOrDefaultMask, bool isExtensionMarkerPresent, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeSequence', + 'ns3::Buffer::Iterator', + [param('std::bitset< 7u > *', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-asn1-header.h (module 'lte'): ns3::Buffer::Iterator ns3::Asn1Header::DeserializeSequence(std::bitset<9u> * optionalOrDefaultMask, bool isExtensionMarkerPresent, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeSequence', 'ns3::Buffer::Iterator', @@ -13049,6 +13058,11 @@ def register_Ns3Asn1Header_methods(root_module, cls): 'void', [param('std::bitset< 6u >', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent')], is_const=True, visibility='protected') + ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeSequence(std::bitset<7u> optionalOrDefaultMask, bool isExtensionMarkerPresent) const [member function] + cls.add_method('SerializeSequence', + 'void', + [param('std::bitset< 7u >', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent')], + is_const=True, visibility='protected') ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeSequence(std::bitset<9u> optionalOrDefaultMask, bool isExtensionMarkerPresent) const [member function] cls.add_method('SerializeSequence', 'void', @@ -16058,14 +16072,26 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('GetLteAnrSapUser', 'ns3::LteAnrSapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteCcmRrcSapUser * ns3::LteEnbRrc::GetLteCcmRrcSapUser() [member function] + cls.add_method('GetLteCcmRrcSapUser', + 'ns3::LteCcmRrcSapUser *', + []) ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCmacSapUser * ns3::LteEnbRrc::GetLteEnbCmacSapUser() [member function] cls.add_method('GetLteEnbCmacSapUser', 'ns3::LteEnbCmacSapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCmacSapUser * ns3::LteEnbRrc::GetLteEnbCmacSapUser(uint8_t pos) [member function] + cls.add_method('GetLteEnbCmacSapUser', + 'ns3::LteEnbCmacSapUser *', + [param('uint8_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCphySapUser * ns3::LteEnbRrc::GetLteEnbCphySapUser() [member function] cls.add_method('GetLteEnbCphySapUser', 'ns3::LteEnbCphySapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCphySapUser * ns3::LteEnbRrc::GetLteEnbCphySapUser(uint8_t pos) [member function] + cls.add_method('GetLteEnbCphySapUser', + 'ns3::LteEnbCphySapUser *', + [param('uint8_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrcSapProvider * ns3::LteEnbRrc::GetLteEnbRrcSapProvider() [member function] cls.add_method('GetLteEnbRrcSapProvider', 'ns3::LteEnbRrcSapProvider *', @@ -16074,6 +16100,10 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('GetLteFfrRrcSapUser', 'ns3::LteFfrRrcSapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteFfrRrcSapUser * ns3::LteEnbRrc::GetLteFfrRrcSapUser(uint8_t index) [member function] + cls.add_method('GetLteFfrRrcSapUser', + 'ns3::LteFfrRrcSapUser *', + [param('uint8_t', 'index')]) ## lte-enb-rrc.h (module 'lte'): ns3::LteHandoverManagementSapUser * ns3::LteEnbRrc::GetLteHandoverManagementSapUser() [member function] cls.add_method('GetLteHandoverManagementSapUser', 'ns3::LteHandoverManagementSapUser *', @@ -16141,14 +16171,26 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('SetLteAnrSapProvider', 'void', [param('ns3::LteAnrSapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteCcmRrcSapProvider(ns3::LteCcmRrcSapProvider * s) [member function] + cls.add_method('SetLteCcmRrcSapProvider', + 'void', + [param('ns3::LteCcmRrcSapProvider *', 's')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCmacSapProvider(ns3::LteEnbCmacSapProvider * s) [member function] cls.add_method('SetLteEnbCmacSapProvider', 'void', [param('ns3::LteEnbCmacSapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCmacSapProvider(ns3::LteEnbCmacSapProvider * s, uint16_t pos) [member function] + cls.add_method('SetLteEnbCmacSapProvider', + 'void', + [param('ns3::LteEnbCmacSapProvider *', 's'), param('uint16_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCphySapProvider(ns3::LteEnbCphySapProvider * s) [member function] cls.add_method('SetLteEnbCphySapProvider', 'void', [param('ns3::LteEnbCphySapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCphySapProvider(ns3::LteEnbCphySapProvider * s, uint8_t pos) [member function] + cls.add_method('SetLteEnbCphySapProvider', + 'void', + [param('ns3::LteEnbCphySapProvider *', 's'), param('uint8_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbRrcSapUser(ns3::LteEnbRrcSapUser * s) [member function] cls.add_method('SetLteEnbRrcSapUser', 'void', @@ -16157,6 +16199,10 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('SetLteFfrRrcSapProvider', 'void', [param('ns3::LteFfrRrcSapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteFfrRrcSapProvider(ns3::LteFfrRrcSapProvider * s, uint8_t index) [member function] + cls.add_method('SetLteFfrRrcSapProvider', + 'void', + [param('ns3::LteFfrRrcSapProvider *', 's'), param('uint8_t', 'index')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteHandoverManagementSapProvider(ns3::LteHandoverManagementSapProvider * s) [member function] cls.add_method('SetLteHandoverManagementSapProvider', 'void', @@ -16184,6 +16230,11 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): 'void', [], visibility='protected', is_virtual=True) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::DoInitialize() [member function] + cls.add_method('DoInitialize', + 'void', + [], + visibility='protected', is_virtual=True) return def register_Ns3LteEnbRrcProtocolIdeal_methods(root_module, cls): @@ -18662,6 +18713,11 @@ def register_Ns3LteUeRrc_methods(root_module, cls): cls.add_method('GetAsSapProvider', 'ns3::LteAsSapProvider *', []) + ## lte-ue-rrc.h (module 'lte'): bool ns3::LteUeRrc::GetCaSupport() const [member function] + cls.add_method('GetCaSupport', + 'bool', + [], + is_const=True) ## lte-ue-rrc.h (module 'lte'): uint16_t ns3::LteUeRrc::GetCellId() const [member function] cls.add_method('GetCellId', 'uint16_t', @@ -18682,6 +18738,10 @@ def register_Ns3LteUeRrc_methods(root_module, cls): 'uint64_t', [], is_const=True) + ## lte-ue-rrc.h (module 'lte'): ns3::LteUeCcmRrcSapUser * ns3::LteUeRrc::GetLteCcmRrcSapUser() [member function] + cls.add_method('GetLteCcmRrcSapUser', + 'ns3::LteUeCcmRrcSapUser *', + []) ## lte-ue-rrc.h (module 'lte'): ns3::LteUeCmacSapUser * ns3::LteUeRrc::GetLteUeCmacSapUser() [member function] cls.add_method('GetLteUeCmacSapUser', 'ns3::LteUeCmacSapUser *', @@ -18723,10 +18783,18 @@ def register_Ns3LteUeRrc_methods(root_module, cls): cls.add_method('SetAsSapUser', 'void', [param('ns3::LteAsSapUser *', 's')]) + ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetCaSupport(bool supportCa) [member function] + cls.add_method('SetCaSupport', + 'void', + [param('bool', 'supportCa')]) ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetImsi(uint64_t imsi) [member function] cls.add_method('SetImsi', 'void', [param('uint64_t', 'imsi')]) + ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetLteCcmRrcSapProvider(ns3::LteUeCcmRrcSapProvider * s) [member function] + cls.add_method('SetLteCcmRrcSapProvider', + 'void', + [param('ns3::LteUeCcmRrcSapProvider *', 's')]) ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetLteMacSapProvider(ns3::LteMacSapProvider * s) [member function] cls.add_method('SetLteMacSapProvider', 'void', @@ -18747,6 +18815,8 @@ def register_Ns3LteUeRrc_methods(root_module, cls): cls.add_method('SetUseRlcSm', 'void', [param('bool', 'val')]) + ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::m_numberOfComponentCarriers [variable] + cls.add_instance_attribute('m_numberOfComponentCarriers', 'uint16_t', is_const=False) ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::DoDispose() [member function] cls.add_method('DoDispose', 'void', @@ -20425,6 +20495,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'uint32_t', [param('ns3::Buffer::Iterator', 'bIterator')], is_pure_virtual=True, visibility='protected', is_virtual=True) + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeCellIdentification(ns3::LteRrcSap::CellIdentification * ci, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeCellIdentification', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::CellIdentification *', 'ci'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeDrbToAddModList(std::list > * drbToAddModLis, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeDrbToAddModList', 'ns3::Buffer::Iterator', @@ -20445,11 +20520,21 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::MeasResults *', 'measResults'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeNonCriticalExtensionConfig(ns3::LteRrcSap::NonCriticalExtensionConfiguration * nonCriticalExtension, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeNonCriticalExtensionConfig', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::NonCriticalExtensionConfiguration *', 'nonCriticalExtension'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializePhysicalConfigDedicated(ns3::LteRrcSap::PhysicalConfigDedicated * physicalConfigDedicated, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializePhysicalConfigDedicated', 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::PhysicalConfigDedicated *', 'physicalConfigDedicated'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializePhysicalConfigDedicatedSCell(ns3::LteRrcSap::PhysicalConfigDedicatedSCell * pcdsc, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializePhysicalConfigDedicatedSCell', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::PhysicalConfigDedicatedSCell *', 'pcdsc'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializePlmnIdentity(uint32_t * plmnId, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializePlmnIdentity', 'ns3::Buffer::Iterator', @@ -20470,6 +20555,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::RadioResourceConfigCommon *', 'radioResourceConfigCommon'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeRadioResourceConfigCommonSCell(ns3::LteRrcSap::RadioResourceConfigCommonSCell * rrccsc, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeRadioResourceConfigCommonSCell', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::RadioResourceConfigCommonSCell *', 'rrccsc'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeRadioResourceConfigCommonSib(ns3::LteRrcSap::RadioResourceConfigCommonSib * radioResourceConfigCommonSib, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeRadioResourceConfigCommonSib', 'ns3::Buffer::Iterator', @@ -20480,6 +20570,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::RadioResourceConfigDedicated *', 'radioResourceConfigDedicated'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeRadioResourceConfigDedicatedSCell(ns3::LteRrcSap::RadioResourceConfigDedicatedSCell * rrcdsc, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeRadioResourceConfigDedicatedSCell', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::RadioResourceConfigDedicatedSCell *', 'rrcdsc'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeSrbToAddModList(std::list > * srbToAddModList, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeSrbToAddModList', 'ns3::Buffer::Iterator', @@ -20545,11 +20640,21 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'void', [param('ns3::LteRrcSap::MeasResults', 'measResults')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeNonCriticalExtensionConfiguration(ns3::LteRrcSap::NonCriticalExtensionConfiguration nonCriticalExtensionConfiguration) const [member function] + cls.add_method('SerializeNonCriticalExtensionConfiguration', + 'void', + [param('ns3::LteRrcSap::NonCriticalExtensionConfiguration', 'nonCriticalExtensionConfiguration')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializePhysicalConfigDedicated(ns3::LteRrcSap::PhysicalConfigDedicated physicalConfigDedicated) const [member function] cls.add_method('SerializePhysicalConfigDedicated', 'void', [param('ns3::LteRrcSap::PhysicalConfigDedicated', 'physicalConfigDedicated')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializePhysicalConfigDedicatedSCell(ns3::LteRrcSap::PhysicalConfigDedicatedSCell pcdsc) const [member function] + cls.add_method('SerializePhysicalConfigDedicatedSCell', + 'void', + [param('ns3::LteRrcSap::PhysicalConfigDedicatedSCell', 'pcdsc')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializePlmnIdentity(uint32_t plmnId) const [member function] cls.add_method('SerializePlmnIdentity', 'void', @@ -20570,6 +20675,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'void', [param('ns3::LteRrcSap::RadioResourceConfigCommon', 'radioResourceConfigCommon')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeRadioResourceConfigCommonSCell(ns3::LteRrcSap::RadioResourceConfigCommonSCell rrccsc) const [member function] + cls.add_method('SerializeRadioResourceConfigCommonSCell', + 'void', + [param('ns3::LteRrcSap::RadioResourceConfigCommonSCell', 'rrccsc')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeRadioResourceConfigCommonSib(ns3::LteRrcSap::RadioResourceConfigCommonSib radioResourceConfigCommonSib) const [member function] cls.add_method('SerializeRadioResourceConfigCommonSib', 'void', @@ -20580,6 +20690,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'void', [param('ns3::LteRrcSap::RadioResourceConfigDedicated', 'radioResourceConfigDedicated')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeRadioResourceDedicatedSCell(ns3::LteRrcSap::RadioResourceConfigDedicatedSCell rrcdsc) const [member function] + cls.add_method('SerializeRadioResourceDedicatedSCell', + 'void', + [param('ns3::LteRrcSap::RadioResourceConfigDedicatedSCell', 'rrcdsc')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeSrbToAddModList(std::list > srbToAddModList) const [member function] cls.add_method('SerializeSrbToAddModList', 'void', @@ -22500,6 +22615,10 @@ def register_Ns3RrcConnectionReconfigurationHeader_methods(root_module, cls): cls.add_method('GetHaveMobilityControlInfo', 'bool', []) + ## lte-rrc-header.h (module 'lte'): bool ns3::RrcConnectionReconfigurationHeader::GetHaveNonCriticalExtensionConfig() [member function] + cls.add_method('GetHaveNonCriticalExtensionConfig', + 'bool', + []) ## lte-rrc-header.h (module 'lte'): bool ns3::RrcConnectionReconfigurationHeader::GetHaveRadioResourceConfigDedicated() [member function] cls.add_method('GetHaveRadioResourceConfigDedicated', 'bool', @@ -22517,6 +22636,10 @@ def register_Ns3RrcConnectionReconfigurationHeader_methods(root_module, cls): cls.add_method('GetMobilityControlInfo', 'ns3::LteRrcSap::MobilityControlInfo', []) + ## lte-rrc-header.h (module 'lte'): ns3::LteRrcSap::NonCriticalExtensionConfiguration ns3::RrcConnectionReconfigurationHeader::GetNonCriticalExtensionConfig() [member function] + cls.add_method('GetNonCriticalExtensionConfig', + 'ns3::LteRrcSap::NonCriticalExtensionConfiguration', + []) ## lte-rrc-header.h (module 'lte'): ns3::LteRrcSap::PhysicalConfigDedicated ns3::RrcConnectionReconfigurationHeader::GetPhysicalConfigDedicated() const [member function] cls.add_method('GetPhysicalConfigDedicated', 'ns3::LteRrcSap::PhysicalConfigDedicated', diff --git a/src/lte/bindings/modulegen__gcc_LP64.py b/src/lte/bindings/modulegen__gcc_LP64.py index b2c8a9025..df13add37 100644 --- a/src/lte/bindings/modulegen__gcc_LP64.py +++ b/src/lte/bindings/modulegen__gcc_LP64.py @@ -6796,10 +6796,14 @@ def register_Ns3LteRrcSapMeasResults_methods(root_module, cls): cls.add_constructor([param('ns3::LteRrcSap::MeasResults const &', 'arg0')]) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::haveMeasResultNeighCells [variable] cls.add_instance_attribute('haveMeasResultNeighCells', 'bool', is_const=False) + ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::haveScellsMeas [variable] + cls.add_instance_attribute('haveScellsMeas', 'bool', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::measId [variable] cls.add_instance_attribute('measId', 'uint8_t', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::measResultListEutra [variable] cls.add_instance_attribute('measResultListEutra', 'std::list< ns3::LteRrcSap::MeasResultEutra >', is_const=False) + ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::measScellResultList [variable] + cls.add_instance_attribute('measScellResultList', 'ns3::LteRrcSap::MeasResultServFreqList', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::rsrpResult [variable] cls.add_instance_attribute('rsrpResult', 'uint8_t', is_const=False) ## lte-rrc-sap.h (module 'lte'): ns3::LteRrcSap::MeasResults::rsrqResult [variable] @@ -12924,6 +12928,11 @@ def register_Ns3Asn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('std::bitset< 6ul > *', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-asn1-header.h (module 'lte'): ns3::Buffer::Iterator ns3::Asn1Header::DeserializeSequence(std::bitset<7ul> * optionalOrDefaultMask, bool isExtensionMarkerPresent, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeSequence', + 'ns3::Buffer::Iterator', + [param('std::bitset< 7ul > *', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-asn1-header.h (module 'lte'): ns3::Buffer::Iterator ns3::Asn1Header::DeserializeSequence(std::bitset<9ul> * optionalOrDefaultMask, bool isExtensionMarkerPresent, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeSequence', 'ns3::Buffer::Iterator', @@ -13049,6 +13058,11 @@ def register_Ns3Asn1Header_methods(root_module, cls): 'void', [param('std::bitset< 6ul >', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent')], is_const=True, visibility='protected') + ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeSequence(std::bitset<7ul> optionalOrDefaultMask, bool isExtensionMarkerPresent) const [member function] + cls.add_method('SerializeSequence', + 'void', + [param('std::bitset< 7ul >', 'optionalOrDefaultMask'), param('bool', 'isExtensionMarkerPresent')], + is_const=True, visibility='protected') ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeSequence(std::bitset<9ul> optionalOrDefaultMask, bool isExtensionMarkerPresent) const [member function] cls.add_method('SerializeSequence', 'void', @@ -16058,14 +16072,26 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('GetLteAnrSapUser', 'ns3::LteAnrSapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteCcmRrcSapUser * ns3::LteEnbRrc::GetLteCcmRrcSapUser() [member function] + cls.add_method('GetLteCcmRrcSapUser', + 'ns3::LteCcmRrcSapUser *', + []) ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCmacSapUser * ns3::LteEnbRrc::GetLteEnbCmacSapUser() [member function] cls.add_method('GetLteEnbCmacSapUser', 'ns3::LteEnbCmacSapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCmacSapUser * ns3::LteEnbRrc::GetLteEnbCmacSapUser(uint8_t pos) [member function] + cls.add_method('GetLteEnbCmacSapUser', + 'ns3::LteEnbCmacSapUser *', + [param('uint8_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCphySapUser * ns3::LteEnbRrc::GetLteEnbCphySapUser() [member function] cls.add_method('GetLteEnbCphySapUser', 'ns3::LteEnbCphySapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbCphySapUser * ns3::LteEnbRrc::GetLteEnbCphySapUser(uint8_t pos) [member function] + cls.add_method('GetLteEnbCphySapUser', + 'ns3::LteEnbCphySapUser *', + [param('uint8_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): ns3::LteEnbRrcSapProvider * ns3::LteEnbRrc::GetLteEnbRrcSapProvider() [member function] cls.add_method('GetLteEnbRrcSapProvider', 'ns3::LteEnbRrcSapProvider *', @@ -16074,6 +16100,10 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('GetLteFfrRrcSapUser', 'ns3::LteFfrRrcSapUser *', []) + ## lte-enb-rrc.h (module 'lte'): ns3::LteFfrRrcSapUser * ns3::LteEnbRrc::GetLteFfrRrcSapUser(uint8_t index) [member function] + cls.add_method('GetLteFfrRrcSapUser', + 'ns3::LteFfrRrcSapUser *', + [param('uint8_t', 'index')]) ## lte-enb-rrc.h (module 'lte'): ns3::LteHandoverManagementSapUser * ns3::LteEnbRrc::GetLteHandoverManagementSapUser() [member function] cls.add_method('GetLteHandoverManagementSapUser', 'ns3::LteHandoverManagementSapUser *', @@ -16141,14 +16171,26 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('SetLteAnrSapProvider', 'void', [param('ns3::LteAnrSapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteCcmRrcSapProvider(ns3::LteCcmRrcSapProvider * s) [member function] + cls.add_method('SetLteCcmRrcSapProvider', + 'void', + [param('ns3::LteCcmRrcSapProvider *', 's')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCmacSapProvider(ns3::LteEnbCmacSapProvider * s) [member function] cls.add_method('SetLteEnbCmacSapProvider', 'void', [param('ns3::LteEnbCmacSapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCmacSapProvider(ns3::LteEnbCmacSapProvider * s, uint16_t pos) [member function] + cls.add_method('SetLteEnbCmacSapProvider', + 'void', + [param('ns3::LteEnbCmacSapProvider *', 's'), param('uint16_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCphySapProvider(ns3::LteEnbCphySapProvider * s) [member function] cls.add_method('SetLteEnbCphySapProvider', 'void', [param('ns3::LteEnbCphySapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbCphySapProvider(ns3::LteEnbCphySapProvider * s, uint8_t pos) [member function] + cls.add_method('SetLteEnbCphySapProvider', + 'void', + [param('ns3::LteEnbCphySapProvider *', 's'), param('uint8_t', 'pos')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteEnbRrcSapUser(ns3::LteEnbRrcSapUser * s) [member function] cls.add_method('SetLteEnbRrcSapUser', 'void', @@ -16157,6 +16199,10 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): cls.add_method('SetLteFfrRrcSapProvider', 'void', [param('ns3::LteFfrRrcSapProvider *', 's')]) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteFfrRrcSapProvider(ns3::LteFfrRrcSapProvider * s, uint8_t index) [member function] + cls.add_method('SetLteFfrRrcSapProvider', + 'void', + [param('ns3::LteFfrRrcSapProvider *', 's'), param('uint8_t', 'index')]) ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::SetLteHandoverManagementSapProvider(ns3::LteHandoverManagementSapProvider * s) [member function] cls.add_method('SetLteHandoverManagementSapProvider', 'void', @@ -16184,6 +16230,11 @@ def register_Ns3LteEnbRrc_methods(root_module, cls): 'void', [], visibility='protected', is_virtual=True) + ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::DoInitialize() [member function] + cls.add_method('DoInitialize', + 'void', + [], + visibility='protected', is_virtual=True) return def register_Ns3LteEnbRrcProtocolIdeal_methods(root_module, cls): @@ -18662,6 +18713,11 @@ def register_Ns3LteUeRrc_methods(root_module, cls): cls.add_method('GetAsSapProvider', 'ns3::LteAsSapProvider *', []) + ## lte-ue-rrc.h (module 'lte'): bool ns3::LteUeRrc::GetCaSupport() const [member function] + cls.add_method('GetCaSupport', + 'bool', + [], + is_const=True) ## lte-ue-rrc.h (module 'lte'): uint16_t ns3::LteUeRrc::GetCellId() const [member function] cls.add_method('GetCellId', 'uint16_t', @@ -18682,6 +18738,10 @@ def register_Ns3LteUeRrc_methods(root_module, cls): 'uint64_t', [], is_const=True) + ## lte-ue-rrc.h (module 'lte'): ns3::LteUeCcmRrcSapUser * ns3::LteUeRrc::GetLteCcmRrcSapUser() [member function] + cls.add_method('GetLteCcmRrcSapUser', + 'ns3::LteUeCcmRrcSapUser *', + []) ## lte-ue-rrc.h (module 'lte'): ns3::LteUeCmacSapUser * ns3::LteUeRrc::GetLteUeCmacSapUser() [member function] cls.add_method('GetLteUeCmacSapUser', 'ns3::LteUeCmacSapUser *', @@ -18723,10 +18783,18 @@ def register_Ns3LteUeRrc_methods(root_module, cls): cls.add_method('SetAsSapUser', 'void', [param('ns3::LteAsSapUser *', 's')]) + ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetCaSupport(bool supportCa) [member function] + cls.add_method('SetCaSupport', + 'void', + [param('bool', 'supportCa')]) ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetImsi(uint64_t imsi) [member function] cls.add_method('SetImsi', 'void', [param('uint64_t', 'imsi')]) + ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetLteCcmRrcSapProvider(ns3::LteUeCcmRrcSapProvider * s) [member function] + cls.add_method('SetLteCcmRrcSapProvider', + 'void', + [param('ns3::LteUeCcmRrcSapProvider *', 's')]) ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::SetLteMacSapProvider(ns3::LteMacSapProvider * s) [member function] cls.add_method('SetLteMacSapProvider', 'void', @@ -18747,6 +18815,8 @@ def register_Ns3LteUeRrc_methods(root_module, cls): cls.add_method('SetUseRlcSm', 'void', [param('bool', 'val')]) + ## lte-ue-rrc.h (module 'lte'): ns3::LteUeRrc::m_numberOfComponentCarriers [variable] + cls.add_instance_attribute('m_numberOfComponentCarriers', 'uint16_t', is_const=False) ## lte-ue-rrc.h (module 'lte'): void ns3::LteUeRrc::DoDispose() [member function] cls.add_method('DoDispose', 'void', @@ -20425,6 +20495,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'uint32_t', [param('ns3::Buffer::Iterator', 'bIterator')], is_pure_virtual=True, visibility='protected', is_virtual=True) + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeCellIdentification(ns3::LteRrcSap::CellIdentification * ci, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeCellIdentification', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::CellIdentification *', 'ci'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeDrbToAddModList(std::list > * drbToAddModLis, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeDrbToAddModList', 'ns3::Buffer::Iterator', @@ -20445,11 +20520,21 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::MeasResults *', 'measResults'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeNonCriticalExtensionConfig(ns3::LteRrcSap::NonCriticalExtensionConfiguration * nonCriticalExtension, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeNonCriticalExtensionConfig', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::NonCriticalExtensionConfiguration *', 'nonCriticalExtension'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializePhysicalConfigDedicated(ns3::LteRrcSap::PhysicalConfigDedicated * physicalConfigDedicated, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializePhysicalConfigDedicated', 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::PhysicalConfigDedicated *', 'physicalConfigDedicated'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializePhysicalConfigDedicatedSCell(ns3::LteRrcSap::PhysicalConfigDedicatedSCell * pcdsc, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializePhysicalConfigDedicatedSCell', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::PhysicalConfigDedicatedSCell *', 'pcdsc'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializePlmnIdentity(uint32_t * plmnId, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializePlmnIdentity', 'ns3::Buffer::Iterator', @@ -20470,6 +20555,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::RadioResourceConfigCommon *', 'radioResourceConfigCommon'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeRadioResourceConfigCommonSCell(ns3::LteRrcSap::RadioResourceConfigCommonSCell * rrccsc, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeRadioResourceConfigCommonSCell', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::RadioResourceConfigCommonSCell *', 'rrccsc'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeRadioResourceConfigCommonSib(ns3::LteRrcSap::RadioResourceConfigCommonSib * radioResourceConfigCommonSib, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeRadioResourceConfigCommonSib', 'ns3::Buffer::Iterator', @@ -20480,6 +20570,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'ns3::Buffer::Iterator', [param('ns3::LteRrcSap::RadioResourceConfigDedicated *', 'radioResourceConfigDedicated'), param('ns3::Buffer::Iterator', 'bIterator')], visibility='protected') + ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeRadioResourceConfigDedicatedSCell(ns3::LteRrcSap::RadioResourceConfigDedicatedSCell * rrcdsc, ns3::Buffer::Iterator bIterator) [member function] + cls.add_method('DeserializeRadioResourceConfigDedicatedSCell', + 'ns3::Buffer::Iterator', + [param('ns3::LteRrcSap::RadioResourceConfigDedicatedSCell *', 'rrcdsc'), param('ns3::Buffer::Iterator', 'bIterator')], + visibility='protected') ## lte-rrc-header.h (module 'lte'): ns3::Buffer::Iterator ns3::RrcAsn1Header::DeserializeSrbToAddModList(std::list > * srbToAddModList, ns3::Buffer::Iterator bIterator) [member function] cls.add_method('DeserializeSrbToAddModList', 'ns3::Buffer::Iterator', @@ -20545,11 +20640,21 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'void', [param('ns3::LteRrcSap::MeasResults', 'measResults')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeNonCriticalExtensionConfiguration(ns3::LteRrcSap::NonCriticalExtensionConfiguration nonCriticalExtensionConfiguration) const [member function] + cls.add_method('SerializeNonCriticalExtensionConfiguration', + 'void', + [param('ns3::LteRrcSap::NonCriticalExtensionConfiguration', 'nonCriticalExtensionConfiguration')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializePhysicalConfigDedicated(ns3::LteRrcSap::PhysicalConfigDedicated physicalConfigDedicated) const [member function] cls.add_method('SerializePhysicalConfigDedicated', 'void', [param('ns3::LteRrcSap::PhysicalConfigDedicated', 'physicalConfigDedicated')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializePhysicalConfigDedicatedSCell(ns3::LteRrcSap::PhysicalConfigDedicatedSCell pcdsc) const [member function] + cls.add_method('SerializePhysicalConfigDedicatedSCell', + 'void', + [param('ns3::LteRrcSap::PhysicalConfigDedicatedSCell', 'pcdsc')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializePlmnIdentity(uint32_t plmnId) const [member function] cls.add_method('SerializePlmnIdentity', 'void', @@ -20570,6 +20675,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'void', [param('ns3::LteRrcSap::RadioResourceConfigCommon', 'radioResourceConfigCommon')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeRadioResourceConfigCommonSCell(ns3::LteRrcSap::RadioResourceConfigCommonSCell rrccsc) const [member function] + cls.add_method('SerializeRadioResourceConfigCommonSCell', + 'void', + [param('ns3::LteRrcSap::RadioResourceConfigCommonSCell', 'rrccsc')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeRadioResourceConfigCommonSib(ns3::LteRrcSap::RadioResourceConfigCommonSib radioResourceConfigCommonSib) const [member function] cls.add_method('SerializeRadioResourceConfigCommonSib', 'void', @@ -20580,6 +20690,11 @@ def register_Ns3RrcAsn1Header_methods(root_module, cls): 'void', [param('ns3::LteRrcSap::RadioResourceConfigDedicated', 'radioResourceConfigDedicated')], is_const=True, visibility='protected') + ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeRadioResourceDedicatedSCell(ns3::LteRrcSap::RadioResourceConfigDedicatedSCell rrcdsc) const [member function] + cls.add_method('SerializeRadioResourceDedicatedSCell', + 'void', + [param('ns3::LteRrcSap::RadioResourceConfigDedicatedSCell', 'rrcdsc')], + is_const=True, visibility='protected') ## lte-rrc-header.h (module 'lte'): void ns3::RrcAsn1Header::SerializeSrbToAddModList(std::list > srbToAddModList) const [member function] cls.add_method('SerializeSrbToAddModList', 'void', @@ -22500,6 +22615,10 @@ def register_Ns3RrcConnectionReconfigurationHeader_methods(root_module, cls): cls.add_method('GetHaveMobilityControlInfo', 'bool', []) + ## lte-rrc-header.h (module 'lte'): bool ns3::RrcConnectionReconfigurationHeader::GetHaveNonCriticalExtensionConfig() [member function] + cls.add_method('GetHaveNonCriticalExtensionConfig', + 'bool', + []) ## lte-rrc-header.h (module 'lte'): bool ns3::RrcConnectionReconfigurationHeader::GetHaveRadioResourceConfigDedicated() [member function] cls.add_method('GetHaveRadioResourceConfigDedicated', 'bool', @@ -22517,6 +22636,10 @@ def register_Ns3RrcConnectionReconfigurationHeader_methods(root_module, cls): cls.add_method('GetMobilityControlInfo', 'ns3::LteRrcSap::MobilityControlInfo', []) + ## lte-rrc-header.h (module 'lte'): ns3::LteRrcSap::NonCriticalExtensionConfiguration ns3::RrcConnectionReconfigurationHeader::GetNonCriticalExtensionConfig() [member function] + cls.add_method('GetNonCriticalExtensionConfig', + 'ns3::LteRrcSap::NonCriticalExtensionConfiguration', + []) ## lte-rrc-header.h (module 'lte'): ns3::LteRrcSap::PhysicalConfigDedicated ns3::RrcConnectionReconfigurationHeader::GetPhysicalConfigDedicated() const [member function] cls.add_method('GetPhysicalConfigDedicated', 'ns3::LteRrcSap::PhysicalConfigDedicated', diff --git a/src/lte/model/lte-asn1-header.cc b/src/lte/model/lte-asn1-header.cc index 14de47ac9..896d99f2d 100644 --- a/src/lte/model/lte-asn1-header.cc +++ b/src/lte/model/lte-asn1-header.cc @@ -270,6 +270,11 @@ void Asn1Header::SerializeSequence (std::bitset<6> optionalOrDefaultMask, bool i SerializeSequence<6> (optionalOrDefaultMask,isExtensionMarkerPresent); } +void Asn1Header::SerializeSequence (std::bitset<7> optionalOrDefaultMask, bool isExtensionMarkerPresent) const +{ + SerializeSequence<7> (optionalOrDefaultMask,isExtensionMarkerPresent); +} + void Asn1Header::SerializeSequence (std::bitset<9> optionalOrDefaultMask, bool isExtensionMarkerPresent) const { SerializeSequence<9> (optionalOrDefaultMask,isExtensionMarkerPresent); @@ -727,6 +732,11 @@ Buffer::Iterator Asn1Header::DeserializeSequence (std::bitset<6> *optionalOrDefa return DeserializeSequence<6> (optionalOrDefaultMask,isExtensionMarkerPresent,bIterator); } +Buffer::Iterator Asn1Header::DeserializeSequence (std::bitset<7> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator) +{ + return DeserializeSequence<7> (optionalOrDefaultMask,isExtensionMarkerPresent,bIterator); +} + Buffer::Iterator Asn1Header::DeserializeSequence (std::bitset<9> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator) { return DeserializeSequence<9> (optionalOrDefaultMask,isExtensionMarkerPresent,bIterator); diff --git a/src/lte/model/lte-asn1-header.h b/src/lte/model/lte-asn1-header.h index 760c405df..625757579 100644 --- a/src/lte/model/lte-asn1-header.h +++ b/src/lte/model/lte-asn1-header.h @@ -190,6 +190,13 @@ protected: * \param optionalOrDefaultMask Mask to serialize * \param isExtensionMarkerPresent true if Extension Marker is present */ + void SerializeSequence (std::bitset<7> optionalOrDefaultMask, + bool isExtensionMarkerPresent) const; + /** + * Serialize a sequence + * \param optionalOrDefaultMask Mask to serialize + * \param isExtensionMarkerPresent true if Extension Marker is present + */ void SerializeSequence (std::bitset<9> optionalOrDefaultMask, bool isExtensionMarkerPresent) const; /** @@ -402,6 +409,17 @@ protected: Buffer::Iterator DeserializeSequence (std::bitset<6> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator); + + /** + * Deserialize a sequence + * \param optionalOrDefaultMask buffer to store the result + * \param isExtensionMarkerPresent true if Extension Marker is present + * \param bIterator buffer iterator + * \returns the modified buffer iterator + */ + Buffer::Iterator DeserializeSequence (std::bitset<7> *optionalOrDefaultMask, + bool isExtensionMarkerPresent, + Buffer::Iterator bIterator); /** * Deserialize a sequence * \param optionalOrDefaultMask buffer to store the result diff --git a/src/lte/model/lte-enb-rrc.cc b/src/lte/model/lte-enb-rrc.cc index af488c265..7fe32337a 100644 --- a/src/lte/model/lte-enb-rrc.cc +++ b/src/lte/model/lte-enb-rrc.cc @@ -18,6 +18,8 @@ * Authors: Nicola Baldo * Marco Miozzo * Manuel Requena + * Modified by: Danilo Abrignani (Carrier Aggregation - GSoC 2015), + * Biljana Bojovic (Carrier Aggregation) */ #include "lte-enb-rrc.h" @@ -142,10 +144,11 @@ UeManager::UeManager (Ptr rrc, uint16_t rnti, State s) m_pendingRrcConnectionReconfiguration (false), m_sourceX2apId (0), m_sourceCellId (0), - m_needPhyMacConfiguration (false) + m_needPhyMacConfiguration (false), + m_caSupportConfigured (false), + m_pendingStartDataRadioBearers (false) { NS_LOG_FUNCTION (this); - m_pendingStartDataRadioBearers = false; } void @@ -185,7 +188,7 @@ UeManager::DoInitialize () lcinfo.lcId = lcid; // leave the rest of lcinfo empty as CCCH (LCID 0) is pre-configured m_rrc->m_cmacSapProvider->AddLc (lcinfo, rlc->GetLteMacSapUser ()); - + // MacSapUserForRlc in the ComponentCarrierManager MacSapUser } // setup the eNB side of SRB1; the UE side will be set up upon RRC connection establishment @@ -861,7 +864,16 @@ UeManager::RecvRrcConnectionSetupCompleted (LteRrcSap::RrcConnectionSetupComplet { case CONNECTION_SETUP: m_connectionSetupTimeout.Cancel (); - StartDataRadioBearers (); + if ( m_caSupportConfigured == false && m_rrc->m_numberOfComponentCarriers > 1) + { + m_pendingRrcConnectionReconfiguration = true; // Force Reconfiguration + m_pendingStartDataRadioBearers = true; + } + else + { + m_pendingStartDataRadioBearers = false; + StartDataRadioBearers (); + } SwitchToState (CONNECTED_NORMALLY); m_rrc->m_connectionEstablishedTrace (m_imsi, m_rrc->m_cellId, m_rnti); break; @@ -976,7 +988,9 @@ UeManager::RecvMeasurementReport (LteRrcSap::MeasurementReport msg) NS_LOG_FUNCTION (this << (uint16_t) measId); NS_LOG_LOGIC ("measId " << (uint16_t) measId << " haveMeasResultNeighCells " << msg.measResults.haveMeasResultNeighCells - << " measResultListEutra " << msg.measResults.measResultListEutra.size ()); + << " measResultListEutra " << msg.measResults.measResultListEutra.size () + << " haveScellsMeas " << msg.measResults.haveScellsMeas + << " measScellResultList " << msg.measResults.measScellResultList.measResultScell.size ()); NS_LOG_LOGIC ("serving cellId " << m_rrc->m_cellId << " RSRP " << (uint16_t) msg.measResults.rsrpResult << " RSRQ " << (uint16_t) msg.measResults.rsrqResult); @@ -1156,6 +1170,7 @@ UeManager::RemoveDataRadioBearerInfo (uint8_t drbid) LteRrcSap::RrcConnectionReconfiguration UeManager::BuildRrcConnectionReconfiguration () { + NS_LOG_FUNCTION (this); LteRrcSap::RrcConnectionReconfiguration msg; msg.rrcTransactionIdentifier = GetNewRrcTransactionIdentifier (); msg.haveRadioResourceConfigDedicated = true; @@ -1163,6 +1178,18 @@ UeManager::BuildRrcConnectionReconfiguration () msg.haveMobilityControlInfo = false; msg.haveMeasConfig = true; msg.measConfig = m_rrc->m_ueMeasConfig; + if ( m_caSupportConfigured == false && m_rrc->m_numberOfComponentCarriers > 1) + { + m_caSupportConfigured = true; + NS_LOG_FUNCTION ( this << "CA not configured. Configure now!" ); + msg.haveNonCriticalExtension = true; + msg.nonCriticalExtension = BuildNonCriticalExtentionConfigurationCa (); + NS_LOG_FUNCTION ( this << " haveNonCriticalExtension " << msg.haveNonCriticalExtension ); + } + else + { + msg.haveNonCriticalExtension = false; + } return msg; } @@ -1268,6 +1295,10 @@ UeManager::SwitchToState (State newState) { ScheduleRrcConnectionReconfiguration (); } + if (m_pendingStartDataRadioBearers == true && m_caSupportConfigured == true) + { + StartDataRadioBearers (); + } } break; @@ -1285,6 +1316,71 @@ UeManager::SwitchToState (State newState) } } +LteRrcSap::NonCriticalExtensionConfiguration +UeManager::BuildNonCriticalExtentionConfigurationCa () +{ + NS_LOG_FUNCTION ( this ); + LteRrcSap::NonCriticalExtensionConfiguration ncec; + + // LteRrcSap::SCellToAddMod scell; + std::list SccCon; + + // sCellToReleaseList is always empty since no Scc is released + std::map >::iterator it = m_rrc->m_componentCarrierEnbMap.begin(); + + it++; + for (;it!=m_rrc->m_componentCarrierEnbMap.end(); it++) + { + + uint8_t ccId = it->first; + Ptr eNbCcm = it->second; + LteRrcSap::SCellToAddMod component; + component.sCellIndex = ccId; + component.cellIdentification.physCellId = m_rrc->m_cellId; + component.cellIdentification.dlCarrierFreq = eNbCcm->m_dlEarfcn; + component.radioResourceConfigCommonSCell.haveNonUlConfiguration = true; + component.radioResourceConfigCommonSCell.nonUlConfiguration.dlBandwidth = eNbCcm->m_dlBandwidth; + component.radioResourceConfigCommonSCell.nonUlConfiguration.antennaInfoCommon.antennaPortsCount = 0; + component.radioResourceConfigCommonSCell.nonUlConfiguration.pdschConfigCommon.referenceSignalPower = m_rrc->m_cphySapProvider->GetReferenceSignalPower (); + component.radioResourceConfigCommonSCell.nonUlConfiguration.pdschConfigCommon.pb = 0; + component.radioResourceConfigCommonSCell.haveUlConfiguration = true; + component.radioResourceConfigCommonSCell.ulConfiguration.ulFreqInfo.ulCarrierFreq = eNbCcm->m_ulEarfcn; + component.radioResourceConfigCommonSCell.ulConfiguration.ulFreqInfo.ulBandwidth = eNbCcm->m_ulBandwidth; + component.radioResourceConfigCommonSCell.ulConfiguration.ulPowerControlCommonSCell.alpha = 0; + //component.radioResourceConfigCommonSCell.ulConfiguration.soundingRsUlConfigCommon.type = LteRrcSap::SoundingRsUlConfigDedicated::SETUP; + component.radioResourceConfigCommonSCell.ulConfiguration.soundingRsUlConfigCommon.srsBandwidthConfig = 0; + component.radioResourceConfigCommonSCell.ulConfiguration.soundingRsUlConfigCommon.srsSubframeConfig = 0; + component.radioResourceConfigCommonSCell.ulConfiguration.prachConfigSCell.index = 0; + + if (true) + { + component.haveRadioResourceConfigDedicatedSCell = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.haveNonUlConfiguration = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.haveAntennaInfoDedicated = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.antennaInfo.transmissionMode = m_rrc->m_defaultTransmissionMode; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.crossCarrierSchedulingConfig = false; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.havePdschConfigDedicated = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.pdschConfigDedicated.pa = LteRrcSap::PdschConfigDedicated::dB0; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.haveUlConfiguration = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.haveAntennaInfoDedicated = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.antennaInfoUl.transmissionMode = m_rrc->m_defaultTransmissionMode; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.pushConfigDedicatedSCell.nPuschIdentity = 0; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.ulPowerControlDedicatedSCell.pSrsOffset = 0; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.haveSoundingRsUlConfigDedicated = true; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.soundingRsUlConfigDedicated.srsConfigIndex = GetSrsConfigurationIndex(); + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.soundingRsUlConfigDedicated.type = LteRrcSap::SoundingRsUlConfigDedicated::SETUP; + component.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.soundingRsUlConfigDedicated.srsBandwidth = 0; + } + else + { + component.haveRadioResourceConfigDedicatedSCell = false; + } + SccCon.push_back (component); + } + ncec.sCellsToAddModList = SccCon; + + return ncec; +} /////////////////////////////////////////// @@ -1297,6 +1393,7 @@ LteEnbRrc::LteEnbRrc () : m_x2SapProvider (0), m_cmacSapProvider (0), m_handoverManagementSapProvider (0), + m_ccmRrcSapProvider (0), m_anrSapProvider (0), m_ffrRrcSapProvider (0), m_rrcSapUser (0), @@ -1307,7 +1404,8 @@ LteEnbRrc::LteEnbRrc () m_lastAllocatedRnti (0), m_srsCurrentPeriodicityId (0), m_lastAllocatedConfigurationIndex (0), - m_reconfigureUes (false) + m_reconfigureUes (false), + m_numberOfComponentCarriers (0) { NS_LOG_FUNCTION (this); m_cmacSapUser = new EnbRrcMemberLteEnbCmacSapUser (this); @@ -1318,8 +1416,23 @@ LteEnbRrc::LteEnbRrc () m_x2SapUser = new EpcX2SpecificEpcX2SapUser (this); m_s1SapUser = new MemberEpcEnbS1SapUser (this); m_cphySapUser = new MemberLteEnbCphySapUser (this); + m_ccmRrcSapUser = new MemberLteCcmRrcSapUser (this); } +void LteEnbRrc::DoInitialize() +{ + if (m_numberOfComponentCarriers < MIN_NO_CC || m_numberOfComponentCarriers > MAX_NO_CC) + { + // this check is neede in order to maintain backward compatibility with scripts and tests + // if case lte-helper is not used (like in several tests) the m_numberOfComponentCarriers + // is not set and then an error is rised + // In this case m_numberOfComponentCarriers is set to 1 + m_numberOfComponentCarriers = MIN_NO_CC; + } + Object::DoInitialize (); +} + + LteEnbRrc::~LteEnbRrc () { @@ -1334,6 +1447,7 @@ LteEnbRrc::DoDispose () m_ueMap.clear (); delete m_cmacSapUser; delete m_handoverManagementSapUser; + delete m_ccmRrcSapUser; delete m_anrSapUser; delete m_ffrRrcSapUser; delete m_rrcSapProvider; @@ -1543,6 +1657,20 @@ LteEnbRrc::GetLteHandoverManagementSapUser () return m_handoverManagementSapUser; } +void +LteEnbRrc::SetLteCcmRrcSapProvider (LteCcmRrcSapProvider * s) +{ + NS_LOG_FUNCTION (this << s); + m_ccmRrcSapProvider = s; +} + +LteCcmRrcSapUser* +LteEnbRrc::GetLteCcmRrcSapUser () +{ + NS_LOG_FUNCTION (this); + return m_ccmRrcSapUser; +} + void LteEnbRrc::SetLteAnrSapProvider (LteAnrSapProvider * s) { @@ -2019,6 +2147,7 @@ LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams req) handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles; handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax; handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize = rc.raResponseWindowSize; + handoverCommand.haveNonCriticalExtension = false; Ptr encodedHandoverCommand = m_rrcSapUser->EncodeHandoverCommand (handoverCommand); @@ -2180,6 +2309,15 @@ LteEnbRrc::DoAddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra repo return measId; } +uint8_t +LteEnbRrc::DoAddUeMeasReportConfigForComponentCarrier (LteRrcSap::ReportConfigEutra reportConfig) +{ + NS_LOG_FUNCTION (this); + uint8_t measId = AddUeMeasReportConfig (reportConfig); + m_componentCarrierMeasIds.insert (measId); + return measId; +} + void LteEnbRrc::DoTriggerHandover (uint16_t rnti, uint16_t targetCellId) { diff --git a/src/lte/model/lte-enb-rrc.h b/src/lte/model/lte-enb-rrc.h index 0269e4bd3..11445bf3e 100644 --- a/src/lte/model/lte-enb-rrc.h +++ b/src/lte/model/lte-enb-rrc.h @@ -18,6 +18,9 @@ * Authors: Nicola Baldo * Marco Miozzo * Manuel Requena + * Modified by: + * Danilo Abrignani (Carrier Aggregation - GSoC 2015) + * Biljana Bojovic (Carrier Aggregation) */ #ifndef LTE_ENB_RRC_H @@ -36,10 +39,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -354,6 +359,13 @@ private: */ LteRrcSap::RrcConnectionReconfiguration BuildRrcConnectionReconfiguration (); + /** + * + * \return an NonCriticalExtensionConfiguration struct built based on the + * current configuration + */ + LteRrcSap::NonCriticalExtensionConfiguration BuildNonCriticalExtentionConfigurationCa (); + /** * * \return a RadioResourceConfigDedicated struct built based on the @@ -527,6 +539,7 @@ class LteEnbRrc : public Object friend class MemberEpcEnbS1SapUser; friend class EpcX2SpecificEpcX2SapUser; friend class UeManager; + friend class MemberLteCcmRrcSapUser; public: /** @@ -543,6 +556,7 @@ public: // inherited from Object protected: + virtual void DoInitialize (); virtual void DoDispose (void); public: static TypeId GetTypeId (void); @@ -568,12 +582,15 @@ public: */ void SetLteEnbCmacSapProvider (LteEnbCmacSapProvider * s); + void SetLteEnbCmacSapProvider (LteEnbCmacSapProvider * s, uint16_t pos); + /** * Get the CMAC SAP offered by this RRC * \return s the CMAC SAP User interface offered to the MAC by this RRC */ LteEnbCmacSapUser* GetLteEnbCmacSapUser (); + LteEnbCmacSapUser* GetLteEnbCmacSapUser (uint8_t pos); /** * set the Handover Management SAP this RRC should interact with @@ -590,6 +607,21 @@ public: LteHandoverManagementSapUser* GetLteHandoverManagementSapUser (); + /** + * set the Component Carrier Management SAP this RRC should interact with + * + * \param s the Component Carrier Management SAP Provider to be used by this RRC + */ + void SetLteCcmRrcSapProvider (LteCcmRrcSapProvider * s); + + /** + * Get the Component Carrier Management SAP offered by this RRC + * \return s the Component Carrier Management SAP User interface offered to the + * carrier component selection algorithm by this RRC + */ + LteCcmRrcSapUser* GetLteCcmRrcSapUser (); + + /** * set the ANR SAP this RRC should interact with * @@ -612,6 +644,7 @@ public: * \param s the FFR SAP Provider to be used by this RRC */ void SetLteFfrRrcSapProvider (LteFfrRrcSapProvider * s); + void SetLteFfrRrcSapProvider (LteFfrRrcSapProvider * s, uint8_t index); /** * Get the FFR SAP offered by this RRC @@ -619,6 +652,7 @@ public: * RRC */ LteFfrRrcSapUser* GetLteFfrRrcSapUser (); + LteFfrRrcSapUser* GetLteFfrRrcSapUser (uint8_t index); /** * set the RRC SAP this RRC should interact with @@ -665,6 +699,8 @@ public: */ void SetLteEnbCphySapProvider (LteEnbCphySapProvider * s); + void SetLteEnbCphySapProvider (LteEnbCphySapProvider * s, uint8_t pos); + /** * * @@ -672,6 +708,8 @@ public: */ LteEnbCphySapUser* GetLteEnbCphySapUser (); + LteEnbCphySapUser* GetLteEnbCphySapUser (uint8_t pos); + /** * * @@ -922,6 +960,8 @@ private: // Handover Management SAP methods uint8_t DoAddUeMeasReportConfigForHandover (LteRrcSap::ReportConfigEutra reportConfig); + uint8_t DoAddUeMeasReportConfigForComponentCarrier (LteRrcSap::ReportConfigEutra reportConfig); + void DoTriggerHandover (uint16_t rnti, uint16_t targetCellId); // ANR SAP methods @@ -1077,6 +1117,11 @@ private: /// Interface to the handover algorithm instance. LteHandoverManagementSapProvider* m_handoverManagementSapProvider; + /// Receive API calls from the LteEnbComponetCarrierManager instance. + LteCcmRrcSapUser* m_ccmRrcSapUser; + /// Interface to the LteEnbComponetCarrierManager instance. + LteCcmRrcSapProvider* m_ccmRrcSapProvider; + /// Receive API calls from the ANR instance. LteAnrSapUser* m_anrSapUser; /// Interface to the ANR instance. @@ -1140,6 +1185,8 @@ private: std::set m_anrMeasIds; /// List of measurement identities which are intended for FFR purpose. std::set m_ffrMeasIds; + // List of measurement identities which are intended for component carrier management purposes. + std::set m_componentCarrierMeasIds; struct X2uTeidInfo { diff --git a/src/lte/model/lte-rrc-header.cc b/src/lte/model/lte-rrc-header.cc index 99b94b0d6..543aa2184 100644 --- a/src/lte/model/lte-rrc-header.cc +++ b/src/lte/model/lte-rrc-header.cc @@ -16,6 +16,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Lluis Parcerisa + * Modified by: + * Danilo Abrignani (Carrier Aggregation - GSoC 2015) + * Biljana Bojovic (Carrier Aggregation) */ #include "ns3/log.h" @@ -36,6 +39,8 @@ #define MAX_CELL_MEAS 32 #define MAX_CELL_REPORT 8 +#define MAX_SCELL_REPORT 5 +#define MAX_SCELL_CONF 5 namespace ns3 { NS_LOG_COMPONENT_DEFINE ("RrcHeader"); @@ -630,8 +635,12 @@ RrcAsn1Header::SerializeMeasResults (LteRrcSap::MeasResults measResults) const measResults.haveMeasResultNeighCells = false; } - // Serialize MeasResults sequence, 1 optional value, extension marker present - SerializeSequence (std::bitset<1> (measResults.haveMeasResultNeighCells),true); + std::bitset<4> measResultOptional; + measResultOptional.set (3, measResults.haveScellsMeas); + measResultOptional.set (2, false); //LocationInfo-r10 + measResultOptional.set (1, false); // MeasResultForECID-r9 + measResultOptional.set (0, measResults.haveMeasResultNeighCells); + SerializeSequence(measResultOptional,true); // Serialize measId SerializeInteger (measResults.measId,1,MAX_MEAS_ID); @@ -704,6 +713,40 @@ RrcAsn1Header::SerializeMeasResults (LteRrcSap::MeasResults measResults) const } } } + if (measResults.haveScellsMeas) + { + // Serialize measResultNeighCells + SerializeSequenceOf (measResults.measScellResultList.measResultScell.size (),MAX_SCELL_REPORT,1); + // serialize MeasResultServFreqList-r10 elements in the list + std::list::iterator it; + for (it = measResults.measScellResultList.measResultScell.begin (); it != measResults.measScellResultList.measResultScell.end (); it++) + { + // Serialize measId + SerializeInteger (it->servFreqId,0,MAX_MEAS_ID); // ToDo: change with FreqId, currently is the componentCarrierId + // Serialize MeasResultServFreqList + std::bitset<2> measResultScellPresent; + measResultScellPresent[0] = measResults.measScellResultList.haveMeasurementResultsServingSCells; + measResultScellPresent[1] = measResults.measScellResultList.haveMeasurementResultsNeighCell; // Not implemented + SerializeSequence (measResultScellPresent,true); + + // Serialize measResult + std::bitset<2> measResultScellFieldsPresent; + measResultScellFieldsPresent[1] = it->haveRsrpResult; + measResultScellFieldsPresent[0] = it->haveRsrqResult; + SerializeSequence (measResultScellFieldsPresent,true); + + if (it->haveRsrpResult) + { + SerializeInteger (it->rsrpResult,0,97); + } + + if (it->haveRsrqResult) + { + SerializeInteger (it->rsrqResult,0,34); + } + + } + } } void @@ -1669,6 +1712,281 @@ RrcAsn1Header::SerializeMeasConfig (LteRrcSap::MeasConfig measConfig) const } } } + void + RrcAsn1Header::SerializeNonCriticalExtensionConfiguration (LteRrcSap::NonCriticalExtensionConfiguration nonCriticalExtension) const + { + // 3 optional fields. Extension marker not present. + std::bitset<3> noncriticalExtension_v1020; + noncriticalExtension_v1020.set (1,0); // No sCellToRealeaseList-r10 + noncriticalExtension_v1020.set (1,1); // sCellToAddModList-r10 + noncriticalExtension_v1020.set (0,0); // No nonCriticalExtension RRCConnectionReconfiguration-v1130-IEs + SerializeSequence (noncriticalExtension_v1020,false); + if (!nonCriticalExtension.sCellsToAddModList.empty ()) + { + SerializeSequenceOf (nonCriticalExtension.sCellsToAddModList.size (),MAX_OBJECT_ID,1); + for (std::list::iterator it = nonCriticalExtension.sCellsToAddModList.begin (); it != nonCriticalExtension.sCellsToAddModList.end (); it++) + { + std::bitset<4> sCellToAddMod_r10; + sCellToAddMod_r10.set (3,1); // sCellIndex + sCellToAddMod_r10.set (2,1); // CellIdentification + sCellToAddMod_r10.set (1,1); // RadioResourceConfigCommonSCell + sCellToAddMod_r10.set (0,it->haveRadioResourceConfigDedicatedSCell); // No nonCriticalExtension RRC + SerializeSequence (sCellToAddMod_r10, false); + SerializeInteger (it->sCellIndex,1,MAX_OBJECT_ID); //sCellIndex + + // Serialize CellIdentification + std::bitset<2> cellIdentification_r10; + cellIdentification_r10.set(1,1); // phyCellId-r10 + cellIdentification_r10.set(0,1); // dl-CarrierFreq-r10 + SerializeSequence (cellIdentification_r10, false); + + SerializeInteger (it->cellIdentification.physCellId,1,MAX_EARFCN); + SerializeInteger (it->cellIdentification.dlCarrierFreq,1,MAX_EARFCN); + + //Serialize RadioResourceConfigCommonSCell + SerializeRadioResourceConfigCommonSCell (it->radioResourceConfigCommonSCell); + + if (it->haveRadioResourceConfigDedicatedSCell) + { + //Serialize RadioResourceConfigDedicatedSCell + SerializeRadioResourceDedicatedSCell (it->radioResourceConfigDedicateSCell); + } + + } + } + else + { + // NS_ASSERT_MSG ( this << "NonCriticalExtension.sCellsToAddModList cannot be empty ", false); + } + + } + void + RrcAsn1Header::SerializeRadioResourceConfigCommonSCell (LteRrcSap::RadioResourceConfigCommonSCell rrccsc) const + { + // 2 optional fields. Extension marker not present. + std::bitset<2> radioResourceConfigCommonSCell_r10; + radioResourceConfigCommonSCell_r10.set (1,rrccsc.haveNonUlConfiguration); // NonUlConfiguration + radioResourceConfigCommonSCell_r10.set (0,rrccsc.haveUlConfiguration); // UlConfiguration + SerializeSequence (radioResourceConfigCommonSCell_r10,false); + + if (radioResourceConfigCommonSCell_r10[1]) + { + // 5 optional fields. Extension marker not present. + std::bitset<5> nonUlConfiguration_r10; + nonUlConfiguration_r10.set (4,1); // Dl- bandwidth --> convert in enum + nonUlConfiguration_r10.set (3,1); // AntennaInfoCommon-r10 + nonUlConfiguration_r10.set (2,0); // phich-Config-r10 Not Implemented + nonUlConfiguration_r10.set (1,1); // pdschConfigCommon + nonUlConfiguration_r10.set (0,0); // Tdd-Config-r10 Not Implemented + SerializeSequence (nonUlConfiguration_r10,false); + + SerializeInteger (rrccsc.nonUlConfiguration.dlBandwidth,6,100); + + std::bitset<1> antennaInfoCommon_r10; + antennaInfoCommon_r10.set (0,1); + SerializeSequence (antennaInfoCommon_r10,false); + SerializeInteger (rrccsc.nonUlConfiguration.antennaInfoCommon.antennaPortsCount,0,65536); + + std::bitset<2> pdschConfigCommon_r10; + pdschConfigCommon_r10.set (1,1); + pdschConfigCommon_r10.set (0,1); + SerializeSequence (pdschConfigCommon_r10,false); + + SerializeInteger (rrccsc.nonUlConfiguration.pdschConfigCommon.referenceSignalPower,-60,50); + SerializeInteger (rrccsc.nonUlConfiguration.pdschConfigCommon.pb,0,3); + + } + if (radioResourceConfigCommonSCell_r10[0]) + { + //Serialize Ul Configuration + // 7 optional fields. Extension marker present. + std::bitset<7> UlConfiguration_r10; + UlConfiguration_r10.set (6,1); // ul-Configuration-r10 + UlConfiguration_r10.set (5,0); // p-Max-r10 Not Implemented + UlConfiguration_r10.set (4,1); // uplinkPowerControlCommonSCell-r10 + UlConfiguration_r10.set (3,0); // soundingRS-UL-ConfigCommon-r10 + UlConfiguration_r10.set (2,0); // ul-CyclicPrefixLength-r10 + UlConfiguration_r10.set (1,1); // prach-ConfigSCell-r10 + UlConfiguration_r10.set (0,0); // pusch-ConfigCommon-r10 Not Implemented + SerializeSequence (UlConfiguration_r10,true); + + //Serialize ulFreqInfo + std::bitset<3> FreqInfo_r10; + FreqInfo_r10.set (2,1); // ulCarrierFreq + FreqInfo_r10.set (1,1); // UlBandwidth + FreqInfo_r10.set (0,0); // additionalSpectrumEmissionSCell-r10 Not Implemented + SerializeSequence (FreqInfo_r10,false); + + SerializeInteger (rrccsc.ulConfiguration.ulFreqInfo.ulCarrierFreq,0,MAX_EARFCN); + SerializeInteger (rrccsc.ulConfiguration.ulFreqInfo.ulBandwidth,6,100); + + //Serialize UlPowerControllCommonSCell + std::bitset<2> UlPowerControlCommonSCell_r10; + UlPowerControlCommonSCell_r10.set (1,0); // p0-NominalPUSCH-r10 Not Implemented + UlPowerControlCommonSCell_r10.set (0,1); // alpha + SerializeSequence (UlPowerControlCommonSCell_r10,false); + + SerializeInteger (rrccsc.ulConfiguration.ulPowerControlCommonSCell.alpha,0,65536); + + //Serialize soundingRs-UlConfigCommon + //Not Implemented + + //Serialize PrachConfigSCell + std::bitset<1> prachConfigSCell_r10; + prachConfigSCell_r10.set(0,1); + SerializeSequence(prachConfigSCell_r10,false); + SerializeInteger (rrccsc.ulConfiguration.prachConfigSCell.index,0,256); + } + + + } + void + RrcAsn1Header::SerializeRadioResourceDedicatedSCell (LteRrcSap::RadioResourceConfigDedicatedSCell rrcdsc) const + { + //Serialize RadioResourceConfigDedicatedSCell + std::bitset<1> RadioResourceConfigDedicatedSCell_r10; + RadioResourceConfigDedicatedSCell_r10.set (0,1); + SerializeSequence (RadioResourceConfigDedicatedSCell_r10,false); + + LteRrcSap::PhysicalConfigDedicatedSCell pcdsc = rrcdsc.physicalConfigDedicatedSCell; + SerializePhysicalConfigDedicatedSCell (pcdsc); + } + + void + RrcAsn1Header::SerializePhysicalConfigDedicatedSCell (LteRrcSap::PhysicalConfigDedicatedSCell pcdsc) const + { + std::bitset<2> pcdscOpt; + pcdscOpt.set (1,pcdsc.haveNonUlConfiguration); + pcdscOpt.set (0,pcdsc.haveUlConfiguration); + SerializeSequence (pcdscOpt, true); + + if (pcdscOpt[1]) + { + //Serialize NonUl configuration + std::bitset<4> nulOpt; + nulOpt.set (3,pcdsc.haveAntennaInfoDedicated); + nulOpt.set (2,0); // crossCarrierSchedulingConfig-r10 NOT IMplemented + nulOpt.set (1,0); // csi-RS-Config-r10 Not Implemented + nulOpt.set (0, pcdsc.havePdschConfigDedicated); // pdsch-ConfigDedicated-r10 + SerializeSequence (nulOpt,false); + + if (pcdsc.haveAntennaInfoDedicated) + { + // Serialize antennaInfo choice + // 2 options. Selected: 0 ("explicitValue" of type "AntennaInfoDedicated") + SerializeChoice (2,0,false); + + // Serialize AntennaInfoDedicated sequence + // 1 optional parameter, not present. No extension marker. + SerializeSequence (std::bitset<1> (0),false); + + // Serialize transmissionMode + // Assuming the value in the struct is the enum index + SerializeEnum (8,pcdsc.antennaInfo.transmissionMode); + + // Serialize ue-TransmitAntennaSelection choice + SerializeChoice (2,0,false); + + // Serialize release + SerializeNull (); + } + if (pcdsc.havePdschConfigDedicated) + { + // Serialize Pdsch-ConfigDedicated Sequence: + // 0 optional / default fields, no extension marker. + SerializeSequence (std::bitset<0> (),false); + + // Serialize p-a + // Assuming the value in the struct is the enum index + SerializeEnum (8,pcdsc.pdschConfigDedicated.pa); + + // Serialize release + SerializeNull (); + } + + + } + if (pcdscOpt[0]) + { + //Serialize Ul Configuration + std::bitset<7> ulOpt; + ulOpt.set (6, pcdsc.haveAntennaInfoUlDedicated);// antennaInfoUL-r10 + ulOpt.set (5,0); // pusch-ConfigDedicatedSCell-r10 not present + ulOpt.set (4,0); // uplinkPowerControlDedicatedSCell-r10 not present + ulOpt.set (3,0); // cqi-ReportConfigSCell-r10 not present + ulOpt.set (2,pcdsc.haveSoundingRsUlConfigDedicated);// soundingRS-UL-ConfigDedicated-r10 + ulOpt.set (1,0); // soundingRS-UL-ConfigDedicated-v1020 not present + ulOpt.set (0,0); // soundingRS-UL-ConfigDedicatedAperiodic-r10 not present + SerializeSequence (ulOpt,false); + + if (pcdsc.haveAntennaInfoUlDedicated) + { + // Serialize antennaInfo choice + // 2 options. Selected: 0 ("explicitValue" of type "AntennaInfoDedicated") + SerializeChoice (2,0,false); + + // Serialize AntennaInfoDedicated sequence + // 1 optional parameter, not present. No extension marker. + SerializeSequence (std::bitset<1> (0),false); + + // Serialize transmissionMode + // Assuming the value in the struct is the enum index + SerializeEnum (8,pcdsc.antennaInfoUl.transmissionMode); + + // Serialize ue-TransmitAntennaSelection choice + SerializeChoice (2,0,false); + + // Serialize release + SerializeNull (); + } + if (pcdsc.haveSoundingRsUlConfigDedicated) + { + // Serialize SoundingRS-UL-ConfigDedicated choice: + switch (pcdsc.soundingRsUlConfigDedicated.type) + { + case LteRrcSap::SoundingRsUlConfigDedicated::RESET: + SerializeChoice (2,0,false); + SerializeNull (); + break; + + case LteRrcSap::SoundingRsUlConfigDedicated::SETUP: + default: + // 2 options, selected: 1 (setup) + SerializeChoice (2,1,false); + + // Serialize setup sequence + // 0 optional / default fields, no extension marker. + SerializeSequence (std::bitset<0> (),false); + + // Serialize srs-Bandwidth + SerializeEnum (4,pcdsc.soundingRsUlConfigDedicated.srsBandwidth); + + // Serialize srs-HoppingBandwidth + SerializeEnum (4,0); + + // Serialize freqDomainPosition + SerializeInteger (0,0,23); + + // Serialize duration + SerializeBoolean (false); + + // Serialize srs-ConfigIndex + SerializeInteger (pcdsc.soundingRsUlConfigDedicated.srsConfigIndex,0,1023); + + // Serialize transmissionComb + SerializeInteger (0,0,1); + + // Serialize cyclicShift + SerializeEnum (8,0); + + break; + } + + } + + + } + } Buffer::Iterator RrcAsn1Header::DeserializeThresholdEutra (LteRrcSap::ThresholdEutra * thresholdEutra, Buffer::Iterator bIterator) @@ -2256,6 +2574,305 @@ RrcAsn1Header::Print (std::ostream &os) const NS_FATAL_ERROR ("RrcAsn1Header Print() function must also specify LteRrcSap::RadioResourceConfigDedicated as a second argument"); } + Buffer::Iterator + RrcAsn1Header::DeserializeNonCriticalExtensionConfig (LteRrcSap::NonCriticalExtensionConfiguration *nonCriticalExtension, Buffer::Iterator bIterator) + { + NS_LOG_FUNCTION (this); + std::bitset<2> nonCriticalExtension_v890; + bIterator = DeserializeSequence (&nonCriticalExtension_v890, false,bIterator); + + if (nonCriticalExtension_v890[0]) + { + // Continue to analyze future Release optional fields + std::bitset<3> nonCriticalExtension_v920; + bIterator = DeserializeSequence (&nonCriticalExtension_v920, false, bIterator); + if (nonCriticalExtension_v920[0]) + { + // Continue to deserialize futere Release optional fields + std::bitset<3> nonCriticalExtension_v1020; + bIterator = DeserializeSequence (&nonCriticalExtension_v1020, false, bIterator); + int numElems; + bIterator = DeserializeSequenceOf (&numElems,MAX_OBJECT_ID,1,bIterator); + nonCriticalExtension->sCellsToAddModList.clear (); + // Deserialize SCellToAddMod + for (int i = 0; i < numElems; i++) + { + std::bitset<4> sCellToAddMod_r10; + bIterator = DeserializeSequence (&sCellToAddMod_r10, false, bIterator); + + LteRrcSap::SCellToAddMod sctam; + // Deserialize sCellIndex + int n; + bIterator = DeserializeInteger (&n,1,MAX_OBJECT_ID,bIterator); + sctam.sCellIndex = n; + // Deserialize CellIdentification + bIterator = DeserializeCellIdentification (&sctam.cellIdentification, bIterator); + + // Deserialize RadioResourceConfigCommonSCell + bIterator = DeserializeRadioResourceConfigCommonSCell (&sctam.radioResourceConfigCommonSCell, bIterator); + if (sCellToAddMod_r10[0]) + { + //Deserialize RadioResourceConfigDedicatedSCell + bIterator = DeserializeRadioResourceConfigDedicatedSCell (&sctam.radioResourceConfigDedicateSCell, bIterator); + } + + nonCriticalExtension->sCellsToAddModList.insert (nonCriticalExtension->sCellsToAddModList.end (), sctam); + } + } + } + + return bIterator; + } + + Buffer::Iterator + RrcAsn1Header::DeserializeCellIdentification (LteRrcSap::CellIdentification *ci, Buffer::Iterator bIterator) + { + NS_LOG_FUNCTION (this); + std::bitset<2> cellIdentification_r10; + bIterator = DeserializeSequence (&cellIdentification_r10,false,bIterator); + int n1; + bIterator = DeserializeInteger (&n1,1,65536,bIterator); + ci->physCellId = n1; + int n2; + bIterator = DeserializeInteger (&n2,1,65536,bIterator); + ci->dlCarrierFreq = n2; + + return bIterator; + } + + Buffer::Iterator + RrcAsn1Header::DeserializeRadioResourceConfigCommonSCell (LteRrcSap::RadioResourceConfigCommonSCell *rrccsc, Buffer::Iterator bIterator) + { + NS_LOG_FUNCTION (this); + std::bitset<2> radioResourceConfigCommonSCell_r10; + bIterator = DeserializeSequence (&radioResourceConfigCommonSCell_r10,false,bIterator); + rrccsc->haveNonUlConfiguration = radioResourceConfigCommonSCell_r10[1]; + rrccsc->haveUlConfiguration = radioResourceConfigCommonSCell_r10[0]; + if (rrccsc->haveNonUlConfiguration) + { + std::bitset<5> nonUlConfiguration_r10; + bIterator = DeserializeSequence (&nonUlConfiguration_r10,false,bIterator); + int n; + bIterator = DeserializeInteger (&n,6,100,bIterator); + rrccsc->nonUlConfiguration.dlBandwidth = n; + + std::bitset<1> antennaInfoCommon_r10; + bIterator = DeserializeSequence (&antennaInfoCommon_r10,false,bIterator); + bIterator = DeserializeInteger (&n,0,65536,bIterator); + rrccsc->nonUlConfiguration.antennaInfoCommon.antennaPortsCount = n; + + std::bitset<2> pdschConfigCommon_r10; + bIterator = DeserializeSequence (&pdschConfigCommon_r10,false,bIterator); + bIterator = DeserializeInteger (&n,-60,50,bIterator); + rrccsc->nonUlConfiguration.pdschConfigCommon.referenceSignalPower = n; + bIterator = DeserializeInteger (&n,0,3,bIterator); + rrccsc->nonUlConfiguration.pdschConfigCommon.pb = n; + } + if (rrccsc->haveUlConfiguration) + { + std::bitset<7> UlConfiguration_r10; + bIterator = DeserializeSequence (&UlConfiguration_r10,true,bIterator); + + std::bitset<3> FreqInfo_r10; + bIterator = DeserializeSequence (&FreqInfo_r10,false,bIterator); + int n; + bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator); + rrccsc->ulConfiguration.ulFreqInfo.ulCarrierFreq = n; + bIterator = DeserializeInteger (&n,6,100,bIterator); + rrccsc->ulConfiguration.ulFreqInfo.ulBandwidth = n; + + std::bitset<2> UlPowerControlCommonSCell_r10; + bIterator = DeserializeSequence (&UlPowerControlCommonSCell_r10,false,bIterator); + bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator); + rrccsc->ulConfiguration.ulPowerControlCommonSCell.alpha = n; + + std::bitset<1> prachConfigSCell_r10; + bIterator = DeserializeSequence (&prachConfigSCell_r10,false,bIterator); + bIterator = DeserializeInteger (&n,0,256,bIterator); + rrccsc->ulConfiguration.prachConfigSCell.index = n; + } + + return bIterator; + } + + Buffer::Iterator + RrcAsn1Header::DeserializeRadioResourceConfigDedicatedSCell (LteRrcSap::RadioResourceConfigDedicatedSCell *rrcdsc, Buffer::Iterator bIterator) + { + NS_LOG_FUNCTION (this); + std::bitset<1> RadioResourceConfigDedicatedSCell_r10; + bIterator = DeserializeSequence (&RadioResourceConfigDedicatedSCell_r10,false,bIterator); + DeserializePhysicalConfigDedicatedSCell (&rrcdsc->physicalConfigDedicatedSCell, bIterator); + + return bIterator; + } + + Buffer::Iterator + RrcAsn1Header::DeserializePhysicalConfigDedicatedSCell (LteRrcSap::PhysicalConfigDedicatedSCell *pcdsc, Buffer::Iterator bIterator) + { + NS_LOG_FUNCTION (this); + std::bitset<2> pcdscOpt; + bIterator = DeserializeSequence (&pcdscOpt,true,bIterator); + pcdsc->haveNonUlConfiguration = pcdscOpt[1]; + pcdsc->haveUlConfiguration = pcdscOpt[0]; + if (pcdsc->haveNonUlConfiguration) + { + std::bitset<4> nulOpt; + bIterator = DeserializeSequence (&nulOpt,false,bIterator); + pcdsc->haveAntennaInfoDedicated = nulOpt[3]; + pcdsc->havePdschConfigDedicated = nulOpt[0]; + + if (pcdsc->haveAntennaInfoDedicated) + { + // Deserialize antennaInfo + int sel; + bIterator = DeserializeChoice (2,false,&sel,bIterator); + if (sel == 1) + { + bIterator = DeserializeNull (bIterator); + } + else if (sel == 0) + { + std::bitset<1> codebookSubsetRestrictionPresent; + bIterator = DeserializeSequence (&codebookSubsetRestrictionPresent,false,bIterator); + + int txmode; + bIterator = DeserializeEnum (8,&txmode,bIterator); + pcdsc->antennaInfo.transmissionMode = txmode; + + if (codebookSubsetRestrictionPresent[0]) + { + // Deserialize codebookSubsetRestriction + // ... + } + + int txantennaselchosen; + bIterator = DeserializeChoice (2,false,&txantennaselchosen,bIterator); + if (txantennaselchosen == 0) + { + // Deserialize ue-TransmitAntennaSelection release + bIterator = DeserializeNull (bIterator); + } + else if (txantennaselchosen == 1) + { + // Deserialize ue-TransmitAntennaSelection setup + // ... + } + } + } + if (pcdsc->havePdschConfigDedicated) + { + // Deserialize pdsch-ConfigDedicated + std::bitset<0> bitset0; + bIterator = DeserializeSequence (&bitset0,false,bIterator); + + int slct; + + // Deserialize p-a + bIterator = DeserializeEnum (8,&slct,bIterator); + pcdsc->pdschConfigDedicated.pa = slct; + + bIterator = DeserializeNull (bIterator); + } + + } + if (pcdsc->haveUlConfiguration) + { + std::bitset<7> ulOpt; + bIterator = DeserializeSequence (&ulOpt,false,bIterator); + pcdsc->haveAntennaInfoUlDedicated = ulOpt[6]; + pcdsc->haveSoundingRsUlConfigDedicated = ulOpt[2]; + + if (pcdsc->haveAntennaInfoUlDedicated) + { + // Deserialize antennaInfo + int sel; + bIterator = DeserializeChoice (2,false,&sel,bIterator); + if (sel == 1) + { + bIterator = DeserializeNull (bIterator); + } + else if (sel == 0) + { + std::bitset<1> codebookSubsetRestrictionPresent; + bIterator = DeserializeSequence (&codebookSubsetRestrictionPresent,false,bIterator); + + int txmode; + bIterator = DeserializeEnum (8,&txmode,bIterator); + pcdsc->antennaInfo.transmissionMode = txmode; + + if (codebookSubsetRestrictionPresent[0]) + { + // Deserialize codebookSubsetRestriction + // ... + } + + int txantennaselchosen; + bIterator = DeserializeChoice (2,false,&txantennaselchosen,bIterator); + if (txantennaselchosen == 0) + { + // Deserialize ue-TransmitAntennaSelection release + bIterator = DeserializeNull (bIterator); + } + else if (txantennaselchosen == 1) + { + // Deserialize ue-TransmitAntennaSelection setup + // ... + } + } + } + if (pcdsc->haveSoundingRsUlConfigDedicated) + { + // Deserialize soundingRS-UL-ConfigDedicated + int sel; + bIterator = DeserializeChoice (2,false,&sel,bIterator); + + if (sel == 0) + { + pcdsc->soundingRsUlConfigDedicated.type = LteRrcSap::SoundingRsUlConfigDedicated::RESET; + + bIterator = DeserializeNull (bIterator); + } + + else if (sel == 1) + { + pcdsc->soundingRsUlConfigDedicated.type = LteRrcSap::SoundingRsUlConfigDedicated::SETUP; + + std::bitset<0> bitset0; + bIterator = DeserializeSequence (&bitset0,false,bIterator); + + int slct; + + // Deserialize srs-Bandwidth + bIterator = DeserializeEnum (4,&slct,bIterator); + pcdsc->soundingRsUlConfigDedicated.srsBandwidth = slct; + + // Deserialize srs-HoppingBandwidth + bIterator = DeserializeEnum (4,&slct,bIterator); + + // Deserialize freqDomainPosition + bIterator = DeserializeInteger (&slct,0,23,bIterator); + + // Deserialize duration + bool duration; + bIterator = DeserializeBoolean (&duration,bIterator); + + // Deserialize srs-ConfigIndex + bIterator = DeserializeInteger (&slct,0,1023,bIterator); + pcdsc->soundingRsUlConfigDedicated.srsConfigIndex = slct; + + // Deserialize transmissionComb + bIterator = DeserializeInteger (&slct,0,1,bIterator); + + // Deserialize cyclicShift + bIterator = DeserializeEnum (8,&slct,bIterator); + } + } + + + } + + return bIterator; + } void RrcAsn1Header::Print (std::ostream &os, LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const { @@ -2894,8 +3511,9 @@ RrcAsn1Header::DeserializeMeasResults (LteRrcSap::MeasResults *measResults, Buff { int n; std::bitset<0> b0; - std::bitset<1> measResultNeighCellsPresent; - bIterator = DeserializeSequence (&measResultNeighCellsPresent,true,bIterator); + std::bitset<4> measResultOptionalPresent; + // bIterator = DeserializeSequence (&measResultNeighCellsPresent,true,bIterator); + bIterator = DeserializeSequence (&measResultOptionalPresent,true,bIterator); // Deserialize measId bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator); @@ -2912,7 +3530,8 @@ RrcAsn1Header::DeserializeMeasResults (LteRrcSap::MeasResults *measResults, Buff bIterator = DeserializeInteger (&n, 0, 34, bIterator); measResults->rsrqResult = n; - measResults->haveMeasResultNeighCells = measResultNeighCellsPresent[0]; + measResults->haveMeasResultNeighCells = measResultOptionalPresent[0]; + measResults->haveScellsMeas = measResultOptionalPresent[3]; if ( measResults->haveMeasResultNeighCells) { int measResultNeighCellsChoice; @@ -3015,7 +3634,52 @@ RrcAsn1Header::DeserializeMeasResults (LteRrcSap::MeasResults *measResults, Buff // ... } } + if (measResults->haveScellsMeas) + { + int numElems; + bIterator = DeserializeSequenceOf (&numElems,MAX_SCELL_REPORT,1,bIterator); + for (int i = 0; i < numElems; i++) + { + LteRrcSap::MeasResultScell measResultScell; + int measScellId; + // Deserialize measId + bIterator = DeserializeInteger (&measScellId, 1,MAX_SCELL_REPORT,bIterator); + measResultScell.servFreqId = measScellId; + std::bitset<2> measResultScellPresent; + bIterator = DeserializeSequence (&measResultScellPresent,true,bIterator); + measResults->measScellResultList.haveMeasurementResultsServingSCells = measResultScellPresent[0]; + measResults->measScellResultList.haveMeasurementResultsNeighCell = measResultScellPresent[1]; + if (measResults->measScellResultList.haveMeasurementResultsServingSCells) + { + // Deserialize measResult + std::bitset<2> measResultOpts; + bIterator = DeserializeSequence (&measResultOpts, true, bIterator); + + measResultScell.haveRsrpResult = measResultOpts[1]; + if (measResultOpts[1]) + { + // Deserialize rsrpResult + bIterator = DeserializeInteger (&n,0,97,bIterator); + measResultScell.rsrpResult = n; + } + + measResultScell.haveRsrqResult = measResultOpts[0]; + if (measResultOpts[0]) + { + // Deserialize rsrqResult + bIterator = DeserializeInteger (&n,0,34,bIterator); + measResultScell.rsrqResult = n; + } + } + if (measResults->measScellResultList.haveMeasurementResultsNeighCell) + { + // Deserialize measResultBestNeighCell + } + measResults->measScellResultList.measResultScell.push_back (measResultScell); + } + + } return bIterator; } @@ -4447,7 +5111,7 @@ RrcConnectionReconfigurationHeader::PreSerialize () const options.set (3,0); // No dedicatedInfoNASList options.set (2,m_haveRadioResourceConfigDedicated); options.set (1,0); // No securityConfigHO - options.set (0,0); // No nonCriticalExtension + options.set (0,m_haveNonCriticalExtension); // Implemented nonCriticalExtension because compatibility with R10 - CA SerializeSequence (options,false); if (m_haveMeasConfig) @@ -4553,6 +5217,28 @@ RrcConnectionReconfigurationHeader::PreSerialize () const { // Serialize RadioResourceConfigDedicated SerializeRadioResourceConfigDedicated (m_radioResourceConfigDedicated); + } + + if (m_haveNonCriticalExtension) + { + // Serialize NonCriticalExtension RRCConnectionReconfiguration-v890-IEs sequence: + // 2 optional fields. Extension marker not present. + std::bitset<2> noncriticalExtension_v890; + noncriticalExtension_v890.set (1,0); // No lateNonCriticalExtension + noncriticalExtension_v890.set (0,m_haveNonCriticalExtension); // Implemented nonCriticalExtension because compatibility with R10 - CA + //Enable RRCCoonectionReconfiguration-v920-IEs + SerializeSequence (noncriticalExtension_v890,false); + + // Serialize NonCriticalExtension RRCConnectionReconfiguration-v920-IEs sequence: + // 3 optional fields. Extension marker not present. + std::bitset<3> noncriticalExtension_v920; + noncriticalExtension_v920.set (1,0); // No otehrConfig-r9 + noncriticalExtension_v920.set (1,0); // No fullConfig-r9 + //Enable RRCCoonectionReconfiguration-v1020-IEs + noncriticalExtension_v920.set (0,m_haveNonCriticalExtension); // Implemented nonCriticalExtension because compatibility with R10 - CA + SerializeSequence (noncriticalExtension_v920,false); + + SerializeNonCriticalExtensionConfiguration (m_nonCriticalExtension); //Serializing RRCConnectionReconfiguration-r8-IEs } // Finish serialization @@ -4742,8 +5428,10 @@ RrcConnectionReconfigurationHeader::Deserialize (Buffer::Iterator bIterator) } // nonCriticalExtension - if (rrcConnRecOpts[0]) + m_haveNonCriticalExtension = rrcConnRecOpts[0]; + if (m_haveNonCriticalExtension) { + bIterator = DeserializeNonCriticalExtensionConfig (&m_nonCriticalExtension,bIterator); // ... } } @@ -4999,6 +5687,8 @@ RrcConnectionReconfigurationHeader::SetMessage (LteRrcSap::RrcConnectionReconfig m_mobilityControlInfo = msg.mobilityControlInfo; m_haveRadioResourceConfigDedicated = msg.haveRadioResourceConfigDedicated; m_radioResourceConfigDedicated = msg.radioResourceConfigDedicated; + m_haveNonCriticalExtension = msg.haveNonCriticalExtension; + m_nonCriticalExtension = msg.nonCriticalExtension; m_isDataSerialized = false; } @@ -5015,6 +5705,8 @@ RrcConnectionReconfigurationHeader::GetMessage () const msg.mobilityControlInfo = m_mobilityControlInfo; msg.haveRadioResourceConfigDedicated = m_haveRadioResourceConfigDedicated; msg.radioResourceConfigDedicated = m_radioResourceConfigDedicated; + msg.haveNonCriticalExtension = m_haveNonCriticalExtension; + msg.nonCriticalExtension = m_nonCriticalExtension; return msg; } @@ -5059,6 +5751,18 @@ LteRrcSap::RadioResourceConfigDedicated RrcConnectionReconfigurationHeader::GetRadioResourceConfigDedicated () { return m_radioResourceConfigDedicated; + } + + bool + RrcConnectionReconfigurationHeader::GetHaveNonCriticalExtensionConfig () + { + return m_haveNonCriticalExtension; + } + + LteRrcSap::NonCriticalExtensionConfiguration + RrcConnectionReconfigurationHeader::GetNonCriticalExtensionConfig () + { + return m_nonCriticalExtension; } bool diff --git a/src/lte/model/lte-rrc-header.h b/src/lte/model/lte-rrc-header.h index 5f53da248..63dfc6ad8 100644 --- a/src/lte/model/lte-rrc-header.h +++ b/src/lte/model/lte-rrc-header.h @@ -16,6 +16,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Lluis Parcerisa + * Modified by: + * Danilo Abrignani (Carrier Aggregation - GSoC 2015) + * Biljana Bojovic (Carrier Aggregation) */ #ifndef RRC_HEADER_H @@ -54,6 +57,7 @@ protected: void SerializeLogicalChannelConfig (LteRrcSap::LogicalChannelConfig logicalChannelConfig) const; void SerializeRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const; void SerializePhysicalConfigDedicated (LteRrcSap::PhysicalConfigDedicated physicalConfigDedicated) const; + void SerializePhysicalConfigDedicatedSCell (LteRrcSap::PhysicalConfigDedicatedSCell pcdsc) const; void SerializeSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 systemInformationBlockType1) const; void SerializeSystemInformationBlockType2 (LteRrcSap::SystemInformationBlockType2 systemInformationBlockType2) const; void SerializeRadioResourceConfigCommon (LteRrcSap::RadioResourceConfigCommon radioResourceConfigCommon) const; @@ -62,6 +66,9 @@ protected: void SerializePlmnIdentity (uint32_t plmnId) const; void SerializeRachConfigCommon (LteRrcSap::RachConfigCommon rachConfigCommon) const; void SerializeMeasConfig (LteRrcSap::MeasConfig measConfig) const; + void SerializeNonCriticalExtensionConfiguration (LteRrcSap::NonCriticalExtensionConfiguration nonCriticalExtensionConfiguration) const; + void SerializeRadioResourceConfigCommonSCell (LteRrcSap::RadioResourceConfigCommonSCell rrccsc) const; + void SerializeRadioResourceDedicatedSCell (LteRrcSap::RadioResourceConfigDedicatedSCell rrcdsc) const; void SerializeQoffsetRange (int8_t qOffsetRange) const; void SerializeThresholdEutra (LteRrcSap::ThresholdEutra thresholdEutra) const; @@ -81,6 +88,11 @@ protected: Buffer::Iterator DeserializeMeasConfig (LteRrcSap::MeasConfig * measConfig, Buffer::Iterator bIterator); Buffer::Iterator DeserializeQoffsetRange (int8_t * qOffsetRange, Buffer::Iterator bIterator); Buffer::Iterator DeserializeThresholdEutra (LteRrcSap::ThresholdEutra * thresholdEutra, Buffer::Iterator bIterator); + Buffer::Iterator DeserializeNonCriticalExtensionConfig (LteRrcSap::NonCriticalExtensionConfiguration * nonCriticalExtension, Buffer::Iterator bIterator); + Buffer::Iterator DeserializeCellIdentification (LteRrcSap::CellIdentification * ci, Buffer::Iterator bIterator); + Buffer::Iterator DeserializeRadioResourceConfigCommonSCell (LteRrcSap::RadioResourceConfigCommonSCell * rrccsc, Buffer::Iterator bIterator); + Buffer::Iterator DeserializeRadioResourceConfigDedicatedSCell (LteRrcSap::RadioResourceConfigDedicatedSCell * rrcdsc, Buffer::Iterator bIterator); + Buffer::Iterator DeserializePhysicalConfigDedicatedSCell (LteRrcSap::PhysicalConfigDedicatedSCell *pcdsc, Buffer::Iterator bIterator); void Print (std::ostream &os) const; /** @@ -446,6 +458,18 @@ public: */ LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigDedicated () const; + /** + * Getter for m_haveNonCriticalExtension + * @return m_haveNonCriticalExtension + */ + bool GetHaveNonCriticalExtensionConfig (); + + /** + * Getter for m_nonCriticalExtension + * @return m_nonCriticalExtension + */ + LteRrcSap::NonCriticalExtensionConfiguration GetNonCriticalExtensionConfig (); + /** * Gets m_radioResourceConfigDedicated.havePhysicalConfigDedicated * @return m_radioResourceConfigDedicated.havePhysicalConfigDedicated diff --git a/src/lte/model/lte-rrc-sap.h b/src/lte/model/lte-rrc-sap.h index 32709c811..ad502bd80 100644 --- a/src/lte/model/lte-rrc-sap.h +++ b/src/lte/model/lte-rrc-sap.h @@ -607,6 +607,8 @@ public: uint8_t rsrqResult; bool haveMeasResultNeighCells; std::list measResultListEutra; + bool haveScellsMeas; + MeasResultServFreqList measScellResultList; }; // Messages diff --git a/src/lte/model/lte-ue-rrc.cc b/src/lte/model/lte-ue-rrc.cc index 4c1dd06c0..79ebea377 100644 --- a/src/lte/model/lte-ue-rrc.cc +++ b/src/lte/model/lte-ue-rrc.cc @@ -17,6 +17,9 @@ * * Author: Nicola Baldo * Budiarto Herman + * Modified by: + * Danilo Abrignani (Carrier Aggregation - GSoC 2015) + * Biljana Bojovic (Carrier Aggregation) */ #include "lte-ue-rrc.h" @@ -127,6 +130,7 @@ LteUeRrc::LteUeRrc () m_rrcSapUser (0), m_macSapProvider (0), m_asSapUser (0), + m_ccmRrcSapProvider (0), m_state (IDLE_START), m_imsi (0), m_rnti (0), @@ -136,7 +140,8 @@ LteUeRrc::LteUeRrc () m_hasReceivedMib (false), m_hasReceivedSib1 (false), m_hasReceivedSib2 (false), - m_csgWhiteList (0) + m_csgWhiteList (0), + m_numberOfComponentCarriers (0) { NS_LOG_FUNCTION (this); m_cphySapUser = new MemberLteUeCphySapUser (this); @@ -144,6 +149,7 @@ LteUeRrc::LteUeRrc () m_rrcSapProvider = new MemberLteUeRrcSapProvider (this); m_drbPdcpSapUser = new LtePdcpSpecificLtePdcpSapUser (this); m_asSapProvider = new MemberLteAsSapProvider (this); + m_ccmRrcSapUser = new MemberLteUeCcmRrcSapUser (this); } @@ -161,6 +167,7 @@ LteUeRrc::DoDispose () delete m_rrcSapProvider; delete m_drbPdcpSapUser; delete m_asSapProvider; + delete m_ccmRrcSapUser; m_drbMap.clear (); } @@ -169,7 +176,7 @@ LteUeRrc::GetTypeId (void) { static TypeId tid = TypeId ("ns3::LteUeRrc") .SetParent () - .SetGroupName("Lte") + .SetGroupName ("Lte") .AddConstructor () .AddAttribute ("DataRadioBearerMap", "List of UE RadioBearerInfo for Data Radio Bearers by LCID.", ObjectMapValue (), @@ -309,6 +316,20 @@ LteUeRrc::SetLteMacSapProvider (LteMacSapProvider * s) m_macSapProvider = s; } +void +LteUeRrc::SetLteCcmRrcSapProvider (LteUeCcmRrcSapProvider * s) +{ + NS_LOG_FUNCTION (this << s); + m_ccmRrcSapProvider = s; +} + +LteUeCcmRrcSapUser* +LteUeRrc::GetLteCcmRrcSapUser () +{ + NS_LOG_FUNCTION (this); + return m_ccmRrcSapUser; +} + void LteUeRrc::SetAsSapUser (LteAsSapUser* s) { @@ -718,6 +739,7 @@ void LteUeRrc::DoRecvSystemInformationBlockType1 (uint16_t cellId, LteRrcSap::SystemInformationBlockType1 msg) { + NS_LOG_FUNCTION (this); switch (m_state) { case IDLE_WAIT_SIB1: @@ -760,13 +782,25 @@ LteUeRrc::DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters par // layer 3 filtering does not apply in IDLE mode bool useLayer3Filtering = (m_state == CONNECTED_NORMALLY); - + bool triggering = true; std::vector ::iterator newMeasIt; for (newMeasIt = params.m_ueMeasurementsList.begin (); newMeasIt != params.m_ueMeasurementsList.end (); ++newMeasIt) { - SaveUeMeasurements (newMeasIt->m_cellId, newMeasIt->m_rsrp, - newMeasIt->m_rsrq, useLayer3Filtering); + if (params.m_componentCarrierId != 0) + { + triggering = false; // report is triggered only when an event is on the primary carrier + // in this case the measurement received is related to secondary carriers + // measurements related to secondary carriers are saved on a different portion of memory + SaveScellUeMeasurements (newMeasIt->m_cellId, newMeasIt->m_rsrp, + newMeasIt->m_rsrq, useLayer3Filtering, + params.m_componentCarrierId ); + } + else + { + SaveUeMeasurements (newMeasIt->m_cellId, newMeasIt->m_rsrp, + newMeasIt->m_rsrq, useLayer3Filtering); + } } if (m_state == IDLE_CELL_SEARCH) @@ -776,11 +810,14 @@ LteUeRrc::DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters par } else { - std::map::iterator measIdIt; - for (measIdIt = m_varMeasConfig.measIdList.begin (); - measIdIt != m_varMeasConfig.measIdList.end (); ++measIdIt) + if (triggering) { - MeasurementReportTriggering (measIdIt->first); + std::map::iterator measIdIt; + for (measIdIt = m_varMeasConfig.measIdList.begin (); + measIdIt != m_varMeasConfig.measIdList.end (); ++measIdIt) + { + MeasurementReportTriggering (measIdIt->first); + } } } @@ -790,7 +827,7 @@ LteUeRrc::DoReportUeMeasurements (LteUeCphySapUser::UeMeasurementsParameters par // RRC SAP methods -void +void LteUeRrc::DoCompleteSetup (LteUeRrcSapProvider::CompleteSetupParameters params) { NS_LOG_FUNCTION (this << " RNTI " << m_rnti); @@ -875,6 +912,7 @@ void LteUeRrc::DoRecvRrcConnectionReconfiguration (LteRrcSap::RrcConnectionReconfiguration msg) { NS_LOG_FUNCTION (this << " RNTI " << m_rnti); + NS_LOG_INFO ("DoRecvRrcConnectionReconfiguration haveNonCriticalExtension:" << msg.haveNonCriticalExtension ); switch (m_state) { case CONNECTED_NORMALLY: @@ -921,6 +959,11 @@ LteUeRrc::DoRecvRrcConnectionReconfiguration (LteRrcSap::RrcConnectionReconfigur else { NS_LOG_INFO ("haveMobilityControlInfo == false"); + if (msg.haveNonCriticalExtension) + { + ApplyRadioResourceConfigDedicatedSecondaryCarrier (msg.nonCriticalExtension); + NS_LOG_FUNCTION ( this << "RNTI " << m_rnti << " Configured for CA" ); + } if (msg.haveRadioResourceConfigDedicated) { ApplyRadioResourceConfigDedicated (msg.radioResourceConfigDedicated); @@ -1119,6 +1162,41 @@ LteUeRrc::EvaluateCellForSelection () } // end of void LteUeRrc::EvaluateCellForSelection () +void +LteUeRrc::ApplyRadioResourceConfigDedicatedSecondaryCarrier (LteRrcSap::NonCriticalExtensionConfiguration nonCec) +{ + NS_LOG_FUNCTION (this); + + for(std::list::iterator it = nonCec.sCellsToAddModList.begin(); it!=nonCec.sCellsToAddModList.end(); it++) + { + LteRrcSap::SCellToAddMod scell = *it; + uint8_t ccId = scell.sCellIndex; + + if (ccId>=m_numberOfComponentCarriers) + break; + + uint8_t ulBand = scell.radioResourceConfigCommonSCell.ulConfiguration.ulFreqInfo.ulBandwidth; + uint32_t ulEarfcn = scell.radioResourceConfigCommonSCell.ulConfiguration.ulFreqInfo.ulCarrierFreq; + uint8_t dlBand = scell.radioResourceConfigCommonSCell.nonUlConfiguration.dlBandwidth; + uint32_t dlEarfcn = scell.cellIdentification.dlCarrierFreq; + uint8_t txMode = scell.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.antennaInfo.transmissionMode; + uint8_t srsIndex = scell.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.soundingRsUlConfigDedicated.srsConfigIndex; + + m_cphySapProvider->SynchronizeWithEnb (m_cellId, dlEarfcn); + m_cphySapProvider->SetDlBandwidth (dlBand); + m_cphySapProvider->ConfigureUplink (ulEarfcn, ulBand); + m_cphySapProvider->ConfigureReferenceSignalPower (scell.radioResourceConfigCommonSCell.nonUlConfiguration.pdschConfigCommon.referenceSignalPower); + m_cphySapProvider->SetTransmissionMode (txMode); + m_cphySapProvider->SetRnti(m_rnti); + m_cmacSapProvider->SetRnti(m_rnti); + // update PdschConfigDedicated (i.e. P_A value) + LteRrcSap::PdschConfigDedicated pdschConfigDedicated = scell.radioResourceConfigDedicateSCell.physicalConfigDedicatedSCell.pdschConfigDedicated; + double paDouble = LteRrcSap::ConvertPdschConfigDedicated2Double (pdschConfigDedicated); + m_cphySapProvider->SetPa (paDouble); + m_cphySapProvider->SetSrsConfigurationIndex (srsIndex); + } +} + void LteUeRrc::ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd) { @@ -1185,7 +1263,7 @@ LteUeRrc::ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedic m_cmacSapProvider->AddLc (lcid, lcConfig, rlc->GetLteMacSapUser ()); ++stamIt; - NS_ASSERT_MSG (stamIt == rrcd.srbToAddModList.end (), "at most one SrbToAdd supported"); + NS_ASSERT_MSG (stamIt == rrcd.srbToAddModList.end (), "at most one SrbToAdd supported"); LteUeRrcSapUser::SetupParameters ueParams; ueParams.srb0SapProvider = m_srb0->m_rlc->GetLteRlcSapProvider (); @@ -2682,6 +2760,28 @@ LteUeRrc::SendMeasurementReport (uint8_t measId) NS_LOG_WARN (this << " cellsTriggeredList is empty"); } + measResults.haveScellsMeas = false; + std::map::iterator sCellsMeasIt = m_storedScellMeasValues.begin (); + if (sCellsMeasIt != m_storedScellMeasValues.end ()) + { + measResults.haveScellsMeas = true; + measResults.measScellResultList.haveMeasurementResultsServingSCells = true; + measResults.measScellResultList.haveMeasurementResultsNeighCell = false; + + + for ( sCellsMeasIt = m_storedScellMeasValues.begin (); + sCellsMeasIt != m_storedScellMeasValues.end (); ++sCellsMeasIt) + { + LteRrcSap::MeasResultScell measResultScell; + measResultScell.servFreqId = sCellsMeasIt->first; + measResultScell.haveRsrpResult = true; + measResultScell.haveRsrqResult = true; + measResultScell.rsrpResult = EutranMeasurementMapping::Dbm2RsrpRange (sCellsMeasIt->second.rsrp); + measResultScell.rsrqResult = EutranMeasurementMapping::Db2RsrqRange (sCellsMeasIt->second.rsrq); + measResults.measScellResultList.measResultScell.push_back (measResultScell); + } + } + /* * The current LteRrcSap implementation is broken in that it does not * allow for infinite values of reportAmount, which is probably the most @@ -2859,7 +2959,73 @@ LteUeRrc::SwitchToState (State newState) } } +void +LteUeRrc::DoComponentCarrierEnabling (std::vector res) + { + NS_LOG_INFO (this); + } +void +LteUeRrc::SaveScellUeMeasurements (uint16_t sCellId, double rsrp, double rsrq, + bool useLayer3Filtering, uint16_t componentCarrierId) +{ + NS_LOG_FUNCTION (this << sCellId << componentCarrierId << rsrp << rsrq << useLayer3Filtering); + if (sCellId == m_cellId) + { + + std::map::iterator storedMeasIt = m_storedScellMeasValues.find (componentCarrierId); + + if (storedMeasIt != m_storedScellMeasValues.end ()) + { + if (useLayer3Filtering) + { + // F_n = (1-a) F_{n-1} + a M_n + storedMeasIt->second.rsrp = (1 - m_varMeasConfig.aRsrp) * storedMeasIt->second.rsrp + + m_varMeasConfig.aRsrp * rsrp; + + if (std::isnan (storedMeasIt->second.rsrq)) + { + // the previous RSRQ measurements provided UE PHY are invalid + storedMeasIt->second.rsrq = rsrq; // replace it with unfiltered value + } + else + { + storedMeasIt->second.rsrq = (1 - m_varMeasConfig.aRsrq) * storedMeasIt->second.rsrq + + m_varMeasConfig.aRsrq * rsrq; + } + } + else + { + storedMeasIt->second.rsrp = rsrp; + storedMeasIt->second.rsrq = rsrq; + } + } + else + { + // first value is always unfiltered + MeasValues v; + v.rsrp = rsrp; + v.rsrq = rsrq; + std::pair val (componentCarrierId, v); + std::pair::iterator, bool> + ret = m_storedScellMeasValues.insert (val); + NS_ASSERT_MSG (ret.second == true, "element already existed"); + storedMeasIt = ret.first; + } + + NS_LOG_DEBUG (this << " IMSI " << m_imsi << " state " << ToString (m_state) + << ", measured cell " << sCellId + << ", carrier component Id " << componentCarrierId + << ", new RSRP " << rsrp << " stored " << storedMeasIt->second.rsrp + << ", new RSRQ " << rsrq << " stored " << storedMeasIt->second.rsrq); + storedMeasIt->second.timestamp = Simulator::Now (); + } + else + { + NS_LOG_DEBUG (this << " IMSI " << m_imsi << "measurement on SCC from not serving cell "); + } + +} // end of void SaveUeMeasurements } // namespace ns3 diff --git a/src/lte/model/lte-ue-rrc.h b/src/lte/model/lte-ue-rrc.h index fb49faf89..4e49122a0 100644 --- a/src/lte/model/lte-ue-rrc.h +++ b/src/lte/model/lte-ue-rrc.h @@ -17,6 +17,9 @@ * * Author: Nicola Baldo * Budiarto Herman + * Modified by: + * Danilo Abrignani (Carrier Aggregation - GSoC 2015) + * Biljana Bojovic (Carrier Aggregation) */ #ifndef LTE_UE_RRC_H @@ -30,10 +33,16 @@ #include #include #include +#include "ns3/component-carrier-ue.h" +#include +#include #include #include +#define MIN_NO_CC 1 +#define MAX_NO_CC 5 // this is the maximum number of carrier components allowed by 3GPP up to R13 + namespace ns3 { @@ -76,6 +85,7 @@ class LteUeRrc : public Object friend class MemberLteAsSapProvider; friend class MemberLteUeCphySapUser; friend class MemberLteUeRrcSapProvider; + friend class MemberLteUeCcmRrcSapUser; public: @@ -122,7 +132,6 @@ private: public: static TypeId GetTypeId (void); - /** * set the CPHY SAP this RRC should use to interact with the PHY * @@ -189,6 +198,20 @@ public: */ LteAsSapProvider* GetAsSapProvider (); + /** + * set the Component Carrier Management SAP this RRC should interact with + * + * \param s the Component Carrier Management SAP Provider to be used by this RRC + */ + void SetLteCcmRrcSapProvider (LteUeCcmRrcSapProvider * s); + + /** + * Get the Component Carrier Management SAP offered by this RRC + * \return s the Component Carrier Management SAP User interface offered to the + * carrier component selection algorithm by this RRC + */ + LteUeCcmRrcSapUser* GetLteCcmRrcSapUser (); + /** * * \param imsi the unique UE identifier @@ -246,6 +269,17 @@ public: */ void SetUseRlcSm (bool val); + /** + * + * \param support CA + */ + void SetCaSupport (bool supportCa); + + /** + * + * \return support CA + */ + bool GetCaSupport (void) const; /** * TracedCallback signature for imsi, cellId and rnti events. @@ -337,6 +371,9 @@ private: /// Part of the RRC protocol. Implement the LteUeRrcSapProvider::RecvRrcConnectionReject interface. void DoRecvRrcConnectionReject (LteRrcSap::RrcConnectionReject msg); + // RRC CCM SAP USER Method + void DoComponentCarrierEnabling (std::vector res); + // INTERNAL METHODS @@ -448,6 +485,24 @@ private: void SaveUeMeasurements (uint16_t cellId, double rsrp, double rsrq, bool useLayer3Filtering); + /** + * \brief keep the given measurement result as the latest measurement figures, + * to be utilised by UE RRC functions. + * \param cellId the cell ID of the measured cell + * \param rsrp measured RSRP value to be saved (in dBm) + * \param rsrq measured RSRQ value to be saved (in dB) + * \param useLayer3Filtering + * \param componentCarrierId + * \todo Remove the useLayer3Filtering argument + * + * As for SaveUeMeasurements, this function aims to store the latest measurements + * related to the secondary component carriers. + * in the current implementation it saves only measurements related on the serving + * secondary carriers while, measurements related to the Neighbor Cell are filtered + */ + + void SaveScellUeMeasurements (uint16_t cellId, double rsrp, double rsrq, + bool useLayer3Filtering, uint16_t componentCarrierId); /** * \brief Evaluate the reporting criteria of a measurement identity and * invoke some reporting actions based on the result. @@ -508,6 +563,7 @@ private: void SendMeasurementReport (uint8_t measId); void ApplyRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd); + void ApplyRadioResourceConfigDedicatedSecondaryCarrier (LteRrcSap::NonCriticalExtensionConfiguration nonCec); void StartConnection (); void LeaveConnectedMode (); void DisposeOldSrb1 (); @@ -535,6 +591,13 @@ private: LteAsSapProvider* m_asSapProvider; LteAsSapUser* m_asSapUser; + // Receive API calls from the LteUeComponetCarrierManager instance. + // LteCcmRrcSapUser* m_ccmRrcSapUser; + /// Interface to the LteUeComponetCarrierManage instance. + LteUeCcmRrcSapProvider* m_ccmRrcSapProvider; + LteUeCcmRrcSapUser* m_ccmRrcSapUser; + + /// The current UE RRC state. State m_state; @@ -809,6 +872,26 @@ private: */ std::map m_storedMeasValues; + std::map > m_storedMeasValuesPerCarrier; + + /** + * \brief Internal storage of the latest measurement results from all detected + * detected Secondary carrier component, indexed by the carrier component ID + * where the measurement was taken from. + * + * Each *measurement result* comprises of RSRP (in dBm) and RSRQ (in dB). + * + * In IDLE mode, the measurement results are used by the *initial cell + * selection* procedure. While in CONNECTED mode, *layer-3 filtering* is + * applied to the measurement results and they are used by *UE measurements* + * function: + * - LteUeRrc::MeasurementReportTriggering: in this case it is not set any + * measurment related to seconday carrier components since the + * A6 event is not implemented + * - LteUeRrc::SendMeasurementReport: in this case the report are sent. + */ + std::map m_storedScellMeasValues; + /** * \brief Represents a single triggered event from a measurement identity * which reporting criteria have been fulfilled, but delayed by @@ -943,6 +1026,12 @@ private: */ void ConnectionTimeout (); +public: + /** + * The number of component carriers. + */ + uint16_t m_numberOfComponentCarriers; + }; // end of class LteUeRrc diff --git a/src/lte/test/test-asn1-encoding.cc b/src/lte/test/test-asn1-encoding.cc index 3396b944e..d0ba2480a 100644 --- a/src/lte/test/test-asn1-encoding.cc +++ b/src/lte/test/test-asn1-encoding.cc @@ -574,6 +574,7 @@ RrcConnectionReconfigurationTestCase::DoRun (void) msg.radioResourceConfigDedicated = CreateRadioResourceConfigDedicated (); + msg.haveNonCriticalExtension = false; //Danilo RrcConnectionReconfigurationHeader source; source.SetMessage (msg); @@ -946,6 +947,7 @@ MeasurementReportTestCase::DoRun (void) mResEutra.cgiInfo.trackingAreaCode = 5; msg.measResults.measResultListEutra.push_back (mResEutra); + msg.measResults.haveScellsMeas = false; MeasurementReportHeader source; source.SetMessage (msg);