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
ad82602e
Commit
ad82602e
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
5bda1102
Changes
3
Hide 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 @
ad82602e
...
...
@@ -85,13 +85,15 @@ 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
->
choice
.
cg_Config
=
calloc
(
1
,
sizeof
(
NR_CG_Config_IEs_t
));
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
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %jd)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
cg_Config
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_Config
->
scg_CellGroupConfig
=
calloc
(
1
,
sizeof
(
OCTET_STRING_t
));
OCTET_STRING_fromBuf
(
cg_Config
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_Config
->
scg_CellGroupConfig
,
(
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
);
for
(
int
i
=
0
;
i
<
(
enc_rval
.
encoded
+
7
)
>>
3
;
i
++
)
{
...
...
@@ -117,8 +119,11 @@ int generate_CG_Config(gNB_RRC_INST *rrc,
fd
=
fopen
(
"rbconfig.raw"
,
"w"
);
fwrite
((
void
*
)
buffer
,
1
,(
size_t
)((
enc_rval
.
encoded
+
7
)
>>
3
),
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
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
ad82602e
...
...
@@ -106,7 +106,6 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
MessageDef
*
msg
;
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
...
...
@@ -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
));
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
asn_enc_rval_t
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CG_Config
,
NULL
,
(
void
*
)
CG_Config
,
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
...
...
openair2/X2AP/x2ap_eNB_generate_messages.c
View file @
ad82602e
...
...
@@ -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_emptionVulnerability_t
pre_emptionVulnerability
=
X2AP_Pre_emptionVulnerability_not_pre_emptable
;
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
.
eNB_addr
.
length
=
24
;
uint8_t
buf
[
20
]
=
{
0
};
...
...
@@ -1560,9 +1560,9 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
/* Prepare the X2AP message to encode */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
X2AP_X2AP_PDU_PR_initiatingMessage
;
pdu
.
choice
.
successfulOutcom
e
.
procedureCode
=
X2AP_ProcedureCode_id_sgNBAdditionPreparation
;
pdu
.
choice
.
successfulOutcom
e
.
criticality
=
X2AP_Criticality_reject
;
pdu
.
choice
.
successfulOutcom
e
.
value
.
present
=
X2AP_InitiatingMessage__value_PR_SgNBAdditionRequest
;
pdu
.
choice
.
initiatingMessag
e
.
procedureCode
=
X2AP_ProcedureCode_id_sgNBAdditionPreparation
;
pdu
.
choice
.
initiatingMessag
e
.
criticality
=
X2AP_Criticality_reject
;
pdu
.
choice
.
initiatingMessag
e
.
value
.
present
=
X2AP_InitiatingMessage__value_PR_SgNBAdditionRequest
;
out
=
&
pdu
.
choice
.
initiatingMessage
.
value
.
choice
.
SgNBAdditionRequest
;
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
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