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
88943f0e
Commit
88943f0e
authored
Feb 01, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/bugfix-sdap' into integration_2022_wk05
parents
b7de87f5
698122d6
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
60 additions
and
58 deletions
+60
-58
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
+7
-5
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
+7
-5
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+15
-12
openair2/SDAP/nr_sdap/nr_sdap.c
openair2/SDAP/nr_sdap/nr_sdap.c
+2
-4
openair2/SDAP/nr_sdap/nr_sdap.h
openair2/SDAP/nr_sdap/nr_sdap.h
+2
-4
openair2/SDAP/nr_sdap/nr_sdap_entity.c
openair2/SDAP/nr_sdap/nr_sdap_entity.c
+20
-21
openair2/SDAP/nr_sdap/nr_sdap_entity.h
openair2/SDAP/nr_sdap/nr_sdap_entity.h
+7
-7
No files found.
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
View file @
88943f0e
...
...
@@ -390,8 +390,11 @@ static void nr_pdcp_entity_get_stats(nr_pdcp_entity_t *entity,
nr_pdcp_entity_t
*
new_nr_pdcp_entity
(
nr_pdcp_entity_type_t
type
,
int
is_gnb
,
int
rb_id
,
int
pdusession_id
,
int
has_sdap
,
int
has_sdapULheader
,
int
has_sdapDLheader
,
int
is_gnb
,
int
rb_id
,
int
pdusession_id
,
bool
has_sdap_rx
,
bool
has_sdap_tx
,
void
(
*
deliver_sdu
)(
void
*
deliver_sdu_data
,
struct
nr_pdcp_entity_t
*
entity
,
char
*
buf
,
int
size
),
void
*
deliver_sdu_data
,
...
...
@@ -432,9 +435,8 @@ nr_pdcp_entity_t *new_nr_pdcp_entity(
ret
->
rb_id
=
rb_id
;
ret
->
pdusession_id
=
pdusession_id
;
ret
->
has_sdap
=
has_sdap
;
ret
->
has_sdapULheader
=
has_sdapULheader
;
ret
->
has_sdapDLheader
=
has_sdapDLheader
;
ret
->
has_sdap_rx
=
has_sdap_rx
;
ret
->
has_sdap_tx
=
has_sdap_tx
;
ret
->
sn_size
=
sn_size
;
ret
->
t_reordering
=
t_reordering
;
ret
->
discard_timer
=
discard_timer
;
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h
View file @
88943f0e
...
...
@@ -102,9 +102,8 @@ typedef struct nr_pdcp_entity_t {
/* configuration variables */
int
rb_id
;
int
pdusession_id
;
int
has_sdap
;
int
has_sdapULheader
;
int
has_sdapDLheader
;
bool
has_sdap_rx
;
bool
has_sdap_tx
;
int
sn_size
;
/* SN size, in bits */
int
t_reordering
;
/* unit: ms, -1 for infinity */
int
discard_timer
;
/* unit: ms, -1 for infinity */
...
...
@@ -169,8 +168,11 @@ typedef struct nr_pdcp_entity_t {
nr_pdcp_entity_t
*
new_nr_pdcp_entity
(
nr_pdcp_entity_type_t
type
,
int
is_gnb
,
int
rb_id
,
int
pdusession_id
,
int
has_sdap
,
int
has_sdapULheader
,
int
has_sdapDLheader
,
int
is_gnb
,
int
rb_id
,
int
pdusession_id
,
bool
has_sdap_rx
,
bool
has_sdap_tx
,
void
(
*
deliver_sdu
)(
void
*
deliver_sdu_data
,
struct
nr_pdcp_entity_t
*
entity
,
char
*
buf
,
int
size
),
void
*
deliver_sdu_data
,
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
88943f0e
...
...
@@ -617,7 +617,7 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity,
if
(
IS_SOFTMODEM_NOS1
||
UE_NAS_USE_TUN
)
{
LOG_D
(
PDCP
,
"IP packet received with size %d, to be sent to SDAP interface, UE ID/RNTI: %ld
\n
"
,
size
,
ue
->
rntiMaybeUEid
);
sdap_data_ind
(
entity
->
rb_id
,
entity
->
is_gnb
,
entity
->
has_sdap
,
entity
->
has_sdapULheader
,
entity
->
pdusession_id
,
ue
->
rntiMaybeUEid
,
buf
,
size
);
sdap_data_ind
(
entity
->
rb_id
,
entity
->
is_gnb
,
entity
->
has_sdap
_rx
,
entity
->
pdusession_id
,
ue
->
rntiMaybeUEid
,
buf
,
size
);
}
else
{
for
(
i
=
0
;
i
<
MAX_DRBS_PER_UE
;
i
++
)
{
...
...
@@ -633,7 +633,7 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity,
rb_found:
{
LOG_D
(
PDCP
,
"%s() (drb %d) sending message to SDAP size %d
\n
"
,
__func__
,
rb_id
,
size
);
sdap_data_ind
(
rb_id
,
ue
->
drb
[
rb_id
-
1
]
->
is_gnb
,
ue
->
drb
[
rb_id
-
1
]
->
has_sdap
,
ue
->
drb
[
rb_id
-
1
]
->
has_sdapULheader
,
ue
->
drb
[
rb_id
-
1
]
->
pdusession_id
,
ue
->
rntiMaybeUEid
,
buf
,
size
);
sdap_data_ind
(
rb_id
,
ue
->
drb
[
rb_id
-
1
]
->
is_gnb
,
ue
->
drb
[
rb_id
-
1
]
->
has_sdap
_rx
,
ue
->
drb
[
rb_id
-
1
]
->
pdusession_id
,
ue
->
rntiMaybeUEid
,
buf
,
size
);
}
}
}
...
...
@@ -855,7 +855,7 @@ static void add_srb(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_SRB_ToAddMod *s
LOG_D
(
PDCP
,
"%s:%d:%s: warning SRB %d already exist for UE ID/RNTI %ld, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rntiMaybeUEid
);
}
else
{
pdcp_srb
=
new_nr_pdcp_entity
(
NR_PDCP_SRB
,
is_gnb
,
srb_id
,
0
,
0
,
0
,
0
,
// sdap parameters
0
,
false
,
false
,
// sdap parameters
deliver_sdu_srb
,
ue
,
deliver_pdu_srb
,
ue
,
12
,
t_Reordering
,
-
1
,
ciphering_algorithm
,
...
...
@@ -906,9 +906,8 @@ void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s, in
}
int
pdusession_id
;
int
has_sdap
=
0
;
int
has_sdapULheader
=
0
;
int
has_sdapDLheader
=
0
;
bool
has_sdap_rx
=
false
;
bool
has_sdap_tx
=
false
;
bool
is_sdap_DefaultDRB
=
false
;
NR_QFI_t
*
mappedQFIs2Add
=
NULL
;
uint8_t
mappedQFIs2AddCount
=
0
;
...
...
@@ -920,9 +919,13 @@ void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s, in
exit
(
-
1
);
}
pdusession_id
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
pdu_Session
;
has_sdapULheader
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
sdap_HeaderUL
==
NR_SDAP_Config__sdap_HeaderUL_present
?
1
:
0
;
has_sdapDLheader
=
s
->
cnAssociation
->
choice
.
sdap_Config
->
sdap_HeaderDL
==
NR_SDAP_Config__sdap_HeaderDL_present
?
1
:
0
;
has_sdap
=
has_sdapULheader
|
has_sdapDLheader
;
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
;
}
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
;
...
...
@@ -941,8 +944,8 @@ void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s, in
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_W
(
PDCP
,
"%s:%d:%s: warning DRB %d already exist for UE ID/RNTI %ld, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rntiMaybeUEid
);
}
else
{
pdcp_drb
=
new_nr_pdcp_entity
(
NR_PDCP_DRB_AM
,
is_gnb
,
drb_id
,
pdusession_id
,
has_sdap
,
has_sdap
ULheader
,
has_sdapDLheader
,
pdcp_drb
=
new_nr_pdcp_entity
(
NR_PDCP_DRB_AM
,
is_gnb
,
drb_id
,
pdusession_id
,
has_sdap
_rx
,
has_sdap_tx
,
deliver_sdu_drb
,
ue
,
deliver_pdu_drb
,
ue
,
sn_size_dl
,
t_reordering
,
discard_timer
,
has_ciphering
?
ciphering_algorithm
:
0
,
...
...
@@ -953,7 +956,7 @@ void add_drb_am(int is_gnb, ue_id_t rntiMaybeUEid, struct NR_DRB_ToAddMod *s, in
LOG_D
(
PDCP
,
"%s:%d:%s: added drb %d to UE ID/RNTI %ld
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rntiMaybeUEid
);
new_nr_sdap_entity
(
is_gnb
,
has_sdap
,
rntiMaybeUEid
,
pdusession_id
,
is_sdap_DefaultDRB
,
drb_id
,
mappedQFIs2Add
,
mappedQFIs2AddCount
);
new_nr_sdap_entity
(
is_gnb
,
has_sdap
_rx
,
has_sdap_tx
,
rntiMaybeUEid
,
pdusession_id
,
is_sdap_DefaultDRB
,
drb_id
,
mappedQFIs2Add
,
mappedQFIs2AddCount
);
}
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
}
...
...
openair2/SDAP/nr_sdap/nr_sdap.c
View file @
88943f0e
...
...
@@ -64,8 +64,7 @@ bool sdap_data_req(protocol_ctxt_t *ctxt_p,
void
sdap_data_ind
(
rb_id_t
pdcp_entity
,
int
is_gnb
,
int
has_sdap
,
int
has_sdapULheader
,
bool
has_sdap_rx
,
int
pdusession_id
,
ue_id_t
ue_id
,
char
*
buf
,
...
...
@@ -81,8 +80,7 @@ void sdap_data_ind(rb_id_t pdcp_entity,
sdap_entity
->
rx_entity
(
sdap_entity
,
pdcp_entity
,
is_gnb
,
has_sdap
,
has_sdapULheader
,
has_sdap_rx
,
pdusession_id
,
ue_id
,
buf
,
...
...
openair2/SDAP/nr_sdap/nr_sdap.h
View file @
88943f0e
...
...
@@ -55,13 +55,11 @@ bool sdap_data_req(protocol_ctxt_t *ctxt_p,
*/
void
sdap_data_ind
(
rb_id_t
pdcp_entity
,
int
is_gnb
,
int
has_sdap
,
int
has_sdapULheader
,
bool
has_sdap_rx
,
int
pdusession_id
,
ue_id_t
ue_id
,
char
*
buf
,
int
size
);
int
size
);
void
set_qfi_pduid
(
uint8_t
qfi
,
uint8_t
pduid
);
...
...
openair2/SDAP/nr_sdap/nr_sdap_entity.c
View file @
88943f0e
...
...
@@ -62,7 +62,7 @@ static bool nr_sdap_tx_entity(nr_sdap_entity_t *entity,
const
uint32_t
*
destinationL2Id
,
const
uint8_t
qfi
,
const
bool
rqi
)
{
/* The offset of the SDAP header, it might be 0 if
the has_sdap
is not true in the pdcp entity. */
/* The offset of the SDAP header, it might be 0 if
has_sdap_tx
is not true in the pdcp entity. */
int
offset
=
0
;
bool
ret
=
false
;
/*Hardcode DRB ID given from upper layer (ue/enb_tun_read_thread rb_id), it will change if we have SDAP*/
...
...
@@ -79,7 +79,7 @@ static bool nr_sdap_tx_entity(nr_sdap_entity_t *entity,
if
(
pdcp_entity
){
sdap_drb_id
=
pdcp_entity
;
pdcp_ent_has_sdap
=
entity
->
qfi2drb_table
[
qfi
].
has
Sdap
;
pdcp_ent_has_sdap
=
entity
->
qfi2drb_table
[
qfi
].
has
_sdap_tx
;
LOG_D
(
SDAP
,
"TX - QFI: %u is mapped to DRB ID: %ld
\n
"
,
qfi
,
entity
->
qfi2drb_table
[
qfi
].
drb_id
);
}
...
...
@@ -173,17 +173,16 @@ static bool nr_sdap_tx_entity(nr_sdap_entity_t *entity,
static
void
nr_sdap_rx_entity
(
nr_sdap_entity_t
*
entity
,
rb_id_t
pdcp_entity
,
int
is_gnb
,
int
has_sdap
,
int
has_sdapHeader
,
bool
has_sdap_rx
,
int
pdusession_id
,
ue_id_t
ue_id
,
char
*
buf
,
int
size
)
{
/* The offset of the SDAP header, it might be 0 if
the has_sdap
is not true in the pdcp entity. */
/* The offset of the SDAP header, it might be 0 if
has_sdap_rx
is not true in the pdcp entity. */
int
offset
=
0
;
if
(
is_gnb
)
{
// gNB
if
(
has_sdap
&&
has_sdapHeader
)
{
// Handling the SDAP Header
if
(
is_gnb
)
{
// gNB
if
(
has_sdap_rx
)
{
// Handling the SDAP Header
offset
=
SDAP_HDR_LENGTH
;
nr_sdap_ul_hdr_t
*
sdap_hdr
=
(
nr_sdap_ul_hdr_t
*
)
buf
;
LOG_D
(
SDAP
,
"RX Entity Received QFI: %u
\n
"
,
sdap_hdr
->
QFI
);
...
...
@@ -224,7 +223,7 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity,
* 5.2.2 Downlink
* if the DRB from which this SDAP data PDU is received is configured by RRC with the presence of SDAP header.
*/
if
(
has_sdap
&&
has_sdapHeader
)
{
// Handling the SDAP Header
if
(
has_sdap_rx
)
{
// Handling the SDAP Header
offset
=
SDAP_HDR_LENGTH
;
/*
* TS 37.324 5.2 Data transfer
...
...
@@ -263,8 +262,7 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity,
* the DRB according to the stored QoS flow to DRB mapping rule is configured by RRC
* with the presence of UL SDAP header
*/
if
(
(
pdcp_entity
!=
entity
->
qfi2drb_table
[
sdap_hdr
->
QFI
].
drb_id
)
&&
has_sdapHeader
){
if
(
pdcp_entity
!=
entity
->
qfi2drb_table
[
sdap_hdr
->
QFI
].
drb_id
)
{
nr_sdap_ul_hdr_t
sdap_ctrl_pdu
=
entity
->
sdap_construct_ctrl_pdu
(
sdap_hdr
->
QFI
);
rb_id_t
sdap_ctrl_pdu_drb
=
entity
->
sdap_map_ctrl_pdu
(
entity
,
pdcp_entity
,
SDAP_CTRL_PDU_MAP_RULE_DRB
,
sdap_hdr
->
QFI
);
entity
->
sdap_submit_ctrl_pdu
(
ue_id
,
sdap_ctrl_pdu_drb
,
sdap_ctrl_pdu
);
...
...
@@ -304,13 +302,15 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity,
}
}
void
nr_sdap_qfi2drb_map_update
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
,
rb_id_t
drb
,
bool
hasSdap
){
void
nr_sdap_qfi2drb_map_update
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
,
rb_id_t
drb
,
bool
has_sdap_rx
,
bool
has_sdap_tx
)
{
if
(
qfi
<
SDAP_MAX_QFI
&&
qfi
>
SDAP_MAP_RULE_EMPTY
&&
drb
>
0
&&
drb
<=
AVLBL_DRB
){
entity
->
qfi2drb_table
[
qfi
].
drb_id
=
drb
;
entity
->
qfi2drb_table
[
qfi
].
hasSdap
=
hasSdap
;
entity
->
qfi2drb_table
[
qfi
].
has_sdap_rx
=
has_sdap_rx
;
entity
->
qfi2drb_table
[
qfi
].
has_sdap_tx
=
has_sdap_tx
;
LOG_D
(
SDAP
,
"Updated mapping: QFI %u -> DRB %ld
\n
"
,
qfi
,
entity
->
qfi2drb_table
[
qfi
].
drb_id
);
}
else
{
LOG_D
(
SDAP
,
"Map updated failed, QFI: %u, DRB: %ld
\n
"
,
qfi
,
drb
);
...
...
@@ -332,7 +332,7 @@ rb_id_t nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t upper
return
pdcp_entity
;
}
else
if
(
entity
->
default_drb
)
{
LOG_D
(
SDAP
,
"Mapping QFI: %u to Default DRB: %ld
\n
"
,
qfi
,
entity
->
default_drb
);
entity
->
qfi2drb_map_update
(
entity
,
qfi
,
entity
->
default_drb
,
entity
->
qfi2drb_table
[
qfi
].
has
Sdap
);
entity
->
qfi2drb_map_update
(
entity
,
qfi
,
entity
->
default_drb
,
entity
->
qfi2drb_table
[
qfi
].
has
_sdap_rx
,
entity
->
qfi2drb_table
[
qfi
].
has_sdap_tx
);
return
entity
->
default_drb
;
}
else
{
LOG_D
(
SDAP
,
"Mapping rule and default DRB do not exist for QFI:%u
\n
"
,
qfi
);
...
...
@@ -374,37 +374,36 @@ void nr_sdap_submit_ctrl_pdu(ue_id_t ue_id, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_u
}
}
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
)
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
)
{
LOG_D
(
SDAP
,
"RRC Configuring SDAP Entity
\n
"
);
uint8_t
qfi
=
0
;
bool
hasSdap
=
true
;
for
(
int
i
=
0
;
i
<
mappedQFIs2AddCount
;
i
++
){
qfi
=
mapped_qfi_2_add
[
i
];
if
(
existing_sdap_entity
->
default_drb
&&
existing_sdap_entity
->
qfi2drb_table
[
qfi
].
drb_id
==
SDAP_NO_MAPPING_RULE
)
{
if
(
existing_sdap_entity
->
default_drb
&&
existing_sdap_entity
->
qfi2drb_table
[
qfi
].
drb_id
==
SDAP_NO_MAPPING_RULE
)
{
nr_sdap_ul_hdr_t
sdap_ctrl_pdu
=
existing_sdap_entity
->
sdap_construct_ctrl_pdu
(
qfi
);
rb_id_t
sdap_ctrl_pdu_drb
=
existing_sdap_entity
->
sdap_map_ctrl_pdu
(
existing_sdap_entity
,
pdcp_entity
,
SDAP_CTRL_PDU_MAP_DEF_DRB
,
qfi
);
existing_sdap_entity
->
sdap_submit_ctrl_pdu
(
ue_id
,
sdap_ctrl_pdu_drb
,
sdap_ctrl_pdu
);
}
if
(
existing_sdap_entity
->
qfi2drb_table
[
qfi
].
drb_id
!=
drb_identity
&&
existing_sdap_entity
->
qfi2drb_table
[
qfi
].
hasSdap
)
{
if
(
existing_sdap_entity
->
qfi2drb_table
[
qfi
].
drb_id
!=
drb_identity
&&
existing_sdap_entity
->
qfi2drb_table
[
qfi
].
has_sdap_tx
)
{
nr_sdap_ul_hdr_t
sdap_ctrl_pdu
=
existing_sdap_entity
->
sdap_construct_ctrl_pdu
(
qfi
);
rb_id_t
sdap_ctrl_pdu_drb
=
existing_sdap_entity
->
sdap_map_ctrl_pdu
(
existing_sdap_entity
,
pdcp_entity
,
SDAP_CTRL_PDU_MAP_RULE_DRB
,
qfi
);
existing_sdap_entity
->
sdap_submit_ctrl_pdu
(
ue_id
,
sdap_ctrl_pdu_drb
,
sdap_ctrl_pdu
);
}
LOG_D
(
SDAP
,
"Storing the configured QoS flow to DRB mapping rule
\n
"
);
existing_sdap_entity
->
qfi2drb_map_update
(
existing_sdap_entity
,
qfi
,
drb_identity
,
has
Sdap
);
existing_sdap_entity
->
qfi2drb_map_update
(
existing_sdap_entity
,
qfi
,
drb_identity
,
has
_sdap_rx
,
has_sdap_tx
);
}
}
nr_sdap_entity_t
*
new_nr_sdap_entity
(
int
is_gnb
,
int
has_sdap
,
ue_id_t
ue_id
,
int
pdusession_id
,
bool
is_defaultDRB
,
uint8_t
drb_identity
,
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
drb_identity
,
NR_QFI_t
*
mapped_qfi_2_add
,
uint8_t
mappedQFIs2AddCount
)
{
if
(
nr_sdap_get_entity
(
ue_id
,
pdusession_id
))
{
LOG_E
(
SDAP
,
"SDAP Entity for UE already exists with RNTI/UE ID: %lu and PDU SESSION ID: %d
\n
"
,
ue_id
,
pdusession_id
);
nr_sdap_entity_t
*
existing_sdap_entity
=
nr_sdap_get_entity
(
ue_id
,
pdusession_id
);
rb_id_t
pdcp_entity
=
existing_sdap_entity
->
default_drb
;
if
(
!
is_gnb
)
nr_sdap_ue_qfi2drb_config
(
existing_sdap_entity
,
pdcp_entity
,
ue_id
,
mapped_qfi_2_add
,
mappedQFIs2AddCount
,
drb_identity
);
nr_sdap_ue_qfi2drb_config
(
existing_sdap_entity
,
pdcp_entity
,
ue_id
,
mapped_qfi_2_add
,
mappedQFIs2AddCount
,
drb_identity
,
has_sdap_rx
,
has_sdap_tx
);
return
existing_sdap_entity
;
}
...
...
@@ -438,7 +437,7 @@ nr_sdap_entity_t *new_nr_sdap_entity(int is_gnb, int has_sdap, ue_id_t ue_id, in
LOG_D
(
SDAP
,
"RRC updating mapping rules
\n
"
);
for
(
int
i
=
0
;
i
<
mappedQFIs2AddCount
;
i
++
)
{
sdap_entity
->
qfi2drb_map_update
(
sdap_entity
,
mapped_qfi_2_add
[
i
],
sdap_entity
->
default_drb
,
has_sdap
);
sdap_entity
->
qfi2drb_map_update
(
sdap_entity
,
mapped_qfi_2_add
[
i
],
sdap_entity
->
default_drb
,
has_sdap
_rx
,
has_sdap_tx
);
}
}
}
...
...
openair2/SDAP/nr_sdap/nr_sdap_entity.h
View file @
88943f0e
...
...
@@ -65,7 +65,8 @@ typedef struct nr_sdap_ul_hdr_s {
typedef
struct
qfi2drb_s
{
rb_id_t
drb_id
;
bool
hasSdap
;
bool
has_sdap_rx
;
bool
has_sdap_tx
;
}
qfi2drb_t
;
void
nr_pdcp_submit_sdap_ctrl_pdu
(
ue_id_t
ue_id
,
rb_id_t
sdap_ctrl_pdu_drb
,
nr_sdap_ul_hdr_t
ctrl_pdu
);
...
...
@@ -76,7 +77,7 @@ typedef struct nr_sdap_entity_s {
int
pdusession_id
;
qfi2drb_t
qfi2drb_table
[
SDAP_MAX_QFI
];
void
(
*
qfi2drb_map_update
)(
struct
nr_sdap_entity_s
*
entity
,
uint8_t
qfi
,
rb_id_t
drb
,
bool
has
Sdap
);
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
);
...
...
@@ -101,8 +102,7 @@ typedef struct nr_sdap_entity_s {
void
(
*
rx_entity
)(
struct
nr_sdap_entity_s
*
entity
,
rb_id_t
pdcp_entity
,
int
is_gnb
,
int
has_sdap
,
int
has_sdapULheader
,
bool
has_sdap_rx
,
int
pdusession_id
,
ue_id_t
ue_id
,
char
*
buf
,
...
...
@@ -113,7 +113,7 @@ typedef struct nr_sdap_entity_s {
}
nr_sdap_entity_t
;
/* QFI to DRB Mapping Related Function */
void
nr_sdap_qfi2drb_map_update
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
,
rb_id_t
drb
,
bool
has
Sdap
);
void
nr_sdap_qfi2drb_map_update
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
,
rb_id_t
drb
,
bool
has
_sdap_rx
,
bool
has_sdap_tx
);
/* QFI to DRB Mapping Related Function */
void
nr_sdap_qfi2drb_map_del
(
nr_sdap_entity_t
*
entity
,
uint8_t
qfi
);
...
...
@@ -153,13 +153,13 @@ void nr_sdap_submit_ctrl_pdu(ue_id_t ue_id, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_u
* 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
);
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
,
int
has_sdap
,
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
);
...
...
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