+
+}
+
+void generate_e2apv1_service_update(E2AP_PDU_t *e2ap_pdu) {
+
+ char* ran_function_op_type = getenv("RAN_FUNCTION_OP_TYPE");
+ LOG_D("Ran funciton : %s", ran_function_op_type);
+ ProtocolIE_ID_t prID;
+ if (ran_function_op_type != NULL)
+ {
+ if (strcmp(ran_function_op_type, "ADD") == 0)
+ {
+ prID = ProtocolIE_ID_id_RANfunctionsAdded;
+ }
+ else if (strcmp(ran_function_op_type, "DELETE"))
+ {
+ prID = ProtocolIE_ID_id_RANfunctionsDeleted;
+ }
+ }
+ else
+ {
+ prID = ProtocolIE_ID_id_RANfunctionsModified;
+ }
+
+ auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t));
+ itemIes->id = ProtocolIE_ID_id_RANfunction_Item;
+ itemIes->criticality = Criticality_reject;
+ itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item;
+ itemIes->value.choice.RANfunction_Item.ranFunctionID = 1;
+
+ E2SM_KPM_RANfunction_Description_t *ranfunc_desc =
+ (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t));
+ encode_kpm_function_description(ranfunc_desc);
+
+ uint8_t e2smbuffer[8192];
+ size_t e2smbuffer_size = 8192;
+
+ asn_codec_ctx_t *opt_cod;
+
+ asn_enc_rval_t er =
+ asn_encode_to_buffer(opt_cod,
+ ATS_ALIGNED_BASIC_PER,
+ &asn_DEF_E2SM_KPM_RANfunction_Description,
+ ranfunc_desc, e2smbuffer, e2smbuffer_size);
+
+ fprintf(stderr, "er encded is %d\n", er.encoded);
+ fprintf(stderr, "after encoding message\n");
+
+ OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
+ ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded);
+ ranfuncdesc_str->size = er.encoded;
+ memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded);
+
+
+
+ itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str;
+ itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)3;
+
+
+ RICserviceUpdate_IEs_t *e2serviceUpdateList = (RICserviceUpdate_IEs_t *)calloc(1, sizeof(RICserviceUpdate_IEs_t));
+ e2serviceUpdateList->id = prID; /// is it correct ???
+ e2serviceUpdateList->criticality = Criticality_reject;
+ e2serviceUpdateList->value.present = RICserviceUpdate_IEs__value_PR_RANfunctions_List;
+ ASN_SEQUENCE_ADD(&e2serviceUpdateList->value.choice.RANfunctions_List.list, itemIes);
+
+ RICserviceUpdate_t *ricServiceUpdate = (RICserviceUpdate_t *)calloc(1, sizeof(RICserviceUpdate_t));
+ ASN_SEQUENCE_ADD(&ricServiceUpdate->protocolIEs.list, e2serviceUpdateList);
+
+ InitiatingMessage_t *initiatingMessage = (InitiatingMessage_t *)calloc(1, sizeof(InitiatingMessage_t));
+ initiatingMessage->criticality = Criticality_reject;
+ initiatingMessage->procedureCode = ProcedureCode_id_RICserviceUpdate;
+ initiatingMessage->value.present = InitiatingMessage__value_PR_RICserviceUpdate;
+ initiatingMessage->value.choice.RICserviceUpdate = *ricServiceUpdate;
+
+ E2AP_PDU_PR pres6 = E2AP_PDU_PR_initiatingMessage;
+ e2ap_pdu->present = pres6;
+ e2ap_pdu->choice.initiatingMessage = initiatingMessage;