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
spbro
OpenXG-RAN
Commits
c70f0a1d
Commit
c70f0a1d
authored
May 29, 2023
by
laurent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup srb data structure
parent
ef06b145
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
167 additions
and
334 deletions
+167
-334
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+0
-9
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+8
-0
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+51
-125
openair2/RRC/NR/MESSAGES/asn1_msg.h
openair2/RRC/NR/MESSAGES/asn1_msg.h
+16
-15
openair2/RRC/NR/cucp_cuup_direct.c
openair2/RRC/NR/cucp_cuup_direct.c
+10
-23
openair2/RRC/NR/nr_rrc_common.c
openair2/RRC/NR/nr_rrc_common.c
+0
-11
openair2/RRC/NR/nr_rrc_common.h
openair2/RRC/NR/nr_rrc_common.h
+4
-19
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+1
-3
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+75
-123
openair2/RRC/NR/rrc_gNB_NGAP.c
openair2/RRC/NR/rrc_gNB_NGAP.c
+0
-2
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+2
-4
No files found.
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
c70f0a1d
...
...
@@ -431,15 +431,6 @@ void configure_ss_coreset(NR_UE_MAC_INST_t *mac,
NR_ServingCellConfig_t
*
scd
,
NR_BWP_Id_t
dl_bwp_id
);
static
uint8_t
nr_extract_dci_info
(
NR_UE_MAC_INST_t
*
mac
,
nr_dci_format_t
dci_format
,
uint8_t
dci_size
,
uint16_t
rnti
,
int
ss_type
,
uint64_t
*
dci_pdu
,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
int
slot
);
fapi_nr_ul_config_request_t
*
get_ul_config_request
(
NR_UE_MAC_INST_t
*
mac
,
int
slot
,
int
fb_time
);
fapi_nr_dl_config_request_t
*
get_dl_config_request
(
NR_UE_MAC_INST_t
*
mac
,
int
slot
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
c70f0a1d
...
...
@@ -149,6 +149,14 @@ const initial_pucch_resource_t initial_pucch_resource[16] = {
/* 14 */
{
1
,
0
,
14
,
4
,
4
,
{
0
,
3
,
6
,
9
}
},
/* 15 */
{
1
,
0
,
14
,
0
,
4
,
{
0
,
3
,
6
,
9
}
},
};
static
uint8_t
nr_extract_dci_info
(
NR_UE_MAC_INST_t
*
mac
,
nr_dci_format_t
dci_format
,
uint8_t
dci_size
,
uint16_t
rnti
,
int
ss_type
,
uint64_t
*
dci_pdu
,
dci_pdu_rel15_t
*
dci_pdu_rel15
,
int
slot
);
void
nr_ue_init_mac
(
module_id_t
module_idP
)
{
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
c70f0a1d
...
...
@@ -506,89 +506,56 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
}
//------------------------------------------------------------------------------
int
do_RRCSetup
(
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
uint8_t
*
const
buffer
,
const
uint8_t
transaction_id
,
const
uint8_t
*
masterCellGroup
,
int
masterCellGroup_len
,
const
gNB_RrcConfigurationReq
*
configuration
)
int
do_RRCSetup
(
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
uint8_t
*
const
buffer
,
const
uint8_t
transaction_id
,
const
uint8_t
*
masterCellGroup
,
int
masterCellGroup_len
,
const
gNB_RrcConfigurationReq
*
configuration
,
NR_SRB_ToAddModList_t
*
SRBs
)
//------------------------------------------------------------------------------
{
asn_enc_rval_t
enc_rval
;
NR_DL_CCCH_Message_t
dl_ccch_msg
;
NR_RRCSetup_t
*
rrcSetup
;
NR_RRCSetup_IEs_t
*
ie
;
NR_SRB_ToAddMod_t
*
SRB1_config
=
NULL
;
NR_PDCP_Config_t
*
pdcp_Config
=
NULL
;
AssertFatal
(
ue_context_pP
!=
NULL
,
"ue_context_p is null
\n
"
);
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
NR_SRB_ToAddModList_t
**
SRB_configList
=
&
ue_p
->
SRB_configList
;
memset
((
void
*
)
&
dl_ccch_msg
,
0
,
sizeof
(
NR_DL_CCCH_Message_t
));
dl_ccch_msg
.
message
.
present
=
NR_DL_CCCH_MessageType_PR_c1
;
dl_ccch_msg
.
message
.
choice
.
c1
=
CALLOC
(
1
,
sizeof
(
struct
NR_DL_CCCH_MessageType__c1
));
dl_ccch_msg
.
message
.
choice
.
c1
->
present
=
NR_DL_CCCH_MessageType__c1_PR_rrcSetup
;
dl_ccch_msg
.
message
.
choice
.
c1
->
choice
.
rrcSetup
=
calloc
(
1
,
sizeof
(
NR_RRCSetup_t
));
rrcSetup
=
dl_ccch_msg
.
message
.
choice
.
c1
->
choice
.
rrcSetup
;
rrcSetup
->
criticalExtensions
.
present
=
NR_RRCSetup__criticalExtensions_PR_rrcSetup
;
rrcSetup
->
rrc_TransactionIdentifier
=
transaction_id
;
rrcSetup
->
criticalExtensions
.
choice
.
rrcSetup
=
calloc
(
1
,
sizeof
(
NR_RRCSetup_IEs_t
));
ie
=
rrcSetup
->
criticalExtensions
.
choice
.
rrcSetup
;
AssertFatal
(
ue_context_pP
!=
NULL
,
"ue_context_p is null
\n
"
);
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
NR_DL_CCCH_Message_t
dl_ccch_msg
=
{
0
};
dl_ccch_msg
.
message
.
present
=
NR_DL_CCCH_MessageType_PR_c1
;
asn1cCalloc
(
dl_ccch_msg
.
message
.
choice
.
c1
,
dl_msg
);
dl_msg
->
present
=
NR_DL_CCCH_MessageType__c1_PR_rrcSetup
;
asn1cCalloc
(
dl_msg
->
choice
.
rrcSetup
,
rrcSetup
);
rrcSetup
->
criticalExtensions
.
present
=
NR_RRCSetup__criticalExtensions_PR_rrcSetup
;
rrcSetup
->
rrc_TransactionIdentifier
=
transaction_id
;
rrcSetup
->
criticalExtensions
.
choice
.
rrcSetup
=
calloc
(
1
,
sizeof
(
NR_RRCSetup_IEs_t
));
NR_RRCSetup_IEs_t
*
ie
=
rrcSetup
->
criticalExtensions
.
choice
.
rrcSetup
;
/****************************** radioBearerConfig ******************************/
ie
->
radioBearerConfig
.
srb_ToAddModList
=
SRBs
;
ie
->
radioBearerConfig
.
srb3_ToRelease
=
NULL
;
ie
->
radioBearerConfig
.
drb_ToAddModList
=
NULL
;
ie
->
radioBearerConfig
.
drb_ToReleaseList
=
NULL
;
ie
->
radioBearerConfig
.
securityConfig
=
NULL
;
/****************************** radioBearerConfig
******************************/
/* Configure SRB1 */
if
(
*
SRB_configList
)
{
free
(
*
SRB_configList
);
}
/****************************** masterCellGroup
******************************/
DevAssert
(
masterCellGroup
&&
masterCellGroup_len
>
0
);
ie
->
masterCellGroup
.
buf
=
malloc
(
masterCellGroup_len
);
AssertFatal
(
ie
->
masterCellGroup
.
buf
!=
NULL
,
"could not allocate memory for masterCellGroup
\n
"
);
memcpy
(
ie
->
masterCellGroup
.
buf
,
masterCellGroup
,
masterCellGroup_len
);
ie
->
masterCellGroup
.
size
=
masterCellGroup_len
;
*
SRB_configList
=
calloc
(
1
,
sizeof
(
NR_SRB_ToAddModList_t
));
// SRB1
/* TODO */
SRB1_config
=
calloc
(
1
,
sizeof
(
NR_SRB_ToAddMod_t
));
SRB1_config
->
srb_Identity
=
1
;
// pdcp_Config->t_Reordering
SRB1_config
->
pdcp_Config
=
pdcp_Config
;
ie
->
radioBearerConfig
.
srb_ToAddModList
=
*
SRB_configList
;
asn1cSeqAdd
(
&
(
*
SRB_configList
)
->
list
,
SRB1_config
);
ie
->
radioBearerConfig
.
srb3_ToRelease
=
NULL
;
ie
->
radioBearerConfig
.
drb_ToAddModList
=
NULL
;
ie
->
radioBearerConfig
.
drb_ToReleaseList
=
NULL
;
ie
->
radioBearerConfig
.
securityConfig
=
NULL
;
/****************************** masterCellGroup ******************************/
DevAssert
(
masterCellGroup
&&
masterCellGroup_len
>
0
);
ie
->
masterCellGroup
.
buf
=
malloc
(
masterCellGroup_len
);
AssertFatal
(
ie
->
masterCellGroup
.
buf
!=
NULL
,
"could not allocate memory for masterCellGroup
\n
"
);
memcpy
(
ie
->
masterCellGroup
.
buf
,
masterCellGroup
,
masterCellGroup_len
);
ie
->
masterCellGroup
.
size
=
masterCellGroup_len
;
// decode masterCellGroup OCTET_STRING received from DU and place in ue context
ue_p
->
masterCellGroup
=
decode_cellGroupConfig
(
masterCellGroup
,
masterCellGroup_len
);
// decode masterCellGroup OCTET_STRING received from DU and place in ue context
ue_p
->
masterCellGroup
=
decode_cellGroupConfig
(
masterCellGroup
,
masterCellGroup_len
);
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)
)
{
xer_fprint
(
stdout
,
&
asn_DEF_NR_CellGroupConfig
,
ue_p
->
masterCellGroup
);
xer_fprint
(
stdout
,
&
asn_DEF_NR_DL_CCCH_Message
,
(
void
*
)
&
dl_ccch_msg
);
}
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)
)
{
xer_fprint
(
stdout
,
&
asn_DEF_NR_CellGroupConfig
,
ue_p
->
masterCellGroup
);
xer_fprint
(
stdout
,
&
asn_DEF_NR_DL_CCCH_Message
,
(
void
*
)
&
dl_ccch_msg
);
}
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_DL_CCCH_Message
,
NULL
,
(
void
*
)
&
dl_ccch_msg
,
buffer
,
1000
);
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_DL_CCCH_Message
,
NULL
,
(
void
*
)
&
dl_ccch_msg
,
buffer
,
1000
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
LOG_D
(
NR_RRC
,
"RRCSetup Encoded %zd bits (%zd bytes)
\n
"
,
enc_rval
.
encoded
,(
enc_rval
.
encoded
+
7
)
/
8
);
return
((
enc_rval
.
encoded
+
7
)
/
8
);
LOG_D
(
NR_RRC
,
"RRCSetup Encoded %zd bits (%zd bytes)
\n
"
,
enc_rval
.
encoded
,
(
enc_rval
.
encoded
+
7
)
/
8
);
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
uint8_t
do_NR_SecurityModeCommand
(
...
...
@@ -1134,67 +1101,26 @@ uint8_t do_RRCReestablishmentRequest(uint8_t Mod_id, uint8_t *buffer, uint16_t c
//------------------------------------------------------------------------------
int
do_RRCReestablishment
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
int
CC_id
,
uint8_t
*
const
buffer
,
size_t
buffer_size
,
const
uint8_t
Transaction_id
,
NR_SRB_ToAddModList_t
*
*
SRB_configList
,
const
uint8_t
*
masterCellGroup_from_DU
,
NR_ServingCellConfigCommon_t
*
scc
,
rrc_gNB_carrier_data_t
*
carrier
)
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
int
CC_id
,
uint8_t
*
const
buffer
,
size_t
buffer_size
,
const
uint8_t
Transaction_id
,
NR_SRB_ToAddModList_t
*
SRB_configList
,
const
uint8_t
*
masterCellGroup_from_DU
,
NR_ServingCellConfigCommon_t
*
scc
,
rrc_gNB_carrier_data_t
*
carrier
)
{
asn_enc_rval_t
enc_rval
;
struct
NR_SRB_ToAddMod
*
SRB1_config
=
NULL
;
struct
NR_SRB_ToAddMod
*
SRB2_config
=
NULL
;
NR_DL_DCCH_Message_t
dl_dcch_msg
=
{
0
};
NR_RRCReestablishment_t
*
rrcReestablishment
=
NULL
;
NR_SRB_ToAddModList_t
**
SRB_configList2
=
NULL
;
SRB_configList2
=
&
ue_context_pP
->
ue_context
.
SRB_configList2
[
Transaction_id
];
if
(
*
SRB_configList2
)
{
free
(
*
SRB_configList2
);
}
*
SRB_configList2
=
CALLOC
(
1
,
sizeof
(
NR_SRB_ToAddModList_t
));
dl_dcch_msg
.
message
.
present
=
NR_DL_DCCH_MessageType_PR_c1
;
dl_dcch_msg
.
message
.
choice
.
c1
=
calloc
(
1
,
sizeof
(
struct
NR_DL_DCCH_MessageType__c1
));
dl_dcch_msg
.
message
.
choice
.
c1
->
present
=
NR_DL_DCCH_MessageType__c1_PR_rrcReestablishment
;
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
rrcReestablishment
=
CALLOC
(
1
,
sizeof
(
NR_RRCReestablishment_t
));
rrcReestablishment
=
dl_dcch_msg
.
message
.
choice
.
c1
->
choice
.
rrcReestablishment
;
// get old configuration of SRB2
if
(
*
SRB_configList
!=
NULL
)
{
for
(
int
i
=
0
;
(
i
<
(
*
SRB_configList
)
->
list
.
count
)
&&
(
i
<
3
);
i
++
)
{
LOG_D
(
NR_RRC
,
"(*SRB_configList)->list.array[%d]->srb_Identity=%ld
\n
"
,
i
,
(
*
SRB_configList
)
->
list
.
array
[
i
]
->
srb_Identity
);
if
((
*
SRB_configList
)
->
list
.
array
[
i
]
->
srb_Identity
==
2
)
{
SRB2_config
=
(
*
SRB_configList
)
->
list
.
array
[
i
];
}
else
if
((
*
SRB_configList
)
->
list
.
array
[
i
]
->
srb_Identity
==
1
)
{
SRB1_config
=
(
*
SRB_configList
)
->
list
.
array
[
i
];
}
}
}
if
(
SRB1_config
==
NULL
)
{
// default SRB1 configuration
LOG_W
(
NR_RRC
,
"SRB1 configuration does not exist in SRB configuration list, use default
\n
"
);
/// SRB1
SRB1_config
=
CALLOC
(
1
,
sizeof
(
*
SRB1_config
));
SRB1_config
->
srb_Identity
=
1
;
}
if
(
SRB2_config
==
NULL
)
{
LOG_W
(
NR_RRC
,
"SRB2 configuration does not exist in SRB configuration list
\n
"
);
}
else
{
asn1cSeqAdd
(
&
(
*
SRB_configList2
)
->
list
,
SRB2_config
);
}
if
(
*
SRB_configList
)
{
free
(
*
SRB_configList
);
}
*
SRB_configList
=
CALLOC
(
1
,
sizeof
(
NR_SRB_ToAddModList_t
));
asn1cSeqAdd
(
&
(
*
SRB_configList
)
->
list
,
SRB1_config
);
/****************************** masterCellGroup ******************************/
rrcReestablishment
->
rrc_TransactionIdentifier
=
Transaction_id
;
rrcReestablishment
->
criticalExtensions
.
present
=
NR_RRCReestablishment__criticalExtensions_PR_rrcReestablishment
;
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.h
View file @
c70f0a1d
...
...
@@ -99,12 +99,13 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig,
NR_DRB_ToAddModList_t
*
drb_configList
,
long
*
priority
);
int
do_RRCSetup
(
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
uint8_t
*
const
buffer
,
const
uint8_t
transaction_id
,
const
uint8_t
*
masterCellGroup
,
int
masterCellGroup_len
,
const
gNB_RrcConfigurationReq
*
configuration
);
int
do_RRCSetup
(
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
uint8_t
*
const
buffer
,
const
uint8_t
transaction_id
,
const
uint8_t
*
masterCellGroup
,
int
masterCellGroup_len
,
const
gNB_RrcConfigurationReq
*
configuration
,
NR_SRB_ToAddModList_t
*
SRBs
);
uint8_t
do_NR_SecurityModeCommand
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
...
...
@@ -172,15 +173,15 @@ uint8_t do_NR_ULInformationTransfer(uint8_t **buffer,
uint8_t
do_RRCReestablishmentRequest
(
uint8_t
Mod_id
,
uint8_t
*
buffer
,
uint16_t
c_rnti
);
int
do_RRCReestablishment
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
int
CC_id
,
uint8_t
*
const
buffer
,
size_t
buffer_size
,
const
uint8_t
Transaction_id
,
NR_SRB_ToAddModList_t
*
*
SRB_configList
,
const
uint8_t
*
masterCellGroup_from_DU
,
NR_ServingCellConfigCommon_t
*
scc
,
rrc_gNB_carrier_data_t
*
carrier
);
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
int
CC_id
,
uint8_t
*
const
buffer
,
size_t
buffer_size
,
const
uint8_t
Transaction_id
,
NR_SRB_ToAddModList_t
*
SRB_configList
,
const
uint8_t
*
masterCellGroup_from_DU
,
NR_ServingCellConfigCommon_t
*
scc
,
rrc_gNB_carrier_data_t
*
carrier
);
int
do_RRCReestablishmentComplete
(
uint8_t
*
buffer
,
size_t
buffer_size
,
int64_t
rrc_TransactionIdentifier
);
...
...
openair2/RRC/NR/cucp_cuup_direct.c
View file @
c70f0a1d
...
...
@@ -101,12 +101,11 @@ void CU_update_UP_DL_tunnel(e1ap_bearer_setup_req_t *const req, instance_t insta
}
static
int
drb_config_gtpu_create
(
const
protocol_ctxt_t
*
const
ctxt_p
,
rrc_gNB_ue_context_t
*
ue_context_p
,
rrc_gNB_ue_context_t
*
ue_context_p
,
e1ap_bearer_setup_req_t
*
const
req
,
NR_DRB_ToAddModList_t
*
DRB_configList
,
NR_SRB_ToAddModList_t
*
SRB_configList
,
instance_t
instance
)
{
instance_t
instance
)
{
gtpv1u_gnb_create_tunnel_req_t
create_tunnel_req
=
{
0
};
gtpv1u_gnb_create_tunnel_resp_t
create_tunnel_resp
=
{
0
};
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
...
...
@@ -153,7 +152,12 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
LOG_D
(
NR_RRC
,
"Configuring PDCP DRBs/SRBs for UE %x
\n
"
,
UE
->
rnti
);
nr_pdcp_add_srbs
(
ctxt_p
->
enb_flag
,
ctxt_p
->
rntiMaybeUEid
,
SRB_configList
,
(
UE
->
integrity_algorithm
<<
4
)
|
UE
->
ciphering_algorithm
,
kRRCenc
,
kRRCint
);
nr_pdcp_add_srbs
(
ctxt_p
->
enb_flag
,
ctxt_p
->
rntiMaybeUEid
,
NULL
,
(
UE
->
integrity_algorithm
<<
4
)
|
UE
->
ciphering_algorithm
,
kRRCenc
,
kRRCint
);
nr_pdcp_add_drbs
(
ctxt_p
->
enb_flag
,
ctxt_p
->
rntiMaybeUEid
,
...
...
@@ -167,21 +171,6 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
return
ret
;
}
static
NR_SRB_ToAddModList_t
**
generateSRB2_confList
(
gNB_RRC_UE_t
*
ue
,
NR_SRB_ToAddModList_t
*
SRB_configList
,
uint8_t
xid
)
{
NR_SRB_ToAddModList_t
**
SRB_configList2
=
NULL
;
SRB_configList2
=
&
ue
->
SRB_configList2
[
xid
];
if
(
*
SRB_configList2
==
NULL
)
{
*
SRB_configList2
=
CALLOC
(
1
,
sizeof
(
**
SRB_configList2
));
NR_SRB_ToAddMod_t
*
SRB2_config
=
CALLOC
(
1
,
sizeof
(
*
SRB2_config
));
SRB2_config
->
srb_Identity
=
2
;
asn1cSeqAdd
(
&
(
*
SRB_configList2
)
->
list
,
SRB2_config
);
asn1cSeqAdd
(
&
SRB_configList
->
list
,
SRB2_config
);
}
return
SRB_configList2
;
}
static
void
cucp_cuup_bearer_context_setup_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
{
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
instance
],
req
->
rnti
);
...
...
@@ -205,10 +194,8 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
}
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
ctxt
.
module_id
];
// Fixme: xid not random, but almost!
NR_SRB_ToAddModList_t
**
SRB_configList2
=
generateSRB2_confList
(
UE
,
UE
->
SRB_configList
,
UE
->
pduSession
[
0
].
xid
);
// GTP tunnel for UL
int
ret
=
drb_config_gtpu_create
(
&
ctxt
,
ue_context_p
,
req
,
UE
->
DRB_configList
,
*
SRB_configList2
,
rrc
->
e1_inst
);
int
ret
=
drb_config_gtpu_create
(
&
ctxt
,
ue_context_p
,
req
,
UE
->
DRB_configList
,
rrc
->
e1_inst
);
if
(
ret
<
0
)
AssertFatal
(
false
,
"Unable to configure DRB or to create GTP Tunnel
\n
"
);
// Used to store teids: if monolithic, will simply be NULL
...
...
openair2/RRC/NR/nr_rrc_common.c
View file @
c70f0a1d
...
...
@@ -54,14 +54,3 @@ void rrc_init_nr_srb_param(NR_LCHAN_DESC *chan)
chan
->
Delay_class
=
1
;
return
;
}
//-----------------------------------------------------------------------------
void
rrc_config_nr_buffer
(
NR_SRB_INFO
*
Srb_info
,
uint8_t
Lchan_type
,
uint8_t
Role
)
{
Srb_info
->
Rx_buffer
.
payload_size
=
0
;
Srb_info
->
Tx_buffer
.
payload_size
=
0
;
}
//-----------------------------------------------------------------------------
openair2/RRC/NR/nr_rrc_common.h
View file @
c70f0a1d
...
...
@@ -61,31 +61,16 @@ typedef struct RB_INFO_NR_s {
}
NR_RB_INFO
;
typedef
struct
NR_SRB_INFO_s
{
uint16_t
Srb_id
;
//=Lchan_id
NR_RRC_BUFFER
Rx_buffer
;
NR_RRC_BUFFER
Tx_buffer
;
NR_LCHAN_DESC
Lchan_desc
[
2
];
unsigned
int
Trans_id
;
uint8_t
Active
;
NR_RRC_BUFFER
Rx_buffer
;
NR_RRC_BUFFER
Tx_buffer
;
}
NR_SRB_INFO
;
typedef
struct
RB_INFO_TABLE_ENTRY_NR_s
{
NR_RB_INFO
Rb_info
;
uint8_t
Active
;
uint32_t
Next_check_frame
;
uint8_t
status
;
}
NR_RB_INFO_TABLE_ENTRY
;
typedef
struct
SRB_INFO_TABLE_ENTRY_NR_s
{
NR_SRB_INFO
Srb_info
;
uint8_t
Active
;
uint8_t
status
;
uint32_t
Next_check_frame
;
uint8_t
status
;
}
NR_SRB_INFO_TABLE_ENTRY
;
void
rrc_init_nr_srb_param
(
NR_LCHAN_DESC
*
chan
);
void
rrc_config_nr_buffer
(
NR_SRB_INFO
*
Srb_info
,
uint8_t
Lchan_type
,
uint8_t
Role
);
#endif
openair2/RRC/NR/nr_rrc_defs.h
View file @
c70f0a1d
...
...
@@ -236,9 +236,7 @@ typedef enum {
}
rrc_action_t
;
typedef
struct
gNB_RRC_UE_s
{
uint8_t
primaryCC_id
;
NR_SRB_ToAddModList_t
*
SRB_configList
;
NR_SRB_ToAddModList_t
*
SRB_configList2
[
NR_RRC_TRANSACTION_IDENTIFIER_NUMBER
];
uint8_t
primaryCC_id
;
NR_DRB_ToAddModList_t
*
DRB_configList
;
NR_DRB_ToAddModList_t
*
DRB_configList2
[
NR_RRC_TRANSACTION_IDENTIFIER_NUMBER
];
NR_DRB_ToReleaseList_t
*
DRB_Release_configList2
[
NR_RRC_TRANSACTION_IDENTIFIER_NUMBER
];
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
c70f0a1d
...
...
@@ -113,22 +113,23 @@ mui_t rrc_gNB_mui = 0;
///---------------------------------------------------------------------------------------------------------------///
static
void
nr_rrc_addmod_srbs
(
int
rnti
,
const
NR_SRB_ToAddModList_t
*
srb_list
,
const
NR_SRB_INFO_TABLE_ENTRY
*
srb_list
,
const
int
nb_srb
,
const
struct
NR_CellGroupConfig__rlc_BearerToAddModList
*
bearer_list
)
{
if
(
srb_list
==
NULL
||
bearer_list
==
NULL
)
return
;
for
(
int
i
=
0
;
i
<
srb_list
->
list
.
count
;
i
++
)
{
const
NR_SRB_ToAddMod_t
*
srb
=
srb_list
->
list
.
array
[
i
];
for
(
int
j
=
0
;
j
<
bearer_list
->
list
.
count
;
j
++
)
{
const
NR_RLC_BearerConfig_t
*
bearer
=
bearer_list
->
list
.
array
[
j
];
if
(
bearer
->
servedRadioBearer
!=
NULL
&&
bearer
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity
&&
srb
->
srb_Identity
==
bearer
->
servedRadioBearer
->
choice
.
srb_Identity
)
{
nr_rlc_add_srb
(
rnti
,
srb
->
srb_Identity
,
bearer
);
for
(
int
i
=
0
;
i
<
nb_srb
;
i
++
)
{
if
(
srb_list
[
i
].
Active
)
for
(
int
j
=
0
;
j
<
bearer_list
->
list
.
count
;
j
++
)
{
const
NR_RLC_BearerConfig_t
*
bearer
=
bearer_list
->
list
.
array
[
j
];
if
(
bearer
->
servedRadioBearer
!=
NULL
&&
bearer
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity
&&
i
==
bearer
->
servedRadioBearer
->
choice
.
srb_Identity
)
{
nr_rlc_add_srb
(
rnti
,
i
,
bearer
);
}
}
}
}
}
...
...
@@ -301,22 +302,43 @@ unsigned int rrc_gNB_get_next_transaction_identifier(module_id_t gnb_mod_idP)
return
tmp
;
}
static
NR_SRB_ToAddModList_t
*
createSRBlist
(
gNB_RRC_UE_t
*
ue
)
{
if
(
!
ue
->
Srb
[
1
].
Active
)
return
NULL
;
NR_SRB_ToAddModList_t
*
list
=
CALLOC
(
sizeof
(
*
list
),
1
);
for
(
int
i
=
0
;
i
<
maxSRBs
;
i
++
)
if
(
ue
->
Srb
[
i
].
Active
)
{
asn1cSequenceAdd
(
list
->
list
,
NR_SRB_ToAddMod_t
,
srb
);
srb
->
srb_Identity
=
i
;
}
return
list
;
}
static
void
freeSRBlist
(
NR_SRB_ToAddModList_t
*
l
)
{
if
(
l
)
{
for
(
int
i
=
0
;
i
<
l
->
list
.
count
;
i
++
)
free
(
l
->
list
.
array
[
i
]);
free
(
l
);
}
}
static
void
apply_macrlc_config
(
gNB_RRC_INST
*
rrc
,
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
const
protocol_ctxt_t
*
const
ctxt_pP
)
{
NR_CellGroupConfig_t
*
cgc
=
get_softmodem_params
()
->
sa
?
ue_context_pP
->
ue_context
.
masterCellGroup
:
NULL
;
nr_rrc_mac_update_cellgroup
(
ue_context_pP
->
ue_context
.
rnti
,
cgc
)
;
nr_rrc_addmod_srbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_
context_pP
->
ue_context
.
SRB_configList
,
cgc
->
rlc_BearerToAddModList
);
nr_rrc_addmod_drbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_
context_pP
->
ue_context
.
DRB_configList
,
cgc
->
rlc_BearerToAddModList
);
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
nr_rrc_mac_update_cellgroup
(
ue_p
->
rnti
,
cgc
);
nr_rrc_addmod_srbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_
p
->
Srb
,
maxSRBs
,
cgc
->
rlc_BearerToAddModList
);
nr_rrc_addmod_drbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_
p
->
DRB_configList
,
cgc
->
rlc_BearerToAddModList
);
}
void
apply_macrlc_config_reest
(
gNB_RRC_INST
*
rrc
,
rrc_gNB_ue_context_t
*
const
ue_context_pP
,
const
protocol_ctxt_t
*
const
ctxt_pP
,
ue_id_t
ue_id
)
{
nr_rrc_mac_update_cellgroup
(
ue_id
,
ue_context_pP
->
ue_context
.
masterCellGroup
);
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
nr_rrc_mac_update_cellgroup
(
ue_id
,
ue_p
->
masterCellGroup
);
nr_rrc_addmod_srbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_context_pP
->
ue_context
.
SRB_configList
,
ue_context_pP
->
ue_context
.
masterCellGroup
->
rlc_BearerToAddModList
);
nr_rrc_addmod_srbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_p
->
Srb
,
maxSRBs
,
ue_p
->
masterCellGroup
->
rlc_BearerToAddModList
);
}
//-----------------------------------------------------------------------------
...
...
@@ -334,7 +356,9 @@ static void rrc_gNB_generate_RRCSetup(instance_t instance,
unsigned
char
buf
[
1024
];
uint8_t
xid
=
rrc_gNB_get_next_transaction_identifier
(
instance
);
ue_p
->
xids
[
xid
]
=
RRC_SETUP
;
int
size
=
do_RRCSetup
(
ue_context_pP
,
buf
,
xid
,
masterCellGroup
,
masterCellGroup_len
,
&
rrc
->
configuration
);
NR_SRB_ToAddModList_t
*
SRBs
=
createSRBlist
(
ue_p
);
int
size
=
do_RRCSetup
(
ue_context_pP
,
buf
,
xid
,
masterCellGroup
,
masterCellGroup_len
,
&
rrc
->
configuration
,
SRBs
);
AssertFatal
(
size
>
0
,
"do_RRCSetup failed
\n
"
);
AssertFatal
(
size
<=
1024
,
"memory corruption
\n
"
);
...
...
@@ -342,9 +366,9 @@ static void rrc_gNB_generate_RRCSetup(instance_t instance,
(
char
*
)
buf
,
size
,
"[MSG] RRC Setup
\n
"
);
nr_pdcp_add_srbs
(
true
,
rnti
,
SRBs
,
0
,
NULL
,
NULL
);
nr_pdcp_add_srbs
(
true
,
rnti
,
ue_context_pP
->
ue_context
.
SRB_configList
,
0
,
NULL
,
NULL
);
freeSRBlist
(
SRBs
);
f1ap_dl_rrc_message_t
dl_rrc
=
{
.
old_gNB_DU_ue_id
=
0xFFFFFF
,
.
rrc_container
=
buf
,
...
...
@@ -369,7 +393,9 @@ static int rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id_t m
unsigned
char
buf
[
1024
];
uint8_t
xid
=
rrc_gNB_get_next_transaction_identifier
(
module_id
);
ue_p
->
xids
[
xid
]
=
RRC_SETUP_FOR_REESTABLISHMENT
;
int
size
=
do_RRCSetup
(
ue_context_pP
,
buf
,
xid
,
NULL
,
0
,
&
rrc_instance_p
->
configuration
);
NR_SRB_ToAddModList_t
*
SRBs
=
createSRBlist
(
ue_p
);
int
size
=
do_RRCSetup
(
ue_context_pP
,
buf
,
xid
,
NULL
,
0
,
&
rrc_instance_p
->
configuration
,
SRBs
);
AssertFatal
(
size
>
0
,
"do_RRCSetup failed
\n
"
);
AssertFatal
(
size
<=
1024
,
"memory corruption
\n
"
);
...
...
@@ -381,6 +407,7 @@ static int rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id_t m
"[MSG] RRC Setup
\n
"
);
LOG_D
(
NR_RRC
,
"RRC_gNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB for rnti %04x
\n
"
,
rnti
);
freeSRBlist
(
SRBs
);
// update SCC and MIB/SIB (two calls)
nr_mac_config_scc
(
RC
.
nrmac
[
rrc_instance_p
->
module_id
],
...
...
@@ -670,15 +697,13 @@ void rrc_gNB_generate_dedicatedRRCReconfiguration(const protocol_ctxt_t *const c
NR_CellGroupConfig_t
*
cellGroupConfig
=
ue_p
->
masterCellGroup
;
AssertFatal
(
xid
>
-
1
,
"Invalid xid %d. No PDU sessions setup to configure.
\n
"
,
xid
);
NR_SRB_ToAddModList_t
*
SRB_configList2
=
NULL
;
SRB_configList2
=
ue_p
->
SRB_configList2
[
xid
];
uint8_t
buffer
[
RRC_BUF_SIZE
]
=
{
0
};
NR_SRB_ToAddModList_t
*
SRBs
=
createSRBlist
(
ue_p
);
int
size
=
do_RRCReconfiguration
(
ctxt_pP
,
buffer
,
RRC_BUF_SIZE
,
xid
,
SRB
_configList2
,
SRB
s
,
DRB_configList
,
NULL
,
NULL
,
...
...
@@ -691,7 +716,7 @@ void rrc_gNB_generate_dedicatedRRCReconfiguration(const protocol_ctxt_t *const c
NULL
,
cellGroupConfig
);
LOG_DUMPMSG
(
NR_RRC
,
DEBUG_RRC
,(
char
*
)
buffer
,
size
,
"[MSG] RRC Reconfiguration
\n
"
);
freeSRBlist
(
SRBs
);
/* Free all NAS PDUs */
for
(
int
i
=
0
;
i
<
ue_p
->
nb_of_pdusessions
;
i
++
)
{
if
(
ue_p
->
pduSession
[
i
].
param
.
nas_pdu
.
buffer
!=
NULL
)
{
...
...
@@ -988,12 +1013,11 @@ static void rrc_gNB_process_RRCReconfigurationComplete(const protocol_ctxt_t *co
uint8_t
kRRCint
[
16
]
=
{
0
};
uint8_t
kUPenc
[
16
]
=
{
0
};
uint8_t
kUPint
[
16
]
=
{
0
};
NR_DRB_ToAddModList_t
*
DRB_configList
=
ue_context_pP
->
ue_context
.
DRB_configList2
[
xid
]
;
NR_
SRB_ToAddModList_t
*
SRB_configList
=
ue_context_pP
->
ue_context
.
S
RB_configList2
[
xid
];
NR_DRB_ToReleaseList_t
*
DRB_Release_configList2
=
ue_
context_pP
->
ue_context
.
DRB_Release_configList2
[
xid
];
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
NR_
DRB_ToAddModList_t
*
DRB_configList
=
ue_p
->
D
RB_configList2
[
xid
];
NR_DRB_ToReleaseList_t
*
DRB_Release_configList2
=
ue_
p
->
DRB_Release_configList2
[
xid
];
NR_DRB_Identity_t
*
drb_id_p
=
NULL
;
// uint8_t nr_DRB2LCHAN[8];
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
/* Derive the keys from kgnb */
if
(
DRB_configList
!=
NULL
)
{
...
...
@@ -1021,9 +1045,15 @@ static void rrc_gNB_process_RRCReconfigurationComplete(const protocol_ctxt_t *co
}
}
}
NR_SRB_ToAddModList_t
*
SRBs
=
createSRBlist
(
ue_p
);
nr_pdcp_add_srbs
(
ctxt_pP
->
enb_flag
,
ctxt_pP
->
rntiMaybeUEid
,
SRB_configList
,
(
ue_p
->
integrity_algorithm
<<
4
)
|
ue_p
->
ciphering_algorithm
,
kRRCenc
,
kRRCint
);
nr_pdcp_add_srbs
(
ctxt_pP
->
enb_flag
,
ctxt_pP
->
rntiMaybeUEid
,
SRBs
,
(
ue_p
->
integrity_algorithm
<<
4
)
|
ue_p
->
ciphering_algorithm
,
kRRCenc
,
kRRCint
);
freeSRBlist
(
SRBs
);
nr_pdcp_add_drbs
(
ctxt_pP
->
enb_flag
,
ctxt_pP
->
rntiMaybeUEid
,
reestablish_ue_id
,
...
...
@@ -1038,27 +1068,10 @@ static void rrc_gNB_process_RRCReconfigurationComplete(const protocol_ctxt_t *co
LOG_D
(
NR_RRC
,
"Configuring RLC DRBs/SRBs for UE %04x
\n
"
,
ue_context_pP
->
ue_context
.
rnti
);
const
struct
NR_CellGroupConfig__rlc_BearerToAddModList
*
bearer_list
=
ue_context_pP
->
ue_context
.
masterCellGroup
->
rlc_BearerToAddModList
;
nr_rrc_addmod_srbs
(
ctxt_pP
->
rntiMaybeUEid
,
SRB_configList
,
bearer_list
);
nr_rrc_addmod_srbs
(
ctxt_pP
->
rntiMaybeUEid
,
ue_p
->
Srb
,
maxSRBs
,
bearer_list
);
nr_rrc_addmod_drbs
(
ctxt_pP
->
rntiMaybeUEid
,
DRB_configList
,
bearer_list
);
}
/* Set the SRB active in UE context */
if
(
SRB_configList
!=
NULL
)
{
for
(
int
i
=
0
;
(
i
<
SRB_configList
->
list
.
count
)
&&
(
i
<
3
);
i
++
)
{
if
(
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
==
1
)
{
ue_p
->
Srb
[
1
].
Active
=
1
;
}
else
if
(
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
==
2
)
{
ue_p
->
Srb
[
2
].
Active
=
1
;
LOG_I
(
NR_RRC
,
"[gNB %d] Frame %d CC %d : SRB2 is now active
\n
"
,
ctxt_pP
->
module_id
,
ctxt_pP
->
frame
,
ue_p
->
primaryCC_id
);
}
else
{
LOG_W
(
NR_RRC
,
"[gNB %d] Frame %d CC %d: invalid SRB identity %ld
\n
"
,
ctxt_pP
->
module_id
,
ctxt_pP
->
frame
,
ue_p
->
primaryCC_id
,
SRB_configList
->
list
.
array
[
i
]
->
srb_Identity
);
}
}
free
(
SRB_configList
);
ue_p
->
SRB_configList2
[
xid
]
=
NULL
;
}
/* Loop through DRBs and establish if necessary */
if
(
DRB_configList
!=
NULL
)
{
for
(
int
i
=
0
;
i
<
DRB_configList
->
list
.
count
;
i
++
)
{
...
...
@@ -1141,7 +1154,6 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
{
// int UE_id = -1;
// NR_LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL;
NR_SRB_ToAddModList_t
**
SRB_configList
;
// NR_SRB_ToAddMod_t *SRB1_config = NULL;
// rrc_gNB_carrier_data_t *carrier = NULL;
module_id_t
module_id
=
ctxt_pP
->
module_id
;
...
...
@@ -1154,18 +1166,17 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
ue_p
->
spCellConfigReestablishment
=
ue_p
->
masterCellGroup
->
spCellConfig
;
ue_p
->
masterCellGroup
->
spCellConfig
=
NULL
;
SRB_configList
=
&
(
ue_p
->
SRB_configList
);
uint8_t
buffer
[
RRC_BUF_SIZE
]
=
{
0
};
uint8_t
xid
=
rrc_gNB_get_next_transaction_identifier
(
module_id
);
ue_p
->
xids
[
xid
]
=
RRC_REESTABLISH
;
NR_SRB_ToAddModList_t
*
SRBs
=
createSRBlist
(
ue_p
);
int
size
=
do_RRCReestablishment
(
ctxt_pP
,
ue_context_pP
,
CC_id
,
buffer
,
RRC_BUF_SIZE
,
xid
,
SRB
_configList
,
SRB
s
,
masterCellGroup_from_DU
,
scc
,
&
rrc
->
carrier
);
...
...
@@ -1176,28 +1187,16 @@ void rrc_gNB_generate_RRCReestablishment(const protocol_ctxt_t *ctxt_pP,
uint8_t
kRRCint
[
16
]
=
{
0
};
uint8_t
kUPenc
[
16
]
=
{
0
};
/* Derive the keys from kgnb */
if
(
SRB_configList
!=
NULL
)
{
if
(
ue_p
->
Srb
[
1
].
Active
)
nr_derive_key
(
UP_ENC_ALG
,
ue_p
->
ciphering_algorithm
,
ue_p
->
kgnb
,
kUPenc
);
}
nr_derive_key
(
RRC_ENC_ALG
,
ue_p
->
ciphering_algorithm
,
ue_p
->
kgnb
,
kRRCenc
);
nr_derive_key
(
RRC_INT_ALG
,
ue_p
->
integrity_algorithm
,
ue_p
->
kgnb
,
kRRCint
);
/* Configure SRB1 for UE */
if
(
*
SRB_configList
!=
NULL
)
{
for
(
int
cnt
=
0
;
cnt
<
(
*
SRB_configList
)
->
list
.
count
;
cnt
++
)
{
if
((
*
SRB_configList
)
->
list
.
array
[
cnt
]
->
srb_Identity
==
1
)
{
nr_pdcp_add_srbs
(
ctxt_pP
->
enb_flag
,
ctxt_pP
->
rntiMaybeUEid
,
*
SRB_configList
,
0
,
NULL
,
NULL
);
}
LOG_D
(
NR_RRC
,
"UE %04x --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB
\n
"
,
ue_p
->
rnti
);
}
}
// if (*SRB_configList != NULL)
nr_pdcp_add_srbs
(
ctxt_pP
->
enb_flag
,
ctxt_pP
->
rntiMaybeUEid
,
SRBs
,
0
,
NULL
,
NULL
);
LOG_D
(
NR_RRC
,
"UE %04x --- MAC_CONFIG_REQ (SRB1) ---> MAC_gNB
\n
"
,
ue_p
->
rnti
);
freeSRBlist
(
SRBs
);
LOG_I
(
NR_RRC
,
"Set PDCP security RNTI %04lx nca %ld nia %d in RRCReestablishment
\n
"
,
ctxt_pP
->
rntiMaybeUEid
,
ue_p
->
ciphering_algorithm
,
ue_p
->
integrity_algorithm
);
uint8_t
security_mode
=
enable_ciphering
?
ue_p
->
ciphering_algorithm
|
(
ue_p
->
integrity_algorithm
<<
4
)
:
0
|
(
ue_p
->
integrity_algorithm
<<
4
);
...
...
@@ -1229,56 +1228,7 @@ void RRCReestablishmentComplete_fill_SRB2_configList(const protocol_ctxt_t *cons
const
uint8_t
new_xid
)
{
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
NR_SRB_ToAddMod_t
*
SRB2_config
=
NULL
;
NR_SRB_ToAddModList_t
*
SRB_configList
=
ue_p
->
SRB_configList
;
NR_SRB_ToAddModList_t
**
SRB_configList2
=
NULL
;
SRB_configList2
=
&
ue_p
->
SRB_configList2
[
old_xid
];
// get old configuration of SRB2
if
(
*
SRB_configList2
!=
NULL
)
{
if
((
*
SRB_configList2
)
->
list
.
count
!=
0
)
{
LOG_D
(
NR_RRC
,
"RRC Reestablishment - SRB_configList2(%p) count is %d
\n
SRB_configList2->list.array[0] addr is %p
\n
"
,
SRB_configList2
,
(
*
SRB_configList2
)
->
list
.
count
,
(
*
SRB_configList2
)
->
list
.
array
[
0
]);
}
for
(
int
i
=
0
;
(
i
<
(
*
SRB_configList2
)
->
list
.
count
)
&&
(
i
<
3
);
i
++
)
{
if
((
*
SRB_configList2
)
->
list
.
array
[
i
]
->
srb_Identity
==
2
)
{
LOG_D
(
NR_RRC
,
"RRC Reestablishment - get SRB2_config from (ue_p->SRB_configList2[%d])
\n
"
,
old_xid
);
SRB2_config
=
(
*
SRB_configList2
)
->
list
.
array
[
i
];
SRB2_config
->
reestablishPDCP
=
CALLOC
(
1
,
sizeof
(
*
SRB2_config
->
reestablishPDCP
));
*
SRB2_config
->
reestablishPDCP
=
NR_SRB_ToAddMod__reestablishPDCP_true
;
break
;
}
}
}
SRB_configList2
=
&
(
ue_p
->
SRB_configList2
[
new_xid
]);
if
(
*
SRB_configList2
)
{
free
(
*
SRB_configList2
);
LOG_D
(
NR_RRC
,
"RRC Reestablishment - free(ue_p->SRB_configList2[%d])
\n
"
,
new_xid
);
}
*
SRB_configList2
=
CALLOC
(
1
,
sizeof
(
**
SRB_configList2
));
if
(
SRB2_config
!=
NULL
)
{
// Add SRB2 to SRB configuration list
asn1cSeqAdd
(
&
SRB_configList
->
list
,
SRB2_config
);
asn1cSeqAdd
(
&
(
*
SRB_configList2
)
->
list
,
SRB2_config
);
LOG_D
(
NR_RRC
,
"RRC Reestablishment - Add SRB2_config (srb_Identity:%ld) to ue_p->SRB_configList
\n
"
,
SRB2_config
->
srb_Identity
);
LOG_D
(
NR_RRC
,
"RRC Reestablishment - Add SRB2_config (srb_Identity:%ld) to ue_p->SRB_configList2[%d]
\n
"
,
SRB2_config
->
srb_Identity
,
new_xid
);
}
else
{
// SRB configuration list only contains SRB1.
LOG_W
(
NR_RRC
,
"RRC Reestablishment - SRB2 configuration does not exist in SRB configuration list
\n
"
);
}
//*SRB2_config->reestablishPDCP = NR_SRB_ToAddMod__reestablishPDCP_true;
ue_p
->
Srb
[
1
].
Active
=
1
;
if
(
get_softmodem_params
()
->
sa
)
{
...
...
@@ -1446,11 +1396,12 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
}
uint8_t
buffer
[
RRC_BUF_SIZE
]
=
{
0
};
NR_SRB_ToAddModList_t
*
SRBs
=
createSRBlist
(
ue_p
);
int
size
=
do_RRCReconfiguration
(
ctxt_pP
,
buffer
,
RRC_BUF_SIZE
,
new_xid
,
ue_p
->
SRB_configList2
[
new_xid
]
,
SRBs
,
ue_p
->
DRB_configList2
[
new_xid
],
NULL
,
NULL
,
...
...
@@ -1462,6 +1413,7 @@ void rrc_gNB_process_RRCReestablishmentComplete(const protocol_ctxt_t *const ctx
NULL
,
NULL
,
cellGroupConfig
);
freeSRBlist
(
SRBs
);
LOG_DUMPMSG
(
NR_RRC
,
DEBUG_RRC
,
(
char
*
)
buffer
,
size
,
"[MSG] RRC Reconfiguration
\n
"
);
...
...
@@ -1663,7 +1615,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
UE
=
&
ue_context_p
->
ue_context
;
UE
->
establishment_cause
=
rrcSetupRequest
->
establishmentCause
;
UE
->
Srb
[
1
].
Active
=
1
;
rrc_gNB_generate_RRCSetup
(
module_id
,
rnti
,
rrc_gNB_get_ue_context_by_rnti
(
gnb_rrc_inst
,
rnti
),
...
...
openair2/RRC/NR/rrc_gNB_NGAP.c
View file @
c70f0a1d
...
...
@@ -125,8 +125,6 @@ nr_rrc_pdcp_config_security(
)
//------------------------------------------------------------------------------
{
NR_SRB_ToAddModList_t
*
SRB_configList
=
ue_context_pP
->
ue_context
.
SRB_configList
;
(
void
)
SRB_configList
;
uint8_t
kRRCenc
[
16
]
=
{
0
};
uint8_t
kRRCint
[
16
]
=
{
0
};
uint8_t
kUPenc
[
16
]
=
{
0
};
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
c70f0a1d
...
...
@@ -1651,8 +1651,7 @@ nr_rrc_ue_establish_srb1(
{
// add descriptor from RRC PDU
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb1
[
gNB_index
].
Active
=
1
;
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb1
[
gNB_index
].
status
=
RADIO_CONFIG_OK
;
//RADIO CFG
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb1
[
gNB_index
].
Srb_info
.
Srb_id
=
1
;
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb1
[
gNB_index
].
status
=
RADIO_CONFIG_OK
;
// RADIO CFG
LOG_I
(
NR_RRC
,
"[UE %d], CONFIG_SRB1 %d corresponding to gNB_index %d
\n
"
,
ue_mod_idP
,
DCCH
,
gNB_index
);
return
(
0
);
}
...
...
@@ -1669,8 +1668,7 @@ nr_rrc_ue_establish_srb2(
{
// add descriptor from RRC PDU
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb2
[
gNB_index
].
Active
=
1
;
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb2
[
gNB_index
].
status
=
RADIO_CONFIG_OK
;
//RADIO CFG
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb2
[
gNB_index
].
Srb_info
.
Srb_id
=
2
;
NR_UE_rrc_inst
[
ue_mod_idP
].
Srb2
[
gNB_index
].
status
=
RADIO_CONFIG_OK
;
// RADIO CFG
LOG_I
(
NR_RRC
,
"[UE %d], CONFIG_SRB2 %d corresponding to gNB_index %d
\n
"
,
ue_mod_idP
,
DCCH1
,
gNB_index
);
return
(
0
);
}
...
...
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