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
wangjie
OpenXG-RAN
Commits
d988eb82
Commit
d988eb82
authored
Apr 20, 2020
by
s.rampalli
Committed by
Rigiel
Jun 09, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed temporary values in x2ap and rrc
parent
614083f0
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
309 additions
and
103 deletions
+309
-103
openair2/COMMON/x2ap_messages_types.h
openair2/COMMON/x2ap_messages_types.h
+2
-1
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+212
-16
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+2
-0
openair2/X2AP/x2ap_eNB.c
openair2/X2AP/x2ap_eNB.c
+58
-10
openair2/X2AP/x2ap_eNB_generate_messages.c
openair2/X2AP/x2ap_eNB_generate_messages.c
+32
-61
openair2/X2AP/x2ap_eNB_handler.c
openair2/X2AP/x2ap_eNB_handler.c
+3
-15
No files found.
openair2/COMMON/x2ap_messages_types.h
View file @
d988eb82
...
@@ -315,7 +315,7 @@ typedef struct x2ap_senb_addition_req_ack_s {
...
@@ -315,7 +315,7 @@ typedef struct x2ap_senb_addition_req_ack_s {
typedef
struct
x2ap_ENDC_sgnb_addition_req_s
{
typedef
struct
x2ap_ENDC_sgnb_addition_req_s
{
int
ue_x2_id
;
int
ue_x2_id
;
LTE_PhysCellId_t
target_physCellId
;
/* used for RRC->X2AP in source eNB */
/* used for RRC->X2AP in source eNB */
int
rnti
;
int
rnti
;
...
@@ -386,6 +386,7 @@ typedef struct x2ap_ENDC_reconf_complete_s {
...
@@ -386,6 +386,7 @@ typedef struct x2ap_ENDC_reconf_complete_s {
int
MeNB_ue_x2_id
;
int
MeNB_ue_x2_id
;
int
SgNB_ue_x2_id
;
int
SgNB_ue_x2_id
;
LTE_PhysCellId_t
target_physCellId
;
x2ap_sgNB_reconf_response_information_t
reconf_response
;
x2ap_sgNB_reconf_response_information_t
reconf_response
;
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
d988eb82
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
d988eb82
...
@@ -179,6 +179,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
...
@@ -179,6 +179,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
&
create_tunnel_resp
,
&
create_tunnel_resp
,
&
inde_list
[
0
]);
&
inde_list
[
0
]);
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
nb_e_rabs_admitted_tobeadded
=
m
->
nb_e_rabs_tobeadded
;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
nb_e_rabs_admitted_tobeadded
=
m
->
nb_e_rabs_tobeadded
;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
target_assoc_id
=
m
->
target_assoc_id
;
for
(
int
i
=
0
;
i
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
i
++
){
for
(
int
i
=
0
;
i
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
i
++
){
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
e_rabs_admitted_tobeadded
[
i
].
e_rab_id
=
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
e_rabs_admitted_tobeadded
[
i
].
e_rab_id
=
ue_context_p
->
ue_context
.
e_rab
[
i
].
param
.
e_rab_id
;
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
e_rabs_admitted_tobeadded
[
i
].
gtp_teid
=
create_tunnel_resp
.
enb_S1u_teid
[
i
];
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
e_rabs_admitted_tobeadded
[
i
].
gtp_teid
=
create_tunnel_resp
.
enb_S1u_teid
[
i
];
...
...
openair2/X2AP/x2ap_eNB.c
View file @
d988eb82
...
@@ -359,7 +359,7 @@ void x2ap_eNB_handle_sctp_init_msg_multi_cnf(
...
@@ -359,7 +359,7 @@ void x2ap_eNB_handle_sctp_init_msg_multi_cnf(
* Failure means multi_sd < 0.
* Failure means multi_sd < 0.
*/
*/
if
(
instance
->
multi_sd
<
0
)
{
if
(
instance
->
multi_sd
<
0
)
{
X2AP_ERROR
(
"Error: be sure to properly configure X2
2
in your configuration file.
\n
"
);
X2AP_ERROR
(
"Error: be sure to properly configure X2 in your configuration file.
\n
"
);
DevAssert
(
instance
->
multi_sd
>=
0
);
DevAssert
(
instance
->
multi_sd
>=
0
);
}
}
...
@@ -454,10 +454,12 @@ void x2ap_eNB_handle_sgNB_add_req(instance_t instance,
...
@@ -454,10 +454,12 @@ void x2ap_eNB_handle_sgNB_add_req(instance_t instance,
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_data_t
*
x2ap_eNB_data
;
x2ap_eNB_data_t
*
x2ap_eNB_data
;
int
ue_id
;
int
ue_id
;
LTE_PhysCellId_t
target_pci
;
/* TODO: remove hardcoded value */
target_pci
=
x2ap_ENDC_sgnb_addition_req
->
target_physCellId
;
x2ap_eNB_data
=
x2ap_is_eNB_
id_in_list
(
3584
);
x2ap_eNB_data
=
x2ap_is_eNB_
pci_in_list
(
target_pci
);
DevAssert
(
x2ap_eNB_data
!=
NULL
);
DevAssert
(
x2ap_eNB_data
!=
NULL
);
DevAssert
(
x2ap_ENDC_sgnb_addition_req
!=
NULL
);
instance_p
=
x2ap_eNB_get_instance
(
instance
);
instance_p
=
x2ap_eNB_get_instance
(
instance
);
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
instance_p
!=
NULL
);
...
@@ -474,7 +476,8 @@ void x2ap_eNB_handle_sgNB_add_req(instance_t instance,
...
@@ -474,7 +476,8 @@ void x2ap_eNB_handle_sgNB_add_req(instance_t instance,
x2ap_set_ids
(
id_manager
,
ue_id
,
x2ap_ENDC_sgnb_addition_req
->
rnti
,
ue_id
,
-
1
);
x2ap_set_ids
(
id_manager
,
ue_id
,
x2ap_ENDC_sgnb_addition_req
->
rnti
,
ue_id
,
-
1
);
x2ap_id_set_state
(
id_manager
,
ue_id
,
X2ID_STATE_NSA_PREPARE
);
x2ap_id_set_state
(
id_manager
,
ue_id
,
X2ID_STATE_NSA_PREPARE
);
x2ap_eNB_generate_ENDC_x2_SgNB_addition_request
(
instance_p
,
x2ap_ENDC_sgnb_addition_req
,
x2ap_eNB_data
,
ue_id
);
x2ap_eNB_generate_ENDC_x2_SgNB_addition_request
(
instance_p
,
x2ap_ENDC_sgnb_addition_req
,
x2ap_eNB_data
,
ue_id
);
}
}
static
static
...
@@ -489,16 +492,31 @@ void x2ap_gNB_trigger_sgNB_add_req_ack(instance_t instance,
...
@@ -489,16 +492,31 @@ void x2ap_gNB_trigger_sgNB_add_req_ack(instance_t instance,
* as far as I understand.. CROUX
* as far as I understand.. CROUX
*/
*/
x2ap_id_manager
*
id_manager
;
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_data_t
*
target
;
x2ap_eNB_data_t
*
target
;
/*int source_assoc_id = x2ap_ENDC_sgnb_addition_req_ACK->source_assoc_id;
int
ue_id
;
int
ue_id
;
/*int source_assoc_id = x2ap_ENDC_sgnb_addition_req_ACK->source_assoc_id;
int id_source;
int id_source;
int id_target;*/
int id_target;*/
instance_p
=
x2ap_eNB_get_instance
(
instance
);
instance_p
=
x2ap_eNB_get_instance
(
instance
);
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
instance_p
!=
NULL
);
target
=
x2ap_get_eNB
(
NULL
,
x2ap_ENDC_sgnb_addition_req_ACK
->
target_assoc_id
,
0
);
DevAssert
(
target
!=
NULL
);
/* allocate x2ap ID */
id_manager
=
&
instance_p
->
id_manager
;
ue_id
=
x2ap_allocate_new_id
(
id_manager
);
if
(
ue_id
==
-
1
)
{
X2AP_ERROR
(
"could not allocate a new X2AP UE ID
\n
"
);
exit
(
1
);
}
/* id_source is ue_id, id_target is unknown yet */
x2ap_set_ids
(
id_manager
,
ue_id
,
x2ap_ENDC_sgnb_addition_req_ACK
->
rnti
,
ue_id
,
x2ap_ENDC_sgnb_addition_req_ACK
->
MeNB_ue_x2_id
);
x2ap_id_set_state
(
id_manager
,
ue_id
,
X2ID_STATE_SOURCE_OVERALL
);
/*target = x2ap_get_eNB(NULL, source_assoc_id, 0);
/*target = x2ap_get_eNB(NULL, source_assoc_id, 0);
DevAssert(target != NULL);*/
DevAssert(target != NULL);*/
...
@@ -511,10 +529,36 @@ void x2ap_gNB_trigger_sgNB_add_req_ack(instance_t instance,
...
@@ -511,10 +529,36 @@ void x2ap_gNB_trigger_sgNB_add_req_ack(instance_t instance,
x2ap_set_ids(&instance_p->id_manager, ue_id, x2ap_handover_req_ack->rnti, id_source, id_target);*/
x2ap_set_ids(&instance_p->id_manager, ue_id, x2ap_handover_req_ack->rnti, id_source, id_target);*/
//target = x2ap_get_eNB(NULL, 17, 0);
x2ap_gNB_generate_ENDC_x2_SgNB_addition_request_ACK
(
instance_p
,
target
,
target
=
x2ap_is_eNB_id_in_list
(
3585
);
//Currently hardcoded. Need to extract it differently
x2ap_ENDC_sgnb_addition_req_ACK
,
ue_id
);
}
/**
* @fn : Function triggers sgnb reconfiguration complete
* @param : IN instance, IN x2ap_reconf_complete
**/
static
void
x2ap_eNB_trigger_sgnb_reconfiguration_complete
(
instance_t
instance
,
x2ap_ENDC_reconf_complete_t
*
x2ap_reconf_complete
)
{
x2ap_eNB_instance_t
*
instance_p
=
NULL
;
x2ap_eNB_data_t
*
target
=
NULL
;
int
id_source
=
-
1
;
int
id_target
=
-
1
;
LTE_PhysCellId_t
target_pci
;
instance_p
=
x2ap_eNB_get_instance
(
instance
);
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
x2ap_reconf_complete
!=
NULL
);
target_pci
=
x2ap_reconf_complete
->
target_physCellId
;
target
=
x2ap_is_eNB_pci_in_list
(
target_pci
);
DevAssert
(
target
!=
NULL
);
DevAssert
(
target
!=
NULL
);
x2ap_gNB_generate_ENDC_x2_SgNB_addition_request_ACK
(
instance_p
,
target
,
x2ap_ENDC_sgnb_addition_req_ACK
,
0
);
id_source
=
x2ap_reconf_complete
->
MeNB_ue_x2_id
;
id_target
=
x2ap_reconf_complete
->
SgNB_ue_x2_id
;
x2ap_eNB_generate_ENDC_x2_SgNB_reconfiguration_complete
(
instance_p
,
target
,
id_source
,
id_target
);
}
}
...
@@ -594,6 +638,10 @@ void *x2ap_task(void *arg) {
...
@@ -594,6 +638,10 @@ void *x2ap_task(void *arg) {
LOG_I
(
X2AP
,
"Received elements for X2AP_ENDC_SGNB_ADDITION_REQ_ACK
\n
"
);
LOG_I
(
X2AP
,
"Received elements for X2AP_ENDC_SGNB_ADDITION_REQ_ACK
\n
"
);
break
;
break
;
case
X2AP_ENDC_SGNB_RECONF_COMPLETE
:
x2ap_eNB_trigger_sgnb_reconfiguration_complete
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
X2AP_ENDC_SGNB_RECONF_COMPLETE
(
received_msg
));
break
;
case
SCTP_INIT_MSG_MULTI_CNF
:
case
SCTP_INIT_MSG_MULTI_CNF
:
x2ap_eNB_handle_sctp_init_msg_multi_cnf
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
x2ap_eNB_handle_sctp_init_msg_multi_cnf
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_init_msg_multi_cnf
);
&
received_msg
->
ittiMsg
.
sctp_init_msg_multi_cnf
);
...
...
openair2/X2AP/x2ap_eNB_generate_messages.c
View file @
d988eb82
...
@@ -1496,7 +1496,8 @@ int x2ap_eNB_generate_ENDC_x2_setup_response(
...
@@ -1496,7 +1496,8 @@ int x2ap_eNB_generate_ENDC_x2_setup_response(
}
}
int
x2ap_eNB_generate_ENDC_x2_SgNB_addition_request
(
int
x2ap_eNB_generate_ENDC_x2_SgNB_addition_request
(
x2ap_eNB_instance_t
*
instance_p
,
x2ap_ENDC_sgnb_addition_req_t
*
x2ap_ENDC_sgnb_addition_req
,
x2ap_eNB_data_t
*
x2ap_eNB_data_p
,
int
ue_id
)
x2ap_eNB_instance_t
*
instance_p
,
x2ap_ENDC_sgnb_addition_req_t
*
x2ap_ENDC_sgnb_addition_req
,
x2ap_eNB_data_t
*
x2ap_eNB_data_p
,
int
ue_id
)
{
{
X2AP_X2AP_PDU_t
pdu
;
X2AP_X2AP_PDU_t
pdu
;
X2AP_SgNBAdditionRequest_t
*
out
;
X2AP_SgNBAdditionRequest_t
*
out
;
...
@@ -1507,42 +1508,21 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
...
@@ -1507,42 +1508,21 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
uint8_t
*
buffer
;
uint8_t
*
buffer
;
uint32_t
len
;
uint32_t
len
;
int
ret
=
0
;
int
ret
=
0
;
uint16_t
nRencryptionAlgorithms
=
x2ap_ENDC_sgnb_addition_req
->
security_capabilities
.
encryption_algorithms
;
// Currently hardcoded (dummy) values filling the fields of SgNB_addition_request message. To be substituted
uint16_t
nRintegrityProtectionAlgorithms
=
x2ap_ENDC_sgnb_addition_req
->
security_capabilities
// with values coming from RRC.
.
integrity_algorithms
;
uint16_t
nRencryptionAlgorithms
=
0
;
uint16_t
nRintegrityProtectionAlgorithms
=
0
;
uint8_t
SgNBSecurityKey
[
32
]
=
{
0
};
uint8_t
SgNBSecurityKey
[
32
]
=
{
0
};
int
uEaggregateMaximumBitRateDownlink
=
100000000
;
int
uEaggregateMaximumBitRateDownlink
=
x2ap_ENDC_sgnb_addition_req
->
ue_ambr
.
br_dl
;
int
uEaggregateMaximumBitRateUplink
=
100000000
;
int
uEaggregateMaximumBitRateUplink
=
x2ap_ENDC_sgnb_addition_req
->
ue_ambr
.
br_ul
;
int
e_rabs_tobeadded
=
1
;
int
e_rabs_tobeadded
=
x2ap_ENDC_sgnb_addition_req
->
nb_e_rabs_tobeadded
;
long
int
pDCPatSgNB
=
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
;
long
int
pDCPatSgNB
=
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
;
long
int
mCGresources
=
X2AP_EN_DC_ResourceConfiguration__mCGresources_not_present
;
long
int
mCGresources
=
X2AP_EN_DC_ResourceConfiguration__mCGresources_not_present
;
long
int
sCGresources
=
X2AP_EN_DC_ResourceConfiguration__sCGresources_not_present
;
long
int
sCGresources
=
X2AP_EN_DC_ResourceConfiguration__sCGresources_not_present
;
long
qCI
=
1
;
long
qCI
=
0
;
X2AP_Pre_emptionCapability_t
pre_emptionCapability
=
X2AP_Pre_emptionCapability_shall_not_trigger_pre_emption
;
X2AP_Pre_emptionCapability_t
pre_emptionCapability
;
X2AP_Pre_emptionVulnerability_t
pre_emptionVulnerability
=
X2AP_Pre_emptionVulnerability_not_pre_emptable
;
X2AP_Pre_emptionVulnerability_t
pre_emptionVulnerability
;
priority_level_t
priority_level
=
PRIORITY_LEVEL_NO_PRIORITY
;
priority_level_t
priority_level
;
e_rab_tobe_added_t
e_MCG_rabs_tobeadded
;
memcpy
(
SgNBSecurityKey
,
x2ap_ENDC_sgnb_addition_req
->
kgnb
,
sizeof
(
x2ap_ENDC_sgnb_addition_req
->
kgnb
));
e_MCG_rabs_tobeadded
.
gtp_teid
=
0
;
e_MCG_rabs_tobeadded
.
sgw_addr
.
length
=
24
;
uint8_t
buf
[
20
]
=
{
0
};
memcpy
(
e_MCG_rabs_tobeadded
.
sgw_addr
.
buffer
,
buf
,
20
*
sizeof
(
uint8_t
));
FILE
*
fd
;
fd
=
fopen
(
"../../../executables/uecap.raw"
,
"r"
);
if
(
fd
!=
NULL
)
{
OCTET_STRING_t
CG_Config_Info
;
CG_Config_Info
.
size
=
4096
;
CG_Config_Info
.
buf
=
(
uint8_t
*
)
calloc
(
4096
,
sizeof
(
uint8_t
));
int
msg_len
=
fread
(
CG_Config_Info
.
buf
,
1
,
CG_Config_Info
.
size
,
fd
);
CG_Config_Info
.
size
=
msg_len
;
/*char buffer[4096];
int msg_len=fread(buffer,1,4096,fd);*/
LOG_I
(
RRC
,
"Read in %d bytes for uecap
\n
"
,
msg_len
);
/*OCTET_STRING_t CG_Config_Info;
/*OCTET_STRING_t CG_Config_Info;
CG_Config_Info.size = 4096;
CG_Config_Info.size = 4096;
CG_Config_Info.buf = (uint8_t *)calloc(4096, sizeof(uint8_t));*/
CG_Config_Info.buf = (uint8_t *)calloc(4096, sizeof(uint8_t));*/
...
@@ -1619,6 +1599,10 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
...
@@ -1619,6 +1599,10 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
e_RABS_ToBeAdded_SgNBAddReq_Item
->
en_DC_ResourceConfiguration
.
sCGresources
=
sCGresources
;
e_RABS_ToBeAdded_SgNBAddReq_Item
->
en_DC_ResourceConfiguration
.
sCGresources
=
sCGresources
;
if
(
pDCPatSgNB
==
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
){
if
(
pDCPatSgNB
==
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
){
e_RABS_ToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
present
=
X2AP_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_sgNBPDCPpresent
;
e_RABS_ToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
present
=
X2AP_E_RABs_ToBeAdded_SgNBAddReq_Item__resource_configuration_PR_sgNBPDCPpresent
;
qCI
=
x2ap_ENDC_sgnb_addition_req
->
e_rab_param
[
i
].
qos
.
qci
;
priority_level
=
x2ap_ENDC_sgnb_addition_req
->
e_rab_param
[
i
].
qos
.
allocation_retention_priority
.
priority_level
;
pre_emptionCapability
=
x2ap_ENDC_sgnb_addition_req
->
e_rab_param
[
i
].
qos
.
allocation_retention_priority
.
pre_emp_capability
;
pre_emptionVulnerability
=
x2ap_ENDC_sgnb_addition_req
->
e_rab_param
[
i
].
qos
.
allocation_retention_priority
.
pre_emp_vulnerability
;
e_RABS_ToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
full_E_RAB_Level_QoS_Parameters
.
qCI
=
qCI
;
e_RABS_ToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
full_E_RAB_Level_QoS_Parameters
.
qCI
=
qCI
;
e_RABS_ToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
full_E_RAB_Level_QoS_Parameters
.
allocationAndRetentionPriority
.
pre_emptionCapability
=
pre_emptionCapability
;
e_RABS_ToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
full_E_RAB_Level_QoS_Parameters
.
allocationAndRetentionPriority
.
pre_emptionCapability
=
pre_emptionCapability
;
...
@@ -1646,25 +1630,24 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
...
@@ -1646,25 +1630,24 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
ie
->
id
=
X2AP_ProtocolIE_ID_id_MeNBtoSgNBContainer
;
ie
->
id
=
X2AP_ProtocolIE_ID_id_MeNBtoSgNBContainer
;
ie
->
criticality
=
X2AP_Criticality_reject
;
ie
->
criticality
=
X2AP_Criticality_reject
;
ie
->
value
.
present
=
X2AP_SgNBAdditionRequest_IEs__value_PR_MeNBtoSgNBContainer
;
ie
->
value
.
present
=
X2AP_SgNBAdditionRequest_IEs__value_PR_MeNBtoSgNBContainer
;
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
buf
=
(
uint8_t
*
)
calloc
(
CG_Config_Info
.
size
,
sizeof
(
uint8_t
));
if
(
NULL
==
(
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
buf
=
(
uint8_t
*
)
memcpy
(
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
buf
,
CG_Config_Info
.
buf
,
CG_Config_Info
.
size
);
calloc
(
x2ap_ENDC_sgnb_addition_req
->
rrc_buffer_size
,
sizeof
(
uint8_t
))))
{
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
size
=
CG_Config_Info
.
size
;
//4096;
X2AP_ERROR
(
"Memory ALLocation failed
\n
"
);
exit
(
1
);
}
memcpy
(
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
buf
,
x2ap_ENDC_sgnb_addition_req
->
rrc_buffer
,
x2ap_ENDC_sgnb_addition_req
->
rrc_buffer_size
);
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
size
=
x2ap_ENDC_sgnb_addition_req
->
rrc_buffer_size
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
if
(
x2ap_eNB_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
if
(
x2ap_eNB_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
X2AP_ERROR
(
"Failed to encode ENDC X2 SgNB_addition request message
\n
"
);
X2AP_ERROR
(
"Failed to encode ENDC X2 SgNB_addition request message
\n
"
);
return
-
1
;
return
-
1
;
}
}
free
(
ie
->
value
.
choice
.
MeNBtoSgNBContainer
.
buf
);
MSC_LOG_TX_MESSAGE
(
MSC_X2AP_SRC_ENB
,
MSC_X2AP_TARGET_ENB
,
NULL
,
0
,
"0 X2Setup/initiatingMessage assoc_id %u"
,
x2ap_eNB_data_p
->
assoc_id
);
MSC_LOG_TX_MESSAGE
(
MSC_X2AP_SRC_ENB
,
MSC_X2AP_TARGET_ENB
,
NULL
,
0
,
"0 X2Setup/initiatingMessage assoc_id %u"
,
x2ap_eNB_data_p
->
assoc_id
);
x2ap_eNB_itti_send_sctp_data_req
(
instance_p
->
instance
,
x2ap_eNB_data_p
->
assoc_id
,
buffer
,
len
,
0
);
x2ap_eNB_itti_send_sctp_data_req
(
instance_p
->
instance
,
x2ap_eNB_data_p
->
assoc_id
,
buffer
,
len
,
0
);
fclose
(
fd
);
}
else
{
LOG_I
(
RRC
,
"uecap.raw file could not be opened...
\n
"
);
return
-
1
;
}
return
ret
;
return
ret
;
...
@@ -1684,26 +1667,14 @@ int x2ap_gNB_generate_ENDC_x2_SgNB_addition_request_ACK( x2ap_eNB_instance_t *in
...
@@ -1684,26 +1667,14 @@ int x2ap_gNB_generate_ENDC_x2_SgNB_addition_request_ACK( x2ap_eNB_instance_t *in
uint8_t
*
buffer
;
uint8_t
*
buffer
;
uint32_t
len
;
uint32_t
len
;
int
ret
=
0
;
int
ret
=
0
;
int
MeNB_UE_X2AP_id
=
ue_id
;
int
SgNB_UE_X2AP_id
=
0
;
int
MeNB_UE_X2AP_id
=
x2ap_sgnb_addition_req_ACK
->
MeNB_ue_x2_id
;
int
SgNB_UE_X2AP_id
=
ue_id
;
// Currently hardcoded (dummy) values filling the fields of SgNB_addition_request message. To be substituted
int
e_rabs_admitted_tobeadded
=
x2ap_sgnb_addition_req_ACK
->
nb_e_rabs_admitted_tobeadded
;
// with values coming from RRC.
//uint16_t nRencryptionAlgorithms = 0;
//uint16_t nRintegrityProtectionAlgorithms = 0;
//uint8_t SgNBSecurityKey[32] = { 0 };
//int uEaggregateMaximumBitRateDownlink = 100000000;
//int uEaggregateMaximumBitRateUplink = 100000000;
int
e_rabs_admitted_tobeadded
=
1
;
long
int
pDCPatSgNB
=
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
;
long
int
pDCPatSgNB
=
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
;
long
int
mCGresources
=
X2AP_EN_DC_ResourceConfiguration__mCGresources_not_present
;
long
int
mCGresources
=
X2AP_EN_DC_ResourceConfiguration__mCGresources_not_present
;
long
int
sCGresources
=
X2AP_EN_DC_ResourceConfiguration__sCGresources_not_present
;
long
int
sCGresources
=
X2AP_EN_DC_ResourceConfiguration__sCGresources_not_present
;
e_rab_setup_t
e_SCG_rabs_tobeadded
;
e_SCG_rabs_tobeadded
.
gtp_teid
=
0
;
e_SCG_rabs_tobeadded
.
eNB_addr
.
length
=
24
;
uint8_t
buf
[
20
]
=
{
0
};
memcpy
(
e_SCG_rabs_tobeadded
.
eNB_addr
.
buffer
,
buf
,
20
*
sizeof
(
uint8_t
));
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
instance_p
!=
NULL
);
DevAssert
(
x2ap_eNB_data_p
!=
NULL
);
DevAssert
(
x2ap_eNB_data_p
!=
NULL
);
...
...
openair2/X2AP/x2ap_eNB_handler.c
View file @
d988eb82
...
@@ -1652,7 +1652,6 @@ int x2ap_gNB_handle_ENDC_sGNB_addition_request (instance_t instance,
...
@@ -1652,7 +1652,6 @@ int x2ap_gNB_handle_ENDC_sGNB_addition_request (instance_t instance,
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_data_t
*
x2ap_eNB_data
;
x2ap_eNB_data_t
*
x2ap_eNB_data
;
MessageDef
*
msg
;
MessageDef
*
msg
;
int
ue_id
;
DevAssert
(
pdu
!=
NULL
);
DevAssert
(
pdu
!=
NULL
);
x2SgNBAdditionRequest
=
&
pdu
->
choice
.
initiatingMessage
.
value
.
choice
.
SgNBAdditionRequest
;
x2SgNBAdditionRequest
=
&
pdu
->
choice
.
initiatingMessage
.
value
.
choice
.
SgNBAdditionRequest
;
...
@@ -1683,20 +1682,9 @@ int x2ap_gNB_handle_ENDC_sGNB_addition_request (instance_t instance,
...
@@ -1683,20 +1682,9 @@ int x2ap_gNB_handle_ENDC_sGNB_addition_request (instance_t instance,
X2AP_ERROR
(
"%s %d: ie is a NULL pointer
\n
"
,
__FILE__
,
__LINE__
);
X2AP_ERROR
(
"%s %d: ie is a NULL pointer
\n
"
,
__FILE__
,
__LINE__
);
return
-
1
;
return
-
1
;
}
}
/* ue_x2_id = MeNB X2AP Id */
X2AP_ENDC_SGNB_ADDITION_REQ
(
msg
).
ue_x2_id
=
ie
->
value
.
choice
.
UE_X2AP_ID
;
// allocate a new X2AP UE ID
X2AP_ENDC_SGNB_ADDITION_REQ
(
msg
).
target_assoc_id
=
assoc_id
;
ue_id
=
x2ap_allocate_new_id
(
&
instance_p
->
id_manager
);
if
(
ue_id
==
-
1
)
{
X2AP_ERROR
(
"could not allocate a new X2AP UE ID
\n
"
);
// TODO: cancel handover: send HO preparation failure to source eNB
exit
(
1
);
}
// rnti is unknown yet, must not be set to -1, 0 is fine
x2ap_set_ids
(
&
instance_p
->
id_manager
,
ue_id
,
0
,
ie
->
value
.
choice
.
UE_X2AP_ID
,
ue_id
);
x2ap_id_set_state
(
&
instance_p
->
id_manager
,
ue_id
,
X2ID_STATE_TARGET
);
X2AP_ENDC_SGNB_ADDITION_REQ
(
msg
).
ue_x2_id
=
ue_id
;
/* X2AP_ProtocolIE_ID_id_NRUESecurityCapabilities */
/* X2AP_ProtocolIE_ID_id_NRUESecurityCapabilities */
...
...
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