Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
ba609ca9
Commit
ba609ca9
authored
Sep 22, 2018
by
Bing-Kai Hong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Set the RRC status in DU, Reconfigure SRB2, Manage RRC/NAS UL message in DU
parent
f6c28fad
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
283 additions
and
76 deletions
+283
-76
openair2/F1AP/f1ap_du_rrc_message_transfer.c
openair2/F1AP/f1ap_du_rrc_message_transfer.c
+276
-72
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+7
-4
No files found.
openair2/F1AP/f1ap_du_rrc_message_transfer.c
View file @
ba609ca9
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
#include "DL-CCCH-Message.h"
#include "DL-CCCH-Message.h"
#include "DL-DCCH-Message.h"
#include "DL-DCCH-Message.h"
#include "UL-DCCH-Message.h"
// for SRB1_logicalChannelConfig_defaultValue
// for SRB1_logicalChannelConfig_defaultValue
#include "rrc_extern.h"
#include "rrc_extern.h"
...
@@ -181,6 +182,10 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -181,6 +182,10 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
ctxt
.
instance
=
instance
;
ctxt
.
instance
=
instance
;
ctxt
.
enb_flag
=
1
;
ctxt
.
enb_flag
=
1
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
ctxt
.
module_id
],
ctxt
.
rnti
);
if
(
srb_id
==
0
)
{
if
(
srb_id
==
0
)
{
DL_CCCH_Message_t
*
dl_ccch_msg
=
NULL
;
DL_CCCH_Message_t
*
dl_ccch_msg
=
NULL
;
asn_dec_rval_t
dec_rval
;
asn_dec_rval_t
dec_rval
;
...
@@ -219,7 +224,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -219,7 +224,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
// Get configuration
// Get configuration
RRCConnectionSetup_t
*
rrcConnectionSetup
=
&
dl_ccch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetup
;
RRCConnectionSetup_t
*
rrcConnectionSetup
=
&
dl_ccch_msg
->
message
.
choice
.
c1
.
choice
.
rrcConnectionSetup
;
// eNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
AssertFatal
(
rrcConnectionSetup
!=
NULL
,
"rrcConnectionSetup is null
\n
"
);
AssertFatal
(
rrcConnectionSetup
!=
NULL
,
"rrcConnectionSetup is null
\n
"
);
RadioResourceConfigDedicated_t
*
radioResourceConfigDedicated
=
&
rrcConnectionSetup
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetup_r8
.
radioResourceConfigDedicated
;
RadioResourceConfigDedicated_t
*
radioResourceConfigDedicated
=
&
rrcConnectionSetup
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionSetup_r8
.
radioResourceConfigDedicated
;
...
@@ -257,28 +261,28 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -257,28 +261,28 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
);
);
// This should be somewhere in the f1ap_cudu_ue_inst_t
// This should be somewhere in the f1ap_cudu_ue_inst_t
int
macrlc_instance
=
0
;
/*
int macrlc_instance = 0;
rnti_t rnti = f1ap_get_rnti_by_du_id(&f1ap_du_ue[0],du_ue_f1ap_id);
rnti_t rnti = f1ap_get_rnti_by_du_id(&f1ap_du_ue[0],du_ue_f1ap_id);
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[macrlc_instance],rnti);
struct rrc_eNB_ue_context_s *ue_context_p = rrc_eNB_get_ue_context(RC.rrc[macrlc_instance],rnti);
*/
eNB_RRC_UE_t
*
ue_p
=
&
ue_context_p
->
ue_context
;
eNB_RRC_UE_t
*
ue_p
=
&
ue_context_p
->
ue_context
;
AssertFatal
(
ue_p
->
Srb0
.
Active
==
1
,
"SRB0 is not active
\n
"
);
AssertFatal
(
ue_p
->
Srb0
.
Active
==
1
,
"SRB0 is not active
\n
"
);
memcpy
((
void
*
)
ue_p
->
Srb0
.
Tx_buffer
.
Payload
,
memcpy
((
void
*
)
ue_p
->
Srb0
.
Tx_buffer
.
Payload
,
(
void
*
)
ie
->
value
.
choice
.
RRCContainer
.
buf
,
(
void
*
)
ie
->
value
.
choice
.
RRCContainer
.
buf
,
rrc_dl_sdu_len
);
rrc_dl_sdu_len
);
// ie->value.choice.RRCContainer.size
ue_p
->
Srb0
.
Tx_buffer
.
payload_size
=
rrc_dl_sdu_len
;
ue_p
->
Srb0
.
Tx_buffer
.
payload_size
=
rrc_dl_sdu_len
;
rrc_mac_config_req_eNB
(
rrc_mac_config_req_eNB
(
macrlc_instance
,
ctxt
.
module_id
,
0
,
//primaryCC_id,
0
,
//primaryCC_id,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
0
,
0
,
#endif
#endif
rnti
,
ctxt
.
rnti
,
(
BCCH_BCH_Message_t
*
)
NULL
,
(
BCCH_BCH_Message_t
*
)
NULL
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
...
@@ -316,42 +320,43 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -316,42 +320,43 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
}
// switch case
}
// switch case
return
(
0
);
return
(
0
);
}
else
if
(
srb_id
==
1
)
{
}
else
if
(
srb_id
==
1
)
{
// rrc_rlc_config_asn1_req(&ctxt,
// SRB_configList,
// (DRB_ToAddModList_t*) NULL,
// (DRB_ToReleaseList_t*) NULL
// #if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
// , (PMCH_InfoList_r9_t *) NULL,
// 0,0
// # endif
// );
DL_DCCH_Message_t
*
dl_dcch_msg
=
NULL
;
DL_DCCH_Message_t
*
dl_dcch_msg
=
NULL
;
asn_dec_rval_t
dec_rval
;
asn_dec_rval_t
dec_rval
;
dec_rval
=
uper_decode
(
NULL
,
dec_rval
=
uper_decode
(
NULL
,
&
asn_DEF_DL_DCCH_Message
,
&
asn_DEF_DL_DCCH_Message
,
(
void
**
)
&
dl_dcch_msg
,
(
void
**
)
&
dl_dcch_msg
,
ie
->
value
.
choice
.
RRCContainer
.
buf
,
&
ie
->
value
.
choice
.
RRCContainer
.
buf
[
1
],
// buf[0] includes the pdcp header
rrc_dl_sdu_len
,
0
,
0
);
rrc_dl_sdu_len
,
0
,
0
);
if
((
dec_rval
.
code
!=
RC_OK
)
&&
(
dec_rval
.
consumed
==
0
))
LOG_E
(
DU_F1AP
,
" Failed to decode DL-DCCH (%zu bytes)
\n
"
,
dec_rval
.
consumed
);
else
LOG_D
(
DU_F1AP
,
"Received message: present %d and c1 present %d
\n
"
,
dl_dcch_msg
->
message
.
present
,
dl_dcch_msg
->
message
.
choice
.
c1
.
present
);
if
(
dl_dcch_msg
->
message
.
present
==
DL_DCCH_MessageType_PR_c1
)
{
if
(
dl_dcch_msg
->
message
.
present
==
DL_DCCH_MessageType_PR_c1
)
{
switch
(
dl_dcch_msg
->
message
.
choice
.
c1
.
present
)
{
switch
(
dl_dcch_msg
->
message
.
choice
.
c1
.
present
)
{
case
DL_DCCH_MessageType__c1_PR_NOTHING
:
case
DL_DCCH_MessageType__c1_PR_NOTHING
:
LOG_I
(
RRC
,
"Received PR_NOTHING on DL-DCCH-Message
\n
"
);
LOG_I
(
DU_F1AP
,
"Received PR_NOTHING on DL-DCCH-Message
\n
"
);
return
;
return
;
break
;
case
DL_DCCH_MessageType__c1_PR_dlInformationTransfer
:
case
DL_DCCH_MessageType__c1_PR_dlInformationTransfer
:
LOG_I
(
RRC
,
"Received
DL Information Transfer
\n
"
);
LOG_I
(
DU_F1AP
,
"Received NAS
DL Information Transfer
\n
"
);
break
;
break
;
case
DL_DCCH_MessageType__c1_PR_csfbParametersResponseCDMA2000
:
case
DL_DCCH_MessageType__c1_PR_csfbParametersResponseCDMA2000
:
LOG_I
(
DU_F1AP
,
"Received NAS sfbParametersResponseCDMA2000
\n
"
);
break
;
case
DL_DCCH_MessageType__c1_PR_handoverFromEUTRAPreparationRequest
:
case
DL_DCCH_MessageType__c1_PR_handoverFromEUTRAPreparationRequest
:
LOG_I
(
DU_F1AP
,
"Received NAS andoverFromEUTRAPreparationRequest
\n
"
);
break
;
case
DL_DCCH_MessageType__c1_PR_mobilityFromEUTRACommand
:
case
DL_DCCH_MessageType__c1_PR_mobilityFromEUTRACommand
:
LOG_I
(
DU_F1AP
,
"Received NAS mobilityFromEUTRACommand
\n
"
);
break
;
break
;
case
DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration
:
case
DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration
:
// handle RRCConnectionReconfiguration
// handle RRCConnectionReconfiguration
LOG_I
(
RRC
,
LOG_I
(
DU_F1AP
,
"Logical Channel DL-DCCH (SRB1), Received RRCConnectionReconfiguration DU_ID %x/RNTI %x
\n
"
,
"Logical Channel DL-DCCH (SRB1), Received RRCConnectionReconfiguration DU_ID %x/RNTI %x
\n
"
,
du_ue_f1ap_id
,
du_ue_f1ap_id
,
f1ap_get_rnti_by_du_id
(
&
f1ap_du_ue
[
instance
],
du_ue_f1ap_id
));
f1ap_get_rnti_by_du_id
(
&
f1ap_du_ue
[
instance
],
du_ue_f1ap_id
));
...
@@ -365,46 +370,138 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -365,46 +370,138 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
&
rrcConnectionReconfiguration
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionReconfiguration_r8
;
&
rrcConnectionReconfiguration
->
criticalExtensions
.
choice
.
c1
.
choice
.
rrcConnectionReconfiguration_r8
;
if
(
rrcConnectionReconfiguration_r8
->
mobilityControlInfo
)
{
if
(
rrcConnectionReconfiguration_r8
->
mobilityControlInfo
)
{
LOG_I
(
RRC
,
"Mobility Control Information is present
\n
"
);
LOG_I
(
DU_F1AP
,
"Mobility Control Information is present
\n
"
);
AssertFatal
(
1
==
0
,
"Can't handle this yet in DU
\n
"
);
AssertFatal
(
1
==
0
,
"Can't handle this yet in DU
\n
"
);
}
}
if
(
rrcConnectionReconfiguration_r8
->
measConfig
!=
NULL
)
{
if
(
rrcConnectionReconfiguration_r8
->
measConfig
!=
NULL
)
{
LOG_I
(
RRC
,
"Measurement Configuration is present
\n
"
);
LOG_I
(
DU_F1AP
,
"Measurement Configuration is present
\n
"
);
}
}
if
(
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
)
{
if
(
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
)
{
LOG_I
(
RRC
,
"Radio Resource Configuration is present
\n
"
);
LOG_I
(
DU_F1AP
,
"Radio Resource Configuration is present
\n
"
);
RadioResourceConfigDedicated_t
*
radioResourceConfigDedicated
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
;
RadioResourceConfigDedicated_t
*
radioResourceConfigDedicated
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
;
long
SRB_id
,
DRB_id
;
uint8_t
DRB2LCHAN
[
8
];
long
SRB_id
,
drb_id
;
int
i
,
cnt
;
int
i
,
cnt
;
LogicalChannelConfig_t
*
SRB1_logicalChannelConfig
,
*
SRB2_logicalChannelConfig
;
LogicalChannelConfig_t
*
SRB1_logicalChannelConfig
,
*
SRB2_logicalChannelConfig
;
DRB_ToAddModList_t
*
DRB_configList
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
->
drb_ToAddModList
;
SRB_ToAddModList_t
*
SRB_configList
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
->
srb_ToAddModList
;
DRB_ToReleaseList_t
*
DRB_ReleaseList
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
->
drb_ToReleaseList
;
MAC_MainConfig_t
*
mac_MainConfig
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
->
mac_MainConfig
;
MeasGapConfig_t
*
measGapConfig
=
NULL
;
struct
PhysicalConfigDedicated
**
physicalConfigDedicated
=
rrcConnectionReconfiguration_r8
->
radioResourceConfigDedicated
->
physicalConfigDedicated
;
rrc_rlc_config_asn1_req
(
&
ctxt
,
SRB_configList
,
// NULL, //LG-RK 14/05/2014 SRB_configList,
DRB_configList
,
DRB_ReleaseList
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
,
(
PMCH_InfoList_r9_t
*
)
NULL
,
0
,
0
#endif
);
if
(
SRB_configList
!=
NULL
)
{
for
(
i
=
0
;
(
i
<
SRB_configList
->
list
.
count
)
&&
(
i
<
3
);
i
++
)
{
if
(
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
==
1
){
ue_context_p
->
ue_context
.
Srb1
.
Active
=
1
;
}
else
if
(
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
==
2
)
{
ue_context_p
->
ue_context
.
Srb2
.
Active
=
1
;
ue_context_p
->
ue_context
.
Srb2
.
Srb_info
.
Srb_id
=
2
;
LOG_I
(
RRC
,
"[DU %d] SRB2 is now active
\n
"
,
ctxt
.
module_id
);
}
else
{
LOG_W
(
RRC
,
"[DU %d] invalide SRB identity %ld
\n
"
,
ctxt
.
module_id
,
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
);
}
}
}
if
(
DRB_configList
!=
NULL
)
{
for
(
i
=
0
;
i
<
DRB_configList
->
list
.
count
;
i
++
)
{
// num max DRB (11-3-8)
if
(
DRB_configList
->
list
.
array
[
i
])
{
drb_id
=
(
int
)
DRB_configList
->
list
.
array
[
i
]
->
drb_Identity
;
LOG_I
(
RRC
,
"[DU %d] Logical Channel UL-DCCH, Received RRCConnectionReconfiguration for UE rnti %x, reconfiguring DRB %d/LCID %d
\n
"
,
ctxt
.
module_id
,
ctxt
.
rnti
,
(
int
)
DRB_configList
->
list
.
array
[
i
]
->
drb_Identity
,
(
int
)
*
DRB_configList
->
list
.
array
[
i
]
->
logicalChannelIdentity
);
if
(
ue_context_p
->
ue_context
.
DRB_active
[
drb_id
]
==
0
)
{
ue_context_p
->
ue_context
.
DRB_active
[
drb_id
]
=
1
;
if
(
DRB_configList
->
list
.
array
[
i
]
->
logicalChannelIdentity
)
{
DRB2LCHAN
[
i
]
=
(
uint8_t
)
*
DRB_configList
->
list
.
array
[
i
]
->
logicalChannelIdentity
;
}
// radioResourceConfigDedicated->physicalConfigDedicated;
rrc_mac_config_req_eNB
(
ctxt
.
module_id
,
0
,
0
,
0
,
0
,
0
,
0
,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
0
,
#endif
ue_context_p
->
ue_context
.
rnti
,
(
BCCH_BCH_Message_t
*
)
NULL
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
#endif
physicalConfigDedicated
,
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
(
SCellToAddMod_r10_t
*
)
NULL
,
//(struct PhysicalConfigDedicatedSCell_r10 *)NULL,
#endif
(
MeasObjectToAddMod_t
**
)
NULL
,
mac_MainConfig
,
DRB2LCHAN
[
i
],
DRB_configList
->
list
.
array
[
i
]
->
logicalChannelConfig
,
measGapConfig
,
(
TDD_Config_t
*
)
NULL
,
NULL
,
(
SchedulingInfoList_t
*
)
NULL
,
0
,
NULL
,
NULL
,
(
MBSFN_SubframeConfigList_t
*
)
NULL
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#if (RRC_VERSION >= MAKE_VERSION(13, 0, 0))
,
(
SystemInformationBlockType1_v1310_IEs_t
*
)
NULL
#endif
);
}
}
else
{
// remove LCHAN from MAC/PHY
AssertFatal
(
1
==
0
,
"Can't handle this yet in DU
\n
"
);
}
}
}
}
}
}
}
break
;
break
;
case
DL_DCCH_MessageType__c1_PR_rrcConnectionRelease
:
case
DL_DCCH_MessageType__c1_PR_rrcConnectionRelease
:
// handle RRCConnectionRelease
// handle RRCConnectionRelease
break
;
break
;
case
DL_DCCH_MessageType__c1_PR_securityModeCommand
:
case
DL_DCCH_MessageType__c1_PR_securityModeCommand
:
LOG_I
(
DU_F1AP
,
"Received securityModeCommand
\n
"
);
break
;
case
DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry
:
case
DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry
:
LOG_I
(
DU_F1AP
,
"Received sueCapabilityEnquiry
\n
"
);
break
;
case
DL_DCCH_MessageType__c1_PR_counterCheck
:
case
DL_DCCH_MessageType__c1_PR_counterCheck
:
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
case
DL_DCCH_MessageType__c1_PR_loggedMeasurementConfiguration_r10
:
case
DL_DCCH_MessageType__c1_PR_loggedMeasurementConfiguration_r10
:
case
DL_DCCH_MessageType__c1_PR_rnReconfiguration_r10
:
case
DL_DCCH_MessageType__c1_PR_rnReconfiguration_r10
:
#endif
#endif
case
DL_DCCH_MessageType__c1_PR_spare1
:
case
DL_DCCH_MessageType__c1_PR_spare1
:
case
DL_DCCH_MessageType__c1_PR_spare2
:
case
DL_DCCH_MessageType__c1_PR_spare2
:
case
DL_DCCH_MessageType__c1_PR_spare3
:
case
DL_DCCH_MessageType__c1_PR_spare3
:
#if (RRC_VERSION < MAKE_VERSION(14, 0, 0))
#if (RRC_VERSION < MAKE_VERSION(14, 0, 0))
case
DL_DCCH_MessageType__c1_PR_spare4
:
case
DL_DCCH_MessageType__c1_PR_spare4
:
#endif
#endif
break
;
break
;
}
}
}
}
}
}
}
}
else
if
(
srb_id
==
2
)
{
else
if
(
srb_id
==
2
)
{
...
@@ -416,8 +513,17 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -416,8 +513,17 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
boolean_t
ret
=
TRUE
;
boolean_t
ret
=
TRUE
;
mem_block_t
*
pdcp_pdu_p
=
NULL
;
mem_block_t
*
pdcp_pdu_p
=
NULL
;
pdcp_pdu_p
=
get_free_mem_block
(
rrc_dl_sdu_len
,
__func__
);
pdcp_pdu_p
=
get_free_mem_block
(
rrc_dl_sdu_len
,
__func__
);
memset
(
&
pdcp_pdu_p
->
data
[
0
]
,
0
,
rrc_dl_sdu_len
);
memset
(
pdcp_pdu_p
->
data
,
0
,
rrc_dl_sdu_len
);
memcpy
(
&
pdcp_pdu_p
->
data
[
0
],
ie
->
value
.
choice
.
RRCContainer
.
buf
,
rrc_dl_sdu_len
);
memcpy
(
&
pdcp_pdu_p
->
data
[
0
],
ie
->
value
.
choice
.
RRCContainer
.
buf
,
rrc_dl_sdu_len
);
#ifdef DEBUG_MSG
printf
(
"PRRCContainer size %d:"
,
ie
->
value
.
choice
.
RRCContainer
.
size
);
for
(
int
i
=
0
;
i
<
ie
->
value
.
choice
.
RRCContainer
.
size
;
i
++
)
printf
(
"%2x "
,
ie
->
value
.
choice
.
RRCContainer
.
buf
[
i
]);
printf
(
"
\n
"
);
printf
(
"PDCP PDU size %d:"
,
rrc_dl_sdu_len
);
for
(
int
i
=
0
;
i
<
rrc_dl_sdu_len
;
i
++
)
printf
(
"%2x "
,
pdcp_pdu_p
->
data
[
i
]);
printf
(
"
\n
"
);
#endif
if
(
pdcp_pdu_p
!=
NULL
)
{
if
(
pdcp_pdu_p
!=
NULL
)
{
rlc_status
=
rlc_data_req
(
&
ctxt
rlc_status
=
rlc_data_req
(
&
ctxt
...
@@ -462,7 +568,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -462,7 +568,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
return
ret
;
return
ret
;
}
// if pdcp_pdu_p
}
// if pdcp_pdu_p
#endif
#endif
return
0
;
return
0
;
...
@@ -484,6 +589,14 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(const protocol_ctxt_t* const ctxt_pP,
...
@@ -484,6 +589,14 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(const protocol_ctxt_t* const ctxt_pP,
uint8_t
*
buffer
;
uint8_t
*
buffer
;
uint32_t
len
;
uint32_t
len
;
LOG_I
(
RRC
,
"[DU %d] Received UL_RRC_MESSAGE_TRANSFER : size %d UE RNTI %x in SRB %d
\n
"
,
ctxt_pP
->
module_id
,
sdu_sizeP
,
rnti
,
rb_idP
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
ctxt_pP
->
module_id
],
rnti
);
/* Create */
/* Create */
/* 0. Message Type */
/* 0. Message Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
...
@@ -535,6 +648,97 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(const protocol_ctxt_t* const ctxt_pP,
...
@@ -535,6 +648,97 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(const protocol_ctxt_t* const ctxt_pP,
OCTET_STRING_fromBuf
(
&
ie
->
value
.
choice
.
RRCContainer
,
sdu_pP
,
sdu_sizeP
);
OCTET_STRING_fromBuf
(
&
ie
->
value
.
choice
.
RRCContainer
,
sdu_pP
,
sdu_sizeP
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
if
(
rb_idP
==
1
||
rb_idP
==
2
)
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
ctxt_pP
->
module_id
],
rnti
);
UL_DCCH_Message_t
*
ul_dcch_msg
=
NULL
;
asn_dec_rval_t
dec_rval
;
dec_rval
=
uper_decode
(
NULL
,
&
asn_DEF_UL_DCCH_Message
,
(
void
**
)
&
ul_dcch_msg
,
&
ie
->
value
.
choice
.
RRCContainer
.
buf
[
1
],
// buf[0] includes the pdcp header
sdu_sizeP
,
0
,
0
);
if
((
dec_rval
.
code
!=
RC_OK
)
&&
(
dec_rval
.
consumed
==
0
))
LOG_E
(
DU_F1AP
,
" Failed to decode UL-DCCH (%zu bytes)
\n
"
,
dec_rval
.
consumed
);
else
LOG_D
(
RRC
,
"Received message: present %d and c1 present %d
\n
"
,
ul_dcch_msg
->
message
.
present
,
ul_dcch_msg
->
message
.
choice
.
c1
.
present
);
if
(
ul_dcch_msg
->
message
.
present
==
UL_DCCH_MessageType_PR_c1
)
{
switch
(
ul_dcch_msg
->
message
.
choice
.
c1
.
present
)
{
case
UL_DCCH_MessageType__c1_PR_NOTHING
:
/* No components present */
break
;
case
UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000
:
break
;
case
UL_DCCH_MessageType__c1_PR_measurementReport
:
break
;
case
UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete
:
break
;
case
UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete
:
break
;
case
UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete
:
LOG_I
(
RRC
,
"[MSG] RRC UL rrcConnectionSetupComplete
\n
"
);
if
(
!
ue_context_p
){
LOG_E
(
DU_F1AP
,
"Did not find the UE context associated with UE RNTOI %x, ue_context_p is NULL
\n
"
,
ctxt_pP
->
rnti
);
}
else
{
LOG_I
(
DU_F1AP
,
"Processing RRCConnectionSetupComplete UE %x
\n
"
,
rnti
);
ue_context_p
->
ue_context
.
Status
=
RRC_CONNECTED
;
}
break
;
case
UL_DCCH_MessageType__c1_PR_securityModeComplete
:
LOG_I
(
RRC
,
"[MSG] RRC securityModeComplete
\n
"
);
break
;
case
UL_DCCH_MessageType__c1_PR_securityModeFailure
:
break
;
case
UL_DCCH_MessageType__c1_PR_ueCapabilityInformation
:
LOG_I
(
RRC
,
"[MSG] RRC ueCapabilityInformation
\n
"
);
break
;
case
UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer
:
break
;
case
UL_DCCH_MessageType__c1_PR_ulInformationTransfer
:
LOG_I
(
RRC
,
"[MSG] RRC UL Information Transfer
\n
"
);
break
;
case
UL_DCCH_MessageType__c1_PR_counterCheckResponse
:
break
;
#if (RRC_VERSION >= MAKE_VERSION(9, 0, 0))
case
UL_DCCH_MessageType__c1_PR_ueInformationResponse_r9
:
break
;
case
UL_DCCH_MessageType__c1_PR_proximityIndication_r9
:
break
;
#endif
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
case
UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10
:
break
;
case
UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10
:
break
;
case
UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10
:
break
;
#endif
}
}
}
/* encode */
/* encode */
if
(
f1ap_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
if
(
f1ap_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
LOG_E
(
DU_F1AP
,
"Failed to encode F1 setup request
\n
"
);
LOG_E
(
DU_F1AP
,
"Failed to encode F1 setup request
\n
"
);
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
ba609ca9
...
@@ -206,9 +206,11 @@ init_SI(
...
@@ -206,9 +206,11 @@ init_SI(
AssertFatal
(
carrier
->
sizeof_SIB1
!=
255
,
"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"
);
AssertFatal
(
carrier
->
sizeof_SIB1
!=
255
,
"FATAL, RC.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"
);
}
}
if
((
rrc
->
node_type
==
ngran_eNB_CU
)
||
if
(
rrc
->
node_type
!=
ngran_eNB_DU
)
{
/*if ((rrc->node_type == ngran_eNB_CU) ||
(rrc->node_type == ngran_ng_eNB_CU) ||
(rrc->node_type == ngran_ng_eNB_CU) ||
(
rrc
->
node_type
==
ngran_eNB
))
{
(rrc->node_type == ngran_eNB)) {
*/
carrier
->
SIB23
=
(
uint8_t
*
)
malloc16
(
64
);
carrier
->
SIB23
=
(
uint8_t
*
)
malloc16
(
64
);
AssertFatal
(
carrier
->
SIB23
!=
NULL
,
"cannot allocate memory for SIB"
);
AssertFatal
(
carrier
->
SIB23
!=
NULL
,
"cannot allocate memory for SIB"
);
carrier
->
sizeof_SIB23
=
do_SIB23
(
carrier
->
sizeof_SIB23
=
do_SIB23
(
...
@@ -630,8 +632,9 @@ static void init_MBMS(
...
@@ -630,8 +632,9 @@ static void init_MBMS(
#endif
#endif
,
NULL
);
,
NULL
);
if
((
RC
.
rrc
[
enb_mod_idP
]
->
node_type
!=
ngran_eNB_CU
)
&&
if
(
(
RC
.
rrc
[
enb_mod_idP
]
->
node_type
!=
ngran_eNB_CU
)
||
(
RC
.
rrc
[
enb_mod_idP
]
->
node_type
!=
ngran_ng_eNB_CU
))
{
(
RC
.
rrc
[
enb_mod_idP
]
->
node_type
!=
ngran_ng_eNB_CU
)
||
(
RC
.
rrc
[
enb_mod_idP
]
->
node_type
!=
ngran_gNB_CU
)
)
{
rrc_rlc_config_asn1_req
(
&
ctxt
,
rrc_rlc_config_asn1_req
(
&
ctxt
,
NULL
,
// SRB_ToAddModList
NULL
,
// SRB_ToAddModList
NULL
,
// DRB_ToAddModList
NULL
,
// DRB_ToAddModList
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment