Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-SMF
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
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-SMF
Commits
5cdf7a7c
Commit
5cdf7a7c
authored
Nov 18, 2019
by
wangyongshou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add handover failure msg
parent
2ed9054f
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
354 additions
and
1 deletion
+354
-1
src/NgapSmfLayer/ng_pdu_handover_failure.c
src/NgapSmfLayer/ng_pdu_handover_failure.c
+344
-0
src/NgapSmfLayer/ng_pdu_handover_failure.h
src/NgapSmfLayer/ng_pdu_handover_failure.h
+7
-0
src/smf_app/CMakeLists.txt
src/smf_app/CMakeLists.txt
+1
-0
src/smf_app/smf_app.cpp
src/smf_app/smf_app.cpp
+2
-1
No files found.
src/NgapSmfLayer/ng_pdu_handover_failure.c
0 → 100755
View file @
5cdf7a7c
#include "3gpp_23.003.h"
#include "Ngap_TAI.h"
#include "Ngap_NR-CGI.h"
//#include "asn1_conversions.h"
//#include "conversions.h"
#include "ng_pdu_handover_failure.h"
#include "Ngap_HandoverFailure.h"
#include "Ngap_CauseRadioNetwork.h"
#include "Ngap_UnsuccessfulOutcome.h"
#include "Ngap_NGAP-PDU.h"
#include "Ngap_ProtocolIE-Field.h"
#include "Ngap_ProcedureCode.h"
#include "Ngap_Criticality.h"
#include "Ngap_Cause.h"
#include "Ngap_CriticalityDiagnostics.h"
#include "Ngap_CriticalityDiagnostics-IE-List.h"
#include "Ngap_CriticalityDiagnostics-IE-Item.h"
#include "Ngap_TimeStamp.h"
#include "common_defs.h"
#include "common_types.h"
#include "../common/ngap/ngap_common.h"
#include "INTEGER.h"
#include "asn_SEQUENCE_OF.h"
#include "OCTET_STRING.h"
#define BUF_LEN 1024
Ngap_HandoverFailureIEs_t
*
make_handover_failure_CriticalityDiagnostics
()
{
Ngap_HandoverFailureIEs_t
*
ie
;
ie
=
calloc
(
1
,
sizeof
(
Ngap_HandoverFailureIEs_t
));
ie
->
id
=
Ngap_ProtocolIE_ID_id_CriticalityDiagnostics
;
ie
->
criticality
=
Ngap_Criticality_ignore
;
ie
->
value
.
present
=
Ngap_HandoverFailureIEs__value_PR_CriticalityDiagnostics
;
return
ie
;
}
Ngap_HandoverFailureIEs_t
*
make_handover_failure_CauseRadioNetwork
(
const
long
radioNetwork
)
{
Ngap_HandoverFailureIEs_t
*
ie
=
NULL
;
ie
=
calloc
(
1
,
sizeof
(
Ngap_HandoverFailureIEs_t
));
ie
->
id
=
Ngap_ProtocolIE_ID_id_Cause
;
ie
->
criticality
=
Ngap_Criticality_ignore
;
ie
->
value
.
present
=
Ngap_HandoverFailureIEs__value_PR_Cause
;
ie
->
value
.
choice
.
Cause
.
present
=
Ngap_Cause_PR_radioNetwork
;
ie
->
value
.
choice
.
Cause
.
choice
.
radioNetwork
=
radioNetwork
;
printf
(
"radioNetwork:0x%x
\n
"
,
ie
->
value
.
choice
.
Cause
.
choice
.
radioNetwork
);
return
ie
;
}
Ngap_HandoverFailureIEs_t
*
make_handover_failure_AMF_UE_NGAP_ID
(
uint64_t
amf_UE_NGAP_ID
)
{
Ngap_HandoverFailureIEs_t
*
ie
=
NULL
;
ie
=
calloc
(
1
,
sizeof
(
Ngap_HandoverFailureIEs_t
));
ie
->
id
=
Ngap_ProtocolIE_ID_id_AMF_UE_NGAP_ID
;
ie
->
criticality
=
Ngap_Criticality_ignore
;
ie
->
value
.
present
=
Ngap_HandoverFailureIEs__value_PR_AMF_UE_NGAP_ID
;
asn_ulong2INTEGER
(
&
ie
->
value
.
choice
.
AMF_UE_NGAP_ID
,
amf_UE_NGAP_ID
&
AMF_UE_NGAP_ID_MASK_
);
printf
(
"AMF_UE_NGAP_ID:0x%x
\n
"
,
amf_UE_NGAP_ID
);
return
ie
;
}
void
add_pdu_handover_failure_ie
(
Ngap_HandoverFailure_t
*
ngapPDUHandoverFailure
,
Ngap_HandoverFailureIEs_t
*
ie
)
{
int
ret
;
ret
=
ASN_SEQUENCE_ADD
(
&
ngapPDUHandoverFailure
->
protocolIEs
.
list
,
ie
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to add ie
\n
"
);
return
;
}
return
;
}
Ngap_NGAP_PDU_t
*
ngap_generate_ng_handover_failure
(
const
char
*
inputBuf
)
{
Ngap_NGAP_PDU_t
*
pdu
=
NULL
;
pdu
=
calloc
(
1
,
sizeof
(
Ngap_NGAP_PDU_t
));
pdu
->
present
=
Ngap_NGAP_PDU_PR_unsuccessfulOutcome
;
pdu
->
choice
.
unsuccessfulOutcome
=
calloc
(
1
,
sizeof
(
Ngap_UnsuccessfulOutcome_t
));
pdu
->
choice
.
unsuccessfulOutcome
->
procedureCode
=
Ngap_ProcedureCode_id_HandoverResourceAllocation
;
pdu
->
choice
.
unsuccessfulOutcome
->
criticality
=
Ngap_Criticality_reject
;
pdu
->
choice
.
unsuccessfulOutcome
->
value
.
present
=
Ngap_UnsuccessfulOutcome__value_PR_HandoverFailure
;
Ngap_HandoverFailure_t
*
ngapPDUHandoverFailure
=
NULL
;
ngapPDUHandoverFailure
=
&
pdu
->
choice
.
unsuccessfulOutcome
->
value
.
choice
.
HandoverFailure
;
Ngap_HandoverFailureIEs_t
*
ie
=
NULL
;
//Ngap_AMF_UE_NGAP_ID_t
uint64_t
amf_ue_ngap_id
=
0x77
;
ie
=
make_handover_failure_AMF_UE_NGAP_ID
(
amf_ue_ngap_id
);
add_pdu_handover_failure_ie
(
ngapPDUHandoverFailure
,
ie
);
//Cause:CauseRadioNetwork
ie
=
make_handover_failure_CauseRadioNetwork
(
Ngap_CauseRadioNetwork_unspecified
);
add_pdu_handover_failure_ie
(
ngapPDUHandoverFailure
,
ie
);
//CriticalityDiagnostics
ie
=
make_handover_failure_CriticalityDiagnostics
();
Ngap_ProcedureCode_t
*
procedureCode
=
calloc
(
1
,
sizeof
(
Ngap_ProcedureCode_t
));
*
procedureCode
=
0x81
;
ie
->
value
.
choice
.
CriticalityDiagnostics
.
procedureCode
=
procedureCode
;
Ngap_TriggeringMessage_t
*
triggeringMessage
=
calloc
(
1
,
sizeof
(
Ngap_TriggeringMessage_t
));
*
triggeringMessage
=
0x01
;
ie
->
value
.
choice
.
CriticalityDiagnostics
.
triggeringMessage
=
triggeringMessage
;
Ngap_Criticality_t
*
procedureCriticality
=
calloc
(
1
,
sizeof
(
Ngap_Criticality_t
));
*
procedureCriticality
=
0x01
;
ie
->
value
.
choice
.
CriticalityDiagnostics
.
procedureCriticality
=
procedureCriticality
;
printf
(
"procedureCode:0x%x,triggeringMessage:0x%x,procedureCriticality:0x%x
\n
"
,
*
procedureCode
,
*
triggeringMessage
,
*
procedureCriticality
);
Ngap_CriticalityDiagnostics_IE_List_t
*
pCriticalityDiagnostics_IE_List
=
calloc
(
1
,
sizeof
(
Ngap_CriticalityDiagnostics_IE_List_t
));
Ngap_CriticalityDiagnostics_IE_Item_t
*
critiDiagIEsItem
=
calloc
(
1
,
sizeof
(
Ngap_CriticalityDiagnostics_IE_Item_t
));
critiDiagIEsItem
->
iECriticality
=
0x01
;
critiDiagIEsItem
->
iE_ID
=
0x01
;
critiDiagIEsItem
->
typeOfError
=
0x00
;
printf
(
"iECriticality:0x%x,iE_ID:0x%x,typeOfError:0x%x
\n
"
,
critiDiagIEsItem
->
iECriticality
,
critiDiagIEsItem
->
iE_ID
,
critiDiagIEsItem
->
typeOfError
);
ie
->
value
.
choice
.
CriticalityDiagnostics
.
iEsCriticalityDiagnostics
=
pCriticalityDiagnostics_IE_List
;
ASN_SEQUENCE_ADD
(
&
pCriticalityDiagnostics_IE_List
->
list
,
critiDiagIEsItem
);
add_pdu_handover_failure_ie
(
ngapPDUHandoverFailure
,
ie
);
return
pdu
;
}
int
ngap_amf_handle_ng_pdu_handover_failure
(
const
sctp_assoc_id_t
assoc_id
,
const
sctp_stream_id_t
stream
,
Ngap_NGAP_PDU_t
*
pdu
){
int
rc
=
RETURNok
;
#if 0
gnb_description_t * gnb_association = NULL;
//gnb_description_t * gnb_ref = NULL;
uint32_t gnb_id = 0;
char *gnb_name = NULL;
int gnb_name_size = 0;
int ta_ret = 0;
uint32_t max_gnb_connected = 0;
int i = 0;
#endif
int
i
=
0
;
Ngap_HandoverFailure_t
*
container
=
NULL
;
Ngap_HandoverFailureIEs_t
*
ie
=
NULL
;
Ngap_HandoverFailureIEs_t
*
ie_gnb_name
=
NULL
;
unsigned
long
amf_ue_ngap_id
=
0
;
uint32_t
radioNetwork
=
0
;
long
procedureCode
=
0
;
long
triggeringMessage
=
0
;
long
procedureCriticality
=
0
;
long
iECriticality
=
0
;
long
iE_ID
=
0
;
long
typeOfError
=
0
;
DevAssert
(
pdu
!=
NULL
);
//OAILOG_INFO(LOG_NGAP,"----------------------- DECODED NG SETUP RESPONSE NGAP MSG --------------------------\n");
//asn_fprint(stdout, &asn_DEF_Ngap_NGAP_PDU, pdu);
//OAILOG_INFO(LOG_NGAP,"----------------------- DECODED NG SETUP RESPONSE NGAP MSG --------------------------\n");
container
=
&
pdu
->
choice
.
unsuccessfulOutcome
->
value
.
choice
.
HandoverFailure
;
//AMF_UE_NGAP_ID
NGAP_FIND_PROTOCOLIE_BY_ID
(
Ngap_HandoverFailureIEs_t
,
ie
,
container
,
Ngap_ProtocolIE_ID_id_AMF_UE_NGAP_ID
,
false
);
if
(
ie
)
{
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
AMF_UE_NGAP_ID
,
&
amf_ue_ngap_id
);
printf
(
"amf_ue_ngap_id, 0x%x
\n
"
,
amf_ue_ngap_id
);
}
//cause
NGAP_FIND_PROTOCOLIE_BY_ID
(
Ngap_HandoverFailureIEs_t
,
ie
,
container
,
Ngap_ProtocolIE_ID_id_Cause
,
false
);
if
(
ie
)
{
switch
(
ie
->
value
.
choice
.
Cause
.
present
)
{
case
Ngap_Cause_PR_radioNetwork
:
{
radioNetwork
=
ie
->
value
.
choice
.
Cause
.
choice
.
radioNetwork
;
printf
(
"radioNetwork, 0x%x
\n
"
,
radioNetwork
);
}
break
;
case
Ngap_Cause_PR_transport
:
{
}
break
;
case
Ngap_Cause_PR_nas
:
{
}
break
;
case
Ngap_Cause_PR_protocol
:
{
}
break
;
case
Ngap_Cause_PR_misc
:
{
}
break
;
default:
printf
(
"don't know cause type:%d
\n
"
,
ie
->
value
.
choice
.
Cause
.
present
);
}
}
//CriticalityDiagnostics
NGAP_FIND_PROTOCOLIE_BY_ID
(
Ngap_HandoverFailureIEs_t
,
ie
,
container
,
Ngap_ProtocolIE_ID_id_CriticalityDiagnostics
,
false
);
if
(
ie
)
{
procedureCode
=
*
ie
->
value
.
choice
.
CriticalityDiagnostics
.
procedureCode
;
triggeringMessage
=
*
ie
->
value
.
choice
.
CriticalityDiagnostics
.
triggeringMessage
;
procedureCriticality
=
*
ie
->
value
.
choice
.
CriticalityDiagnostics
.
procedureCriticality
;
printf
(
"procedureCode:0x%x,triggeringMessage:0x%x,procedureCriticality:0x%x
\n
"
,
procedureCode
,
triggeringMessage
,
procedureCriticality
);
Ngap_CriticalityDiagnostics_IE_List_t
*
criticality_container
=
ie
->
value
.
choice
.
CriticalityDiagnostics
.
iEsCriticalityDiagnostics
;
for
(
i
=
0
;
i
<
criticality_container
->
list
.
count
;
i
++
)
{
Ngap_CriticalityDiagnostics_IE_Item_t
*
criticalityIes_p
=
criticality_container
->
list
.
array
[
i
];
if
(
!
criticalityIes_p
)
continue
;
iECriticality
=
criticalityIes_p
->
iECriticality
;
iE_ID
=
criticalityIes_p
->
iE_ID
;
typeOfError
=
criticalityIes_p
->
typeOfError
;
printf
(
"iECriticality:0x%x,iE_ID:0x%x,typeOfError:0x%x
\n
"
,
iECriticality
,
iE_ID
,
typeOfError
);
}
}
return
rc
;
}
int
make_NGAP_PduHandOver_Failure
(
const
char
*
inputBuf
,
const
char
*
OutputBuf
)
{
printf
(
"pdu handover failure, start--------------------
\n\n
"
);
int
ret
=
0
;
int
rc
=
RETURNok
;
const
sctp_assoc_id_t
assoc_id
=
0
;
const
sctp_stream_id_t
stream
=
0
;
Ngap_NGAP_PDU_t
message
=
{
0
};
//wys: 1024 ?
size_t
buffer_size
=
1024
;
void
*
buffer
=
calloc
(
1
,
buffer_size
);
asn_enc_rval_t
er
;
Ngap_NGAP_PDU_t
*
pdu
=
ngap_generate_ng_handover_failure
(
inputBuf
);
if
(
!
pdu
)
goto
ERROR
;
asn_fprint
(
stderr
,
&
asn_DEF_Ngap_NGAP_PDU
,
pdu
);
ret
=
check_NGAP_pdu_constraints
(
pdu
);
if
(
ret
<
0
)
{
printf
(
"ng pdu handover failure Constraint validation failed
\n
"
);
rc
=
RETURNerror
;
goto
ERROR
;
}
//encode
er
=
aper_encode_to_buffer
(
&
asn_DEF_Ngap_NGAP_PDU
,
NULL
,
pdu
,
buffer
,
buffer_size
);
if
(
er
.
encoded
<
0
)
{
printf
(
"ng pdu handover failure encode failed,er.encoded:%d
\n
"
,
er
.
encoded
);
rc
=
RETURNerror
;
goto
ERROR
;
}
bstring
msgBuf
=
blk2bstr
(
buffer
,
er
.
encoded
);
//decode
ngap_amf_decode_pdu
(
&
message
,
msgBuf
);
ngap_amf_handle_ng_pdu_handover_failure
(
0
,
0
,
&
message
);
//Free pdu
if
(
pdu
)
ASN_STRUCT_FREE
(
asn_DEF_Ngap_NGAP_PDU
,
pdu
);
if
(
buffer
)
{
free
(
buffer
);
buffer
=
NULL
;
}
printf
(
"pdu handover failure, finish--------------------
\n\n
"
);
return
rc
;
ERROR:
//Free pdu
if
(
pdu
)
ASN_STRUCT_FREE
(
asn_DEF_Ngap_NGAP_PDU
,
pdu
);
if
(
buffer
)
{
free
(
buffer
);
buffer
=
NULL
;
}
return
rc
;
}
src/NgapSmfLayer/ng_pdu_handover_failure.h
0 → 100755
View file @
5cdf7a7c
#ifndef NG_PDU_HANDOVER_FAILURE_H_
#define NG_PDU_HANDOVER_FAILURE_H_
int
make_NGAP_PduHandOver_Failure
(
const
char
*
inputBuf
,
const
char
*
outputBuf
);
#endif
src/smf_app/CMakeLists.txt
View file @
5cdf7a7c
...
...
@@ -47,6 +47,7 @@ add_library (SMF STATIC
${
SRC_TOP_DIR
}
/NgapSmfLayer/ng_pdu_handover_command.c
${
SRC_TOP_DIR
}
/NgapSmfLayer/ng_pdu_handover_preparation_failure.c
${
SRC_TOP_DIR
}
/NgapSmfLayer/ng_pdu_handover_request_acknowledge.c
${
SRC_TOP_DIR
}
/NgapSmfLayer/ng_pdu_handover_failure.c
smf_app.cpp
smf_config.cpp
smf_context.cpp
...
...
src/smf_app/smf_app.cpp
View file @
5cdf7a7c
...
...
@@ -59,7 +59,7 @@ extern "C"{
#include "../NgapSmfLayer/ng_pdu_handover_command.h"
#include "../NgapSmfLayer/ng_pdu_handover_preparation_failure.h"
#include "../NgapSmfLayer/ng_pdu_handover_request_acknowledge.h"
#include "../NgapSmfLayer/ng_pdu_handover_failure.h"
}
#include <stdexcept>
...
...
@@ -2412,6 +2412,7 @@ void smf_app::create_n2_sm_information(std::shared_ptr<itti_n11_create_sm_contex
make_NGAP_PduHandOver_Req_Ack
(
""
,
""
);
make_NGAP_PduHandOver_Failure
(
""
,
""
);
//make_NGAP_PduSessionResourceReleaseCommand("", "");
...
...
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