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
4e18ce02
Commit
4e18ce02
authored
Jul 08, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/remove-redundant-stored-drb-list' into integration_2023_w27
parents
6919f290
4deb5833
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
193 additions
and
231 deletions
+193
-231
executables/nr-cuup.c
executables/nr-cuup.c
+2
-1
openair2/E1AP/e1ap_api.c
openair2/E1AP/e1ap_api.c
+2
-1
openair2/RRC/NR/cucp_cuup_direct.c
openair2/RRC/NR/cucp_cuup_direct.c
+9
-5
openair2/RRC/NR/cucp_cuup_e1ap.c
openair2/RRC/NR/cucp_cuup_e1ap.c
+2
-7
openair2/RRC/NR/cucp_cuup_if.h
openair2/RRC/NR/cucp_cuup_if.h
+1
-1
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+0
-3
openair2/RRC/NR/nr_rrc_proto.h
openair2/RRC/NR/nr_rrc_proto.h
+1
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+171
-204
openair2/RRC/NR/rrc_gNB_NGAP.c
openair2/RRC/NR/rrc_gNB_NGAP.c
+1
-4
openair2/RRC/NR/rrc_gNB_radio_bearers.c
openair2/RRC/NR/rrc_gNB_radio_bearers.c
+4
-4
No files found.
executables/nr-cuup.c
View file @
4e18ce02
...
...
@@ -111,9 +111,10 @@ f1ap_cudu_inst_t *getCxt(F1_t isCU, instance_t instanceP)
return
NULL
;
}
void
fill_DRB_configList
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_gNB_ue_context_t
*
ue_context_pP
,
uint8_t
xid
)
NR_DRB_ToAddModList_t
*
fill_DRB_configList
(
gNB_RRC_UE_t
*
ue
)
{
abort
();
return
NULL
;
}
int
main
(
int
argc
,
char
**
argv
)
...
...
openair2/E1AP/e1ap_api.c
View file @
4e18ce02
...
...
@@ -114,7 +114,8 @@ static int drb_config_N3gtpu_create(e1ap_bearer_setup_req_t * const req,
// Create N3 tunnel
int
ret
=
gtpv1u_create_ngu_tunnel
(
instance
,
&
create_tunnel_req
,
create_tunnel_resp
,
nr_pdcp_data_req_drb
,
sdap_data_req
);
if
(
ret
!=
0
)
{
LOG_E
(
NR_RRC
,
"rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ : gtpv1u_create_ngu_tunnel failed,start to release UE id %ld
\n
"
,
LOG_E
(
NR_RRC
,
"drb_config_N3gtpu_create=>gtpv1u_create_ngu_tunnel failed, cannot set up GTP tunnel for data transmissions of UE %ld
\n
"
,
create_tunnel_req
.
ue_id
);
return
ret
;
}
...
...
openair2/RRC/NR/cucp_cuup_direct.c
View file @
4e18ce02
...
...
@@ -125,7 +125,8 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
sdap_data_req
);
if
(
ret
!=
0
)
{
LOG_E
(
NR_RRC
,
"rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ : gtpv1u_create_ngu_tunnel failed,start to release UE rnti %ld
\n
"
,
LOG_E
(
NR_RRC
,
"drb_config_gtpu_create=>gtpv1u_create_ngu_tunnel failed, cannot set up GTP tunnel for data transmissions of UE %ld
\n
"
,
create_tunnel_req
.
ue_id
);
return
ret
;
}
...
...
@@ -160,14 +161,13 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
return
ret
;
}
static
void
cucp_cuup_bearer_context_setup_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
static
void
cucp_cuup_bearer_context_setup_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
)
{
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
instance
],
req
->
rnti
);
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
protocol_ctxt_t
ctxt
=
{
0
};
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
GNB_FLAG_YES
,
UE
->
rnti
,
0
,
0
,
0
);
fill_DRB_configList
(
&
ctxt
,
ue_context_p
,
xid
);
e1ap_bearer_setup_resp_t
resp
=
{
0
};
resp
.
numPDUSessions
=
req
->
numPDUSessions
;
for
(
int
i
=
0
;
i
<
resp
.
numPDUSessions
;
++
i
)
{
...
...
@@ -184,8 +184,11 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
ctxt
.
module_id
];
// GTP tunnel for UL
int
ret
=
drb_config_gtpu_create
(
&
ctxt
,
ue_context_p
,
req
,
UE
->
DRB_configList
,
rrc
->
e1_inst
);
NR_DRB_ToAddModList_t
*
DRB_configList
=
fill_DRB_configList
(
UE
);
int
ret
=
drb_config_gtpu_create
(
&
ctxt
,
ue_context_p
,
req
,
DRB_configList
,
rrc
->
e1_inst
);
if
(
ret
<
0
)
AssertFatal
(
false
,
"Unable to configure DRB or to create GTP Tunnel
\n
"
);
// the code is very badly organized, it is not possible here to call freeDRBlist()
ASN_STRUCT_FREE
(
asn_DEF_NR_DRB_ToAddModList
,
DRB_configList
);
// Used to store teids: if monolithic, will simply be NULL
if
(
!
NODE_IS_CU
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
node_type
))
{
...
...
@@ -203,7 +206,8 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
prepare_and_send_ue_context_modification_f1
(
ue_context_p
,
&
resp
);
}
static
void
cucp_cuup_bearer_context_mod_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
{
static
void
cucp_cuup_bearer_context_mod_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
)
{
// only update GTP tunnels if it is really a CU
if
(
!
NODE_IS_CU
(
RC
.
nrrrc
[
0
]
->
node_type
))
return
;
...
...
openair2/RRC/NR/cucp_cuup_e1ap.c
View file @
4e18ce02
...
...
@@ -36,13 +36,8 @@
extern
RAN_CONTEXT_t
RC
;
static
void
cucp_cuup_bearer_context_setup_e1ap
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
static
void
cucp_cuup_bearer_context_setup_e1ap
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
)
{
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
instance
],
req
->
rnti
);
protocol_ctxt_t
ctxt
=
{
0
};
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
GNB_FLAG_YES
,
ue_context_p
->
ue_context
.
rnti
,
0
,
0
,
0
);
fill_DRB_configList
(
&
ctxt
,
ue_context_p
,
xid
);
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_CUCP_E1
,
instance
,
E1AP_BEARER_CONTEXT_SETUP_REQ
);
e1ap_bearer_setup_req_t
*
bearer_req
=
&
E1AP_BEARER_CONTEXT_SETUP_REQ
(
msg_p
);
memcpy
(
bearer_req
,
req
,
sizeof
(
e1ap_bearer_setup_req_t
));
...
...
@@ -50,7 +45,7 @@ static void cucp_cuup_bearer_context_setup_e1ap(e1ap_bearer_setup_req_t *const r
itti_send_msg_to_task
(
TASK_CUCP_E1
,
instance
,
msg_p
);
}
static
void
cucp_cuup_bearer_context_mod_e1ap
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
static
void
cucp_cuup_bearer_context_mod_e1ap
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_CUCP_E1
,
instance
,
E1AP_BEARER_CONTEXT_MODIFICATION_REQ
);
e1ap_bearer_setup_req_t
*
req_msg
=
&
E1AP_BEARER_CONTEXT_SETUP_REQ
(
msg
);
...
...
openair2/RRC/NR/cucp_cuup_if.h
View file @
4e18ce02
...
...
@@ -27,7 +27,7 @@
struct
e1ap_bearer_setup_req_s
;
struct
e1ap_bearer_setup_resp_s
;
typedef
void
(
*
cucp_cuup_bearer_context_setup_func_t
)(
struct
e1ap_bearer_setup_req_s
*
const
req
,
instance_t
instance
,
uint8_t
xid
);
typedef
void
(
*
cucp_cuup_bearer_context_setup_func_t
)(
struct
e1ap_bearer_setup_req_s
*
const
req
,
instance_t
instance
);
struct
gNB_RRC_INST_s
;
void
cucp_cuup_message_transfer_direct_init
(
struct
gNB_RRC_INST_s
*
rrc
);
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
4e18ce02
...
...
@@ -237,9 +237,6 @@ typedef enum {
typedef
struct
gNB_RRC_UE_s
{
uint8_t
primaryCC_id
;
NR_DRB_ToAddModList_t
*
DRB_configList
;
NR_DRB_ToAddModList_t
*
DRB_configList2
[
NR_RRC_TRANSACTION_IDENTIFIER_NUMBER
];
NR_DRB_ToReleaseList_t
*
DRB_Release_configList2
[
NR_RRC_TRANSACTION_IDENTIFIER_NUMBER
];
drb_t
established_drbs
[
NGAP_MAX_DRBS_PER_UE
];
uint8_t
DRB_active
[
NGAP_MAX_DRBS_PER_UE
];
...
...
openair2/RRC/NR/nr_rrc_proto.h
View file @
4e18ce02
...
...
@@ -156,7 +156,7 @@ void ue_cxt_mod_send_e1ap(MessageDef *msg,
void
ue_cxt_mod_direct
(
MessageDef
*
msg
,
instance_t
instance
);
void
fill_DRB_configList
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_gNB_ue_context_t
*
ue_context_pP
,
uint8_t
xid
);
NR_DRB_ToAddModList_t
*
fill_DRB_configList
(
gNB_RRC_UE_t
*
ue
);
void
prepare_and_send_ue_context_modification_f1
(
rrc_gNB_ue_context_t
*
ue_context_p
,
e1ap_bearer_setup_resp_t
*
e1ap_resp
);
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
4e18ce02
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB_NGAP.c
View file @
4e18ce02
...
...
@@ -278,9 +278,6 @@ static void fill_qos(NGAP_QosFlowSetupRequestList_t *qos, pdusession_t *session)
static
int
decodePDUSessionResourceSetup
(
pdusession_t
*
session
)
{
NGAP_PDUSessionResourceSetupRequestTransfer_t
*
pdusessionTransfer
=
NULL
;
for
(
int
i
=
0
;
i
<
session
->
pdusessionTransfer
.
length
;
i
++
)
printf
(
"%02x:"
,
session
->
pdusessionTransfer
.
buffer
[
i
]);
printf
(
"
\n
"
);
asn_codec_ctx_t
st
=
{.
max_stack_size
=
100
*
1000
};
asn_dec_rval_t
dec_rval
=
aper_decode
(
&
st
,
&
asn_DEF_NGAP_PDUSessionResourceSetupRequestTransfer
,
(
void
**
)
&
pdusessionTransfer
,
session
->
pdusessionTransfer
.
buffer
,
session
->
pdusessionTransfer
.
length
,
0
,
0
);
...
...
@@ -819,7 +816,7 @@ void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(MessageDef *msg_p, instance_t ins
}
int
xid
=
rrc_gNB_get_next_transaction_identifier
(
instance
);
UE
->
xids
[
xid
]
=
RRC_PDUSESSION_ESTABLISH
;
rrc
->
cucp_cuup
.
bearer_context_setup
(
&
bearer_req
,
instance
,
xid
);
rrc
->
cucp_cuup
.
bearer_context_setup
(
&
bearer_req
,
instance
);
return
;
}
...
...
openair2/RRC/NR/rrc_gNB_radio_bearers.c
View file @
4e18ce02
...
...
@@ -147,15 +147,15 @@ uint8_t next_available_drb(gNB_RRC_UE_t *ue, rrc_pdu_session_param_t *pdusession
{
uint8_t
drb_id
;
if
(
!
is_gbr
)
{
/* Find if Non-GBR DRB exists in the same PDU Session */
if
(
0
/*!is_gbr*/
)
{
/* Find if Non-GBR DRB exists in the same PDU Session */
for
(
drb_id
=
0
;
drb_id
<
NGAP_MAX_DRBS_PER_UE
;
drb_id
++
)
if
(
pdusession
->
param
.
used_drbs
[
drb_id
]
==
DRB_ACTIVE_NONGBR
)
return
drb_id
+
1
;
return
drb_id
+
1
;
}
/* GBR Flow or a Non-GBR DRB does not exist in the same PDU Session, find an available DRB */
for
(
drb_id
=
0
;
drb_id
<
NGAP_MAX_DRBS_PER_UE
;
drb_id
++
)
if
(
ue
->
DRB_active
[
drb_id
]
==
DRB_INACTIVE
)
return
drb_id
+
1
;
if
(
ue
->
DRB_active
[
drb_id
]
==
DRB_INACTIVE
)
return
drb_id
+
1
;
/* From this point, we need to handle the case that all DRBs are already used by the UE. */
LOG_E
(
RRC
,
"Error - All the DRBs are used - Handle this
\n
"
);
return
DRB_INACTIVE
;
...
...
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