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
zzha zzha
OpenXG-RAN
Commits
f59c47c4
Commit
f59c47c4
authored
Aug 17, 2022
by
Angelo Athanassopoulos
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Multiple DRBs - RRC - Added function for DRB creation
parent
52f52c74
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
117 additions
and
89 deletions
+117
-89
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+1
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+116
-89
No files found.
openair2/RRC/NR/nr_rrc_defs.h
View file @
f59c47c4
...
...
@@ -93,6 +93,7 @@
#define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
#define NR_UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
#define MAX_DRB_PER_PDUSESSION 4
typedef
enum
{
NR_RRC_OK
=
0
,
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
f59c47c4
...
...
@@ -755,6 +755,87 @@ rrc_gNB_generate_defaultRRCReconfiguration(
}
}
NR_DRB_ToAddMod_t
*
generateDRB
(
rrc_gNB_ue_context_t
*
ue_context_pP
,
int
iter
,
long
drb_id
,
boolean_t
enable_sdap
,
int
do_drb_integrity
,
int
do_drb_ciphering
)
{
NR_DRB_ToAddMod_t
*
DRB_config
=
NULL
;
NR_SDAP_Config_t
*
SDAP_config
=
NULL
;
DRB_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
));
DRB_config
->
drb_Identity
=
drb_id
;
DRB_config
->
cnAssociation
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
->
cnAssociation
));
DRB_config
->
cnAssociation
->
present
=
NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config
;
/* SDAP Configuration */
SDAP_config
=
CALLOC
(
1
,
sizeof
(
NR_SDAP_Config_t
));
memset
(
SDAP_config
,
0
,
sizeof
(
NR_SDAP_Config_t
));
SDAP_config
->
mappedQoS_FlowsToAdd
=
calloc
(
1
,
sizeof
(
struct
NR_SDAP_Config__mappedQoS_FlowsToAdd
));
memset
(
SDAP_config
->
mappedQoS_FlowsToAdd
,
0
,
sizeof
(
struct
NR_SDAP_Config__mappedQoS_FlowsToAdd
));
SDAP_config
->
pdu_Session
=
ue_context_pP
->
ue_context
.
pduSession
[
iter
].
param
.
pdusession_id
;
if
(
enable_sdap
)
{
SDAP_config
->
sdap_HeaderDL
=
NR_SDAP_Config__sdap_HeaderDL_present
;
SDAP_config
->
sdap_HeaderUL
=
NR_SDAP_Config__sdap_HeaderUL_present
;
}
else
{
SDAP_config
->
sdap_HeaderDL
=
NR_SDAP_Config__sdap_HeaderDL_absent
;
SDAP_config
->
sdap_HeaderUL
=
NR_SDAP_Config__sdap_HeaderUL_absent
;
}
SDAP_config
->
defaultDRB
=
true
;
for
(
int
qos_flow_index
=
0
;
qos_flow_index
<
ue_context_pP
->
ue_context
.
pduSession
[
iter
].
param
.
nb_qos
;
qos_flow_index
++
)
{
NR_QFI_t
*
qfi
=
calloc
(
1
,
sizeof
(
NR_QFI_t
));
*
qfi
=
ue_context_pP
->
ue_context
.
pduSession
[
iter
].
param
.
qos
[
qos_flow_index
].
qfi
;
ASN_SEQUENCE_ADD
(
&
SDAP_config
->
mappedQoS_FlowsToAdd
->
list
,
qfi
);
}
SDAP_config
->
mappedQoS_FlowsToRelease
=
NULL
;
DRB_config
->
cnAssociation
->
choice
.
sdap_Config
=
SDAP_config
;
/* PDCP Configuration */
DRB_config
->
reestablishPDCP
=
NULL
;
DRB_config
->
recoverPDCP
=
NULL
;
DRB_config
->
pdcp_Config
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
));
DRB_config
->
pdcp_Config
->
drb
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
));
DRB_config
->
pdcp_Config
->
drb
->
discardTimer
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
discardTimer
));
*
DRB_config
->
pdcp_Config
->
drb
->
discardTimer
=
NR_PDCP_Config__drb__discardTimer_infinity
;
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeUL
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeUL
));
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeUL
=
NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits
;
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeDL
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeDL
));
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeDL
=
NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits
;
DRB_config
->
pdcp_Config
->
drb
->
headerCompression
.
present
=
NR_PDCP_Config__drb__headerCompression_PR_notUsed
;
DRB_config
->
pdcp_Config
->
drb
->
headerCompression
.
choice
.
notUsed
=
0
;
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
=
NULL
;
DRB_config
->
pdcp_Config
->
drb
->
statusReportRequired
=
NULL
;
DRB_config
->
pdcp_Config
->
drb
->
outOfOrderDelivery
=
NULL
;
DRB_config
->
pdcp_Config
->
moreThanOneRLC
=
NULL
;
DRB_config
->
pdcp_Config
->
t_Reordering
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
t_Reordering
));
*
DRB_config
->
pdcp_Config
->
t_Reordering
=
NR_PDCP_Config__t_Reordering_ms0
;
DRB_config
->
pdcp_Config
->
ext1
=
NULL
;
if
(
do_drb_integrity
)
{
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
));
*
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
=
NR_PDCP_Config__drb__integrityProtection_enabled
;
}
if
(
!
do_drb_ciphering
)
{
DRB_config
->
pdcp_Config
->
ext1
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
ext1
));
DRB_config
->
pdcp_Config
->
ext1
->
cipheringDisabled
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
ext1
->
cipheringDisabled
));
*
DRB_config
->
pdcp_Config
->
ext1
->
cipheringDisabled
=
NR_PDCP_Config__ext1__cipheringDisabled_true
;
}
return
DRB_config
;
}
//-----------------------------------------------------------------------------
void
rrc_gNB_generate_dedicatedRRCReconfiguration
(
...
...
@@ -765,9 +846,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
//-----------------------------------------------------------------------------
{
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
ctxt_pP
->
module_id
];
NR_DRB_ToAddMod_t
*
DRB_config
=
NULL
;
NR_SRB_ToAddMod_t
*
SRB2_config
=
NULL
;
NR_SDAP_Config_t
*
sdap_config
=
NULL
;
NR_DRB_ToAddModList_t
**
DRB_configList
=
NULL
;
NR_DRB_ToAddModList_t
**
DRB_configList2
=
NULL
;
NR_SRB_ToAddModList_t
**
SRB_configList2
=
NULL
;
...
...
@@ -823,97 +902,45 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
continue
;
}
DRB_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
));
DRB_config
->
drb_Identity
=
i
+
1
;
if
(
drb_id_to_setup_start
==
1
)
drb_id_to_setup_start
=
DRB_config
->
drb_Identity
;
nb_drb_to_setup
++
;
DRB_config
->
cnAssociation
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
->
cnAssociation
));
DRB_config
->
cnAssociation
->
present
=
NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config
;
// sdap_Config
sdap_config
=
CALLOC
(
1
,
sizeof
(
NR_SDAP_Config_t
));
memset
(
sdap_config
,
0
,
sizeof
(
NR_SDAP_Config_t
));
sdap_config
->
pdu_Session
=
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
pdusession_id
;
if
(
rrc
->
configuration
.
enable_sdap
)
{
sdap_config
->
sdap_HeaderDL
=
NR_SDAP_Config__sdap_HeaderDL_present
;
sdap_config
->
sdap_HeaderUL
=
NR_SDAP_Config__sdap_HeaderUL_present
;
}
else
{
sdap_config
->
sdap_HeaderDL
=
NR_SDAP_Config__sdap_HeaderDL_absent
;
sdap_config
->
sdap_HeaderUL
=
NR_SDAP_Config__sdap_HeaderUL_absent
;
}
sdap_config
->
defaultDRB
=
true
;
sdap_config
->
mappedQoS_FlowsToAdd
=
calloc
(
1
,
sizeof
(
struct
NR_SDAP_Config__mappedQoS_FlowsToAdd
));
memset
(
sdap_config
->
mappedQoS_FlowsToAdd
,
0
,
sizeof
(
struct
NR_SDAP_Config__mappedQoS_FlowsToAdd
));
for
(
qos_flow_index
=
0
;
qos_flow_index
<
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
nb_qos
;
qos_flow_index
++
)
{
NR_QFI_t
*
qfi
=
calloc
(
1
,
sizeof
(
NR_QFI_t
));
*
qfi
=
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
qos
[
qos_flow_index
].
qfi
;
ASN_SEQUENCE_ADD
(
&
sdap_config
->
mappedQoS_FlowsToAdd
->
list
,
qfi
);
}
sdap_config
->
mappedQoS_FlowsToRelease
=
NULL
;
DRB_config
->
cnAssociation
->
choice
.
sdap_Config
=
sdap_config
;
// pdcp_Config
DRB_config
->
reestablishPDCP
=
NULL
;
DRB_config
->
recoverPDCP
=
NULL
;
DRB_config
->
pdcp_Config
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
));
DRB_config
->
pdcp_Config
->
drb
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
));
DRB_config
->
pdcp_Config
->
drb
->
discardTimer
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
discardTimer
));
*
DRB_config
->
pdcp_Config
->
drb
->
discardTimer
=
NR_PDCP_Config__drb__discardTimer_infinity
;
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeUL
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeUL
));
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeUL
=
NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits
;
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeDL
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeDL
));
*
DRB_config
->
pdcp_Config
->
drb
->
pdcp_SN_SizeDL
=
NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits
;
DRB_config
->
pdcp_Config
->
drb
->
headerCompression
.
present
=
NR_PDCP_Config__drb__headerCompression_PR_notUsed
;
DRB_config
->
pdcp_Config
->
drb
->
headerCompression
.
choice
.
notUsed
=
0
;
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
=
NULL
;
DRB_config
->
pdcp_Config
->
drb
->
statusReportRequired
=
NULL
;
DRB_config
->
pdcp_Config
->
drb
->
outOfOrderDelivery
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
outOfOrderDelivery
));
*
DRB_config
->
pdcp_Config
->
drb
->
outOfOrderDelivery
=
NR_PDCP_Config__drb__outOfOrderDelivery_true
;
DRB_config
->
pdcp_Config
->
moreThanOneRLC
=
NULL
;
DRB_config
->
pdcp_Config
->
t_Reordering
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
t_Reordering
));
*
DRB_config
->
pdcp_Config
->
t_Reordering
=
NR_PDCP_Config__t_Reordering_ms20
;
DRB_config
->
pdcp_Config
->
ext1
=
NULL
;
if
(
rrc
->
security
.
do_drb_integrity
)
{
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
));
*
DRB_config
->
pdcp_Config
->
drb
->
integrityProtection
=
NR_PDCP_Config__drb__integrityProtection_enabled
;
}
if
(
!
rrc
->
security
.
do_drb_ciphering
)
{
DRB_config
->
pdcp_Config
->
ext1
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
ext1
));
DRB_config
->
pdcp_Config
->
ext1
->
cipheringDisabled
=
calloc
(
1
,
sizeof
(
*
DRB_config
->
pdcp_Config
->
ext1
->
cipheringDisabled
));
*
DRB_config
->
pdcp_Config
->
ext1
->
cipheringDisabled
=
NR_PDCP_Config__ext1__cipheringDisabled_true
;
}
for
(
long
drb_id_add
=
0
;
drb_id_add
<=
nb_drb_to_setup
;
drb_id_add
++
){
if
(
drb_id_add
>
MAX_DRB_PER_PDUSESSION
)
break
;
// Reference TS23501 Table 5.7.4-1: Standardized 5QI to QoS characteristics mapping
for
(
qos_flow_index
=
0
;
qos_flow_index
<
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
nb_qos
;
qos_flow_index
++
)
{
switch
(
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
qos
[
qos_flow_index
].
fiveQI
)
{
case
1
:
//100ms
case
2
:
//150ms
case
3
:
//50ms
case
4
:
//300ms
case
5
:
//100ms
case
6
:
//300ms
case
7
:
//100ms
case
8
:
//300ms
case
9
:
//300ms Video (Buffered Streaming)TCP-based (e.g., www, e-mail, chat, ftp, p2p file sharing, progressive video, etc.)
// TODO
break
;
NR_DRB_ToAddMod_t
*
DRB_config
=
generateDRB
(
ue_context_pP
,
i
,
drb_id_add
,
rrc
->
configuration
.
enable_sdap
,
rrc
->
security
.
do_drb_integrity
,
rrc
->
security
.
do_drb_ciphering
);
// Reference TS23501 Table 5.7.4-1: Standardized 5QI to QoS characteristics mapping
for
(
qos_flow_index
=
0
;
qos_flow_index
<
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
nb_qos
;
qos_flow_index
++
)
{
switch
(
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
qos
[
qos_flow_index
].
fiveQI
)
{
case
1
:
//100ms
case
2
:
//150ms
case
3
:
//50ms
case
4
:
//300ms
case
5
:
//100ms
case
6
:
//300ms
case
7
:
//100ms
case
8
:
//300ms
case
9
:
//300ms Video (Buffered Streaming)TCP-based (e.g., www, e-mail, chat, ftp, p2p file sharing, progressive video, etc.)
// TODO
break
;
default:
LOG_E
(
NR_RRC
,
"not supported 5qi %lu
\n
"
,
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
qos
[
qos_flow_index
].
fiveQI
);
ue_context_pP
->
ue_context
.
pduSession
[
i
].
status
=
PDU_SESSION_STATUS_FAILED
;
ue_context_pP
->
ue_context
.
pduSession
[
i
].
xid
=
xid
;
pdu_sessions_done
++
;
free
(
DRB_config
);
continue
;
default:
LOG_E
(
NR_RRC
,
"not supported 5qi %lu
\n
"
,
ue_context_pP
->
ue_context
.
pduSession
[
i
].
param
.
qos
[
qos_flow_index
].
fiveQI
);
ue_context_pP
->
ue_context
.
pduSession
[
i
].
status
=
PDU_SESSION_STATUS_FAILED
;
ue_context_pP
->
ue_context
.
pduSession
[
i
].
xid
=
xid
;
pdu_sessions_done
++
;
free
(
DRB_config
);
continue
;
}
}
}
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList
)
->
list
,
DRB_config
);
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList2
)
->
list
,
DRB_config
);
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList
)
->
list
,
DRB_config
);
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList2
)
->
list
,
DRB_config
);
}
ue_context_pP
->
ue_context
.
pduSession
[
i
].
status
=
PDU_SESSION_STATUS_DONE
;
ue_context_pP
->
ue_context
.
pduSession
[
i
].
xid
=
xid
;
...
...
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