10 #include "encode_e2apv1.hpp"
13 #include "E2SM-KPM-RANfunction-Description.h"
15 #include "e2ap_asn1c_codec.h"
16 #include "GlobalE2node-ID.h"
17 #include "GlobalE2node-gNB-ID.h"
18 #include "GlobalgNB-ID.h"
19 #include "OCTET_STRING.h"
20 #include "asn_application.h"
21 #include "GNB-ID-Choice.h"
22 #include "ProtocolIE-Field.h"
23 #include "E2setupRequest.h"
24 #include "RICaction-ToBeSetup-Item.h"
25 #include "RICactions-ToBeSetup-List.h"
26 #include "RICeventTriggerDefinition.h"
27 #include "RICsubscriptionRequest.h"
28 #include "RICsubscriptionResponse.h"
29 #include "ProtocolIE-SingleContainer.h"
30 #include "RANfunctions-List.h"
31 #include "RICindication.h"
32 #include "RICsubsequentActionType.h"
33 #include "RICsubsequentAction.h"
34 #include "RICtimeToWait.h"
38 long get_function_id_from_subscription(E2AP_PDU_t *e2ap_pdu) {
40 RICsubscriptionRequest_t orig_req =
41 e2ap_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest;
43 RICsubscriptionResponse_IEs_t *ricreqid =
44 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
46 int count = orig_req.protocolIEs.list.count;
47 int size = orig_req.protocolIEs.list.size;
49 RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array;
51 fprintf(stderr, "count%d\n", count);
52 fprintf(stderr, "size%d\n", size);
54 RICsubscriptionRequest_IEs__value_PR pres;
58 for (int i=0; i < count; i++) {
59 RICsubscriptionRequest_IEs_t *next_ie = ies[i];
60 pres = next_ie->value.present;
62 fprintf(stderr, "next present value %d\n", pres);
64 if (pres == RICsubscriptionRequest_IEs__value_PR_RANfunctionID) {
65 func_id = next_ie->value.choice.RANfunctionID;
74 void generate_e2apv1_setup_request_parameterized(E2AP_PDU_t *e2ap_pdu, long ranFunctionId, uint8_t *ranFuncDescEncoded, int ranFuncLength) {
76 // uint8_t *buf = (uint8_t *)"gnb1"
78 BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));;
79 gnb_bstring->buf = (uint8_t*)calloc(1,4);
80 gnb_bstring->size = 4;
81 gnb_bstring->buf[0] = 0xB5;
82 gnb_bstring->buf[1] = 0xC6;
83 gnb_bstring->buf[2] = 0x77;
84 gnb_bstring->buf[3] = 0x88;
86 gnb_bstring->bits_unused = 3;
88 uint8_t *buf2 = (uint8_t *)"747";
89 OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
90 plmn->buf = (uint8_t*)calloc(1,3);
91 memcpy(plmn->buf, buf2, 3);
94 GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t));
95 GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID;
96 gnbchoice->present = pres2;
97 gnbchoice->choice.gnb_ID = *gnb_bstring;
99 GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t));
100 gnb->plmn_id = *plmn;
101 gnb->gnb_id = *gnbchoice;
103 GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t));
104 e2gnb->global_gNB_ID = *gnb;
106 GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t));
107 GlobalE2node_ID_PR pres;
108 pres = GlobalE2node_ID_PR_gNB;
109 globale2nodeid->present = pres;
110 globale2nodeid->choice.gNB = e2gnb;
112 E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t));
113 E2setupRequestIEs__value_PR pres3;
114 pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID;
116 e2setuprid->criticality = 0;
117 e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid;
118 e2setuprid->value.present = pres3;
121 auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t));
122 ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs);
123 ranFlistIEs->criticality = 0;
124 ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded;
125 ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List;
127 auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t));
128 itemIes->id = ProtocolIE_ID_id_RANfunction_Item;
129 itemIes->criticality = Criticality_reject;
130 itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item;
131 itemIes->value.choice.RANfunction_Item.ranFunctionID = ranFunctionId;
133 E2SM_KPM_RANfunction_Description_t *ranfunc_desc =
134 (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t));
135 encode_kpm_function_description(ranfunc_desc);
137 uint8_t e2smbuffer[8192];
138 size_t e2smbuffer_size = 8192;
140 asn_codec_ctx_t *opt_cod;
143 asn_encode_to_buffer(opt_cod,
144 ATS_ALIGNED_BASIC_PER,
145 &asn_DEF_E2SM_KPM_RANfunction_Description,
146 ranfunc_desc, e2smbuffer, e2smbuffer_size);
148 fprintf(stderr, "er encded is %d\n", er.encoded);
149 fprintf(stderr, "after encoding message\n");
151 OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
152 // ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded);
153 ranfuncdesc_str->buf = (uint8_t*)calloc(1,ranFuncLength);
154 // ranfuncdesc_str->size = er.encoded;
155 ranfuncdesc_str->size = ranFuncLength;
156 // memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded);
157 memcpy(ranfuncdesc_str->buf, ranFuncDescEncoded, ranFuncLength);
160 itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str;
161 itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2;
163 ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes);
165 E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t));
166 ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid);
167 ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs);
169 InitiatingMessage__value_PR pres4;
170 pres4 = InitiatingMessage__value_PR_E2setupRequest;
171 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
173 initmsg->procedureCode = ProcedureCode_id_E2setup;
174 initmsg->criticality = Criticality_reject;
175 initmsg->value.present = pres4;
176 initmsg->value.choice.E2setupRequest = *e2setupreq;
179 pres5 = E2AP_PDU_PR_initiatingMessage;
182 e2ap_pdu->present = pres5;
183 e2ap_pdu->choice.initiatingMessage = initmsg;
187 void generate_e2apv1_setup_request(E2AP_PDU_t *e2ap_pdu) {
189 // uint8_t *buf = (uint8_t *)"gnb1"
191 BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));;
192 gnb_bstring->buf = (uint8_t*)calloc(1,4);
193 gnb_bstring->size = 4;
194 gnb_bstring->buf[0] = 0xB5;
195 gnb_bstring->buf[1] = 0xC6;
196 gnb_bstring->buf[2] = 0x77;
197 gnb_bstring->buf[3] = 0x88;
199 gnb_bstring->bits_unused = 3;
201 uint8_t *buf2 = (uint8_t *)"747";
202 OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
203 plmn->buf = (uint8_t*)calloc(1,3);
204 memcpy(plmn->buf, buf2, 3);
207 GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t));
208 GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID;
209 gnbchoice->present = pres2;
210 gnbchoice->choice.gnb_ID = *gnb_bstring;
212 GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t));
213 gnb->plmn_id = *plmn;
214 gnb->gnb_id = *gnbchoice;
216 GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t));
217 e2gnb->global_gNB_ID = *gnb;
219 GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t));
220 GlobalE2node_ID_PR pres;
221 pres = GlobalE2node_ID_PR_gNB;
222 globale2nodeid->present = pres;
223 globale2nodeid->choice.gNB = e2gnb;
225 E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t));
226 E2setupRequestIEs__value_PR pres3;
227 pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID;
229 e2setuprid->criticality = 0;
230 e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid;
231 e2setuprid->value.present = pres3;
234 auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t));
235 ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs);
236 ranFlistIEs->criticality = 0;
237 ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded;
238 ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List;
240 auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t));
241 itemIes->id = ProtocolIE_ID_id_RANfunction_Item;
242 itemIes->criticality = Criticality_reject;
243 itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item;
244 itemIes->value.choice.RANfunction_Item.ranFunctionID = 1;
246 E2SM_KPM_RANfunction_Description_t *ranfunc_desc =
247 (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t));
248 encode_kpm_function_description(ranfunc_desc);
250 uint8_t e2smbuffer[8192];
251 size_t e2smbuffer_size = 8192;
253 asn_codec_ctx_t *opt_cod;
256 asn_encode_to_buffer(opt_cod,
257 ATS_ALIGNED_BASIC_PER,
258 &asn_DEF_E2SM_KPM_RANfunction_Description,
259 ranfunc_desc, e2smbuffer, e2smbuffer_size);
261 fprintf(stderr, "er encded is %d\n", er.encoded);
262 fprintf(stderr, "after encoding message\n");
264 OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
265 ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded);
266 ranfuncdesc_str->size = er.encoded;
267 memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded);
270 itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str;
271 itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2;
273 ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes);
275 E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t));
276 ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid);
277 ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs);
279 InitiatingMessage__value_PR pres4;
280 pres4 = InitiatingMessage__value_PR_E2setupRequest;
281 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
283 initmsg->procedureCode = ProcedureCode_id_E2setup;
284 initmsg->criticality = Criticality_reject;
285 initmsg->value.present = pres4;
286 initmsg->value.choice.E2setupRequest = *e2setupreq;
289 pres5 = E2AP_PDU_PR_initiatingMessage;
292 e2ap_pdu->present = pres5;
293 e2ap_pdu->choice.initiatingMessage = initmsg;
298 void generate_e2apv1_setup_response(E2AP_PDU_t *e2ap_pdu) {
300 E2setupResponseIEs *resp_ies1 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t));
301 E2setupResponseIEs *resp_ies2 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t));
302 E2setupResponseIEs *resp_ies3 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t));
304 uint8_t *buf = (uint8_t *)"gnb1";
306 BIT_STRING_t *ricid_bstring = (BIT_STRING_t*)calloc(1,sizeof(BIT_STRING_t));
307 ricid_bstring->buf = buf;
308 ricid_bstring->size = 4;
309 ricid_bstring->bits_unused = 0;
311 uint8_t *buf2 = (uint8_t *)"plmn3";
312 OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
316 GlobalRIC_ID_t *globalricid = (GlobalRIC_ID_t*)calloc(1,sizeof(GlobalRIC_ID_t));
317 globalricid->pLMN_Identity = *plmn;
318 globalricid->ric_ID = *ricid_bstring;
320 E2setupResponseIEs__value_PR pres1;
321 pres1 = E2setupResponseIEs__value_PR_GlobalRIC_ID;
323 resp_ies1->id = ProtocolIE_ID_id_GlobalRIC_ID;
324 resp_ies1->criticality = 0;
325 resp_ies1->value.present = pres1;
326 resp_ies1->value.choice.GlobalRIC_ID = *globalricid;
328 E2setupResponse_t *e2setupresp = (E2setupResponse_t*)calloc(1,sizeof(E2setupResponse_t));
329 int ret = ASN_SEQUENCE_ADD(&e2setupresp->protocolIEs.list, resp_ies1);
332 SuccessfulOutcome__value_PR pres;
333 pres = SuccessfulOutcome__value_PR_E2setupResponse;
334 SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t));
335 successoutcome->procedureCode = 1;
336 successoutcome->criticality = 0;
337 successoutcome->value.present = pres;
338 successoutcome->value.choice.E2setupResponse = *e2setupresp;
340 E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome;
342 e2ap_pdu->present = pres5;
343 e2ap_pdu->choice.successfulOutcome = successoutcome;
348 void generate_e2apv1_subscription_request(E2AP_PDU *e2ap_pdu) {
350 fprintf(stderr, "in sub 1\n");
351 RICsubscriptionRequest_IEs_t *ricreqid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
352 fprintf(stderr, "in sub 2\n");
353 ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricreqid);
356 RICsubscriptionRequest_IEs_t *ranfuncid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
357 fprintf(stderr, "in sub 2\n");
358 ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ranfuncid);
361 fprintf(stderr, "in sub 3\n");
362 auto *ricsubrid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
363 fprintf(stderr, "in sub 4\n");
364 ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricsubrid);
366 fprintf(stderr, "in generate sub\n");
367 uint8_t *buf2 = (uint8_t *)"SubscriptionTriggers";
368 fprintf(stderr, "in gen sub 1\n");
369 OCTET_STRING_t *triggerdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
370 triggerdef->buf = (uint8_t *)calloc(1,20);
371 triggerdef->size = 20;
372 memcpy(triggerdef->buf, buf2, triggerdef->size);
375 fprintf(stderr, "sub1\n");
376 ProtocolIE_ID_t proto_id= ProtocolIE_ID_id_RICaction_ToBeSetup_Item;
378 RICaction_ToBeSetup_ItemIEs__value_PR pres6;
379 pres6 = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item;
383 uint8_t *buf5 = (uint8_t *)"ActionDef";
385 OCTET_STRING_t *actdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
386 actdef->buf = (uint8_t *)calloc(1,9);
388 memcpy(triggerdef->buf, buf5, 9);
390 auto *sa = (RICsubsequentAction_t *) calloc(1, sizeof(RICsubsequentAction_t));
391 ASN_STRUCT_RESET(asn_DEF_RICsubsequentAction, sa);
393 sa->ricTimeToWait = RICtimeToWait_w500ms;
394 sa->ricSubsequentActionType = RICsubsequentActionType_continue;
397 RICaction_ToBeSetup_Item_t *action_item = (RICaction_ToBeSetup_Item_t*)calloc(1, sizeof(RICaction_ToBeSetup_Item_t));
398 action_item->ricActionID = 5;
399 action_item->ricActionType = 9;
400 action_item->ricActionDefinition = actdef;
401 action_item->ricSubsequentAction = sa;
405 RICaction_ToBeSetup_ItemIEs_t *action_item_ies = (RICaction_ToBeSetup_ItemIEs_t *)calloc(1, sizeof(RICaction_ToBeSetup_Item_t));
406 action_item_ies->id = proto_id;
407 action_item_ies->criticality = 0;
409 action_item_ies->value.present = pres6;
410 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionID = 5;
411 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionType = RICactionType_report;
412 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = actdef;
413 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = sa;
418 RICsubscriptionDetails_t *ricsubdetails = (RICsubscriptionDetails_t*)calloc(1, sizeof(RICsubscriptionDetails_t));
421 ASN_SEQUENCE_ADD(&ricsubdetails->ricAction_ToBeSetup_List.list, action_item_ies);
422 ricsubdetails->ricEventTriggerDefinition = *triggerdef;
427 ranfuncid->id = ProtocolIE_ID_id_RANfunctionID;
428 ranfuncid->criticality = 0;
429 ranfuncid->value.present = RICsubscriptionRequest_IEs__value_PR_RANfunctionID;
430 ranfuncid->value.choice.RANfunctionID = 1;
433 RICsubscriptionRequest_IEs__value_PR pres3;
435 pres3 = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails;
436 ricsubrid->id = ProtocolIE_ID_id_RICsubscriptionDetails;
439 ricsubrid->criticality = 0;
440 ricsubrid->value.present = pres3;
443 ricsubrid->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition = *triggerdef;
446 ASN_SEQUENCE_ADD(&ricsubrid->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, action_item_ies);
451 ricreqid->id = ProtocolIE_ID_id_RICrequestID;
452 ricreqid->criticality = 0;
453 ricreqid->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID;
454 ricreqid->value.choice.RICrequestID.ricRequestorID = 22;
455 ricreqid->value.choice.RICrequestID.ricInstanceID = 6;
457 RICsubscriptionRequest_t *ricsubreq = (RICsubscriptionRequest_t*)calloc(1, sizeof(RICsubscriptionRequest_t));
459 ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricreqid);
460 ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricsubrid);
461 ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ranfuncid);
465 InitiatingMessage__value_PR pres4;
466 pres4 = InitiatingMessage__value_PR_RICsubscriptionRequest;
467 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
468 initmsg->procedureCode = ProcedureCode_id_RICsubscription;
469 initmsg->criticality = Criticality_reject;
470 initmsg->value.present = pres4;
471 initmsg->value.choice.RICsubscriptionRequest = *ricsubreq;
474 pres5 = E2AP_PDU_PR_initiatingMessage;
477 e2ap_pdu->present = pres5;
478 e2ap_pdu->choice.initiatingMessage = initmsg;
480 char *error_buf = (char*)calloc(300, sizeof(char));;
483 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
484 printf("error length %d\n", errlen);
485 printf("error buf %s\n", error_buf);
487 // xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);
491 void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[],
492 long reqActionIdsRejected[], int accept_size, int reject_size,
493 long reqRequestorId, long reqInstanceId) {
495 RICsubscriptionResponse_IEs_t *respricreqid =
496 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
498 respricreqid->id = ProtocolIE_ID_id_RICrequestID;
499 respricreqid->criticality = 0;
500 respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
501 respricreqid->value.choice.RICrequestID.ricRequestorID = reqRequestorId;
503 respricreqid->value.choice.RICrequestID.ricInstanceID = reqInstanceId;
506 RICsubscriptionResponse_IEs_t *ricactionadmitted =
507 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
508 ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted;
509 ricactionadmitted->criticality = 0;
510 ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
512 RICaction_Admitted_List_t* admlist =
513 (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t));
514 ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist;
516 // int numAccept = sizeof(reqActionIdsAccepted);
517 int numAccept = accept_size;
518 int numReject = reject_size;
519 // int numReject = sizeof(reqActionIdsRejected);
522 for (int i=0; i < numAccept ; i++) {
523 fprintf(stderr, "in for loop i = %d\n", i);
525 long aid = reqActionIdsAccepted[i];
527 RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t));
528 admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
529 admitie->criticality = 0;
530 admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
531 admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid;
533 ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie);
537 RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t));
538 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid);
539 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted);
544 RICsubscriptionResponse_IEs_t *ricactionrejected =
545 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
546 ricactionrejected->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
547 ricactionrejected->criticality = 0;
548 ricactionrejected->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
550 RICaction_NotAdmitted_List_t* rejectlist =
551 (RICaction_NotAdmitted_List_t*)calloc(1,sizeof(RICaction_NotAdmitted_List_t));
552 ricactionadmitted->value.choice.RICaction_NotAdmitted_List = *rejectlist;
554 for (int i=0; i < numReject; i++) {
555 fprintf(stderr, "in for loop i = %d\n", i);
557 long aid = reqActionIdsRejected[i];
559 RICaction_NotAdmitted_ItemIEs_t *noadmitie = (RICaction_NotAdmitted_ItemIEs_t*)calloc(1,sizeof(RICaction_NotAdmitted_ItemIEs_t));
560 noadmitie->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
561 noadmitie->criticality = 0;
562 noadmitie->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
563 noadmitie->value.choice.RICaction_NotAdmitted_Item.ricActionID = aid;
565 ASN_SEQUENCE_ADD(&ricactionrejected->value.choice.RICaction_NotAdmitted_List.list, noadmitie);
566 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionrejected);
571 SuccessfulOutcome__value_PR pres2;
572 pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
573 SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t));
574 successoutcome->procedureCode = ProcedureCode_id_RICsubscription;
575 successoutcome->criticality = 0;
576 successoutcome->value.present = pres2;
577 successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp;
579 E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome;
581 e2ap_pdu->present = pres5;
582 e2ap_pdu->choice.successfulOutcome = successoutcome;
584 char *error_buf = (char*)calloc(300, sizeof(char));
587 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
588 printf("error length %d\n", errlen);
589 printf("error buf %s\n", error_buf);
594 void generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) {
596 //Gather details of the request
598 RICsubscriptionRequest_t orig_req =
599 sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest;
601 RICsubscriptionResponse_IEs_t *ricreqid =
602 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
604 int count = orig_req.protocolIEs.list.count;
605 int size = orig_req.protocolIEs.list.size;
607 RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array;
609 fprintf(stderr, "count%d\n", count);
610 fprintf(stderr, "size%d\n", size);
612 RICsubscriptionRequest_IEs__value_PR pres;
614 long responseRequestorId;
615 long responseInstanceId;
616 long responseActionId;
618 std::vector<long> actionIds;
620 for (int i=0; i < count; i++) {
621 RICsubscriptionRequest_IEs_t *next_ie = ies[i];
622 pres = next_ie->value.present;
624 fprintf(stderr, "next present value %d\n", pres);
627 case RICsubscriptionRequest_IEs__value_PR_RICrequestID:
629 RICrequestID_t reqId = next_ie->value.choice.RICrequestID;
630 long requestorId = reqId.ricRequestorID;
631 long instanceId = reqId.ricInstanceID;
632 fprintf(stderr, "requestorId %d\n", requestorId);
633 fprintf(stderr, "instanceId %d\n", instanceId);
634 responseRequestorId = requestorId;
635 responseInstanceId = instanceId;
639 case RICsubscriptionRequest_IEs__value_PR_RANfunctionID:
641 case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails:
643 RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails;
644 RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition;
645 RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List;
647 int actionCount = actionList.list.count;
648 fprintf(stderr, "action count%d\n", actionCount);
650 auto **item_array = actionList.list.array;
652 for (int i=0; i < actionCount; i++) {
653 //RICaction_ToBeSetup_Item_t
654 auto *next_item = item_array[i];
655 RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID;
656 fprintf(stderr, "Next Action ID %ld\n", actionId);
657 responseActionId = actionId;
658 actionIds.push_back(responseActionId);
667 fprintf(stderr, "After Processing Subscription Request\n");
669 fprintf(stderr, "requestorId %d\n", responseRequestorId);
670 fprintf(stderr, "instanceId %d\n", responseInstanceId);
673 for (int i=0; i < actionIds.size(); i++) {
674 fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i));
679 RICsubscriptionResponse_IEs_t *respricreqid =
680 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
682 respricreqid->id = ProtocolIE_ID_id_RICrequestID;
683 respricreqid->criticality = 0;
684 respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
685 respricreqid->value.choice.RICrequestID.ricRequestorID = responseRequestorId;
687 respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId;
690 RICsubscriptionResponse_IEs_t *ricactionadmitted =
691 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
692 ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted;
693 ricactionadmitted->criticality = 0;
694 ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
696 RICaction_Admitted_List_t* admlist =
697 (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t));
698 ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist;
700 for (int i=0; i < actionIds.size(); i++) {
701 fprintf(stderr, "in for loop i = %d\n", i);
703 long aid = actionIds.at(i);
705 RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t));
706 admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
707 admitie->criticality = 0;
708 admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
709 admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid;
711 ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie);
716 RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t));
718 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid);
719 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted);
722 SuccessfulOutcome__value_PR pres2;
723 pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
724 SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t));
725 successoutcome->procedureCode = ProcedureCode_id_RICsubscription;
726 successoutcome->criticality = 0;
727 successoutcome->value.present = pres2;
728 successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp;
730 E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome;
732 e2ap_pdu->present = pres5;
733 e2ap_pdu->choice.successfulOutcome = successoutcome;
735 char *error_buf = (char*)calloc(300, sizeof(char));
738 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
739 printf("error length %d\n", errlen);
740 printf("error buf %s\n", error_buf);
744 void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu,
750 uint8_t *ind_header_buf,
752 uint8_t *ind_message_buf,
753 int message_length) {
755 fprintf(stderr, "ind1\n");
756 RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
757 RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
758 RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
759 RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
760 RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
761 RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
762 RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
763 RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
765 RICindication_IEs__value_PR pres3;
767 pres3 = RICindication_IEs__value_PR_RICrequestID;
768 ricind_ies->id = ProtocolIE_ID_id_RICrequestID;
769 ricind_ies->criticality = 0;
770 ricind_ies->value.present = pres3;
771 ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId;
772 ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId;
774 fprintf(stderr, "ind2\n");
776 pres3 = RICindication_IEs__value_PR_RANfunctionID;
777 ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID;
778 ricind_ies2->criticality = 0;
779 ricind_ies2->value.present = pres3;
780 ricind_ies2->value.choice.RANfunctionID = ranFunctionId;
783 ricind_ies3->id = ProtocolIE_ID_id_RICactionID;
784 ricind_ies3->criticality = 0;
785 pres3 = RICindication_IEs__value_PR_RICactionID;
786 ricind_ies3->value.present = pres3;
787 ricind_ies3->value.choice.RICactionID = actionId;
790 pres3 = RICindication_IEs__value_PR_RICindicationSN;
791 ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN;
792 ricind_ies4->criticality = 0;
793 ricind_ies4->value.present = pres3;
794 ricind_ies4->value.choice.RICindicationSN = seqNum;
796 //Indication type is REPORT
797 pres3 = RICindication_IEs__value_PR_RICindicationType;
798 ricind_ies5->id = ProtocolIE_ID_id_RICindicationType;
799 ricind_ies5->criticality = 0;
800 ricind_ies5->value.present = pres3;
801 ricind_ies5->value.choice.RICindicationType = 0;
804 uint8_t *buf2 = (uint8_t *)"reportheader";
805 OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
807 hdr_str->buf = (uint8_t*)calloc(1,header_length);
808 hdr_str->size = header_length;
809 memcpy(hdr_str->buf, ind_header_buf, header_length);
811 fprintf(stderr, "ind3\n");
813 ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length);
815 pres3 = RICindication_IEs__value_PR_RICindicationHeader;
816 ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader;
817 ricind_ies6->criticality = 0;
818 ricind_ies6->value.present = pres3;
819 ricind_ies6->value.choice.RICindicationHeader.size = header_length;
820 memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, ind_header_buf, header_length);
822 ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192);
827 pres3 = RICindication_IEs__value_PR_RICindicationMessage;
828 ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage;
829 fprintf(stderr, "after encoding message 1\n");
831 ricind_ies7->criticality = 0;
832 ricind_ies7->value.present = pres3;
834 fprintf(stderr, "after encoding message 2\n");
836 fprintf(stderr, "after encoding message 3\n");
837 ricind_ies7->value.choice.RICindicationMessage.size = message_length;
839 fprintf(stderr, "after encoding message 4\n");
840 memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length);
842 fprintf(stderr, "after encoding message 5\n");
844 uint8_t *cpid_buf = (uint8_t *)"cpid";
845 OCTET_STRING_t cpid_str;
849 int cpid_buf_len = strlen((char*)cpid_buf);
850 pres3 = RICindication_IEs__value_PR_RICcallProcessID;
851 ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID;
853 ricind_ies8->criticality = 0;
854 ricind_ies8->value.present = pres3;
856 ricind_ies8->value.choice.RICcallProcessID.buf = (uint8_t*)calloc(1,cpid_buf_len);
857 ricind_ies8->value.choice.RICcallProcessID.size = cpid_buf_len;
859 memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len);
863 RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t));
868 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies);
870 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2);
874 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3);
878 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4);
882 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5);
886 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6);
890 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7);
892 // ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8);
895 InitiatingMessage__value_PR pres4;
896 pres4 = InitiatingMessage__value_PR_RICindication;
897 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
898 initmsg->procedureCode = 5;
899 initmsg->criticality = 1;
900 initmsg->value.present = pres4;
901 initmsg->value.choice.RICindication = *ricindication;
904 pres5 = E2AP_PDU_PR_initiatingMessage;
906 e2ap_pdu->present = pres5;
907 e2ap_pdu->choice.initiatingMessage = initmsg;
909 char *error_buf = (char*)calloc(300, sizeof(char));
912 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
913 printf("error length %d\n", errlen);
914 printf("error buf %s\n", error_buf);
916 xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);
920 void generate_e2apv1_indication_request(E2AP_PDU *e2ap_pdu) {
921 fprintf(stderr, "ind1\n");
922 RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
923 RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
924 RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
925 RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
926 RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
927 RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
928 RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
929 RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
931 RICindication_IEs__value_PR pres3;
933 pres3 = RICindication_IEs__value_PR_RICrequestID;
934 ricind_ies->id = ProtocolIE_ID_id_RICrequestID;
935 ricind_ies->criticality = 0;
936 ricind_ies->value.present = pres3;
937 ricind_ies->value.choice.RICrequestID.ricRequestorID = 25;
938 ricind_ies->value.choice.RICrequestID.ricInstanceID = 3;
940 fprintf(stderr, "ind2\n");
942 pres3 = RICindication_IEs__value_PR_RANfunctionID;
943 ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID;
944 ricind_ies2->criticality = 0;
945 ricind_ies2->value.present = pres3;
946 ricind_ies2->value.choice.RANfunctionID = 70;
949 ricind_ies3->id = ProtocolIE_ID_id_RICactionID;
950 ricind_ies3->criticality = 0;
951 pres3 = RICindication_IEs__value_PR_RICactionID;
952 ricind_ies3->value.present = pres3;
953 ricind_ies3->value.choice.RICactionID = 80;
956 pres3 = RICindication_IEs__value_PR_RICindicationSN;
957 ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN;
958 ricind_ies4->criticality = 0;
959 ricind_ies4->value.present = pres3;
960 ricind_ies4->value.choice.RICindicationSN = 45;
962 pres3 = RICindication_IEs__value_PR_RICindicationType;
963 ricind_ies5->id = ProtocolIE_ID_id_RICindicationType;
964 ricind_ies5->criticality = 0;
965 ricind_ies5->value.present = pres3;
966 ricind_ies5->value.choice.RICindicationType = 0;
969 uint8_t *buf2 = (uint8_t *)"reportheader";
970 OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
971 hdr_str->buf = (uint8_t*)calloc(1,12);
973 memcpy(hdr_str->buf, buf2, 12);
975 fprintf(stderr, "ind3\n");
977 ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,12);
979 pres3 = RICindication_IEs__value_PR_RICindicationHeader;
980 ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader;
981 ricind_ies6->criticality = 0;
982 ricind_ies6->value.present = pres3;
983 ricind_ies6->value.choice.RICindicationHeader.size = 12;
984 memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, buf2, 12);
986 ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192);
987 // uint8_t *buf9 = (uint8_t *)"reportmsg";
990 E2SM_KPM_IndicationMessage_t *e2sm_ind_msg =
991 (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t));
993 encode_kpm(e2sm_ind_msg);
996 E2SM_KPM_RANfunction_Description_t *e2sm_desc =
997 (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t));
999 encode_kpm_function_description(e2sm_desc);
1002 uint8_t e2smbuffer[8192];
1003 size_t e2smbuffer_size = 8192;
1005 asn_codec_ctx_t *opt_cod;
1009 asn_encode_to_buffer(opt_cod,
1010 ATS_ALIGNED_BASIC_PER,
1011 &asn_DEF_E2SM_KPM_RANfunction_Description,
1012 e2sm_desc, e2smbuffer, e2smbuffer_size);
1015 asn_encode_to_buffer(opt_cod,
1016 ATS_ALIGNED_BASIC_PER,
1017 &asn_DEF_E2SM_KPM_IndicationMessage,
1018 e2sm_ind_msg, e2smbuffer, e2smbuffer_size);
1023 fprintf(stderr, "er encded is %d\n", er.encoded);
1024 fprintf(stderr, "after encoding message\n");
1026 OCTET_STRING_t *msg_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
1027 msg_str->buf = (uint8_t*)calloc(1,er.encoded);
1028 msg_str->size = er.encoded;
1029 memcpy(msg_str->buf, e2smbuffer, er.encoded);
1032 pres3 = RICindication_IEs__value_PR_RICindicationMessage;
1033 ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage;
1034 fprintf(stderr, "after encoding message 1\n");
1036 ricind_ies7->criticality = 0;
1037 ricind_ies7->value.present = pres3;
1039 fprintf(stderr, "after encoding message 2\n");
1041 fprintf(stderr, "after encoding message 3\n");
1042 ricind_ies7->value.choice.RICindicationMessage.size = er.encoded;
1044 fprintf(stderr, "after encoding message 4\n");
1045 memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, e2smbuffer, er.encoded);
1047 fprintf(stderr, "after encoding message 5\n");
1049 uint8_t *buf4 = (uint8_t *)"cpid";
1050 OCTET_STRING_t cpid_str;
1051 cpid_str.buf = buf4;
1055 pres3 = RICindication_IEs__value_PR_RICcallProcessID;
1056 ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID;
1058 ricind_ies8->criticality = 0;
1059 ricind_ies8->value.present = pres3;
1061 ricind_ies8->value.choice.RICcallProcessID = cpid_str;
1064 RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t));
1069 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies);
1071 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2);
1073 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3);
1074 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4);
1075 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5);
1077 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6);
1079 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7);
1081 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8);
1084 InitiatingMessage__value_PR pres4;
1085 pres4 = InitiatingMessage__value_PR_RICindication;
1086 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
1087 initmsg->procedureCode = 5;
1088 initmsg->criticality = 1;
1089 initmsg->value.present = pres4;
1090 initmsg->value.choice.RICindication = *ricindication;
1093 pres5 = E2AP_PDU_PR_initiatingMessage;
1095 e2ap_pdu->present = pres5;
1096 e2ap_pdu->choice.initiatingMessage = initmsg;
1098 char *error_buf = (char*)calloc(300, sizeof(char));;
1101 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
1102 printf("error length %d\n", errlen);
1103 printf("error buf %s\n", error_buf);
1105 xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);
1109 void generate_e2apv1_indication_response(E2AP_PDU *e2ap_pdu) {