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
alex037yang
OpenXG-RAN
Commits
22ac1b94
Commit
22ac1b94
authored
Sep 17, 2020
by
zhenghuangkun
Committed by
Noboru Kobayashi
Oct 10, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add PDUSessionResourceModifyResponse
Add PDUSessionResourceReleaseResponse Add NASNonDeliveryIndication
parent
55495f68
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
205 additions
and
411 deletions
+205
-411
openair2/COMMON/ngap_messages_types.h
openair2/COMMON/ngap_messages_types.h
+1
-1
openair3/NGAP/ngap_common.h
openair3/NGAP/ngap_common.h
+4
-1
openair3/NGAP/ngap_gNB_handlers.c
openair3/NGAP/ngap_gNB_handlers.c
+99
-99
openair3/NGAP/ngap_gNB_nas_procedures.c
openair3/NGAP/ngap_gNB_nas_procedures.c
+101
-310
No files found.
openair2/COMMON/ngap_messages_types.h
View file @
22ac1b94
...
...
@@ -638,7 +638,7 @@ typedef struct ngap_pdusession_setup_req_s {
}
ngap_pdusession_setup_req_t
;
typedef
struct
ngap_pdusession_setup_resp_s
{
uint32_t
gNB_ue_ngap_id
:
24
;
uint32_t
gNB_ue_ngap_id
;
/* Number of pdusession setup-ed in the list */
uint8_t
nb_of_pdusessions
;
...
...
openair3/NGAP/ngap_common.h
View file @
22ac1b94
...
...
@@ -70,7 +70,10 @@
#include "NGAP_PDUSessionResourceSetupItemCxtReq.h"
#include "NGAP_QosFlowSetupRequestItem.h"
#include "NGAP_AllowedNSSAI-Item.h"
#include "NGAP_PDUSessionResourceModifyItemModRes.h"
#include "NGAP_PDUSessionResourceFailedToModifyItemModRes.h"
#include "NGAP_PDUSessionResourceModifyUnsuccessfulTransfer.h"
#include "NGAP_PDUSessionResourceReleasedItemRelRes.h"
/* Checking version of ASN1C compiler */
#if (ASN1C_ENVIRONMENT_VERSION < ASN1C_MINIMUM_VERSION)
...
...
openair3/NGAP/ngap_gNB_handlers.c
View file @
22ac1b94
...
...
@@ -1257,7 +1257,7 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
if
(
ue_desc_p
->
amf_ue_ngap_id
!=
amf_ue_ngap_id
)
{
NGAP_WARN
(
"UE context amf_ue_ngap_id is different form that of the message (%lu != %lu)"
,
ue_desc_p
->
amf_ue_ngap_id
,
amf_ue_ngap_id
);
(
uint64_t
)
ue_desc_p
->
amf_ue_ngap_id
,
amf_ue_ngap_id
);
}
message_p
=
itti_alloc_new_message
(
TASK_NGAP
,
NGAP_PDUSESSION_SETUP_REQ
);
...
...
openair3/NGAP/ngap_gNB_nas_procedures.c
View file @
22ac1b94
...
...
@@ -544,7 +544,6 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
ngap_nas_non_delivery_ind_t
*
ngap_nas_non_delivery_ind
)
//------------------------------------------------------------------------------
{
#if 0
struct
ngap_gNB_ue_context_s
*
ue_context_p
;
ngap_gNB_instance_t
*
ngap_gNB_instance_p
;
NGAP_NGAP_PDU_t
pdu
;
...
...
@@ -559,11 +558,11 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
if
((
ue_context_p
=
ngap_gNB_get_ue_context
(
ngap_gNB_instance_p
,
ngap_nas_non_delivery_ind
->
gNB_ue_ngap_id
))
==
NULL
)
{
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: %0
6
x\n",
NGAP_WARN
(
"Failed to find ue context associated with gNB ue ngap id: %0
8
x
\n
"
,
ngap_nas_non_delivery_ind
->
gNB_ue_ngap_id
);
MSC_LOG_EVENT
(
MSC_NGAP_GNB
,
MSC_AS_TIME_FMT" Sent of NAS_NON_DELIVERY_IND to AMF failed, no context for gNB_ue_ngap_id %0
6
x",
MSC_AS_TIME_FMT
" Sent of NAS_NON_DELIVERY_IND to AMF failed, no context for gNB_ue_ngap_id %0
8
x"
,
ngap_nas_non_delivery_ind
->
gNB_ue_ngap_id
);
return
-
1
;
}
...
...
@@ -580,14 +579,14 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
ie
->
id
=
NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID
;
ie
->
criticality
=
NGAP_Criticality_reject
;
ie
->
value
.
present
=
NGAP_NASNonDeliveryIndication_IEs__value_PR_AMF_UE_NGAP_ID
;
ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id
;
asn_uint642INTEGER
(
&
ie
->
value
.
choice
.
AMF_UE_NGAP_ID
,
ue_context_p
->
amf_ue_ngap_id
)
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
ie
=
(
NGAP_NASNonDeliveryIndication_IEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_NASNonDeliveryIndication_IEs_t
));
ie->id = NGAP_ProtocolIE_ID_id_
gNB
_UE_NGAP_ID;
ie
->
id
=
NGAP_ProtocolIE_ID_id_
RAN
_UE_NGAP_ID
;
ie
->
criticality
=
NGAP_Criticality_reject
;
ie->value.present = NGAP_NASNonDeliveryIndication_IEs__value_PR_
GNB
_UE_NGAP_ID;
ie->value.choice.
GNB
_UE_NGAP_ID = ue_context_p->gNB_ue_ngap_id;
ie
->
value
.
present
=
NGAP_NASNonDeliveryIndication_IEs__value_PR_
RAN
_UE_NGAP_ID
;
ie
->
value
.
choice
.
RAN
_UE_NGAP_ID
=
ue_context_p
->
gNB_ue_ngap_id
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
ie
=
(
NGAP_NASNonDeliveryIndication_IEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_NASNonDeliveryIndication_IEs_t
));
...
...
@@ -621,7 +620,7 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
MSC_NGAP_AMF
,
(
const
char
*
)
buffer
,
length
,
MSC_AS_TIME_FMT" NASNonDeliveryIndication initiatingMessage gNB_ue_ngap_id %u amf_ue_ngap_id %u",
MSC_AS_TIME_FMT
" NASNonDeliveryIndication initiatingMessage gNB_ue_ngap_id %u amf_ue_ngap_id %
l
u"
,
0
,
0
,
//MSC_AS_TIME_ARGS(ctxt_pP),
ue_context_p
->
gNB_ue_ngap_id
,
ue_context_p
->
amf_ue_ngap_id
);
...
...
@@ -629,7 +628,7 @@ int ngap_gNB_nas_non_delivery_ind(instance_t instance,
ngap_gNB_itti_send_sctp_data_req
(
ngap_gNB_instance_p
->
instance
,
ue_context_p
->
amf_ref
->
assoc_id
,
buffer
,
length
,
ue_context_p
->
tx_stream
);
#endif
return
0
;
}
...
...
@@ -1077,7 +1076,7 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
/* optional */
if
(
pdusession_setup_resp_p
->
nb_of_pdusessions_failed
>
0
)
{
ie
=
(
NGAP_PDUSessionResource
FailedToSetupListSURes_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResourceFailedToSetupListSURe
s_t
));
ie
=
(
NGAP_PDUSessionResource
SetupResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResourceSetupResponseIE
s_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_PDUSessionResourceFailedToSetupListSURes
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie
->
value
.
present
=
NGAP_PDUSessionResourceSetupResponseIEs__value_PR_PDUSessionResourceFailedToSetupListSURes
;
...
...
@@ -1145,13 +1144,6 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
}
/* NGAP_PDUSESSIONSetupListBearerSURes_t e_RABSetupListBearerSURes;
memset(&e_RABSetupListBearerSURes, 0, sizeof(NGAP_PDUSESSIONSetupListBearerSURes_t));
if (ngap_encode_ngap_pdusessionsetuplistbearersures(&e_RABSetupListBearerSURes, &initial_ies_p->e_RABSetupListBearerSURes.ngap_PDUSESSIONSetupItemBearerSURes) < 0 )
return -1;
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NGAP_PDUSESSIONSetupListBearerSURes, &e_RABSetupListBearerSURes);
*/
fprintf
(
stderr
,
"start encode
\n
"
);
if
(
ngap_gNB_encode_pdu
(
&
pdu
,
&
buffer
,
&
length
)
<
0
)
{
NGAP_ERROR
(
"Failed to encode uplink transport
\n
"
);
...
...
@@ -1164,7 +1156,7 @@ int ngap_gNB_pdusession_setup_resp(instance_t instance,
MSC_NGAP_AMF
,
(
const
char
*
)
buffer
,
length
,
MSC_AS_TIME_FMT
"
E_RAN
Setup successfulOutcome gNB_ue_ngap_id %u amf_ue_ngap_id %u"
,
MSC_AS_TIME_FMT
"
PduSession
Setup successfulOutcome gNB_ue_ngap_id %u amf_ue_ngap_id %u"
,
0
,
0
,
//MSC_AS_TIME_ARGS(ctxt_pP),
pdusession_setup_resp_p
->
gNB_ue_ngap_id
,
ue_context_p
->
amf_ue_ngap_id
);
...
...
@@ -1180,15 +1172,16 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
ngap_pdusession_modify_resp_t
*
pdusession_modify_resp_p
)
//------------------------------------------------------------------------------
{
#if 0
ngap_gNB_instance_t
*
ngap_gNB_instance_p
=
NULL
;
struct
ngap_gNB_ue_context_s
*
ue_context_p
=
NULL
;
NGAP_NGAP_PDU_t
pdu
;
NGAP_PDUS
ESSIONModifyResponse_t
*out;
NGAP_PDUS
ESSIONModifyResponseIEs_t
*ie;
NGAP_PDUS
essionResourceModifyResponse_t
*
out
;
NGAP_PDUS
essionResourceModifyResponseIEs_t
*
ie
;
uint8_t
*
buffer
=
NULL
;
uint32_t
length
;
int
i
;
asn_encode_to_new_buffer_result_t
res
=
{
NULL
,
{
0
,
NULL
,
NULL
}
};
/* Retrieve the NGAP gNB instance associated with Mod_id */
ngap_gNB_instance_p
=
ngap_gNB_get_instance
(
instance
);
DevAssert
(
pdusession_modify_resp_p
!=
NULL
);
...
...
@@ -1197,7 +1190,7 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
if
((
ue_context_p
=
ngap_gNB_get_ue_context
(
ngap_gNB_instance_p
,
pdusession_modify_resp_p
->
gNB_ue_ngap_id
))
==
NULL
)
{
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%0
6
x\n",
NGAP_WARN
(
"Failed to find ue context associated with gNB ue ngap id: 0x%0
8
x
\n
"
,
pdusession_modify_resp_p
->
gNB_ue_ngap_id
);
return
-
1
;
}
...
...
@@ -1208,7 +1201,7 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
if
(
!
(
ue_context_p
->
ue_state
==
NGAP_UE_CONNECTED
||
ue_context_p
->
ue_state
==
NGAP_UE_WAITING_CSR
))
{
NGAP_WARN
(
"You are attempting to send NAS data over non-connected "
"gNB ue ngap id: %0
6
x, current state: %d\n",
"gNB ue ngap id: %0
8
x, current state: %d
\n
"
,
pdusession_modify_resp_p
->
gNB_ue_ngap_id
,
ue_context_p
->
ue_state
);
return
-
1
;
}
...
...
@@ -1216,41 +1209,40 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
/* Prepare the NGAP message to encode */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
NGAP_NGAP_PDU_PR_successfulOutcome
;
pdu.choice.successfulOutcome.procedureCode = NGAP_ProcedureCode_id_PDUS
ESSION
Modify;
pdu
.
choice
.
successfulOutcome
.
procedureCode
=
NGAP_ProcedureCode_id_PDUS
essionResource
Modify
;
pdu
.
choice
.
successfulOutcome
.
criticality
=
NGAP_Criticality_reject
;
pdu.choice.successfulOutcome.value.present = NGAP_SuccessfulOutcome__value_PR_PDUS
ESSION
ModifyResponse;
out = &pdu.choice.successfulOutcome.value.choice.PDUS
ESSION
ModifyResponse;
pdu
.
choice
.
successfulOutcome
.
value
.
present
=
NGAP_SuccessfulOutcome__value_PR_PDUS
essionResource
ModifyResponse
;
out
=
&
pdu
.
choice
.
successfulOutcome
.
value
.
choice
.
PDUS
essionResource
ModifyResponse
;
/* mandatory */
ie = (NGAP_PDUS
ESSIONModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ModifyResponseIEs_t));
ie
=
(
NGAP_PDUS
essionResourceModifyResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ModifyResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSION
ModifyResponseIEs__value_PR_AMF_UE_NGAP_ID;
ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id
;
ie
->
value
.
present
=
NGAP_PDUS
essionResource
ModifyResponseIEs__value_PR_AMF_UE_NGAP_ID
;
asn_uint642INTEGER
(
&
ie
->
value
.
choice
.
AMF_UE_NGAP_ID
,
ue_context_p
->
amf_ue_ngap_id
)
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
ie = (NGAP_PDUS
ESSIONModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ModifyResponseIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_
gNB
_UE_NGAP_ID;
ie
=
(
NGAP_PDUS
essionResourceModifyResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ModifyResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_
RAN
_UE_NGAP_ID
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSIONModifyResponseIEs__value_PR_GNB
_UE_NGAP_ID;
ie->value.choice.
GNB
_UE_NGAP_ID = pdusession_modify_resp_p->gNB_ue_ngap_id;
ie
->
value
.
present
=
NGAP_PDUS
essionResourceModifyResponseIEs__value_PR_RAN
_UE_NGAP_ID
;
ie
->
value
.
choice
.
RAN
_UE_NGAP_ID
=
pdusession_modify_resp_p
->
gNB_ue_ngap_id
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* optional */
if
(
pdusession_modify_resp_p
->
nb_of_pdusessions
>
0
)
{
ie = (NGAP_PDUS
ESSIONModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ModifyResponseIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_PDUS
ESSIONModifyListBearer
ModRes;
ie
=
(
NGAP_PDUS
essionResourceModifyResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ModifyResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_PDUS
essionResourceModifyList
ModRes
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSIONModifyResponseIEs__value_PR_PDUSESSIONModifyListBearer
ModRes;
ie
->
value
.
present
=
NGAP_PDUS
essionResourceModifyResponseIEs__value_PR_PDUSessionResourceModifyList
ModRes
;
for
(
i
=
0
;
i
<
pdusession_modify_resp_p
->
nb_of_pdusessions
;
i
++
)
{
NGAP_PDUSESSIONModifyItemBearerModResIEs_t *item;
item = (NGAP_PDUSESSIONModifyItemBearerModResIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONModifyItemBearerModResIEs_t));
item->id = NGAP_ProtocolIE_ID_id_PDUSESSIONModifyItemBearerModRes;
item->criticality = NGAP_Criticality_ignore;
item->value.present = NGAP_PDUSESSIONModifyItemBearerModResIEs__value_PR_PDUSESSIONModifyItemBearerModRes;
item->value.choice.PDUSESSIONModifyItemBearerModRes.e_RAB_ID = pdusession_modify_resp_p->pdusessions[i].pdusession_id;
NGAP_DEBUG("pdusession_modify_resp: modified pdusession ID %ld\n", item->value.choice.PDUSESSIONModifyItemBearerModRes.e_RAB_ID);
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSESSIONModifyListBearerModRes.list, item);
NGAP_PDUSessionResourceModifyItemModRes_t
*
item
;
item
=
(
NGAP_PDUSessionResourceModifyItemModRes_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResourceModifyItemModRes_t
));
item
->
pDUSessionID
=
pdusession_modify_resp_p
->
pdusessions
[
i
].
pdusession_id
;
NGAP_DEBUG
(
"pdusession_modify_resp: modified pdusession ID %ld
\n
"
,
item
->
pDUSessionID
);
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
PDUSessionResourceModifyListModRes
.
list
,
item
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -1258,39 +1250,40 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
/* optional */
if
(
pdusession_modify_resp_p
->
nb_of_pdusessions_failed
>
0
)
{
ie = (NGAP_PDUS
ESSIONModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ModifyResponseIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_PDUS
ESSIONFailedToModifyList
;
ie
=
(
NGAP_PDUS
essionResourceModifyResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ModifyResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_PDUS
essionResourceFailedToModifyListModRes
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSIONModifyResponseIEs__value_PR_PDUSESSIONList
;
ie
->
value
.
present
=
NGAP_PDUS
essionResourceModifyResponseIEs__value_PR_PDUSessionResourceFailedToModifyListModRes
;
for
(
i
=
0
;
i
<
pdusession_modify_resp_p
->
nb_of_pdusessions_failed
;
i
++
)
{
NGAP_PDUSESSIONItemIEs_t *item;
item = (NGAP_PDUSESSIONItemIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONItemIEs_t));
item->id = NGAP_ProtocolIE_ID_id_PDUSESSIONItem;
item->criticality = NGAP_Criticality_ignore;
item->value.present = NGAP_PDUSESSIONItemIEs__value_PR_PDUSESSIONItem;
item->value.choice.PDUSESSIONItem.e_RAB_ID = pdusession_modify_resp_p->pdusessions_failed[i].pdusession_id;
item->value.choice.PDUSESSIONItem.cause.present = pdusession_modify_resp_p->pdusessions_failed[i].cause;
switch(item->value.choice.PDUSESSIONItem.cause.present) {
NGAP_PDUSessionResourceFailedToModifyItemModRes_t
*
item
;
NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t
*
pdusessionTransfer_p
=
NULL
;
item
=
(
NGAP_PDUSessionResourceFailedToModifyItemModRes_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResourceFailedToModifyItemModRes_t
));
item
->
pDUSessionID
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
pdusession_id
;
pdusessionTransfer_p
=
(
NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResourceModifyUnsuccessfulTransfer_t
));
pdusessionTransfer_p
->
cause
.
present
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
cause
;
switch
(
pdusessionTransfer_p
->
cause
.
present
)
{
case
NGAP_Cause_PR_radioNetwork
:
item->value.choice.PDUSESSIONItem.cause.choice.radioNetwork
= pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
pdusessionTransfer_p
->
cause
.
choice
.
radioNetwork
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
cause_value
;
break
;
case
NGAP_Cause_PR_transport
:
item->value.choice.PDUSESSIONItem.cause.choice.transport
= pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
pdusessionTransfer_p
->
cause
.
choice
.
transport
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
cause_value
;
break
;
case
NGAP_Cause_PR_nas
:
item->value.choice.PDUSESSIONItem.cause.choice.nas
= pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
pdusessionTransfer_p
->
cause
.
choice
.
nas
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
cause_value
;
break
;
case
NGAP_Cause_PR_protocol
:
item->value.choice.PDUSESSIONItem.cause.choice.protocol
= pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
pdusessionTransfer_p
->
cause
.
choice
.
protocol
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
cause_value
;
break
;
case
NGAP_Cause_PR_misc
:
item->value.choice.PDUSESSIONItem.cause.choice.misc
= pdusession_modify_resp_p->pdusessions_failed[i].cause_value;
pdusessionTransfer_p
->
cause
.
choice
.
misc
=
pdusession_modify_resp_p
->
pdusessions_failed
[
i
].
cause_value
;
break
;
case
NGAP_Cause_PR_NOTHING
:
...
...
@@ -1298,8 +1291,16 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
break
;
}
NGAP_DEBUG("pdusession_modify_resp: failed pdusession ID %ld\n", item->value.choice.PDUSESSIONItem.e_RAB_ID);
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSESSIONList.list, item);
memset
(
&
res
,
0
,
sizeof
(
res
));
res
=
asn_encode_to_new_buffer
(
NULL
,
ATS_ALIGNED_CANONICAL_PER
,
&
asn_DEF_NGAP_PDUSessionResourceModifyUnsuccessfulTransfer
,
pdusessionTransfer_p
);
item
->
pDUSessionResourceModifyUnsuccessfulTransfer
.
buf
=
res
.
buffer
;
item
->
pDUSessionResourceModifyUnsuccessfulTransfer
.
size
=
res
.
result
.
encoded
;
ASN_STRUCT_FREE_CONTENTS_ONLY
(
asn_DEF_NGAP_PDUSessionResourceModifyUnsuccessfulTransfer
,
pdusessionTransfer_p
);
NGAP_DEBUG
(
"pdusession_modify_resp: failed pdusession ID %ld
\n
"
,
item
->
pDUSessionID
);
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
PDUSessionResourceFailedToModifyListModRes
.
list
,
item
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -1307,10 +1308,10 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
/* optional */
if
(
0
)
{
ie = (NGAP_PDUS
ESSIONModifyResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ModifyResponseIEs_t));
ie
=
(
NGAP_PDUS
essionResourceModifyResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ModifyResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_CriticalityDiagnostics
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSION
ModifyResponseIEs__value_PR_CriticalityDiagnostics;
ie
->
value
.
present
=
NGAP_PDUS
essionResource
ModifyResponseIEs__value_PR_CriticalityDiagnostics
;
// ie->value.choice.CriticalityDiagnostics = ;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
}
...
...
@@ -1336,7 +1337,7 @@ int ngap_gNB_pdusession_modify_resp(instance_t instance,
ngap_gNB_itti_send_sctp_data_req
(
ngap_gNB_instance_p
->
instance
,
ue_context_p
->
amf_ref
->
assoc_id
,
buffer
,
length
,
ue_context_p
->
tx_stream
);
#endif
return
0
;
}
//------------------------------------------------------------------------------
...
...
@@ -1344,12 +1345,11 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
ngap_pdusession_release_resp_t
*
pdusession_release_resp_p
)
//------------------------------------------------------------------------------
{
#if 0
ngap_gNB_instance_t
*
ngap_gNB_instance_p
=
NULL
;
struct
ngap_gNB_ue_context_s
*
ue_context_p
=
NULL
;
NGAP_NGAP_PDU_t
pdu
;
NGAP_PDUS
ESSION
ReleaseResponse_t *out;
NGAP_PDUS
ESSION
ReleaseResponseIEs_t *ie;
NGAP_PDUS
essionResource
ReleaseResponse_t
*
out
;
NGAP_PDUS
essionResource
ReleaseResponseIEs_t
*
ie
;
uint8_t
*
buffer
=
NULL
;
uint32_t
length
;
int
i
;
...
...
@@ -1361,7 +1361,7 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
if
((
ue_context_p
=
ngap_gNB_get_ue_context
(
ngap_gNB_instance_p
,
pdusession_release_resp_p
->
gNB_ue_ngap_id
))
==
NULL
)
{
/* The context for this gNB ue ngap id doesn't exist in the map of gNB UEs */
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id:
%u
\n",
NGAP_WARN
(
"Failed to find ue context associated with gNB ue ngap id:
0x%08x
\n
"
,
pdusession_release_resp_p
->
gNB_ue_ngap_id
);
return
-
1
;
}
...
...
@@ -1369,96 +1369,45 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
/* Prepare the NGAP message to encode */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
NGAP_NGAP_PDU_PR_successfulOutcome
;
pdu.choice.successfulOutcome.procedureCode = NGAP_ProcedureCode_id_PDUS
ESSION
Release;
pdu
.
choice
.
successfulOutcome
.
procedureCode
=
NGAP_ProcedureCode_id_PDUS
essionResource
Release
;
pdu
.
choice
.
successfulOutcome
.
criticality
=
NGAP_Criticality_reject
;
pdu.choice.successfulOutcome.value.present = NGAP_SuccessfulOutcome__value_PR_PDUS
ESSION
ReleaseResponse;
out = &pdu.choice.successfulOutcome.value.choice.PDUS
ESSION
ReleaseResponse;
pdu
.
choice
.
successfulOutcome
.
value
.
present
=
NGAP_SuccessfulOutcome__value_PR_PDUS
essionResource
ReleaseResponse
;
out
=
&
pdu
.
choice
.
successfulOutcome
.
value
.
choice
.
PDUS
essionResource
ReleaseResponse
;
/* mandatory */
ie = (NGAP_PDUS
ESSIONReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ReleaseResponseIEs_t));
ie
=
(
NGAP_PDUS
essionResourceReleaseResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ReleaseResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSION
ReleaseResponseIEs__value_PR_AMF_UE_NGAP_ID;
ie->value.choice.AMF_UE_NGAP_ID = ue_context_p->amf_ue_ngap_id
;
ie
->
value
.
present
=
NGAP_PDUS
essionResource
ReleaseResponseIEs__value_PR_AMF_UE_NGAP_ID
;
asn_uint642INTEGER
(
&
ie
->
value
.
choice
.
AMF_UE_NGAP_ID
,
ue_context_p
->
amf_ue_ngap_id
)
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
ie = (NGAP_PDUS
ESSIONReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ReleaseResponseIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_
gNB
_UE_NGAP_ID;
ie
=
(
NGAP_PDUS
essionResourceReleaseResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ReleaseResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_
RAN
_UE_NGAP_ID
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSIONReleaseResponseIEs__value_PR_GNB
_UE_NGAP_ID;
ie->value.choice.
GNB
_UE_NGAP_ID = pdusession_release_resp_p->gNB_ue_ngap_id;
ie
->
value
.
present
=
NGAP_PDUS
essionResourceReleaseResponseIEs__value_PR_RAN
_UE_NGAP_ID
;
ie
->
value
.
choice
.
RAN
_UE_NGAP_ID
=
pdusession_release_resp_p
->
gNB_ue_ngap_id
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* optional */
if
(
pdusession_release_resp_p
->
nb_of_pdusessions_released
>
0
)
{
ie = (NGAP_PDUS
ESSIONReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSION
ReleaseResponseIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_PDUS
ESSIONReleaseListBearerRelComp
;
ie
=
(
NGAP_PDUS
essionResourceReleaseResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResource
ReleaseResponseIEs_t
));
ie
->
id
=
NGAP_ProtocolIE_ID_id_PDUS
essionResourceReleasedListRelRes
;
ie
->
criticality
=
NGAP_Criticality_ignore
;
ie->value.present = NGAP_PDUS
ESSIONReleaseResponseIEs__value_PR_PDUSESSIONReleaseListBearerRelComp
;
ie
->
value
.
present
=
NGAP_PDUS
essionResourceReleaseResponseIEs__value_PR_PDUSessionResourceReleasedListRelRes
;
for
(
i
=
0
;
i
<
pdusession_release_resp_p
->
nb_of_pdusessions_released
;
i
++
)
{
NGAP_PDUSESSIONReleaseItemBearerRelCompIEs_t *item;
item = (NGAP_PDUSESSIONReleaseItemBearerRelCompIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONReleaseItemBearerRelCompIEs_t));
item->id = NGAP_ProtocolIE_ID_id_PDUSESSIONReleaseItemBearerRelComp;
item->criticality = NGAP_Criticality_ignore;
item->value.present = NGAP_PDUSESSIONReleaseItemBearerRelCompIEs__value_PR_PDUSESSIONReleaseItemBearerRelComp;
item->value.choice.PDUSESSIONReleaseItemBearerRelComp.e_RAB_ID = pdusession_release_resp_p->pdusession_release[i].pdusession_id;
NGAP_DEBUG("pdusession_release_resp: pdusession ID %ld\n", item->value.choice.PDUSESSIONReleaseItemBearerRelComp.e_RAB_ID);
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSESSIONReleaseListBearerRelComp.list, item);
}
NGAP_PDUSessionResourceReleasedItemRelRes_t
*
item
;
item
=
(
NGAP_PDUSessionResourceReleasedItemRelRes_t
*
)
calloc
(
1
,
sizeof
(
NGAP_PDUSessionResourceReleasedItemRelRes_t
));
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
}
/* optional */
if (pdusession_release_resp_p->nb_of_pdusessions_failed > 0) {
ie = (NGAP_PDUSESSIONReleaseResponseIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONReleaseResponseIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_PDUSESSIONFailedToReleaseList;
ie->criticality = NGAP_Criticality_ignore;
ie->value.present = NGAP_PDUSESSIONReleaseResponseIEs__value_PR_PDUSESSIONList;
for (i = 0; i < pdusession_release_resp_p->nb_of_pdusessions_failed; i++) {
NGAP_PDUSESSIONItemIEs_t *item;
item = (NGAP_PDUSESSIONItemIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONItemIEs_t));
item->id = NGAP_ProtocolIE_ID_id_PDUSESSIONItem;
item->criticality = NGAP_Criticality_ignore;
item->value.present = NGAP_PDUSESSIONItemIEs__value_PR_PDUSESSIONItem;
item->value.choice.PDUSESSIONItem.e_RAB_ID = pdusession_release_resp_p->pdusessions_failed[i].pdusession_id;
item->value.choice.PDUSESSIONItem.cause.present = pdusession_release_resp_p->pdusessions_failed[i].cause;
switch(item->value.choice.PDUSESSIONItem.cause.present) {
case NGAP_Cause_PR_radioNetwork:
item->value.choice.PDUSESSIONItem.cause.choice.radioNetwork = pdusession_release_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_transport:
item->value.choice.PDUSESSIONItem.cause.choice.transport = pdusession_release_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_nas:
item->value.choice.PDUSESSIONItem.cause.choice.nas = pdusession_release_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_protocol:
item->value.choice.PDUSESSIONItem.cause.choice.protocol = pdusession_release_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_misc:
item->value.choice.PDUSESSIONItem.cause.choice.misc = pdusession_release_resp_p->pdusessions_failed[i].cause_value;
break;
case NGAP_Cause_PR_NOTHING:
default:
break;
}
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSESSIONList.list, item);
item
->
pDUSessionID
=
pdusession_release_resp_p
->
pdusession_release
[
i
].
pdusession_id
;
NGAP_DEBUG
(
"pdusession_release_resp: pdusession ID %ld
\n
"
,
item
->
pDUSessionID
);
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
PDUSessionResourceReleasedListRelRes
.
list
,
item
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
}
if
(
ngap_gNB_encode_pdu
(
&
pdu
,
&
buffer
,
&
length
)
<
0
)
{
NGAP_ERROR
(
"Failed to encode release response
\n
"
);
/* Encode procedure has failed... */
...
...
@@ -1470,17 +1419,17 @@ int ngap_gNB_pdusession_release_resp(instance_t instance,
MSC_NGAP_AMF
,
(
const
char
*
)
buffer
,
length
,
MSC_AS_TIME_FMT" E_RAN Release successfulOutcome gNB_ue_ngap_id %u amf_ue_ngap_id %u",
MSC_AS_TIME_FMT
" E_RAN Release successfulOutcome gNB_ue_ngap_id %u amf_ue_ngap_id %
l
u"
,
0
,
0
,
//MSC_AS_TIME_ARGS(ctxt_pP),
pdusession_release_resp_p
->
gNB_ue_ngap_id
,
ue_context_p->amf_ue_ngap_id);
(
uint64_t
)
ue_context_p
->
amf_ue_ngap_id
);
/* UE associated signalling -> use the allocated stream */
ngap_gNB_itti_send_sctp_data_req
(
ngap_gNB_instance_p
->
instance
,
ue_context_p
->
amf_ref
->
assoc_id
,
buffer
,
length
,
ue_context_p
->
tx_stream
);
NGAP_INFO("pdusession_release_response sended gNB_UE_NGAP_ID %
d amf_ue_ngap_id %d
nb_of_pdusessions_released %d nb_of_pdusessions_failed %d\n",
pdusession_release_resp_p->gNB_ue_ngap_id, ue_context_p->amf_ue_ngap_id,pdusession_release_resp_p->nb_of_pdusessions_released,pdusession_release_resp_p->nb_of_pdusessions_failed);
#endif
NGAP_INFO
(
"pdusession_release_response sended gNB_UE_NGAP_ID %
u amf_ue_ngap_id %lu
nb_of_pdusessions_released %d nb_of_pdusessions_failed %d
\n
"
,
pdusession_release_resp_p
->
gNB_ue_ngap_id
,
(
uint64_t
)
ue_context_p
->
amf_ue_ngap_id
,
pdusession_release_resp_p
->
nb_of_pdusessions_released
,
pdusession_release_resp_p
->
nb_of_pdusessions_failed
);
return
0
;
}
...
...
@@ -1723,164 +1672,6 @@ int ngap_gNB_path_switch_req(instance_t instance,
return
0
;
}
//-----------------------------------------------------------------------------
/*
* gNB generate a S1 PDUSESSION Modification Indication towards AMF
*/
/*int ngap_gNB_generate_PDUSESSION_Modification_Indication(
instance_t instance,
ngap_pdusession_modification_ind_t *pdusession_modification_ind)
//-----------------------------------------------------------------------------
{
struct ngap_gNB_ue_context_s *ue_context_p = NULL;
NGAP_NGAP_PDU_t pdu;
NGAP_PDUSESSIONModificationIndication_t *out = NULL;
NGAP_PDUSESSIONModificationIndicationIEs_t *ie = NULL;
NGAP_PDUSESSIONToBeModifiedItemBearerModInd_t *PDUSESSION_ToBeModifiedItem_BearerModInd = NULL;
NGAP_PDUSESSIONToBeModifiedItemBearerModIndIEs_t *PDUSESSION_ToBeModifiedItem_BearerModInd_IEs = NULL;
NGAP_PDUSESSIONNotToBeModifiedItemBearerModInd_t *PDUSESSION_NotToBeModifiedItem_BearerModInd = NULL;
NGAP_PDUSESSIONNotToBeModifiedItemBearerModIndIEs_t *PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs = NULL;
ngap_gNB_instance_t *ngap_gNB_instance_p = NULL;
ngap_gNB_instance_p = ngap_gNB_get_instance(instance);
uint8_t *buffer = NULL;
uint32_t len = 0;
int ret = 0;
DevAssert(ngap_gNB_instance_p != NULL);
DevAssert(pdusession_modification_ind != NULL);
int num_pdusessions_tobemodified = pdusession_modification_ind->nb_of_pdusessions_tobemodified;
int num_pdusessions_nottobemodified = pdusession_modification_ind->nb_of_pdusessions_nottobemodified;
uint32_t CSG_id = 0;
if ((ue_context_p = ngap_gNB_get_ue_context(ngap_gNB_instance_p,
pdusession_modification_ind->gNB_ue_ngap_id)) == NULL) {
// The context for this gNB ue ngap id doesn't exist in the map of gNB UEs
NGAP_WARN("Failed to find ue context associated with gNB ue ngap id: 0x%06x\n",
pdusession_modification_ind->gNB_ue_ngap_id);
return -1;
}
// Prepare the NGAP message to encode
memset(&pdu, 0, sizeof(pdu));
pdu.present = NGAP_NGAP_PDU_PR_initiatingMessage;
pdu.choice.initiatingMessage.procedureCode = NGAP_ProcedureCode_id_PDUSESSIONModificationIndication;
pdu.choice.initiatingMessage.criticality = NGAP_Criticality_reject;
pdu.choice.initiatingMessage.value.present = NGAP_InitiatingMessage__value_PR_PDUSESSIONModificationIndication;
out = &pdu.choice.initiatingMessage.value.choice.PDUSESSIONModificationIndication;
// mandatory
ie = (NGAP_PDUSESSIONModificationIndicationIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONModificationIndicationIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_AMF_UE_NGAP_ID;
ie->criticality = NGAP_Criticality_reject;
ie->value.present = NGAP_PDUSESSIONModificationIndicationIEs__value_PR_AMF_UE_NGAP_ID;
ie->value.choice.AMF_UE_NGAP_ID = pdusession_modification_ind->amf_ue_ngap_id;
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
ie = (NGAP_PDUSESSIONModificationIndicationIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONModificationIndicationIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_gNB_UE_NGAP_ID;
ie->criticality = NGAP_Criticality_reject;
ie->value.present = NGAP_PDUSESSIONModificationIndicationIEs__value_PR_GNB_UE_NGAP_ID;
ie->value.choice.GNB_UE_NGAP_ID = pdusession_modification_ind->gNB_ue_ngap_id;
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
//E-RABs to be modified list
ie = (NGAP_PDUSESSIONModificationIndicationIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONModificationIndicationIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_PDUSESSIONToBeModifiedListBearerModInd;
ie->criticality = NGAP_Criticality_reject;
ie->value.present = NGAP_PDUSESSIONModificationIndicationIEs__value_PR_PDUSESSIONToBeModifiedListBearerModInd;
//The following two for-loops here will probably need to change. We should do a different type of search
for(int i=0; i<num_pdusessions_tobemodified; i++){
PDUSESSION_ToBeModifiedItem_BearerModInd_IEs = (NGAP_PDUSESSIONToBeModifiedItemBearerModIndIEs_t *)calloc(1,sizeof(NGAP_PDUSESSIONToBeModifiedItemBearerModIndIEs_t));
PDUSESSION_ToBeModifiedItem_BearerModInd_IEs->id = NGAP_ProtocolIE_ID_id_PDUSESSIONToBeModifiedItemBearerModInd;
PDUSESSION_ToBeModifiedItem_BearerModInd_IEs->criticality = NGAP_Criticality_reject;
PDUSESSION_ToBeModifiedItem_BearerModInd_IEs->value.present = NGAP_PDUSESSIONToBeModifiedItemBearerModIndIEs__value_PR_PDUSESSIONToBeModifiedItemBearerModInd;
PDUSESSION_ToBeModifiedItem_BearerModInd = &PDUSESSION_ToBeModifiedItem_BearerModInd_IEs->value.choice.PDUSESSIONToBeModifiedItemBearerModInd;
{
PDUSESSION_ToBeModifiedItem_BearerModInd->e_RAB_ID = pdusession_modification_ind->pdusessions_tobemodified[i].pdusession_id;
PDUSESSION_ToBeModifiedItem_BearerModInd->transportLayerAddress.size = pdusession_modification_ind->pdusessions_tobemodified[i].gNB_addr.length/8;
PDUSESSION_ToBeModifiedItem_BearerModInd->transportLayerAddress.bits_unused = pdusession_modification_ind->pdusessions_tobemodified[i].gNB_addr.length%8;
PDUSESSION_ToBeModifiedItem_BearerModInd->transportLayerAddress.buf = calloc(1, PDUSESSION_ToBeModifiedItem_BearerModInd->transportLayerAddress.size);
memcpy (PDUSESSION_ToBeModifiedItem_BearerModInd->transportLayerAddress.buf, pdusession_modification_ind->pdusessions_tobemodified[i].gNB_addr.buffer,
PDUSESSION_ToBeModifiedItem_BearerModInd->transportLayerAddress.size);
INT32_TO_OCTET_STRING(pdusession_modification_ind->pdusessions_tobemodified[i].gtp_teid, &PDUSESSION_ToBeModifiedItem_BearerModInd->dL_GTP_TEID);
}
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSESSIONToBeModifiedListBearerModInd.list, PDUSESSION_ToBeModifiedItem_BearerModInd_IEs);
}
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
//E-RABs NOT to be modified list
ie = (NGAP_PDUSESSIONModificationIndicationIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONModificationIndicationIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_PDUSESSIONNotToBeModifiedListBearerModInd;
ie->criticality = NGAP_Criticality_reject;
if(num_pdusessions_nottobemodified > 0) {
ie->value.present = NGAP_PDUSESSIONModificationIndicationIEs__value_PR_PDUSESSIONNotToBeModifiedListBearerModInd;
for(int i=0; i<num_pdusessions_nottobemodified; i++){
PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs = (NGAP_PDUSESSIONNotToBeModifiedItemBearerModIndIEs_t *)calloc(1,sizeof(NGAP_PDUSESSIONNotToBeModifiedItemBearerModIndIEs_t));
PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs->id = NGAP_ProtocolIE_ID_id_PDUSESSIONNotToBeModifiedItemBearerModInd;
PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs->criticality = NGAP_Criticality_reject;
PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs->value.present = NGAP_PDUSESSIONNotToBeModifiedItemBearerModIndIEs__value_PR_PDUSESSIONNotToBeModifiedItemBearerModInd;
PDUSESSION_NotToBeModifiedItem_BearerModInd = &PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs->value.choice.PDUSESSIONNotToBeModifiedItemBearerModInd;
{
PDUSESSION_NotToBeModifiedItem_BearerModInd->e_RAB_ID = pdusession_modification_ind->pdusessions_nottobemodified[i].pdusession_id;
PDUSESSION_NotToBeModifiedItem_BearerModInd->transportLayerAddress.size = pdusession_modification_ind->pdusessions_nottobemodified[i].gNB_addr.length/8;
PDUSESSION_NotToBeModifiedItem_BearerModInd->transportLayerAddress.bits_unused = pdusession_modification_ind->pdusessions_nottobemodified[i].gNB_addr.length%8;
PDUSESSION_NotToBeModifiedItem_BearerModInd->transportLayerAddress.buf =
calloc(1, PDUSESSION_NotToBeModifiedItem_BearerModInd->transportLayerAddress.size);
memcpy (PDUSESSION_NotToBeModifiedItem_BearerModInd->transportLayerAddress.buf, pdusession_modification_ind->pdusessions_nottobemodified[i].gNB_addr.buffer,
PDUSESSION_NotToBeModifiedItem_BearerModInd->transportLayerAddress.size);
INT32_TO_OCTET_STRING(pdusession_modification_ind->pdusessions_nottobemodified[i].gtp_teid, &PDUSESSION_NotToBeModifiedItem_BearerModInd->dL_GTP_TEID);
}
ASN_SEQUENCE_ADD(&ie->value.choice.PDUSESSIONNotToBeModifiedListBearerModInd.list, PDUSESSION_NotToBeModifiedItem_BearerModInd_IEs);
}
}
else{
ie->value.present = NGAP_PDUSESSIONModificationIndicationIEs__value_PR_PDUSESSIONNotToBeModifiedListBearerModInd;
ie->value.choice.PDUSESSIONNotToBeModifiedListBearerModInd.list.size = 0;
}
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
ie = (NGAP_PDUSESSIONModificationIndicationIEs_t *)calloc(1, sizeof(NGAP_PDUSESSIONModificationIndicationIEs_t));
ie->id = NGAP_ProtocolIE_ID_id_CSGMembershipInfo;
ie->criticality = NGAP_Criticality_reject;
ie->value.present = NGAP_PDUSESSIONModificationIndicationIEs__value_PR_CSGMembershipInfo;
ie->value.choice.CSGMembershipInfo.cSGMembershipStatus = NGAP_CSGMembershipStatus_member;
INT32_TO_BIT_STRING(CSG_id, &ie->value.choice.CSGMembershipInfo.cSG_Id);
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
if (ngap_gNB_encode_pdu(&pdu, &buffer, &len) < 0) {
NGAP_ERROR("Failed to encode S1 E-RAB modification indication \n");
return -1;
}
// Non UE-Associated signalling -> stream = 0
NGAP_INFO("Size of encoded message: %d \n", len);
ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance,
ue_context_p->amf_ref->assoc_id, buffer,
len, ue_context_p->tx_stream);
//ngap_gNB_itti_send_sctp_data_req(ngap_gNB_instance_p->instance, ue_context_p->amf_ref->assoc_id, buffer, len, 0);
return ret;
}*/
int
ngap_gNB_generate_PDUSESSION_Modification_Indication
(
instance_t
instance
,
ngap_pdusession_modification_ind_t
*
pdusession_modification_ind
)
...
...
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