Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
cc635cc9
Commit
cc635cc9
authored
Dec 06, 2019
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ENDC X2AP: Implementation of SgNB Addition Request ACK
parent
e34d0460
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
130 additions
and
12 deletions
+130
-12
openair2/RRC/NR/rrc_gNB_internode.c
openair2/RRC/NR/rrc_gNB_internode.c
+7
-2
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+6
-3
openair2/X2AP/x2ap_eNB_generate_messages.c
openair2/X2AP/x2ap_eNB_generate_messages.c
+117
-7
No files found.
openair2/RRC/NR/rrc_gNB_internode.c
View file @
cc635cc9
...
@@ -85,6 +85,7 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
...
@@ -85,6 +85,7 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
cg_Config
->
criticalExtensions
.
choice
.
c1
->
present
=
NR_CG_Config__criticalExtensions__c1_PR_cg_Config
;
cg_Config
->
criticalExtensions
.
choice
.
c1
->
present
=
NR_CG_Config__criticalExtensions__c1_PR_cg_Config
;
cg_Config
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_Config
=
calloc
(
1
,
sizeof
(
NR_CG_Config_IEs_t
));
cg_Config
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_Config
=
calloc
(
1
,
sizeof
(
NR_CG_Config_IEs_t
));
char
buffer
[
1024
];
char
buffer
[
1024
];
int
total_size
;
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_RRCReconfiguration
,
NULL
,
(
void
*
)
reconfig
,
buffer
,
1024
);
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_RRCReconfiguration
,
NULL
,
(
void
*
)
reconfig
,
buffer
,
1024
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %jd)!
\n
"
,
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %jd)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
...
@@ -92,6 +93,7 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
...
@@ -92,6 +93,7 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
OCTET_STRING_fromBuf
(
cg_Config
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_Config
->
scg_CellGroupConfig
,
OCTET_STRING_fromBuf
(
cg_Config
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_Config
->
scg_CellGroupConfig
,
(
const
char
*
)
buffer
,
(
const
char
*
)
buffer
,
(
enc_rval
.
encoded
+
7
)
>>
3
);
(
enc_rval
.
encoded
+
7
)
>>
3
);
total_size
=
(
enc_rval
.
encoded
+
7
)
>>
3
;
LOG_I
(
RRC
,
"Dumping NR_RRCReconfiguration message (%jd bytes)
\n
"
,(
enc_rval
.
encoded
+
7
)
>>
3
);
LOG_I
(
RRC
,
"Dumping NR_RRCReconfiguration message (%jd bytes)
\n
"
,(
enc_rval
.
encoded
+
7
)
>>
3
);
for
(
int
i
=
0
;
i
<
(
enc_rval
.
encoded
+
7
)
>>
3
;
i
++
)
{
for
(
int
i
=
0
;
i
<
(
enc_rval
.
encoded
+
7
)
>>
3
;
i
++
)
{
...
@@ -117,8 +119,11 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
...
@@ -117,8 +119,11 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
fd
=
fopen
(
"rbconfig.raw"
,
"w"
);
fd
=
fopen
(
"rbconfig.raw"
,
"w"
);
fwrite
((
void
*
)
buffer
,
1
,(
size_t
)((
enc_rval
.
encoded
+
7
)
>>
3
),
fd
);
fwrite
((
void
*
)
buffer
,
1
,(
size_t
)((
enc_rval
.
encoded
+
7
)
>>
3
),
fd
);
fclose
(
fd
);
fclose
(
fd
);
total_size
=
total_size
+
((
enc_rval
.
encoded
+
7
)
>>
3
);
return
(
0
);
LOG_I
(
RRC
,
"Total size in generate_CG_Config(): %d
\n
"
,
total_size
);
return
(
total_size
);
}
}
#endif
#endif
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
cc635cc9
...
@@ -106,7 +106,6 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
...
@@ -106,7 +106,6 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
MessageDef
*
msg
;
MessageDef
*
msg
;
msg
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
);
msg
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
);
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
rrc_buffer_size
=
2048
;
//Need to verify correct value for the buffer_size
// NR RRCReconfiguration
// NR RRCReconfiguration
...
@@ -133,14 +132,18 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
...
@@ -133,14 +132,18 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
NR_CG_Config_t
*
CG_Config
=
calloc
(
1
,
sizeof
(
*
CG_Config
));
NR_CG_Config_t
*
CG_Config
=
calloc
(
1
,
sizeof
(
*
CG_Config
));
memset
((
void
*
)
CG_Config
,
0
,
sizeof
(
*
CG_Config
));
memset
((
void
*
)
CG_Config
,
0
,
sizeof
(
*
CG_Config
));
generate_CG_Config
(
rrc
,
CG_Config
,
ue_context_p
->
ue_context
.
reconfig
,
ue_context_p
->
ue_context
.
rb_config
);
int
CG_Config_size
=
generate_CG_Config
(
rrc
,
CG_Config
,
ue_context_p
->
ue_context
.
reconfig
,
ue_context_p
->
ue_context
.
rb_config
);
//X2AP_ENDC_SGNB_ADDITION_REQ_ACK(msg).rrc_buffer_size = CG_Config_size; //Need to verify correct value for the buffer_size
// Send to X2 entity to transport to MeNB
// Send to X2 entity to transport to MeNB
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CG_Config
,
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CG_Config
,
NULL
,
NULL
,
(
void
*
)
CG_Config
,
(
void
*
)
CG_Config
,
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
rrc_buffer
,
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
rrc_buffer
,
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
rrc_buffer_size
);
1024
);
X2AP_ENDC_SGNB_ADDITION_REQ_ACK
(
msg
).
rrc_buffer_size
=
(
enc_rval
.
encoded
+
7
)
>>
3
;
LOG_I
(
RRC
,
"Total size in rrc_add_nsa_user(): %d
\n
"
,
(
enc_rval
.
encoded
+
7
)
>>
3
);
itti_send_msg_to_task
(
TASK_X2AP
,
ENB_MODULE_ID_TO_INSTANCE
(
0
),
msg
);
//Check right id instead of hardcoding
itti_send_msg_to_task
(
TASK_X2AP
,
ENB_MODULE_ID_TO_INSTANCE
(
0
),
msg
);
//Check right id instead of hardcoding
...
...
openair2/X2AP/x2ap_eNB_generate_messages.c
View file @
cc635cc9
...
@@ -1525,7 +1525,7 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
...
@@ -1525,7 +1525,7 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
X2AP_Pre_emptionCapability_t
pre_emptionCapability
=
X2AP_Pre_emptionCapability_shall_not_trigger_pre_emption
;
X2AP_Pre_emptionCapability_t
pre_emptionCapability
=
X2AP_Pre_emptionCapability_shall_not_trigger_pre_emption
;
X2AP_Pre_emptionVulnerability_t
pre_emptionVulnerability
=
X2AP_Pre_emptionVulnerability_not_pre_emptable
;
X2AP_Pre_emptionVulnerability_t
pre_emptionVulnerability
=
X2AP_Pre_emptionVulnerability_not_pre_emptable
;
priority_level_t
priority_level
=
PRIORITY_LEVEL_NO_PRIORITY
;
priority_level_t
priority_level
=
PRIORITY_LEVEL_NO_PRIORITY
;
e_rab_
setup
_t
e_MCG_rabs_tobeadded
;
e_rab_
tobe_added
_t
e_MCG_rabs_tobeadded
;
e_MCG_rabs_tobeadded
.
gtp_teid
=
0
;
e_MCG_rabs_tobeadded
.
gtp_teid
=
0
;
e_MCG_rabs_tobeadded
.
eNB_addr
.
length
=
24
;
e_MCG_rabs_tobeadded
.
eNB_addr
.
length
=
24
;
uint8_t
buf
[
20
]
=
{
0
};
uint8_t
buf
[
20
]
=
{
0
};
...
@@ -1560,9 +1560,9 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
...
@@ -1560,9 +1560,9 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
/* Prepare the X2AP message to encode */
/* Prepare the X2AP message to encode */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
X2AP_X2AP_PDU_PR_initiatingMessage
;
pdu
.
present
=
X2AP_X2AP_PDU_PR_initiatingMessage
;
pdu
.
choice
.
successfulOutcom
e
.
procedureCode
=
X2AP_ProcedureCode_id_sgNBAdditionPreparation
;
pdu
.
choice
.
initiatingMessag
e
.
procedureCode
=
X2AP_ProcedureCode_id_sgNBAdditionPreparation
;
pdu
.
choice
.
successfulOutcom
e
.
criticality
=
X2AP_Criticality_reject
;
pdu
.
choice
.
initiatingMessag
e
.
criticality
=
X2AP_Criticality_reject
;
pdu
.
choice
.
successfulOutcom
e
.
value
.
present
=
X2AP_InitiatingMessage__value_PR_SgNBAdditionRequest
;
pdu
.
choice
.
initiatingMessag
e
.
value
.
present
=
X2AP_InitiatingMessage__value_PR_SgNBAdditionRequest
;
out
=
&
pdu
.
choice
.
initiatingMessage
.
value
.
choice
.
SgNBAdditionRequest
;
out
=
&
pdu
.
choice
.
initiatingMessage
.
value
.
choice
.
SgNBAdditionRequest
;
ie
=
(
X2AP_SgNBAdditionRequest_IEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_SgNBAdditionRequest_IEs_t
));
ie
=
(
X2AP_SgNBAdditionRequest_IEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_SgNBAdditionRequest_IEs_t
));
...
@@ -1677,8 +1677,118 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request_ACK( x2ap_eNB_instance_t *in
...
@@ -1677,8 +1677,118 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request_ACK( x2ap_eNB_instance_t *in
x2ap_ENDC_sgnb_addition_req_ACK_t
*
x2ap_sgnb_addition_req_ACK
,
int
ue_id
)
x2ap_ENDC_sgnb_addition_req_ACK_t
*
x2ap_sgnb_addition_req_ACK
,
int
ue_id
)
{
{
return
0
;
X2AP_X2AP_PDU_t
pdu
;
X2AP_SgNBAdditionRequestAcknowledge_t
*
out
;
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
*
ie
;
X2AP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t
*
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
;
X2AP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item_t
*
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
;
}
uint8_t
*
buffer
;
uint32_t
len
;
int
ret
=
0
;
int
MeNB_UE_X2AP_id
=
ue_id
;
int
SgNB_UE_X2AP_id
=
0
;
// Currently hardcoded (dummy) values filling the fields of SgNB_addition_request message. To be substituted
// 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
;
int
e_RAB_ID
=
1
;
long
int
pDCPatSgNB
=
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
;
long
int
mCGresources
=
X2AP_EN_DC_ResourceConfiguration__mCGresources_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
(
x2ap_eNB_data_p
!=
NULL
);
x2ap_eNB_data_p
->
state
=
X2AP_ENB_STATE_WAITING
;
// Prepare the X2AP message to encode
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
X2AP_X2AP_PDU_PR_successfulOutcome
;
pdu
.
choice
.
successfulOutcome
.
procedureCode
=
X2AP_ProcedureCode_id_sgNBAdditionPreparation
;
pdu
.
choice
.
successfulOutcome
.
criticality
=
X2AP_Criticality_reject
;
pdu
.
choice
.
successfulOutcome
.
value
.
present
=
X2AP_SuccessfulOutcome__value_PR_SgNBAdditionRequestAcknowledge
;
out
=
&
pdu
.
choice
.
successfulOutcome
.
value
.
choice
.
SgNBAdditionRequestAcknowledge
;
// MeNB_UE_X2AP_id
ie
=
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
));
ie
->
id
=
X2AP_ProtocolIE_ID_id_MeNB_UE_X2AP_ID
;
ie
->
criticality
=
X2AP_Criticality_reject
;
ie
->
value
.
present
=
X2AP_SgNBAdditionRequestAcknowledge_IEs__value_PR_UE_X2AP_ID
;
ie
->
value
.
choice
.
UE_X2AP_ID
=
MeNB_UE_X2AP_id
;
//x2ap_id_get_id_source(&instance_p->id_manager, ue_id);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
// SgNB_UE_X2AP_id
ie
=
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
));
ie
->
id
=
X2AP_ProtocolIE_ID_id_SgNB_UE_X2AP_ID
;
ie
->
criticality
=
X2AP_Criticality_reject
;
ie
->
value
.
present
=
X2AP_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNB_UE_X2AP_ID
;
ie
->
value
.
choice
.
UE_X2AP_ID
=
SgNB_UE_X2AP_id
;
//x2ap_id_get_id_source(&instance_p->id_manager, ue_id);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ie
=
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
));
ie
->
id
=
X2AP_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList
;
ie
->
criticality
=
X2AP_Criticality_ignore
;
ie
->
value
.
present
=
X2AP_SgNBAdditionRequestAcknowledge_IEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList
;
for
(
int
i
=
0
;
i
<
e_rabs_admitted_tobeadded
;
i
++
)
{
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
=
(
X2AP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs_t
));
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
->
id
=
X2AP_ProtocolIE_ID_id_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
->
criticality
=
X2AP_Criticality_ignore
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
->
value
.
present
=
X2AP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_ItemIEs__value_PR_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
=
&
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
->
value
.
choice
.
E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item
;
{
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
e_RAB_ID
=
e_RAB_ID
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
en_DC_ResourceConfiguration
.
pDCPatSgNB
=
pDCPatSgNB
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
en_DC_ResourceConfiguration
.
mCGresources
=
mCGresources
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
en_DC_ResourceConfiguration
.
sCGresources
=
sCGresources
;
if
(
pDCPatSgNB
==
X2AP_EN_DC_ResourceConfiguration__pDCPatSgNB_present
){
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
present
=
X2AP_E_RABs_Admitted_ToBeAdded_SgNBAddReqAck_Item__resource_configuration_PR_sgNBPDCPpresent
;
INT32_TO_OCTET_STRING
(
e_SCG_rabs_tobeadded
.
gtp_teid
,
&
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
gTP_TEID
);
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
transportLayerAddress
.
size
=
e_SCG_rabs_tobeadded
.
eNB_addr
.
length
/
8
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
transportLayerAddress
.
bits_unused
=
e_SCG_rabs_tobeadded
.
eNB_addr
.
length
%
8
;
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
transportLayerAddress
.
buf
=
calloc
(
1
,
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
transportLayerAddress
.
size
);
memcpy
(
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
transportLayerAddress
.
buf
,
e_SCG_rabs_tobeadded
.
eNB_addr
.
buffer
,
e_RABS_AdmittedToBeAdded_SgNBAddReq_Item
->
resource_configuration
.
choice
.
sgNBPDCPpresent
.
s1_DL_GTPtunnelEndpoint
.
transportLayerAddress
.
size
);
}
}
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
E_RABs_Admitted_ToBeAdded_SgNBAddReqAckList
.
list
,
e_RABS_AdmittedToBeAdded_SgNBAddReq_ItemIEs
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ie
=
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
*
)
calloc
(
1
,
sizeof
(
X2AP_SgNBAdditionRequestAcknowledge_IEs_t
));
ie
->
id
=
X2AP_ProtocolIE_ID_id_SgNBtoMeNBContainer
;
ie
->
criticality
=
X2AP_Criticality_reject
;
ie
->
value
.
present
=
X2AP_SgNBAdditionRequestAcknowledge_IEs__value_PR_SgNBtoMeNBContainer
;
ie
->
value
.
choice
.
SgNBtoMeNBContainer
.
buf
=
(
uint8_t
*
)
calloc
(
x2ap_sgnb_addition_req_ACK
->
rrc_buffer_size
,
sizeof
(
uint8_t
));
memcpy
(
ie
->
value
.
choice
.
SgNBtoMeNBContainer
.
buf
,
x2ap_sgnb_addition_req_ACK
->
rrc_buffer
,
x2ap_sgnb_addition_req_ACK
->
rrc_buffer_size
);
ie
->
value
.
choice
.
SgNBtoMeNBContainer
.
size
=
x2ap_sgnb_addition_req_ACK
->
rrc_buffer_size
;
//4096;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
if
(
x2ap_eNB_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
X2AP_ERROR
(
"Failed to encode ENDC X2 SgNB_addition request message
\n
"
);
return
-
1
;
}
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
);
return
ret
;
}
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