Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-AMF-Simple
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
CommunityXG
OpenXG-AMF-Simple
Commits
f2c76a5d
Commit
f2c76a5d
authored
Dec 28, 2020
by
Niuhaiwen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
support de-register and Identity procedure
parent
82814a01
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
221 additions
and
96 deletions
+221
-96
src/amf-app/amf_n1.cpp
src/amf-app/amf_n1.cpp
+88
-58
src/amf-app/amf_n11.cpp
src/amf-app/amf_n11.cpp
+28
-1
src/contexts/pdu_session_context.cpp
src/contexts/pdu_session_context.cpp
+2
-0
src/itti/msgs/itti_msg_n2.hpp
src/itti/msgs/itti_msg_n2.hpp
+4
-1
src/nas/msgs/IdentityRequest.cpp
src/nas/msgs/IdentityRequest.cpp
+15
-13
src/nas/msgs/IdentityResponse.cpp
src/nas/msgs/IdentityResponse.cpp
+1
-1
src/ngap/ngap_app/ngap_message_callback.hpp
src/ngap/ngap_app/ngap_message_callback.hpp
+77
-19
src/sbi/amf_server/impl/N1N2MessageCollectionDocumentApiImpl.cpp
.../amf_server/impl/N1N2MessageCollectionDocumentApiImpl.cpp
+6
-3
No files found.
src/amf-app/amf_n1.cpp
View file @
f2c76a5d
...
...
@@ -197,7 +197,7 @@ void amf_n1::handle_itti_message(itti_uplink_nas_data_ind &nas_data_ind)
else
{
Logger
::
amf_n1
().
error
(
"No existing nas_context with GUTI %s"
,
nas_data_ind
.
guti
.
c_str
());
return
;
//
return;
}
}
else
...
...
@@ -342,10 +342,15 @@ void amf_n1::nas_signalling_establishment_request_handle(SecurityHeaderType type
case
SERVICE_REQUEST
:
{
Logger
::
amf_n1
().
debug
(
"Received service request message, handling..."
);
nc
.
get
()
->
security_ctx
->
ul_count
.
seq_num
=
ulCount
;
if
(
nc
.
get
())
nc
.
get
()
->
security_ctx
->
ul_count
.
seq_num
=
ulCount
;
service_request_handle
(
true
,
nc
,
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
UE_INIT_DEREGISTER
:{
Logger
::
amf_n1
().
debug
(
"received initialUeMessage de-registration request messgae , handle ..."
);
//ue_initiate_de_registration_handle(ran_ue_ngap_id, amf_ue_ngap_id, plain_msg);
}
break
;
default:
Logger
::
amf_n1
().
error
(
"No handler for NAS message 0x%x"
,
message_type
);
}
...
...
@@ -356,6 +361,7 @@ void amf_n1::uplink_nas_msg_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
{
uint8_t
*
buf
=
(
uint8_t
*
)
bdata
(
plain_msg
);
uint8_t
message_type
=
*
(
buf
+
2
);
Logger
::
amf_n1
().
debug
(
"received message(0x%x)"
,
message_type
);
switch
(
message_type
)
{
case
AUTHENTICATION_RESPONSE
:
...
...
@@ -394,6 +400,12 @@ void amf_n1::uplink_nas_msg_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
ue_initiate_de_registration_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
IDENTITY_RESPONSE
:
{
Logger
::
amf_n1
().
debug
(
"received identity response messgae , handle ..."
);
identity_response_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
REGISTRATION_COMPLETE
:
{
Logger
::
amf_n1
().
debug
(
"Received registration complete message, handling..."
);
...
...
@@ -402,67 +414,63 @@ void amf_n1::uplink_nas_msg_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
break
;
default:
{
Logger
::
amf_n1
().
debug
(
"No message available (0x%x)"
,
message_type
);
//TODO:
}
}
}
//------------------------------------------------------------------------------
void
amf_n1
::
uplink_nas_msg_handle
(
uint32_t
ran_ue_ngap_id
,
long
amf_ue_ngap_id
,
bstring
plain_msg
,
plmn_t
plmn
)
{
uint8_t
*
buf
=
(
uint8_t
*
)
bdata
(
plain_msg
);
void
amf_n1
::
uplink_nas_msg_handle
(
uint32_t
ran_ue_ngap_id
,
long
amf_ue_ngap_id
,
bstring
plain_msg
,
plmn_t
plmn
)
{
uint8_t
*
buf
=
(
uint8_t
*
)
bdata
(
plain_msg
);
uint8_t
message_type
=
*
(
buf
+
2
);
switch
(
message_type
)
{
case
AUTHENTICATION_RESPONSE
:
{
Logger
::
amf_n1
().
debug
(
"Received authentication response message, handling..."
);
authentication_response_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
AUTHENTICATION_FAILURE
:
{
Logger
::
amf_n1
().
debug
(
"Received authentication failure message, handling..."
);
authentication_failure_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
SECURITY_MODE_COMPLETE
:
{
Logger
::
amf_n1
().
debug
(
"Received security mode complete message, handling..."
);
security_mode_complete_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
SECURITY_MODE_REJECT
:
{
Logger
::
amf_n1
().
debug
(
"Received security mode reject message, handling..."
);
security_mode_reject_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
UL_NAS_TRANSPORT
:
{
Logger
::
amf_n1
().
debug
(
"Received ul NAS transport message, handling..."
);
ul_nas_transport_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
,
plmn
);
}
break
;
case
UE_INIT_DEREGISTER
:
{
Logger
::
amf_n1
().
debug
(
"Received de-registration request message, handling..."
);
ue_initiate_de_registration_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
REGISTRATION_COMPLETE
:
{
Logger
::
amf_n1
().
debug
(
"Received registration complete message, handling..."
);
//TODO
}
break
;
default:
{
//TODO:
}
switch
(
message_type
)
{
case
AUTHENTICATION_RESPONSE
:
{
Logger
::
amf_n1
().
debug
(
"Received authentication response message, handling..."
);
authentication_response_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
AUTHENTICATION_FAILURE
:
{
Logger
::
amf_n1
().
debug
(
"Received authentication failure message, handling..."
);
authentication_failure_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
SECURITY_MODE_COMPLETE
:
{
Logger
::
amf_n1
().
debug
(
"Received security mode complete message, handling..."
);
security_mode_complete_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
SECURITY_MODE_REJECT
:
{
Logger
::
amf_n1
().
debug
(
"Received security mode reject message, handling..."
);
security_mode_reject_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
UL_NAS_TRANSPORT
:
{
Logger
::
amf_n1
().
debug
(
"Received ul NAS transport message, handling..."
);
ul_nas_transport_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
,
plmn
);
}
break
;
case
UE_INIT_DEREGISTER
:
{
Logger
::
amf_n1
().
debug
(
"Received de-registration request message, handling..."
);
ue_initiate_de_registration_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
IDENTITY_RESPONSE
:
{
Logger
::
amf_n1
().
debug
(
"received identity response messgae , handle ..."
);
identity_response_handle
(
ran_ue_ngap_id
,
amf_ue_ngap_id
,
plain_msg
);
}
break
;
case
REGISTRATION_COMPLETE
:
{
Logger
::
amf_n1
().
debug
(
"Received registration complete message, handling..."
);
//TODO
}
break
;
default:
{
//TODO:
}
}
}
// nas message decode
//------------------------------------------------------------------------------
bool
amf_n1
::
check_security_header_type
(
SecurityHeaderType
&
type
,
uint8_t
*
buffer
)
...
...
@@ -1349,7 +1357,8 @@ void amf_n1::handle_auth_vector_successful_result(std::shared_ptr<nas_context> n
{
nc
.
get
()
->
security_ctx
=
new
nas_secu_ctx
();
if
(
nc
.
get
()
->
security_ctx
&&
nc
.
get
()
->
ngKsi
!=
NAS_KEY_SET_IDENTIFIER_NOT_AVAILABLE
)
ngksi
=
(
nc
.
get
()
->
security_ctx
->
ngksi
+
1
)
%
(
NGKSI_MAX_VALUE
+
1
);
//ngksi = (nc.get()->security_ctx->ngksi + 1) % (NGKSI_MAX_VALUE + 1);
ngksi
=
(
nc
.
get
()
->
amf_ue_ngap_id
+
1
)
%
(
NGKSI_MAX_VALUE
+
1
);
// ensure which vector is available?
nc
.
get
()
->
ngKsi
=
ngksi
;
}
...
...
@@ -1955,12 +1964,33 @@ void amf_n1::run_initial_registration_procedure()
//------------------------------------------------------------------------------
void
amf_n1
::
ue_initiate_de_registration_handle
(
uint32_t
ran_ue_ngap_id
,
long
amf_ue_ngap_id
,
bstring
nas
)
{
string
guti
=
"1234567890"
;
//need modify
string
guti
=
"1234567890"
;
//need modify
_5G_GUTI_t
Guti
;
_5GSMobilityIdentity
*
ulNas
=
new
_5GSMobilityIdentity
();
ulNas
->
decodefrombuffer
((
uint8_t
*
)
bdata
(
nas
)
+
4
,
blength
(
nas
),
false
);
ulNas
->
get5GGUTI
(
Guti
);
delete
ulNas
;
string
amf_region_id
=
std
::
to_string
(
Guti
.
amf_region_id
);
guti
=
Guti
.
mcc
+
Guti
.
mnc
+
std
::
to_string
(
Guti
.
amf_region_id
)
+
std
::
to_string
(
Guti
.
amf_set_id
)
+
std
::
to_string
(
Guti
.
amf_pointer
)
+
std
::
to_string
(
Guti
.
_5g_tmsi
);
std
::
shared_ptr
<
nas_context
>
nc
;
if
(
!
is_guti_2_nas_context
(
guti
))
return
;
nc
=
guti_2_nas_context
(
guti
);
nc
.
get
()
->
is_auth_vectors_present
=
false
;
nc
.
get
()
->
is_current_security_available
=
false
;
nc
.
get
()
->
is_auth_vectors_present
=
false
;
nc
.
get
()
->
is_current_security_available
=
false
;
nc
.
get
()
->
security_ctx
->
sc_type
=
SECURITY_CTX_TYPE_NOT_AVAILABLE
;
Logger
::
ngap
().
debug
(
"sending itti ue context release command to TASK_AMF_N2"
);
itti_ue_context_release_command
*
itti_msg
=
new
itti_ue_context_release_command
(
TASK_AMF_N1
,
TASK_AMF_N2
);
itti_msg
->
amf_ue_ngap_id
=
amf_ue_ngap_id
;
itti_msg
->
ran_ue_ngap_id
=
ran_ue_ngap_id
;
itti_msg
->
cause
.
setChoiceOfCause
(
Ngap_Cause_PR_nas
);
itti_msg
->
cause
.
setValue
(
2
);
//cause nas(2)--deregister
std
::
shared_ptr
<
itti_ue_context_release_command
>
i
=
std
::
shared_ptr
<
itti_ue_context_release_command
>
(
itti_msg
);
int
ret
=
itti_inst
->
send_msg
(
i
);
if
(
0
!=
ret
)
{
Logger
::
ngap
().
error
(
"Could not send ITTI message %s to task TASK_AMF_N2"
,
i
->
get_msg_name
());
}
}
//------------------------------------------------------------------------------
...
...
src/amf-app/amf_n11.cpp
View file @
f2c76a5d
...
...
@@ -270,7 +270,34 @@ void amf_n11::handle_itti_message(itti_smf_services_consumer &smf)
{
case
PDU_SESSION_INITIAL_REQUEST
:
{
handle_pdu_session_initial_request
(
supi
,
psc
,
smf_addr
,
smf
.
sm_msg
,
dnn
);
//get pti
uint8_t
*
sm_msg
=
(
uint8_t
*
)
bdata
(
smf
.
sm_msg
);
uint8_t
pti
=
sm_msg
[
2
];
Logger
::
amf_n1
().
debug
(
"decoded PTI for PDUSessionEstablishmentRequest(0x%x)"
,
pti
);
if
(
psc
.
get
()
->
isn1sm_avaliable
&&
psc
.
get
()
->
isn2sm_avaliable
){
itti_n1n2_message_transfer_request
*
itti_msg
=
new
itti_n1n2_message_transfer_request
(
TASK_AMF_N11
,
TASK_AMF_APP
);
itti_msg
->
supi
=
supi
;
uint8_t
accept_len
=
blength
(
psc
.
get
()
->
n1sm
);
uint8_t
*
accept
=
(
uint8_t
*
)
calloc
(
1
,
accept_len
);
memcpy
(
accept
,
(
uint8_t
*
)
bdata
(
psc
.
get
()
->
n1sm
),
accept_len
);
accept
[
2
]
=
pti
;
itti_msg
->
n1sm
=
blk2bstr
(
accept
,
accept_len
);
free
(
accept
);
itti_msg
->
is_n1sm_set
=
true
;
itti_msg
->
n2sm
=
psc
.
get
()
->
n2sm
;
itti_msg
->
is_n2sm_set
=
true
;
itti_msg
->
pdu_session_id
=
psc
.
get
()
->
pdu_session_id
;
std
::
shared_ptr
<
itti_n1n2_message_transfer_request
>
i
=
std
::
shared_ptr
<
itti_n1n2_message_transfer_request
>
(
itti_msg
);
int
ret
=
itti_inst
->
send_msg
(
i
);
if
(
0
!=
ret
)
{
Logger
::
amf_server
().
error
(
"Could not send ITTI message %s to task TASK_AMF_APP"
,
i
->
get_msg_name
());
}
}
else
{
psc
.
get
()
->
isn2sm_avaliable
=
false
;
handle_pdu_session_initial_request
(
supi
,
psc
,
smf_addr
,
smf
.
sm_msg
,
dnn
);
}
//handle_pdu_session_initial_request(supi, psc, smf_addr, smf.sm_msg, dnn);
}
break
;
case
EXISTING_PDU_SESSION
:
...
...
src/contexts/pdu_session_context.cpp
View file @
f2c76a5d
...
...
@@ -31,6 +31,8 @@
//------------------------------------------------------------------------------
pdu_session_context
::
pdu_session_context
()
{
smf_available
=
false
;
isn2sm_avaliable
=
false
;
isn1sm_avaliable
=
false
;
}
//------------------------------------------------------------------------------
...
...
src/itti/msgs/itti_msg_n2.hpp
View file @
f2c76a5d
...
...
@@ -82,7 +82,10 @@ class itti_initial_context_setup_request : public itti_msg_n2
{
public:
itti_initial_context_setup_request
(
const
task_id_t
origin
,
const
task_id_t
destination
)
:
itti_msg_n2
(
INITIAL_CONTEXT_SETUP_REQUEST
,
origin
,
destination
)
{}
itti_initial_context_setup_request
(
const
itti_initial_context_setup_request
&
i
)
:
itti_msg_n2
(
i
)
{}
itti_initial_context_setup_request
(
const
itti_initial_context_setup_request
&
i
)
:
itti_msg_n2
(
i
)
{
is_pdu_exist
=
false
;
isn2sm_avaliable
=
false
;
}
uint32_t
ran_ue_ngap_id
;
long
amf_ue_ngap_id
;
bstring
kgnb
;
...
...
src/nas/msgs/IdentityRequest.cpp
View file @
f2c76a5d
...
...
@@ -59,24 +59,26 @@ int IdentityRequest::encode2buffer(uint8_t *buf, int len) {
Logger
::
nas_mm
().
debug
(
"encoding IdentityRequest message"
);
int
encoded_size
=
0
;
if
(
!
plain_header
)
{
Logger
::
nas_mm
().
error
(
"Mand
ato
ry IE missing Header"
);
Logger
::
nas_mm
().
error
(
"Mand
onta
ry IE missing Header"
);
return
0
;
}
if
(
!
(
plain_header
->
encode2buffer
(
buf
,
len
)))
return
0
;
encoded_size
+=
3
;
if
(
!
_5gs_identity_type
)
{
Logger
::
nas_mm
().
warn
(
"IE _5gs_identity_type is not available"
);
}
else
{
if
(
int
size
=
_5gs_identity_type
->
encode2buffer
(
buf
+
encoded_size
,
len
-
encoded_size
))
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"encoding _5gs_identity_type error"
);
return
0
;
if
(
!
(
plain_header
->
encode2buffer
(
buf
,
len
)))
return
0
;
encoded_size
+=
3
;
if
(
!
_5gs_identity_type
)
{
Logger
::
nas_mm
().
warn
(
"IE _5gs_identity_type is not avaliable"
);
}
else
{
int
size
=
_5gs_identity_type
->
encode2buffer
(
buf
+
encoded_size
,
len
-
encoded_size
);
if
(
size
)
{
encoded_size
+=
size
;
}
else
{
Logger
::
nas_mm
().
error
(
"encoding _5gs_identity_type error"
);
return
0
;
}
}
Logger
::
nas_mm
().
debug
(
"encoded IdentityRequest message len(%d)"
,
encoded_size
);
return
1
;
return
encoded_size
;
}
//------------------------------------------------------------------------------
...
...
src/nas/msgs/IdentityResponse.cpp
View file @
f2c76a5d
...
...
@@ -109,6 +109,6 @@ int IdentityResponse::decodefrombuffer(NasMmPlainHeader *header, uint8_t *buf, i
decoded_size
+=
ie_mobility_id
->
decodefrombuffer
(
buf
+
decoded_size
,
len
-
decoded_size
,
false
);
Logger
::
nas_mm
().
debug
(
"decoded_size(%d)"
,
decoded_size
);
Logger
::
nas_mm
().
debug
(
"decoded IdentityResponse message len(%d)"
,
decoded_size
);
return
true
;
}
src/ngap/ngap_app/ngap_message_callback.hpp
View file @
f2c76a5d
...
...
@@ -199,31 +199,89 @@ int ngap_amf_handle_ue_context_release_complete(const sctp_assoc_id_t assoc_id,
//------------------------------------------------------------------------------
int
ngap_amf_handle_pdu_session_resource_setup_response
(
const
sctp_assoc_id_t
assoc_id
,
const
sctp_stream_id_t
stream
,
struct
Ngap_NGAP_PDU
*
message_p
)
{
Logger
::
ngap
().
debug
(
"
Handle PDU Session Resource Setup Response
"
);
Logger
::
ngap
().
debug
(
"
sending itti pdu_session_resource_setup_response to TASK_AMF_N11
"
);
PduSessionResourceSetupResponseMsg
*
pduresp
=
new
PduSessionResourceSetupResponseMsg
();
if
(
!
pduresp
->
decodefrompdu
(
message_p
))
{
Logger
::
ngap
().
error
(
"Decoding PduSessionResourceSetupResponseMsg message error"
);
if
(
!
pduresp
->
decodefrompdu
(
message_p
))
{
Logger
::
ngap
().
error
(
"decoding PduSessionResourceSetupResponseMsg message error"
);
return
-
1
;
}
std
::
vector
<
PDUSessionResourceSetupResponseItem_t
>
list
;
if
(
!
pduresp
->
getPduSessionResourceSetupResponseList
(
list
))
{
Logger
::
ngap
().
error
(
"Decoding PduSessionResourceSetupResponseMsg getPduSessionResourceSetupResponseList IE error"
);
return
-
1
;
if
(
!
pduresp
->
getPduSessionResourceSetupResponseList
(
list
))
{
Logger
::
ngap
().
error
(
"decoding PduSessionResourceSetupResponseMsg getPduSessionResourceSetupResponseList IE error"
)
;
}
uint8_t
transferIe
[
500
];
memcpy
(
transferIe
,
list
[
0
].
pduSessionResourceSetupResponseTransfer
.
buf
,
list
[
0
].
pduSessionResourceSetupResponseTransfer
.
size
);
bstring
n2sm
=
blk2bstr
(
transferIe
,
list
[
0
].
pduSessionResourceSetupResponseTransfer
.
size
);
Logger
::
ngap
().
debug
(
"Sending itti pdu_session_resource_setup_response to TASK_AMF_N11"
);
itti_nsmf_pdusession_update_sm_context
*
itti_msg
=
new
itti_nsmf_pdusession_update_sm_context
(
TASK_NGAP
,
TASK_AMF_N11
);
itti_msg
->
pdu_session_id
=
list
[
0
].
pduSessionId
;
itti_msg
->
n2sm
=
n2sm
;
std
::
shared_ptr
<
itti_nsmf_pdusession_update_sm_context
>
i
=
std
::
shared_ptr
<
itti_nsmf_pdusession_update_sm_context
>
(
itti_msg
);
int
ret
=
itti_inst
->
send_msg
(
i
);
if
(
0
!=
ret
)
{
Logger
::
ngap
().
error
(
"Could not send ITTI message %s to task TASK_AMF_N11"
,
i
->
get_msg_name
());
else
{
uint8_t
transferIe
[
500
];
memcpy
(
transferIe
,
list
[
0
].
pduSessionResourceSetupResponseTransfer
.
buf
,
list
[
0
].
pduSessionResourceSetupResponseTransfer
.
size
);
bstring
n2sm
=
blk2bstr
(
transferIe
,
list
[
0
].
pduSessionResourceSetupResponseTransfer
.
size
);
itti_nsmf_pdusession_update_sm_context
*
itti_msg
=
new
itti_nsmf_pdusession_update_sm_context
(
TASK_NGAP
,
TASK_AMF_N11
);
long
amf_ue_ngap_id
=
pduresp
->
getAmfUeNgapId
();
std
::
shared_ptr
<
nas_context
>
nct
=
amf_n1_inst
->
amf_ue_id_2_nas_context
(
amf_ue_ngap_id
);
itti_msg
->
supi
=
"imsi-"
+
nct
.
get
()
->
imsi
;
itti_msg
->
pdu_session_id
=
list
[
0
].
pduSessionId
;
itti_msg
->
n2sm
=
n2sm
;
std
::
shared_ptr
<
itti_nsmf_pdusession_update_sm_context
>
i
=
std
::
shared_ptr
<
itti_nsmf_pdusession_update_sm_context
>
(
itti_msg
);
int
ret
=
itti_inst
->
send_msg
(
i
);
if
(
0
!=
ret
)
{
Logger
::
ngap
().
error
(
"Could not send ITTI message %s to task TASK_AMF_N11"
,
i
->
get_msg_name
());
}
return
0
;
}
std
::
vector
<
PDUSessionResourceFailedToSetupItem_t
>
list_fail
;
if
(
!
pduresp
->
getPduSessionResourceFailedToSetupList
(
list_fail
))
{
Logger
::
ngap
().
error
(
"decoding PduSessionResourceSetupResponseMsg getPduSessionResourceFailedToSetupList IE error"
);
}
else
{
PduSessionResourceSetupUnSuccessfulTransferIE
*
UnSuccessfultransfer
=
new
PduSessionResourceSetupUnSuccessfulTransferIE
();
uint8_t
buffer
[
500
];
memcpy
(
buffer
,
list_fail
[
0
].
pduSessionResourceSetupUnsuccessfulTransfer
.
buf
,
list_fail
[
0
].
pduSessionResourceSetupUnsuccessfulTransfer
.
size
);
UnSuccessfultransfer
->
decodefromIE
(
buffer
,
list_fail
[
0
].
pduSessionResourceSetupUnsuccessfulTransfer
.
size
);
Logger
::
ngap
().
debug
(
"UnSuccessfultransfer->getChoiceOfCause%d UnSuccessfultransfer->getCause%d"
,
UnSuccessfultransfer
->
getChoiceOfCause
(),
UnSuccessfultransfer
->
getCause
());
if
((
UnSuccessfultransfer
->
getChoiceOfCause
()
==
Ngap_Cause_PR_radioNetwork
)
&&
(
UnSuccessfultransfer
->
getCause
()
==
Ngap_CauseRadioNetwork_multiple_PDU_session_ID_instances
))
{
/*Logger::ngap().debug("sending itti pdu session resource release command to TASK_AMF_N2");
itti_pdu_session_resource_release_command * itti_msg = new itti_pdu_session_resource_release_command(TASK_NGAP, TASK_AMF_N2);
itti_msg->amf_ue_ngap_id = pduresp->getAmfUeNgapId();
itti_msg->ran_ue_ngap_id = pduresp->getRanUeNgapId();
std::shared_ptr<itti_pdu_session_resource_release_command> i = std::shared_ptr<itti_pdu_session_resource_release_command>(itti_msg);
int ret = itti_inst->send_msg(i);
if (0 != ret) {
Logger::ngap().error("Could not send ITTI message %s to task TASK_AMF_N2", i->get_msg_name());
}*/
long
amf_ue_ngap_id
=
pduresp
->
getAmfUeNgapId
();
std
::
shared_ptr
<
nas_context
>
nct
=
amf_n1_inst
->
amf_ue_id_2_nas_context
(
amf_ue_ngap_id
);
string
supi
=
"imsi-"
+
nct
.
get
()
->
imsi
;
std
::
shared_ptr
<
pdu_session_context
>
psc
;
if
(
amf_n11_inst
->
is_supi_to_pdu_ctx
(
supi
))
{
psc
=
amf_n11_inst
->
supi_to_pdu_ctx
(
supi
);
if
(
!
psc
)
{
Logger
::
amf_n1
().
error
(
"connot get pdu_session_context"
);
return
0
;
}
}
psc
.
get
()
->
isn2sm_avaliable
=
false
;
Logger
::
ngap
().
debug
(
"receive pdu session resource setup response fail(multi pdu session id),set pdu session context isn2sm_avaliable = false"
);
/*Logger::ngap().debug("sending itti ue context release command to TASK_AMF_N2");
itti_ue_context_release_command * itti_msg = new itti_ue_context_release_command(TASK_AMF_N1, TASK_AMF_N2);
itti_msg->amf_ue_ngap_id = pduresp->getAmfUeNgapId();
itti_msg->ran_ue_ngap_id = pduresp->getRanUeNgapId();
itti_msg->cause.setChoiceOfCause(Ngap_Cause_PR_radioNetwork);
itti_msg->cause.setValue(28);
std::shared_ptr<itti_ue_context_release_command> i = std::shared_ptr<itti_ue_context_release_command>(itti_msg);
int ret = itti_inst->send_msg(i);
if (0 != ret) {
Logger::ngap().error("Could not send ITTI message %s to task TASK_AMF_N2", i->get_msg_name());
}*/
return
0
;
}
}
return
0
;
}
//------------------------------------------------------------------------------
...
...
src/sbi/amf_server/impl/N1N2MessageCollectionDocumentApiImpl.cpp
View file @
f2c76a5d
...
...
@@ -62,13 +62,16 @@ void N1N2MessageCollectionDocumentApiImpl::n1_n2_message_transfer(const std::str
}
bstring
n1sm
;
msg_str_2_msg_hex
(
n1sm_str
.
substr
(
0
,
n1sm_str
.
length
()),
n1sm
);
msg_str_2_msg_hex
(
n1sm_str
.
substr
(
0
,
n1sm_str
.
length
()
-
2
),
n1sm
);
bstring
n2sm
;
msg_str_2_msg_hex
(
n2sm_str
,
n2sm
);
psc
.
get
()
->
n1sm
=
n1sm
;
psc
.
get
()
->
isn1sm_avaliable
=
true
;
psc
.
get
()
->
n2sm
=
n2sm
;
Logger
::
amf_server
().
debug
(
"n2sm size in amf_server (%d)"
,
blength
(
psc
.
get
()
->
n2sm
));
psc
.
get
()
->
isn2sm_avaliable
=
true
;
Logger
::
amf_server
().
debug
(
"n2sm size in amf_server(%d)"
,
blength
(
psc
.
get
()
->
n2sm
));
itti_n1n2_message_transfer_request
*
itti_msg
=
new
itti_n1n2_message_transfer_request
(
AMF_SERVER
,
TASK_AMF_APP
);
itti_msg
->
supi
=
ueContextId
;
...
...
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