lte: implement RRC CA message structure generation, serialization and deserialization

This commit is contained in:
Danilo Abrignani
2017-01-24 16:42:33 +01:00
parent 859859a8e1
commit 7ecc78be31
12 changed files with 1471 additions and 25 deletions

View File

@@ -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<ns3::LteRrcSap::DrbToAddMod, std::allocator<ns3::LteRrcSap::DrbToAddMod> > * 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<ns3::LteRrcSap::SrbToAddMod, std::allocator<ns3::LteRrcSap::SrbToAddMod> > * 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<ns3::LteRrcSap::SrbToAddMod, std::allocator<ns3::LteRrcSap::SrbToAddMod> > 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',

View File

@@ -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<ns3::LteRrcSap::DrbToAddMod, std::allocator<ns3::LteRrcSap::DrbToAddMod> > * 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<ns3::LteRrcSap::SrbToAddMod, std::allocator<ns3::LteRrcSap::SrbToAddMod> > * 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<ns3::LteRrcSap::SrbToAddMod, std::allocator<ns3::LteRrcSap::SrbToAddMod> > 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',

View File

@@ -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);

View File

@@ -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

View File

@@ -18,6 +18,8 @@
* Authors: Nicola Baldo <nbaldo@cttc.es>
* Marco Miozzo <mmiozzo@cttc.es>
* Manuel Requena <manuel.requena@cttc.es>
* Modified by: Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015),
* Biljana Bojovic <biljana.bojovic@cttc.es> (Carrier Aggregation)
*/
#include "lte-enb-rrc.h"
@@ -142,10 +144,11 @@ UeManager::UeManager (Ptr<LteEnbRrc> 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<LteRrcSap::SCellToAddMod> SccCon;
// sCellToReleaseList is always empty since no Scc is released
std::map<uint8_t, Ptr<ComponentCarrierEnb> >::iterator it = m_rrc->m_componentCarrierEnbMap.begin();
it++;
for (;it!=m_rrc->m_componentCarrierEnbMap.end(); it++)
{
uint8_t ccId = it->first;
Ptr<ComponentCarrierEnb> 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<LteEnbRrc> (this);
m_s1SapUser = new MemberEpcEnbS1SapUser<LteEnbRrc> (this);
m_cphySapUser = new MemberLteEnbCphySapUser<LteEnbRrc> (this);
m_ccmRrcSapUser = new MemberLteCcmRrcSapUser <LteEnbRrc>(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<Packet> 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)
{

View File

@@ -18,6 +18,9 @@
* Authors: Nicola Baldo <nbaldo@cttc.es>
* Marco Miozzo <mmiozzo@cttc.es>
* Manuel Requena <manuel.requena@cttc.es>
* Modified by:
* Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
* Biljana Bojovic <biljana.bojovic@cttc.es> (Carrier Aggregation)
*/
#ifndef LTE_ENB_RRC_H
@@ -36,10 +39,12 @@
#include <ns3/epc-x2-sap.h>
#include <ns3/epc-enb-s1-sap.h>
#include <ns3/lte-handover-management-sap.h>
#include <ns3/lte-ccm-rrc-sap.h>
#include <ns3/lte-enb-cphy-sap.h>
#include <ns3/lte-rrc-sap.h>
#include <ns3/lte-anr-sap.h>
#include <ns3/lte-ffr-rrc-sap.h>
#include <ns3/lte-rlc.h>
#include <map>
#include <set>
@@ -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<LteEnbRrc>;
friend class EpcX2SpecificEpcX2SapUser<LteEnbRrc>;
friend class UeManager;
friend class MemberLteCcmRrcSapUser<LteEnbRrc>;
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<uint8_t> m_anrMeasIds;
/// List of measurement identities which are intended for FFR purpose.
std::set<uint8_t> m_ffrMeasIds;
// List of measurement identities which are intended for component carrier management purposes.
std::set<uint8_t> m_componentCarrierMeasIds;
struct X2uTeidInfo
{

View File

@@ -16,6 +16,9 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Lluis Parcerisa <lparcerisa@cttc.cat>
* Modified by:
* Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
* Biljana Bojovic <biljana.bojovic@cttc.es> (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<LteRrcSap::MeasResultScell>::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<LteRrcSap::SCellToAddMod>::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

View File

@@ -16,6 +16,9 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Lluis Parcerisa <lparcerisa@cttc.cat>
* Modified by:
* Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
* Biljana Bojovic <biljana.bojovic@cttc.es> (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

View File

@@ -607,6 +607,8 @@ public:
uint8_t rsrqResult;
bool haveMeasResultNeighCells;
std::list<MeasResultEutra> measResultListEutra;
bool haveScellsMeas;
MeasResultServFreqList measScellResultList;
};
// Messages

View File

@@ -17,6 +17,9 @@
*
* Author: Nicola Baldo <nbaldo@cttc.es>
* Budiarto Herman <budiarto.herman@magister.fi>
* Modified by:
* Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
* Biljana Bojovic <biljana.bojovic@cttc.es> (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<LteUeRrc> (this);
@@ -144,6 +149,7 @@ LteUeRrc::LteUeRrc ()
m_rrcSapProvider = new MemberLteUeRrcSapProvider<LteUeRrc> (this);
m_drbPdcpSapUser = new LtePdcpSpecificLtePdcpSapUser<LteUeRrc> (this);
m_asSapProvider = new MemberLteAsSapProvider<LteUeRrc> (this);
m_ccmRrcSapUser = new MemberLteUeCcmRrcSapUser<LteUeRrc> (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<Object> ()
.SetGroupName("Lte")
.SetGroupName ("Lte")
.AddConstructor<LteUeRrc> ()
.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 <LteUeCphySapUser::UeMeasurementsElement>::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<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt;
for (measIdIt = m_varMeasConfig.measIdList.begin ();
measIdIt != m_varMeasConfig.measIdList.end (); ++measIdIt)
if (triggering)
{
MeasurementReportTriggering (measIdIt->first);
std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::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<LteRrcSap::SCellToAddMod>::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<uint16_t, MeasValues>::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<uint8_t> 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<uint16_t, MeasValues>::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<uint16_t, MeasValues> val (componentCarrierId, v);
std::pair<std::map<uint16_t, MeasValues>::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

View File

@@ -17,6 +17,9 @@
*
* Author: Nicola Baldo <nbaldo@cttc.es>
* Budiarto Herman <budiarto.herman@magister.fi>
* Modified by:
* Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
* Biljana Bojovic <biljana.bojovic@cttc.es> (Carrier Aggregation)
*/
#ifndef LTE_UE_RRC_H
@@ -30,10 +33,16 @@
#include <ns3/lte-ue-cphy-sap.h>
#include <ns3/lte-rrc-sap.h>
#include <ns3/traced-callback.h>
#include "ns3/component-carrier-ue.h"
#include <ns3/lte-ue-ccm-rrc-sap.h>
#include <vector>
#include <map>
#include <set>
#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<LteUeRrc>;
friend class MemberLteUeCphySapUser<LteUeRrc>;
friend class MemberLteUeRrcSapProvider<LteUeRrc>;
friend class MemberLteUeCcmRrcSapUser<LteUeRrc>;
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<uint8_t> 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<uint16_t, MeasValues> m_storedMeasValues;
std::map<uint16_t, std::map <uint8_t, MeasValues> > 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<uint16_t, MeasValues> 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

View File

@@ -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);