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
d56c7dfc
Commit
d56c7dfc
authored
Mar 04, 2024
by
Jaroslava Fiedlerova
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/717-sdap-reconfiguration' into integration_2024_w09
parents
be0217aa
b431e144
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
195 additions
and
42 deletions
+195
-42
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+13
-14
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
+1
-1
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+17
-5
openair2/SDAP/nr_sdap/nr_sdap_entity.c
openair2/SDAP/nr_sdap/nr_sdap_entity.c
+132
-13
openair2/SDAP/nr_sdap/nr_sdap_entity.h
openair2/SDAP/nr_sdap/nr_sdap_entity.h
+32
-9
No files found.
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
d56c7dfc
...
...
@@ -888,13 +888,8 @@ void add_drb(int is_gnb,
exit
(
-
1
);
}
pdusession_id
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
pdu_Session
;
if
(
is_gnb
)
{
has_sdap_rx
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
sdap_HeaderUL
==
NR_SDAP_Config__sdap_HeaderUL_present
;
has_sdap_tx
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
sdap_HeaderDL
==
NR_SDAP_Config__sdap_HeaderDL_present
;
}
else
{
has_sdap_tx
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
sdap_HeaderUL
==
NR_SDAP_Config__sdap_HeaderUL_present
;
has_sdap_rx
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
sdap_HeaderDL
==
NR_SDAP_Config__sdap_HeaderDL_present
;
}
has_sdap_rx
=
is_sdap_rx
(
is_gnb
,
s
->
cnAssociation
->
choice
.
sdap_Config
);
has_sdap_tx
=
is_sdap_tx
(
is_gnb
,
s
->
cnAssociation
->
choice
.
sdap_Config
);
is_sdap_DefaultDRB
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
defaultDRB
==
true
?
1
:
0
;
mappedQFIs2Add
=
(
NR_QFI_t
*
)
s
->
cnAssociation
->
choice
.
sdap_Config
->
mappedQoS_FlowsToAdd
->
list
.
array
[
0
];
mappedQFIs2AddCount
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
mappedQoS_FlowsToAdd
->
list
.
count
;
...
...
@@ -926,8 +921,16 @@ void add_drb(int is_gnb,
nr_pdcp_ue_add_drb_pdcp_entity
(
ue
,
drb_id
,
pdcp_drb
);
LOG_I
(
PDCP
,
"added drb %d to UE ID %ld
\n
"
,
drb_id
,
UEid
);
new_nr_sdap_entity
(
is_gnb
,
has_sdap_rx
,
has_sdap_tx
,
UEid
,
pdusession_id
,
is_sdap_DefaultDRB
,
drb_id
,
mappedQFIs2Add
,
mappedQFIs2AddCount
);
/* add new SDAP entity for the PDU session the DRB belongs to */
new_nr_sdap_entity
(
is_gnb
,
has_sdap_rx
,
has_sdap_tx
,
UEid
,
pdusession_id
,
is_sdap_DefaultDRB
,
drb_id
,
mappedQFIs2Add
,
mappedQFIs2AddCount
);
}
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
}
...
...
@@ -1127,7 +1130,7 @@ void nr_pdcp_reconfigure_srb(ue_id_t ue_id, int srb_id, long t_Reordering)
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
}
void
nr_pdcp_reconfigure_drb
(
ue_id_t
ue_id
,
int
drb_id
,
NR_PDCP_Config_t
*
pdcp_config
,
NR_SDAP_Config_t
*
sdap_config
)
void
nr_pdcp_reconfigure_drb
(
ue_id_t
ue_id
,
int
drb_id
,
NR_PDCP_Config_t
*
pdcp_config
)
{
// The enabling/disabling of ciphering or integrity protection
// can be changed only by releasing and adding the DRB
...
...
@@ -1163,10 +1166,6 @@ void nr_pdcp_reconfigure_drb(ue_id_t ue_id, int drb_id, NR_PDCP_Config_t *pdcp_c
}
}
}
if
(
sdap_config
)
{
// nr_reconfigure_sdap_entity
AssertFatal
(
false
,
"Function to reconfigure SDAP entity not implemented yet
\n
"
);
}
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
}
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h
View file @
d56c7dfc
...
...
@@ -67,7 +67,7 @@ void nr_pdcp_reestablishment(ue_id_t ue_id, int rb_id, bool srb_flag);
void
nr_pdcp_suspend_srb
(
ue_id_t
ue_id
,
int
srb_id
);
void
nr_pdcp_suspend_drb
(
ue_id_t
ue_id
,
int
drb_id
);
void
nr_pdcp_reconfigure_srb
(
ue_id_t
ue_id
,
int
srb_id
,
long
t_Reordering
);
void
nr_pdcp_reconfigure_drb
(
ue_id_t
ue_id
,
int
drb_id
,
NR_PDCP_Config_t
*
pdcp_config
,
NR_SDAP_Config_t
*
sdap_config
);
void
nr_pdcp_reconfigure_drb
(
ue_id_t
ue_id
,
int
drb_id
,
NR_PDCP_Config_t
*
pdcp_config
);
void
nr_pdcp_release_srb
(
ue_id_t
ue_id
,
int
srb_id
);
void
nr_pdcp_release_drb
(
ue_id_t
ue_id
,
int
drb_id
);
...
...
openair2/RRC/NR_UE/rrc_UE.c
View file @
d56c7dfc
...
...
@@ -70,6 +70,7 @@
#include "SIMULATION/TOOLS/sim.h" // for taus
#include "nr_nas_msg_sim.h"
#include "openair2/SDAP/nr_sdap/nr_sdap_entity.h"
static
NR_UE_RRC_INST_t
*
NR_UE_rrc_inst
;
/* NAS Attach request with IMSI */
...
...
@@ -1158,6 +1159,10 @@ void nr_rrc_ue_process_measConfig(rrcPerNB_t *rrc, NR_MeasConfig_t *const measCo
}
}
/**
* @brief add, modify and release SRBs and/or DRBs
* @ref 3GPP TS 38.331
*/
static
void
nr_rrc_ue_process_RadioBearerConfig
(
NR_UE_RRC_INST_t
*
ue_rrc
,
NR_RadioBearerConfig_t
*
const
radioBearerConfig
)
{
...
...
@@ -1216,19 +1221,26 @@ static void nr_rrc_ue_process_RadioBearerConfig(NR_UE_RRC_INST_t *ue_rrc,
}
}
// Establish DRBs if present
/**
* Establish/reconfig DRBs if DRB-ToAddMod is present
* according to 3GPP TS 38.331 clause 5.3.5.6.5 DRB addition/modification
*/
if
(
radioBearerConfig
->
drb_ToAddModList
!=
NULL
)
{
for
(
int
cnt
=
0
;
cnt
<
radioBearerConfig
->
drb_ToAddModList
->
list
.
count
;
cnt
++
)
{
struct
NR_DRB_ToAddMod
*
drb
=
radioBearerConfig
->
drb_ToAddModList
->
list
.
array
[
cnt
];
int
DRB_id
=
drb
->
drb_Identity
;
/* DRB is already established and configured */
if
(
ue_rrc
->
status_DRBs
[
DRB_id
]
==
RB_ESTABLISHED
)
{
AssertFatal
(
drb
->
reestablishPDCP
==
NULL
,
"reestablishPDCP not yet implemented
\n
"
);
AssertFatal
(
drb
->
recoverPDCP
==
NULL
,
"recoverPDCP not yet implemented
\n
"
);
/* sdap-Config is included (SA mode) */
NR_SDAP_Config_t
*
sdap_Config
=
drb
->
cnAssociation
?
drb
->
cnAssociation
->
choice
.
sdap_Config
:
NULL
;
if
(
drb
->
pdcp_Config
||
sdap_Config
)
nr_pdcp_reconfigure_drb
(
ue_rrc
->
ue_id
,
DRB_id
,
drb
->
pdcp_Config
,
sdap_Config
);
if
(
drb
->
cnAssociation
)
AssertFatal
(
drb
->
cnAssociation
->
choice
.
sdap_Config
==
NULL
,
"SDAP reconfiguration not yet implemented
\n
"
);
/* PDCP reconfiguration */
if
(
drb
->
pdcp_Config
)
nr_pdcp_reconfigure_drb
(
ue_rrc
->
ue_id
,
DRB_id
,
drb
->
pdcp_Config
);
/* SDAP entity reconfiguration */
if
(
sdap_Config
)
nr_reconfigure_sdap_entity
(
sdap_Config
,
ue_rrc
->
ue_id
,
sdap_Config
->
pdu_Session
,
DRB_id
);
}
else
{
ue_rrc
->
status_DRBs
[
DRB_id
]
=
RB_ESTABLISHED
;
add_drb
(
false
,
...
...
openair2/SDAP/nr_sdap/nr_sdap_entity.c
View file @
d56c7dfc
This diff is collapsed.
Click to expand it.
openair2/SDAP/nr_sdap/nr_sdap_entity.h
View file @
d56c7dfc
...
...
@@ -84,7 +84,7 @@ typedef struct nr_sdap_entity_s {
void
(
*
qfi2drb_map_update
)(
struct
nr_sdap_entity_s
*
entity
,
uint8_t
qfi
,
rb_id_t
drb
,
bool
has_sdap_rx
,
bool
has_sdap_tx
);
void
(
*
qfi2drb_map_delete
)(
struct
nr_sdap_entity_s
*
entity
,
uint8_t
qfi
);
rb_id_t
(
*
qfi2drb_map
)(
struct
nr_sdap_entity_s
*
entity
,
uint8_t
qfi
,
rb_id_t
upper_layer_rb_id
);
rb_id_t
(
*
qfi2drb_map
)(
struct
nr_sdap_entity_s
*
entity
,
uint8_t
qfi
);
nr_sdap_ul_hdr_t
(
*
sdap_construct_ctrl_pdu
)(
uint8_t
qfi
);
rb_id_t
(
*
sdap_map_ctrl_pdu
)(
struct
nr_sdap_entity_s
*
entity
,
rb_id_t
pdcp_entity
,
int
map_type
,
uint8_t
dl_qfi
);
...
...
@@ -132,7 +132,7 @@ void nr_sdap_qfi2drb_map_del(nr_sdap_entity_t *entity, uint8_t qfi);
* If there is no stored QoS flow to DRB mapping rule for the QoS flow as specified in the subclause 5.3, map the SDAP SDU to the default DRB
* else, map the SDAP SDU to the DRB according to the stored QoS flow to DRB mapping rule.
*/
rb_id_t
nr_sdap_qfi2drb_map
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
,
rb_id_t
upper_layer_rb_id
);
rb_id_t
nr_sdap_qfi2drb_map
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
);
/*
* TS 37.324 5.3 QoS flow to DRB Mapping
...
...
@@ -154,17 +154,19 @@ rb_id_t nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, rb_id_t pdcp_entity, int
*/
void
nr_sdap_submit_ctrl_pdu
(
ue_id_t
ue_id
,
rb_id_t
sdap_ctrl_pdu_drb
,
nr_sdap_ul_hdr_t
ctrl_pdu
);
/*
* TS 37.324 5.3 QoS flow to DRB Mapping
* 5.3.1 Configuration Procedures
*/
void
nr_sdap_ue_qfi2drb_config
(
nr_sdap_entity_t
*
existing_sdap_entity
,
rb_id_t
pdcp_entity
,
ue_id_t
ue_id
,
NR_QFI_t
*
mapped_qfi_2_add
,
uint8_t
mappedQFIs2AddCount
,
uint8_t
drb_identity
,
bool
has_sdap_rx
,
bool
has_sdap_tx
);
/*
* TS 37.324 4.4 5.1.1 SDAP entity establishment
* Establish an SDAP entity.
*/
nr_sdap_entity_t
*
new_nr_sdap_entity
(
int
is_gnb
,
bool
has_sdap_rx
,
bool
has_sdap_tx
,
ue_id_t
ue_id
,
int
pdusession_id
,
bool
is_defaultDRB
,
uint8_t
default_DRB
,
NR_QFI_t
*
mapped_qfi_2_add
,
uint8_t
mappedQFIs2AddCount
);
nr_sdap_entity_t
*
new_nr_sdap_entity
(
int
is_gnb
,
bool
has_sdap_rx
,
bool
has_sdap_tx
,
ue_id_t
ue_id
,
int
pdusession_id
,
bool
is_defaultDRB
,
uint8_t
default_DRB
,
NR_QFI_t
*
mapped_qfi_2_add
,
uint8_t
mappedQFIs2AddCount
);
/* Entity Handling Related Functions */
nr_sdap_entity_t
*
nr_sdap_get_entity
(
ue_id_t
ue_id
,
int
pdusession_id
);
...
...
@@ -188,4 +190,25 @@ bool nr_sdap_delete_entity(ue_id_t ue_id, int pdusession_id);
* @return True, it deleted at least one entity, false otherwise.
*/
bool
nr_sdap_delete_ue_entities
(
ue_id_t
ue_id
);
/**
* @brief indicates whether it is a receiving SDAP entity
* i.e. for UE, header for DL data is present
* for gNB, header for UL data is present
*/
bool
is_sdap_rx
(
bool
is_gnb
,
NR_SDAP_Config_t
*
sdap_config
);
/**
* @brief indicates whether it is a transmitting SDAP entity
* i.e. for UE, header for UL data is present
* for gNB, header for DL data is present
*/
bool
is_sdap_tx
(
bool
is_gnb
,
NR_SDAP_Config_t
*
sdap_config
);
/**
* @brief Run the SDAP reconfiguration for the DRB
* @param[in] ue_id Unique identifier for the User Equipment. ID Range [0, 65536].
*/
void
nr_reconfigure_sdap_entity
(
NR_SDAP_Config_t
*
sdap_config
,
ue_id_t
ue_id
,
int
pdusession_id
,
int
drb_id
);
#endif
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