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
6ced3cd8
Commit
6ced3cd8
authored
2 years ago
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implementation for F1 UE Context Setup+Response in monolithic
parent
10b996f5
Branches unavailable
2024.w06
2024.w05
2024.w04
2024.w03
2024.w02
2024.w01
2023.w51
2023.w50
2023.w49
2023.w48
2023.w47
2023.w45
2023.w43
2023.w42
2023.w41
2023.w40
2023.w39
2023.w38
2023.w37
2023.w36
2023.w34
2023.w33
2023.w32
2023.w31
2023.w30
2023.w29
2023.w28
2023.w27
2023.w26
2023.w25
2023.w24
2023.w23
2023.w22
2023.w21
2023.w20
2023.w19
2023.w18b
v2.1.0
v2.0.0
No related merge requests found
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
186 additions
and
346 deletions
+186
-346
openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
+118
-8
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
+26
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+42
-337
No files found.
openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
View file @
6ced3cd8
...
...
@@ -19,22 +19,132 @@
* contact@openairinterface.org
*/
#include <stdlib.h>
#include "mac_rrc_dl_handler.h"
#include "mac_proto.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
#include "openair2/RRC/NR/MESSAGES/asn1_msg.h"
static
NR_RLC_BearerConfig_t
*
get_bearerconfig_from_srb
(
const
f1ap_srb_to_be_setup_t
*
srb
)
{
long
priority
=
srb
->
srb_id
;
// high priority for SRB
e_NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration
bucket
=
NR_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms5
;
return
get_SRB_RLC_BearerConfig
(
srb
->
srb_id
,
priority
,
bucket
);
}
static
void
handle_ue_context_srbs_setup
(
const
f1ap_ue_context_setup_t
*
req
,
f1ap_ue_context_setup_t
*
resp
,
NR_CellGroupConfig_t
*
cellGroupConfig
)
{
DevAssert
(
req
!=
NULL
&&
resp
!=
NULL
&&
cellGroupConfig
!=
NULL
);
resp
->
srbs_to_be_setup_length
=
req
->
srbs_to_be_setup_length
;
resp
->
srbs_to_be_setup
=
calloc
(
req
->
srbs_to_be_setup_length
,
sizeof
(
*
resp
->
srbs_to_be_setup
));
AssertFatal
(
resp
->
srbs_to_be_setup
!=
NULL
,
"out of memory
\n
"
);
for
(
int
i
=
0
;
i
<
req
->
srbs_to_be_setup_length
;
i
++
)
{
f1ap_srb_to_be_setup_t
*
srb
=
&
req
->
srbs_to_be_setup
[
i
];
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
=
get_bearerconfig_from_srb
(
srb
);
nr_rlc_add_srb
(
req
->
rnti
,
srb
->
srb_id
,
rlc_BearerConfig
);
resp
->
srbs_to_be_setup
[
i
]
=
*
srb
;
int
ret
=
ASN_SEQUENCE_ADD
(
&
cellGroupConfig
->
rlc_BearerToAddModList
->
list
,
rlc_BearerConfig
);
DevAssert
(
ret
==
0
);
}
}
static
NR_RLC_BearerConfig_t
*
get_bearerconfig_from_drb
(
const
f1ap_drb_to_be_setup_t
*
drb
)
{
const
NR_RLC_Config_PR
rlc_conf
=
drb
->
rlc_mode
==
RLC_MODE_UM
?
NR_RLC_Config_PR_um_Bi_Directional
:
NR_RLC_Config_PR_am
;
long
priority
=
13
;
// hardcoded for the moment
return
get_DRB_RLC_BearerConfig
(
3
+
drb
->
drb_id
,
drb
->
drb_id
,
rlc_conf
,
priority
);
}
static
void
handle_ue_context_drbs_setup
(
const
f1ap_ue_context_setup_t
*
req
,
f1ap_ue_context_setup_t
*
resp
,
NR_CellGroupConfig_t
*
cellGroupConfig
)
{
DevAssert
(
req
!=
NULL
&&
resp
!=
NULL
&&
cellGroupConfig
!=
NULL
);
#include "NR_RRCSetup.h"
#include "NR_DL-CCCH-Message.h"
#include "NR_CellGroupConfig.h"
/* Note: the actual GTP tunnels are created in the F1AP breanch of
* ue_context_*_response() */
resp
->
drbs_to_be_setup_length
=
req
->
drbs_to_be_setup_length
;
resp
->
drbs_to_be_setup
=
calloc
(
req
->
drbs_to_be_setup_length
,
sizeof
(
*
resp
->
drbs_to_be_setup
));
AssertFatal
(
resp
->
drbs_to_be_setup
!=
NULL
,
"out of memory
\n
"
);
for
(
int
i
=
0
;
i
<
req
->
drbs_to_be_setup_length
;
i
++
)
{
f1ap_drb_to_be_setup_t
*
drb
=
&
req
->
drbs_to_be_setup
[
i
];
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
=
get_bearerconfig_from_drb
(
drb
);
nr_rlc_add_drb
(
req
->
rnti
,
drb
->
drb_id
,
rlc_BearerConfig
);
resp
->
drbs_to_be_setup
[
i
]
=
*
drb
;
int
ret
=
ASN_SEQUENCE_ADD
(
&
cellGroupConfig
->
rlc_BearerToAddModList
->
list
,
rlc_BearerConfig
);
DevAssert
(
ret
==
0
);
}
}
void
ue_context_setup_request
(
const
f1ap_ue_context_setup_t
*
req
)
{
(
void
)
req
;
abort
();
gNB_MAC_INST
*
mac
=
RC
.
nrmac
[
0
];
/* response has same type as request... */
f1ap_ue_context_setup_t
resp
=
{
.
gNB_CU_ue_id
=
req
->
gNB_CU_ue_id
,
.
gNB_DU_ue_id
=
req
->
gNB_DU_ue_id
,
.
rnti
=
req
->
rnti
,
};
if
(
req
->
cu_to_du_rrc_information
!=
NULL
)
{
AssertFatal
(
req
->
cu_to_du_rrc_information
->
cG_ConfigInfo
==
NULL
,
"CG-ConfigInfo not handled
\n
"
);
AssertFatal
(
req
->
cu_to_du_rrc_information
->
uE_CapabilityRAT_ContainerList
==
NULL
,
"UE capabilities not handled yet
\n
"
);
AssertFatal
(
req
->
cu_to_du_rrc_information
->
measConfig
==
NULL
,
"MeasConfig not handled
\n
"
);
}
NR_SCHED_LOCK
(
&
mac
->
sched_lock
);
NR_UE_info_t
*
UE
=
find_nr_UE
(
&
RC
.
nrmac
[
0
]
->
UE_info
,
req
->
rnti
);
AssertFatal
(
UE
!=
NULL
,
"did not find UE with RNTI %04x, but UE Context Setup Failed not implemented
\n
"
,
UE
->
rnti
);
if
(
req
->
srbs_to_be_setup_length
>
0
)
handle_ue_context_srbs_setup
(
req
,
&
resp
,
UE
->
CellGroup
);
if
(
req
->
drbs_to_be_setup_length
>
0
)
{
handle_ue_context_drbs_setup
(
req
,
&
resp
,
NULL
);
}
if
(
req
->
rrc_container
!=
NULL
)
nr_rlc_srb_recv_sdu
(
req
->
rnti
,
DCCH
,
req
->
rrc_container
,
req
->
rrc_container_length
);
//nr_mac_update_cellgroup()
resp
.
du_to_cu_rrc_information
=
calloc
(
1
,
sizeof
(
du_to_cu_rrc_information_t
));
AssertFatal
(
resp
.
du_to_cu_rrc_information
!=
NULL
,
"out of memory
\n
"
);
resp
.
du_to_cu_rrc_information
->
cellGroupConfig
=
calloc
(
1
,
1024
);
AssertFatal
(
resp
.
du_to_cu_rrc_information
->
cellGroupConfig
!=
NULL
,
"out of memory
\n
"
);
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CellGroupConfig
,
NULL
,
UE
->
CellGroup
,
resp
.
du_to_cu_rrc_information
->
cellGroupConfig
,
1024
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"Could not encode CellGroup, failed element %s
\n
"
,
enc_rval
.
failed_type
->
name
);
resp
.
du_to_cu_rrc_information
->
cellGroupConfig_length
=
(
enc_rval
.
encoded
+
7
)
>>
3
;
/* TODO: need to apply after UE context reconfiguration confirmed? */
process_CellGroup
(
UE
->
CellGroup
,
&
UE
->
UE_sched_ctrl
);
NR_SCHED_UNLOCK
(
&
mac
->
sched_lock
);
/* some sanity checks, since we use the same type for request and response */
DevAssert
(
resp
.
cu_to_du_rrc_information
==
NULL
);
DevAssert
(
resp
.
du_to_cu_rrc_information
!=
NULL
);
DevAssert
(
resp
.
rrc_container
==
NULL
&&
resp
.
rrc_container_length
==
0
);
mac
->
mac_rrc
.
ue_context_setup_response
(
req
,
&
resp
);
/* free the memory we allocated above */
free
(
resp
.
srbs_to_be_setup
);
free
(
resp
.
drbs_to_be_setup
);
free
(
resp
.
du_to_cu_rrc_information
->
cellGroupConfig
);
free
(
resp
.
du_to_cu_rrc_information
);
}
int
dl_rrc_message
(
module_id_t
module_id
,
const
f1ap_dl_rrc_message_t
*
dl_rrc
)
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
View file @
6ced3cd8
...
...
@@ -26,8 +26,33 @@
static
void
ue_context_setup_response_direct
(
const
f1ap_ue_context_setup_t
*
req
,
const
f1ap_ue_context_setup_t
*
resp
)
{
DevAssert
(
req
->
drbs_to_be_setup_length
==
resp
->
drbs_to_be_setup_length
);
AssertFatal
(
req
->
drbs_to_be_setup_length
==
0
,
"not implemented
\n
"
);
(
void
)
req
;
/* we don't need the request -- it is to set up GTP in F1 case */
AssertFatal
(
false
,
"not implemented
\n
"
);
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_UE_CONTEXT_SETUP_RESP
);
f1ap_ue_context_setup_t
*
f1ap_msg
=
&
F1AP_UE_CONTEXT_SETUP_RESP
(
msg
);
/* copy all fields, but reallocate memory buffers! */
*
f1ap_msg
=
*
resp
;
if
(
resp
->
srbs_to_be_setup_length
>
0
)
{
DevAssert
(
resp
->
srbs_to_be_setup
!=
NULL
);
f1ap_msg
->
srbs_to_be_setup_length
=
resp
->
srbs_to_be_setup_length
;
f1ap_msg
->
srbs_to_be_setup
=
calloc
(
f1ap_msg
->
srbs_to_be_setup_length
,
sizeof
(
*
f1ap_msg
->
srbs_to_be_setup
));
for
(
int
i
=
0
;
i
<
f1ap_msg
->
srbs_to_be_setup_length
;
++
i
)
f1ap_msg
->
srbs_to_be_setup
[
i
]
=
resp
->
srbs_to_be_setup
[
i
];
}
f1ap_msg
->
du_to_cu_rrc_information
=
malloc
(
sizeof
(
*
resp
->
du_to_cu_rrc_information
));
AssertFatal
(
f1ap_msg
->
du_to_cu_rrc_information
!=
NULL
,
"out of memory
\n
"
);
f1ap_msg
->
du_to_cu_rrc_information_length
=
resp
->
du_to_cu_rrc_information_length
;
du_to_cu_rrc_information_t
*
du2cu
=
f1ap_msg
->
du_to_cu_rrc_information
;
du2cu
->
cellGroupConfig_length
=
resp
->
du_to_cu_rrc_information
->
cellGroupConfig_length
;
du2cu
->
cellGroupConfig
=
calloc
(
du2cu
->
cellGroupConfig_length
,
sizeof
(
*
du2cu
->
cellGroupConfig
));
AssertFatal
(
du2cu
->
cellGroupConfig
!=
NULL
,
"out of memory
\n
"
);
memcpy
(
du2cu
->
cellGroupConfig
,
resp
->
du_to_cu_rrc_information
->
cellGroupConfig
,
du2cu
->
cellGroupConfig_length
);
itti_send_msg_to_task
(
TASK_RRC_GNB
,
0
,
msg
);
}
static
void
initial_ul_rrc_message_transfer_direct
(
module_id_t
module_id
,
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB.c
View file @
6ced3cd8
This diff is collapsed.
Click to expand it.
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