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
lizhongxiao
OpenXG-RAN
Commits
c40cceb4
Commit
c40cceb4
authored
Aug 10, 2023
by
Maud Tribaudeau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reestablishment for LTE
parent
537605a6
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
347 additions
and
243 deletions
+347
-243
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+123
-99
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+22
-23
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+10
-9
openair2/RRC/LTE/rrc_UE.c
openair2/RRC/LTE/rrc_UE.c
+53
-37
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+97
-59
openair2/RRC/LTE/rrc_eNB_M2AP.c
openair2/RRC/LTE/rrc_eNB_M2AP.c
+10
-8
openair3/ocp-gtpu/gtp_itf.cpp
openair3/ocp-gtpu/gtp_itf.cpp
+32
-8
No files found.
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
View file @
c40cceb4
This diff is collapsed.
Click to expand it.
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
View file @
c40cceb4
...
...
@@ -297,30 +297,29 @@ void rrc_pdcp_config_req (
const
rb_id_t
rb_idP
,
const
uint8_t
security_modeP
);
/*! \fn bool rrc_pdcp_config_asn1_req (const protocol_ctxt_t* const , SRB_ToAddModList_t* srb2add_list, DRB_ToAddModList_t* drb2add_list, DRB_ToReleaseList_t* drb2release_list)
* \brief Function for RRC to configure a Radio Bearer.
* \param[in] ctxt_pP Running context.
* \param[in] index index of UE or eNB depending on the eNB_flag
* \param[in] srb2add_list SRB configuration list to be created.
* \param[in] drb2add_list DRB configuration list to be created.
* \param[in] drb2release_list DRB configuration list to be released.
* \param[in] security_mode Security algorithm to apply for integrity/ciphering
* \param[in] kRRCenc RRC encryption key
* \param[in] kRRCint RRC integrity key
* \param[in] kUPenc User-Plane encryption key
* \param[in] defaultDRB Default DRB ID
* \return A status about the processing, OK or error code.
*/
bool
rrc_pdcp_config_asn1_req
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
LTE_SRB_ToAddModList_t
*
const
srb2add_list
,
LTE_DRB_ToAddModList_t
*
const
drb2add_list
,
/*! \fn bool rrc_pdcp_config_asn1_req (const protocol_ctxt_t* const , SRB_ToAddModList_t* srb2add_list, DRB_ToAddModList_t*
* drb2add_list, DRB_ToReleaseList_t* drb2release_list) \brief Function for RRC to configure a Radio Bearer. \param[in] ctxt_pP
* Running context. \param[in] index index of UE or eNB depending on the eNB_flag \param[in] srb2add_list SRB
* configuration list to be created. \param[in] drb2add_list DRB configuration list to be created. \param[in] drb2release_list
* DRB configuration list to be released. \param[in] security_mode Security algorithm to apply for integrity/ciphering
* \param[in] kRRCenc RRC encryption key
* \param[in] kRRCint RRC integrity key
* \param[in] kUPenc User-Plane encryption key
* \param[in] defaultDRB Default DRB ID
* \param[in] previous_rnti_for_reestab rnti in case of reestablishment to get previous pdcp context
* \return A status about the processing, OK or error code.
*/
bool
rrc_pdcp_config_asn1_req
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
LTE_SRB_ToAddModList_t
*
const
srb2add_list
,
LTE_DRB_ToAddModList_t
*
const
drb2add_list
,
LTE_DRB_ToReleaseList_t
*
const
drb2release_list
,
const
uint8_t
security_modeP
,
uint8_t
*
const
kRRCenc
,
uint8_t
*
const
kRRCint
,
uint8_t
*
const
kUPenc
,
LTE_PMCH_InfoList_r9_t
*
pmch_InfoList_r9
,
rb_id_t
*
const
defaultDRB
);
const
uint8_t
security_modeP
,
uint8_t
*
const
kRRCenc
,
uint8_t
*
const
kRRCint
,
uint8_t
*
const
kUPenc
,
LTE_PMCH_InfoList_r9_t
*
pmch_InfoList_r9
,
rb_id_t
*
const
defaultDRB
,
const
rnti_t
previous_rnti_for_reestab
);
/*! \fn void pdcp_add_UE(const protocol_ctxt_t* const ctxt_pP)
* \brief Function (for RRC) to add a new UE in PDCP module
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
c40cceb4
...
...
@@ -939,16 +939,17 @@ void nr_pdcp_add_drbs(eNB_flag_t enb_flag,
}
/* Dummy function due to dependency from LTE libraries */
bool
rrc_pdcp_config_asn1_req
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
LTE_SRB_ToAddModList_t
*
const
srb2add_list
,
LTE_DRB_ToAddModList_t
*
const
drb2add_list
,
bool
rrc_pdcp_config_asn1_req
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
LTE_SRB_ToAddModList_t
*
const
srb2add_list
,
LTE_DRB_ToAddModList_t
*
const
drb2add_list
,
LTE_DRB_ToReleaseList_t
*
const
drb2release_list
,
const
uint8_t
security_modeP
,
uint8_t
*
const
kRRCenc
,
uint8_t
*
const
kRRCint
,
uint8_t
*
const
kUPenc
,
LTE_PMCH_InfoList_r9_t
*
pmch_InfoList_r9
,
rb_id_t
*
const
defaultDRB
)
const
uint8_t
security_modeP
,
uint8_t
*
const
kRRCenc
,
uint8_t
*
const
kRRCint
,
uint8_t
*
const
kUPenc
,
LTE_PMCH_InfoList_r9_t
*
pmch_InfoList_r9
,
rb_id_t
*
const
defaultDRB
,
const
rnti_t
previous_rnti_for_reestab
)
{
return
0
;
}
...
...
openair2/RRC/LTE/rrc_UE.c
View file @
c40cceb4
...
...
@@ -1252,17 +1252,18 @@ rrc_ue_process_radioResourceConfigDedicated(
derive_key_nas
(
RRC_INT_ALG
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
integrity_algorithm
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
kenb
,
kRRCint
);
// Refresh SRBs
rrc_pdcp_config_asn1_req
(
ctxt_pP
,
radioResourceConfigDedicated
->
srb_ToAddModList
,
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
ciphering_algorithm
|
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
integrity_algorithm
<<
4
),
kRRCenc
,
kRRCint
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
);
rrc_pdcp_config_asn1_req
(
ctxt_pP
,
radioResourceConfigDedicated
->
srb_ToAddModList
,
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
ciphering_algorithm
|
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
integrity_algorithm
<<
4
),
kRRCenc
,
kRRCint
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
,
0
);
// Refresh SRBs
rrc_rlc_config_asn1_req
(
ctxt_pP
,
radioResourceConfigDedicated
->
srb_ToAddModList
,
...
...
@@ -1400,17 +1401,18 @@ rrc_ue_process_radioResourceConfigDedicated(
derive_key_nas
(
UP_ENC_ALG
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
integrity_algorithm
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
kenb
,
kUPenc
);
// Refresh DRBs
rrc_pdcp_config_asn1_req
(
ctxt_pP
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
radioResourceConfigDedicated
->
drb_ToAddModList
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
ciphering_algorithm
|
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
integrity_algorithm
<<
4
),
NULL
,
NULL
,
kUPenc
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
defaultDRB
);
rrc_pdcp_config_asn1_req
(
ctxt_pP
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
radioResourceConfigDedicated
->
drb_ToAddModList
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
ciphering_algorithm
|
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
integrity_algorithm
<<
4
),
NULL
,
NULL
,
kUPenc
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
defaultDRB
,
0
);
// Refresh DRBs
rrc_rlc_config_asn1_req
(
ctxt_pP
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
...
...
@@ -4832,8 +4834,8 @@ void decode_MBSFNAreaConfiguration( module_id_t ue_mod_idP, uint8_t eNB_index, f
NULL
,
// key rrc integrity
NULL
,
// key encryption
&
(
UE_rrc_inst
[
ue_mod_idP
].
mcch_message
[
eNB_index
]
->
pmch_InfoList_r9
),
NULL
);
NULL
,
0
);
rrc_rlc_config_asn1_req
(
&
ctxt
,
NULL
,
// SRB_ToAddModList
NULL
,
// DRB_ToAddModList
...
...
@@ -5828,12 +5830,16 @@ void *rrc_control_socket_thread_fct(void *arg) {
UE
->
DRB_configList
=
CALLOC
(
1
,
sizeof
(
LTE_DRB_ToAddModList_t
));
asn1cSeqAdd
(
&
UE
->
DRB_configList
->
list
,
UE
->
DRB_config
[
0
][
0
]);
rrc_pdcp_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
UE
->
DRB_configList
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0xff
,
NULL
,
NULL
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
);
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0xff
,
NULL
,
NULL
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
,
0
);
rrc_rlc_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
UE
->
DRB_configList
,
...
...
@@ -6033,11 +6039,16 @@ void *rrc_control_socket_thread_fct(void *arg) {
UE
->
DRB_configList
=
CALLOC
(
1
,
sizeof
(
LTE_DRB_ToAddModList_t
));
asn1cSeqAdd
(
&
UE
->
DRB_configList
->
list
,
UE
->
DRB_config
[
0
][
0
]);
rrc_pdcp_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
UE
->
DRB_configList
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0xff
,
NULL
,
NULL
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
);
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0xff
,
NULL
,
NULL
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
,
0
);
rrc_rlc_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
UE
->
DRB_configList
,
...
...
@@ -6187,11 +6198,16 @@ void *rrc_control_socket_thread_fct(void *arg) {
UE
->
DRB_configList
=
CALLOC
(
1
,
sizeof
(
LTE_DRB_ToAddModList_t
));
asn1cSeqAdd
(
&
UE
->
DRB_configList
->
list
,
UE
->
DRB_config
[
0
][
0
]);
rrc_pdcp_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
UE
->
DRB_configList
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0xff
,
NULL
,
NULL
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
);
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0xff
,
NULL
,
NULL
,
NULL
,
(
LTE_PMCH_InfoList_r9_t
*
)
NULL
,
NULL
,
0
);
rrc_rlc_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
UE
->
DRB_configList
,
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
c40cceb4
This diff is collapsed.
Click to expand it.
openair2/RRC/LTE/rrc_eNB_M2AP.c
View file @
c40cceb4
...
...
@@ -268,15 +268,17 @@ static void rrc_M2AP_init_MBMS(
LOG_I
(
RRC
,
"[eNB %d] Frame %d : Radio Bearer config request for MBMS
\n
"
,
enb_mod_idP
,
frameP
);
//check the lcid
// Configuring PDCP and RLC for MBMS Radio Bearer
rrc_pdcp_config_asn1_req
(
&
ctxt
,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
// LTE_SRB_ToAddModList
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
// LTE_DRB_ToAddModList
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
// LTE_SRB_ToAddModList
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
// LTE_DRB_ToAddModList
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
0
,
// security mode
NULL
,
// key rrc encryption
NULL
,
// key rrc integrity
NULL
// key encryption
,
&
(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
->
pmch_InfoList_r9
)
,
NULL
);
0
,
// security mode
NULL
,
// key rrc encryption
NULL
,
// key rrc integrity
NULL
// key encryption
,
&
(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
->
pmch_InfoList_r9
),
NULL
,
0
);
rrc_rlc_config_asn1_req
(
&
ctxt
,
NULL
,
// LTE_SRB_ToAddModList
...
...
openair3/ocp-gtpu/gtp_itf.cpp
View file @
c40cceb4
...
...
@@ -706,22 +706,46 @@ int gtpv1u_update_s1u_tunnel(
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
getInstRetInt
(
compatInst
(
instance
));
if
(
inst
->
ue2te_mapping
.
find
(
create_tunnel_req
->
rnti
)
==
inst
->
ue2te_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"[%ld] Update not already existing tunnel (new rnti %x, old rnti %x)
\n
"
,
instance
,
create_tunnel_req
->
rnti
,
prior_rnti
);
// Check if tunnels already exist for new rnti
if
(
inst
->
ue2te_mapping
.
find
(
create_tunnel_req
->
rnti
)
!=
inst
->
ue2te_mapping
.
end
())
{
LOG_E
(
GTPU
,
"[%ld] Update already existing tunnel for new rnti %x
\n
"
,
instance
,
create_tunnel_req
->
rnti
);
return
-
1
;
}
// Check if tunnels exists for old rnti because we should take these tunnels.
// If we do not have tunnels, we create new one to not stop the software
auto
it
=
inst
->
ue2te_mapping
.
find
(
prior_rnti
);
if
(
it
!=
inst
->
ue2te_mapping
.
end
()
)
{
if
(
it
==
inst
->
ue2te_mapping
.
end
())
{
LOG_W
(
GTPU
,
"[%ld] Update a not existing tunnel, start create the new one (new rnti %x, old rnti %x)
\n
"
,
instance
,
create_tunnel_req
->
rnti
,
prior_rnti
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
AssertFatal
(
false
,
"logic bug: update of non-existing tunnel (new ue id %u, old ue id %u)
\n
"
,
create_tunnel_req
->
rnti
,
prior_rnti
);
/* we don't know if we need 4G or 5G PDCP and can therefore not create a
* new tunnel */
gtpv1u_enb_create_tunnel_resp_t
tmp
;
(
void
)
gtpv1u_create_s1u_tunnel
(
instance
,
create_tunnel_req
,
&
tmp
,
pdcp_data_req
);
return
0
;
}
// If tunnels exist for old rnti, we use them for new rnti
inst
->
ue2te_mapping
[
create_tunnel_req
->
rnti
]
=
it
->
second
;
// Replace old RNTI by new one in te2ue_mapping
teid_t
teid_incoming
,
teid_outcoming
=
0
;
for
(
int
i
=
0
;
i
<
create_tunnel_req
->
num_tunnels
;
i
++
)
{
teid_incoming
=
it
->
second
.
bearers
[
create_tunnel_req
->
eps_bearer_id
[
i
]].
teid_incoming
;
teid_outcoming
=
create_tunnel_req
->
sgw_S1u_teid
[
i
];
globGtp
.
te2ue_mapping
[
teid_incoming
].
ue_id
=
create_tunnel_req
->
rnti
;
LOG_I
(
GTPU
,
"[%ld] Updated tunnel (new rnti %x, old rnti %x) DL teid =%x UL teid =%x
\n
"
,
instance
,
create_tunnel_req
->
rnti
,
prior_rnti
,
teid_incoming
,
teid_outcoming
);
}
// Remove old rnti value from ue2te_mapping
inst
->
ue2te_mapping
.
erase
(
it
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
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