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
f8607ae6
Commit
f8607ae6
authored
Jun 10, 2024
by
Vijitha M
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Xn Handover request/ack- split
parent
a108c031
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
676 additions
and
103 deletions
+676
-103
common/ngran_types.h
common/ngran_types.h
+1
-0
common/openairinterface5g_limits.h
common/openairinterface5g_limits.h
+1
-0
openair2/COMMON/f1ap_messages_types.h
openair2/COMMON/f1ap_messages_types.h
+7
-0
openair2/COMMON/xnap_messages_types.h
openair2/COMMON/xnap_messages_types.h
+9
-6
openair2/F1AP/f1ap_cu_ue_context_management.c
openair2/F1AP/f1ap_cu_ue_context_management.c
+1
-0
openair2/F1AP/f1ap_du_ue_context_management.c
openair2/F1AP/f1ap_du_ue_context_management.c
+1
-1
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+28
-0
openair2/RRC/NR/MESSAGES/asn1_msg.h
openair2/RRC/NR/MESSAGES/asn1_msg.h
+1
-0
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+3
-0
openair2/RRC/NR/nr_rrc_extern.h
openair2/RRC/NR/nr_rrc_extern.h
+2
-0
openair2/RRC/NR/nr_rrc_proto.h
openair2/RRC/NR/nr_rrc_proto.h
+2
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+368
-21
openair2/RRC/NR/rrc_gNB_radio_bearers.c
openair2/RRC/NR/rrc_gNB_radio_bearers.c
+19
-0
openair2/RRC/NR/rrc_gNB_radio_bearers.h
openair2/RRC/NR/rrc_gNB_radio_bearers.h
+1
-1
openair2/XNAP/xnap_gNB_generate_messages.c
openair2/XNAP/xnap_gNB_generate_messages.c
+165
-21
openair2/XNAP/xnap_gNB_interface_management.c
openair2/XNAP/xnap_gNB_interface_management.c
+40
-21
openair2/XNAP/xnap_gNB_task.c
openair2/XNAP/xnap_gNB_task.c
+10
-15
openair2/XNAP/xnap_ids.c
openair2/XNAP/xnap_ids.c
+14
-14
openair2/XNAP/xnap_ids.h
openair2/XNAP/xnap_ids.h
+3
-2
No files found.
common/ngran_types.h
View file @
f8607ae6
...
...
@@ -56,4 +56,5 @@ typedef enum { CPtype = 0, UPtype } E1_t;
#define GTPV1_U_PORT_NUMBER (2152)
typedef
enum
{
non_dynamic
,
dynamic
}
fiveQI_type_t
;
#define maxSRBs 4
#endif
common/openairinterface5g_limits.h
View file @
f8607ae6
...
...
@@ -12,6 +12,7 @@
# define NUMBER_OF_SRS_MAX 16
# define NUMBER_OF_SCH_STATS_MAX 16
#define NUMBER_OF_DU_PER_CU_MAX 2
#define MAX_MANAGED_ENB_PER_MOBILE 2
#define MAX_MANAGED_GNB_PER_MOBILE 2
...
...
openair2/COMMON/f1ap_messages_types.h
View file @
f8607ae6
...
...
@@ -423,6 +423,12 @@ typedef struct f1ap_ue_context_setup_s {
ReconfigurationCompl_t
ReconfigComplOutcome
;
uint8_t
*
rrc_container
;
int
rrc_container_length
;
uint16_t
mcc
;
uint16_t
mnc
;
uint8_t
mnc_digit_length
;
uint16_t
*
crnti
;
uint8_t
*
transmission_action_indicator
;
}
f1ap_ue_context_setup_t
,
f1ap_ue_context_modif_req_t
,
f1ap_ue_context_modif_resp_t
;
typedef
enum
F1ap_Cause_e
{
...
...
@@ -439,6 +445,7 @@ typedef struct f1ap_ue_context_modif_required_t {
du_to_cu_rrc_information_t
*
du_to_cu_rrc_information
;
f1ap_Cause_t
cause
;
long
cause_value
;
uint8_t
*
transmission_action_indicator
;
//not sure
}
f1ap_ue_context_modif_required_t
;
typedef
struct
f1ap_ue_context_modif_confirm_t
{
...
...
openair2/COMMON/xnap_messages_types.h
View file @
f8607ae6
...
...
@@ -269,9 +269,10 @@ typedef struct xnap_ue_context_info_s {
}
xnap_ue_context_info_t
;
typedef
struct
xnap_handover_req_s
{
int
rnti
;
/* used for RRC->XNAP in source */
int
xn_id
;
/* used for XNAP->RRC in target*/
uint32_t
ng_node_ue_xnap_id
;
int
ue_id
;
/* used for RRC->XNAP in source */
//int xn_id; /* used for XNAP->RRC in target*/
uint32_t
s_ng_node_ue_xnap_id
;
uint32_t
t_ng_node_ue_xnap_id
;
xnap_plmn_t
plmn_id
;
xnap_Cause_t
cause_type
;
xnap_ngran_cgi_t
target_cgi
;
...
...
@@ -280,14 +281,16 @@ typedef struct xnap_handover_req_s {
}
xnap_handover_req_t
;
typedef
struct
xnap_handover_req_ack_s
{
uint32_t
ng_node_ue_xnap
_id
;
int
rnti
;
int
xn_id_target
;
int
ue
_id
;
uint32_t
s_ng_node_ue_xnap_id
;
uint32_t
t_ng_node_ue_xnap_id
;
xnap_ngran_cgi_t
target_cgi
;
xnap_plmn_t
plmn_id
;
xnap_guami_t
guami
;
xnap_ue_context_info_t
ue_context
;
xnap_uehistory_info_t
uehistory_info
;
uint8_t
rrc_buffer
[
8192
];
int
rrc_buffer_size
;
}
xnap_handover_req_ack_t
;
typedef
struct
xnap_handover_req_failure_s
{
...
...
openair2/F1AP/f1ap_cu_ue_context_management.c
View file @
f8607ae6
...
...
@@ -574,6 +574,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(sctp_assoc_t assoc_id, f1ap_ue_context_setu
// return -1;
// }
LOG_D
(
F1AP
,
"F1AP UEContextSetupRequest Encoded %u bits
\n
"
,
len
);
LOG_I
(
F1AP
,
"F1AP UEContextSetupRequest Encoded %u bits
\n
"
,
len
);
f1ap_itti_send_sctp_data_req
(
assoc_id
,
buffer
,
len
);
return
0
;
}
...
...
openair2/F1AP/f1ap_du_ue_context_management.c
View file @
f8607ae6
...
...
@@ -288,7 +288,7 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance, sctp_assoc_t assoc_i
}
else
{
LOG_W
(
F1AP
,
"can't find RRCContainer in UEContextSetupRequestIEs by id %ld
\n
"
,
F1AP_ProtocolIE_ID_id_RRCContainer
);
}
LOG_I
(
F1AP
,
"F1AP UE context setup handled in DU
\n
"
);
ue_context_setup_request
(
f1ap_ue_context_setup_req
);
return
0
;
}
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
f8607ae6
...
...
@@ -146,6 +146,7 @@
#include "cmake_targets/ran_build/build/openair2/RRC/NR/MESSAGES/NR_HandoverPreparationInformation.h"
#include "cmake_targets/ran_build/build/openair2/RRC/NR/MESSAGES/NR_HandoverPreparationInformation-IEs.h"
#include "cmake_targets/ran_build/build/openair2/RRC/NR/MESSAGES/NR_UE-CapabilityRAT-Container.h"
#include "NR_HandoverCommand.h"
//#define XER_PRINT
...
...
@@ -1273,3 +1274,30 @@ int do_NRHandoverPreparation(char *ho_buf, int ho_size, NR_UE_NR_Capability_t *
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
int16_t
do_NR_HandoverCommand
(
uint8_t
*
ho_buf
,
int16_t
ho_size
,
uint8_t
*
rrc_buffer
,
int16_t
rrc_size
)
{
NR_HandoverCommand_t
*
ho_command
=
calloc
(
1
,
sizeof
(
NR_HandoverCommand_t
));
ho_command
->
criticalExtensions
.
present
=
NR_HandoverCommand__criticalExtensions_PR_c1
;
ho_command
->
criticalExtensions
.
choice
.
c1
=
calloc
(
1
,
sizeof
(
struct
NR_HandoverCommand__criticalExtensions__c1
));
ho_command
->
criticalExtensions
.
choice
.
c1
->
present
=
NR_HandoverCommand__criticalExtensions__c1_PR_handoverCommand
;
ho_command
->
criticalExtensions
.
choice
.
c1
->
choice
.
handoverCommand
=
calloc
(
1
,
sizeof
(
struct
NR_HandoverCommand_IEs
));
AssertFatal
(
OCTET_STRING_fromBuf
(
&
ho_command
->
criticalExtensions
.
choice
.
c1
->
choice
.
handoverCommand
->
handoverCommandMessage
,
(
char
*
)
rrc_buffer
,
rrc_size
)
!=
-
1
,
"fatal: OCTET_STRING_fromBuf failed
\n
"
);
xer_fprint
(
stdout
,
&
asn_DEF_NR_HandoverCommand
,
ho_command
);
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_HandoverCommand
,
NULL
,
ho_command
,
ho_buf
,
ho_size
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
openair2/RRC/NR/MESSAGES/asn1_msg.h
View file @
f8607ae6
...
...
@@ -148,5 +148,6 @@ void free_defaultMeasConfig(NR_MeasConfig_t *mc);
uint8_t
do_NR_Paging
(
uint8_t
Mod_id
,
uint8_t
*
buffer
,
uint32_t
tmsi
);
int
do_NRHandoverPreparation
(
char
*
ho_buf
,
int
ho_size
,
NR_UE_NR_Capability_t
*
ue_nr_cap
,
int
rrc_size
);
int16_t
do_NR_HandoverCommand
(
uint8_t
*
ho_buf
,
int16_t
ho_size
,
uint8_t
*
rrc_buffer
,
int16_t
rrc_size
);
#endif
/* __RRC_NR_MESSAGES_ASN1_MSG__H__ */
openair2/RRC/NR/nr_rrc_defs.h
View file @
f8607ae6
...
...
@@ -251,6 +251,7 @@ typedef enum {
typedef
struct
gNB_RRC_UE_s
{
drb_t
established_drbs
[
MAX_DRBS_PER_UE
];
uint8_t
DRB_active
[
MAX_DRBS_PER_UE
];
NR_DRB_ToReleaseList_t
*
DRB_ReleaseList
;
NR_SRB_INFO_TABLE_ENTRY
Srb
[
NR_NUM_SRB
];
...
...
@@ -437,6 +438,8 @@ typedef struct gNB_RRC_INST_s {
RB_HEAD
(
rrc_neigh_cell_tree
,
nr_rrc_neighcells_container_t
)
neighs
;
// Neighbouring cells, indexed by assoc_id
size_t
num_neighs
;
instance_t
f1_instance
;
}
gNB_RRC_INST
;
#include "nr_rrc_proto.h" //should be put here otherwise compilation error
...
...
openair2/RRC/NR/nr_rrc_extern.h
View file @
f8607ae6
...
...
@@ -34,5 +34,7 @@
#include "COMMON/mac_rrc_primitives.h"
#include "LAYER2/RLC/rlc.h"
#include "openair2/RRC/common.h"
extern
uint16_t
ho_rnti_map
[
NUMBER_OF_DU_PER_CU_MAX
][
4
];
void
openair_rrc_gNB_configuration
(
gNB_RRC_INST
*
rrc
,
gNB_RrcConfigurationReq
*
configuration
);
#endif
openair2/RRC/NR/nr_rrc_proto.h
View file @
f8607ae6
...
...
@@ -99,7 +99,8 @@ rrc_gNB_generate_RRCRelease(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_gNB_ue_context_t
*
const
ue_context_pP
);
void
rrc_gNB_process_handoverprepinfo
(
sctp_assoc_t
assoc_id
,
xnap_handover_req_t
*
m
);
void
rrc_gNB_process_handover_req_ack
(
sctp_assoc_t
assoc_id
,
xnap_handover_req_ack_t
*
m
);
/**\brief RRC eNB task.
\param args_p Pointer on arguments to start the task. */
void
*
rrc_gnb_task
(
void
*
args_p
);
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
f8607ae6
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB_radio_bearers.c
View file @
f8607ae6
...
...
@@ -184,6 +184,25 @@ uint8_t get_next_available_drb_id(gNB_RRC_UE_t *ue)
return
DRB_INACTIVE
;
}
uint8_t
next_available_drb
(
gNB_RRC_UE_t
*
ue
,
rrc_pdu_session_param_t
*
pdusession
,
bool
is_gbr
)
{
uint8_t
drb_id
;
if
(
0
/*!is_gbr*/
)
{
/* Find if Non-GBR DRB exists in the same PDU Session */
for
(
drb_id
=
0
;
drb_id
<
MAX_DRBS_PER_UE
;
drb_id
++
)
if
(
pdusession
->
param
.
used_drbs
[
drb_id
]
==
DRB_ACTIVE_NONGBR
)
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
<
MAX_DRBS_PER_UE
;
drb_id
++
)
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
;
}
bool
drb_is_active
(
gNB_RRC_UE_t
*
ue
,
uint8_t
drb_id
)
{
drb_t
*
drb
=
get_drb
(
ue
,
drb_id
);
...
...
openair2/RRC/NR/rrc_gNB_radio_bearers.h
View file @
f8607ae6
...
...
@@ -60,7 +60,7 @@ drb_t *generateDRB(gNB_RRC_UE_t *ue,
/// @brief return the next available (inactive) DRB ID of UE ue
uint8_t
get_next_available_drb_id
(
gNB_RRC_UE_t
*
ue
);
uint8_t
next_available_drb
(
gNB_RRC_UE_t
*
ue
,
rrc_pdu_session_param_t
*
pdusession
,
bool
is_gbr
);
/// @brief check if DRB with ID drb_id of UE ue is active
bool
drb_is_active
(
gNB_RRC_UE_t
*
ue
,
uint8_t
drb_id
);
...
...
openair2/XNAP/xnap_gNB_generate_messages.c
View file @
f8607ae6
This diff is collapsed.
Click to expand it.
openair2/XNAP/xnap_gNB_interface_management.c
View file @
f8607ae6
...
...
@@ -344,7 +344,7 @@ int xnap_gNB_handle_handover_request(instance_t instance, sctp_assoc_t assoc_id,
xnap_gNB_instance_t
*
instance_p
;
xnap_id_manager
*
id_manager
;
//xnap_gNB_data_t *xnap_gNB_data;
int
ue
_id
;
int
xn
_id
;
instance_p
=
xnap_gNB_get_instance
(
instance
);
...
...
@@ -372,25 +372,26 @@ int xnap_gNB_handle_handover_request(instance_t instance, sctp_assoc_t assoc_id,
LOG_E
(
XNAP
,
"XNAP_ProtocolIE_ID_id_sourceNG_RANnodeUEXnAPID, is NULL pointer
\n
"
);
return
-
1
;
}
else
{
LOG_I
(
XNAP
,
"ue xnap id %d
\n
"
,
req
->
ng_node_ue_xnap_id
);
req
->
s_ng_node_ue_xnap_id
=
ie
->
value
.
choice
.
NG_RANnodeUEXnAPID
;
LOG_I
(
XNAP
,
"ue xnap id %d
\n
"
,
req
->
s_ng_node_ue_xnap_id
);
}
id_manager
=
&
instance_p
->
id_manager
;
xnap_id_manager_init
(
id_manager
);
ue
_id
=
xnap_allocate_new_id
(
id_manager
);
xn
_id
=
xnap_allocate_new_id
(
id_manager
);
if
(
ue
_id
==
-
1
)
{
if
(
xn
_id
==
-
1
)
{
LOG_E
(
XNAP
,
"could not allocate a new XNAP UE ID
\n
"
);
/* TODO: cancel handover: send HO preparation failure to source eNB */
exit
(
1
);
}
xnap_set_ids
(
&
instance_p
->
id_manager
,
ue_id
,
0
,
ie
->
value
.
choice
.
NG_RANnodeUEXnAPID
,
ue
_id
);
xnap_id_set_state
(
&
instance_p
->
id_manager
,
ue
_id
,
XNID_STATE_TARGET
);
//xnap_set_ids(&instance_p->id_manager, xn_id , 0, req->s_ng_node_ue_xnap_id, xn
_id);
//xnap_id_set_state(&instance_p->id_manager, xn
_id, XNID_STATE_TARGET);
XNAP_HANDOVER_REQ
(
message_p
).
xn_id
=
ue
_id
;
req
->
t_ng_node_ue_xnap_id
=
xn
_id
;
/*// Target Cell Global ID
XNAP_FIND_PROTOCOLIE_BY_ID(XNAP_HandoverRequest_IEs_t, ie, xnHandoverRequest, XNAP_ProtocolIE_ID_id_TargetCellCGI,true);
...
...
@@ -428,27 +429,26 @@ int xnap_gNB_handle_handover_response(instance_t instance, sctp_assoc_t assoc_id
XNAP_HandoverRequestAcknowledge_t
*
xnHandoverRequestAck
;
XNAP_HandoverRequestAcknowledge_IEs_t
*
ie
;
xnap_gNB_instance_t
*
instance_p
;
instance_p
=
xnap_gNB_get_instance
(
instance
);
instance_p
=
xnap_gNB_get_instance
(
0
);
/
/
xnap_id_manager *id_manager;
//
xnap_gNB_data_t *xnap_gNB_data;
int
ue_id
;
/
*
xnap_id_manager *id_manager;
xnap_gNB_data_t *xnap_gNB_data;
int ue_id;
int id_source;
int id_target;
int
rnti
;
int rnti;*/
DevAssert
(
pdu
!=
NULL
);
xnHandoverRequestAck
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
HandoverRequestAcknowledge
;
/*
if (stream == 0) {
LOG_E(XNAP,"Received new xn handover response on stream == 0\n");
return 0;
}
*/
MessageDef
*
message_p
=
itti_alloc_new_message
(
TASK_XNAP
,
0
,
XNAP_HANDOVER_REQ_ACK
);
message_p
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
//xnap_handover_req_ack_t *req
= &XNAP_HANDOVER_REQ_ACK(message_p);
xnap_handover_req_ack_t
*
ack
=
&
XNAP_HANDOVER_REQ_ACK
(
message_p
);
//Source NG-RAN node UE XnAP ID
XNAP_FIND_PROTOCOLIE_BY_ID
(
XNAP_HandoverRequestAcknowledge_IEs_t
,
ie
,
xnHandoverRequestAck
,
XNAP_ProtocolIE_ID_id_sourceNG_RANnodeUEXnAPID
,
true
);
...
...
@@ -458,16 +458,35 @@ if (stream == 0) {
return
-
1
;
}
id_source
=
ie
->
value
.
choice
.
NG_RANnodeUEXnAPID
;
XNAP_FIND_PROTOCOLIE_BY_ID
(
XNAP_HandoverRequestAcknowledge_IEs_t
,
ie
,
xnHandoverRequestAck
,
XNAP_ProtocolIE_ID_id_targetCellGlobalID
,
true
);
ack
->
s_ng_node_ue_xnap_id
=
ie
->
value
.
choice
.
NG_RANnodeUEXnAPID
;
/* XNAP_FIND_PROTOCOLIE_BY_ID(XNAP_HandoverRequestAcknowledge_IEs_t, ie, xnHandoverRequestAck, XNAP_ProtocolIE_ID_id_targetCellGlobalID, true);
if (ie == NULL) {
LOG_E(XNAP, "XNAP_ProtocolIE_ID_id_targetCellGlobalID, is NULL pointer \n");
itti_free(ITTI_MSG_ORIGIN_ID(message_p),message_p);
return -1;
}
*/
XNAP_FIND_PROTOCOLIE_BY_ID
(
XNAP_HandoverRequestAcknowledge_IEs_t
,
ie
,
xnHandoverRequestAck
,
XNAP_ProtocolIE_ID_id_Target2SourceNG_RANnodeTranspContainer
,
true
);
if
(
ie
==
NULL
)
{
LOG_E
(
XNAP
,
"iXNAP_ProtocolIE_ID_id_Target2SourceNG_RANnodeTranspContainer is NULL pointer
\n
"
);
itti_free
(
ITTI_MSG_ORIGIN_ID
(
message_p
),
message_p
);
return
-
1
;
}
OCTET_STRING_t
*
c
=
&
ie
->
value
.
choice
.
OCTET_STRING
;
if
(
c
->
size
>
1024
){
LOG_I
(
XNAP
,
"c is not NULL"
);
}
//{ printf("%s:%d: fatal: buffer too big\n", __FILE__, __LINE__); abort(); }
memcpy
(
ack
->
rrc_buffer
,
c
->
buf
,
c
->
size
);
ack
->
rrc_buffer_size
=
c
->
size
;
//memcpy(XNAP_HANDOVER_REQ_ACK(message_p).rrc_buffer, ie->value.choice.OCTET_STRING.buf, ie->value.choice.OCTET_STRING.size);
//XNAP_HANDOVER_REQ_ACK(message_p).rrc_buffer_size = ie->value.choice.OCTET_STRING.size;
/*
id_target = ie->value.choice.NG_RANnodeUEXnAPID_1;
ue_id = id_source;
...
...
@@ -482,7 +501,7 @@ if (stream == 0) {
//xnap_set_reloc_overall_timer(&instance_p->id_manager, ue_id,xnap_timer_get_tti(&instance_p->timers));
XNAP_HANDOVER_REQ_ACK(message_p).rnti = rnti;
*/
itti_send_msg_to_task
(
TASK_RRC_GNB
,
instance_p
->
instance
,
message_p
);
return
0
;
...
...
openair2/XNAP/xnap_gNB_task.c
View file @
f8607ae6
...
...
@@ -207,37 +207,34 @@ static void xnap_gNB_handle_sctp_association_ind(instance_t instance, sctp_new_a
}
static
void
xnap_gNB_handle_handover_
req
(
instance_t
instance
,
void
xnap_gNB_handle_handover_
prep
(
instance_t
instance
,
xnap_handover_req_t
*
xnap_handover_req
)
{
xnap_gNB_instance_t
*
instance_p
;
//xnap_gNB_data_t *target;
xnap_id_manager
*
id_manager
;
int
ue_id
;
sctp_assoc_t
assoc_id
;
int
target_nci
=
xnap_handover_req
->
target_cgi
.
cgi
;
instance_p
=
xnap_gNB_get_instance
(
instance
);
DevAssert
(
instance_p
!=
NULL
);
//target = xnap_is_gNB_pci_in_list(target_pci);Write new function for this if needed
//DevAssert(target != NULL);
int
target_nci
=
xnap_handover_req
->
target_cgi
.
cgi
;
assoc_id
=
xnap_gNB_get_assoc_id
(
instance_p
,
target_nci
);
/* allocate xnap ID */
id_manager
=
&
instance_p
->
id_manager
;
xnap_id_manager_init
(
id_manager
);
ue_id
=
xnap_allocate_new_id
(
id_manager
);
//MessageDef *message_p = itti_alloc_new_message(TASK_XNAP, 0, XNAP_HANDOVER_REQ);
//message_p->ittiMsgHeader.originInstance = assoc_id;
assoc_id
=
xnap_gNB_get_assoc_id
(
instance_p
,
target_nci
);
int
xn_id
=
xnap_allocate_new_id
(
id_manager
);
LOG_I
(
XNAP
,
"NR Cell ID: %d
\n
"
,
target_nci
);
LOG_I
(
XNAP
,
"Association ID: %d
\n
"
,
assoc_id
);
//xnap_handover_req_t *req = &XNAP_HANDOVER_REQ(message_p);
if
(
ue
_id
==
-
1
)
{
if
(
xn
_id
==
-
1
)
{
LOG_E
(
XNAP
,
"could not allocate a new XNAP UE ID
\n
"
);
/* TODO: cancel handover: send (to be defined) message to RRC */
exit
(
1
);
}
xnap_handover_req
->
s_ng_node_ue_xnap_id
=
xn_id
;
xnap_set_ids
(
id_manager
,
xnap_handover_req
->
s_ng_node_ue_xnap_id
,
xnap_handover_req
->
ue_id
,
xnap_handover_req
->
s_ng_node_ue_xnap_id
,
0
);
/* id_source is ue_id, id_target is unknown yet */
//xnap_set_ids(id_manager, ue_id, xnap_handover_req->rnti, ue_id, -1); //use?ho req structure wont have rnti- take from where it belongs to.
//xnap_id_set_state(id_manager, ue_id, XNID_STATE_SOURCE_PREPARE);// use?
...
...
@@ -267,9 +264,7 @@ void *xnap_task(void *arg)
break
;
case
XNAP_REGISTER_GNB_REQ
:
{
xnap_setup_req_t
*
xnsetupmsg
=
&
XNAP_REGISTER_GNB_REQ
(
received_msg
).
setup_req
;
xnap_net_config_t
*
xn_nc
=
&
XNAP_REGISTER_GNB_REQ
(
received_msg
).
net_config
;
createXninst
(
ITTI_MSG_DESTINATION_INSTANCE
(
received_msg
),
xnsetupmsg
,
xn_nc
);
xnap_gNB_init_sctp
(
ITTI_MSG_DESTINATION_INSTANCE
(
received_msg
),
xn_nc
);
}
break
;
...
...
@@ -282,7 +277,7 @@ void *xnap_task(void *arg)
break
;
case
XNAP_HANDOVER_REQ
:
// from rrc
xnap_gNB_handle_handover_
req
(
ITTI_MSG_ORIGIN_INSTANCE
(
received_msg
),
xnap_gNB_handle_handover_
prep
(
ITTI_MSG_ORIGIN_INSTANCE
(
received_msg
),
&
XNAP_HANDOVER_REQ
(
received_msg
));
break
;
case
XNAP_HANDOVER_REQ_ACK
:
...
...
openair2/XNAP/xnap_ids.c
View file @
f8607ae6
...
...
@@ -28,16 +28,16 @@ void xnap_id_manager_init(xnap_id_manager *m)
int
i
;
memset
(
m
,
0
,
sizeof
(
xnap_id_manager
));
for
(
i
=
0
;
i
<
XNAP_MAX_IDS
;
i
++
)
m
->
ids
[
i
].
rnti
=
-
1
;
m
->
ids
[
i
].
cu_ue_id
=
-
1
;
}
int
xnap_allocate_new_id
(
xnap_id_manager
*
m
)
{
int
i
;
printf
(
"
rnti: %d
\n
"
,
m
->
ids
[
0
].
rnti
);
printf
(
"
cu_ue_id: %d
\n
"
,
m
->
ids
[
0
].
cu_ue_id
);
for
(
i
=
0
;
i
<
XNAP_MAX_IDS
;
i
++
)
if
(
m
->
ids
[
i
].
rnti
==
-
1
)
{
m
->
ids
[
i
].
rnti
=
0
;
if
(
m
->
ids
[
i
].
cu_ue_id
==
-
1
)
{
m
->
ids
[
i
].
cu_ue_id
=
0
;
m
->
ids
[
i
].
id_source
=
-
1
;
m
->
ids
[
i
].
id_target
=
-
1
;
return
i
;
...
...
@@ -47,14 +47,14 @@ int xnap_allocate_new_id(xnap_id_manager *m)
void
xnap_release_id
(
xnap_id_manager
*
m
,
int
id
)
{
m
->
ids
[
id
].
rnti
=
-
1
;
m
->
ids
[
id
].
cu_ue_id
=
-
1
;
}
int
xnap_find_id
(
xnap_id_manager
*
m
,
int
id_source
,
int
id_target
)
{
int
i
;
for
(
i
=
0
;
i
<
XNAP_MAX_IDS
;
i
++
)
if
(
m
->
ids
[
i
].
rnti
!=
-
1
&&
if
(
m
->
ids
[
i
].
cu_ue_id
!=
-
1
&&
m
->
ids
[
i
].
id_source
==
id_source
&&
m
->
ids
[
i
].
id_target
==
id_target
)
return
i
;
...
...
@@ -65,7 +65,7 @@ int xnap_find_id_from_id_source(xnap_id_manager *m, int id_source)
{
int
i
;
for
(
i
=
0
;
i
<
XNAP_MAX_IDS
;
i
++
)
if
(
m
->
ids
[
i
].
rnti
!=
-
1
&&
if
(
m
->
ids
[
i
].
cu_ue_id
!=
-
1
&&
m
->
ids
[
i
].
id_source
==
id_source
)
return
i
;
return
-
1
;
...
...
@@ -75,24 +75,24 @@ int xnap_find_id_from_id_target(xnap_id_manager *m, int id_target)
{
int
i
;
for
(
i
=
0
;
i
<
XNAP_MAX_IDS
;
i
++
)
if
(
m
->
ids
[
i
].
rnti
!=
-
1
&&
if
(
m
->
ids
[
i
].
cu_ue_id
!=
-
1
&&
m
->
ids
[
i
].
id_target
==
id_target
)
return
i
;
return
-
1
;
}
int
xnap_find_id_from_
rnti
(
xnap_id_manager
*
m
,
int
rnti
)
int
xnap_find_id_from_
cu_ue_id
(
xnap_id_manager
*
m
,
int
cu_ue_id
)
{
int
i
;
for
(
i
=
0
;
i
<
XNAP_MAX_IDS
;
i
++
)
if
(
m
->
ids
[
i
].
rnti
==
rnti
)
if
(
m
->
ids
[
i
].
cu_ue_id
==
cu_ue_id
)
return
i
;
return
-
1
;
}
void
xnap_set_ids
(
xnap_id_manager
*
m
,
int
ue_id
,
int
rnti
,
int
id_source
,
int
id_target
)
void
xnap_set_ids
(
xnap_id_manager
*
m
,
int
ue_id
,
int
cu_ue_id
,
int
id_source
,
int
id_target
)
{
m
->
ids
[
ue_id
].
rnti
=
rnti
;
m
->
ids
[
ue_id
].
cu_ue_id
=
cu_ue_id
;
m
->
ids
[
ue_id
].
id_source
=
id_source
;
m
->
ids
[
ue_id
].
id_target
=
id_target
;
}
...
...
@@ -138,9 +138,9 @@ int xnap_id_get_id_target(xnap_id_manager *m, int ue_id)
return
m
->
ids
[
ue_id
].
id_target
;
}
int
xnap_id_get_
rnti
(
xnap_id_manager
*
m
,
int
ue
_id
)
int
xnap_id_get_
ueid
(
xnap_id_manager
*
m
,
int
xn
_id
)
{
return
m
->
ids
[
ue_id
].
rnti
;
return
m
->
ids
[
xn_id
].
cu_ue_id
;
}
void
*
xnap_id_get_target
(
xnap_id_manager
*
m
,
int
ue_id
)
...
...
openair2/XNAP/xnap_ids.h
View file @
f8607ae6
...
...
@@ -43,7 +43,7 @@ typedef enum {
}
xnid_state_t
;
typedef
struct
{
int
rnti
;
/* -1 when free */
int
cu_ue_id
;
/* -1 when free */
int
id_source
;
int
id_target
;
...
...
@@ -81,7 +81,8 @@ void xnap_set_dc_prep_timer(xnap_id_manager *m, int ue_id, uint64_t time);
void
xnap_set_dc_overall_timer
(
xnap_id_manager
*
m
,
int
ue_id
,
uint64_t
time
);
int
xnap_id_get_id_source
(
xnap_id_manager
*
m
,
int
ue_id
);
int
xnap_id_get_id_target
(
xnap_id_manager
*
m
,
int
ue_id
);
int
xnap_id_get_rnti
(
xnap_id_manager
*
m
,
int
ue_id
);
int
xnap_id_get_ueid
(
xnap_id_manager
*
m
,
int
xn_id
);
//int xnap_id_get_rnti(xnap_id_manager *m, int ue_id);
void
*
xnap_id_get_target
(
xnap_id_manager
*
m
,
int
ue_id
);
#endif
/* X2AP_IDS_H_ */
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