10 #include "encode_e2apv1.hpp"
11 #include "E2SM-KPM-RANfunction-Description.h"
14 void generate_e2apv1_setup_request(E2AP_PDU_t *e2ap_pdu) {
16 // uint8_t *buf = (uint8_t *)"gnb1"
18 BIT_STRING_t *gnb_bstring = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t));;
19 gnb_bstring->buf = (uint8_t*)calloc(1,4);
20 gnb_bstring->size = 4;
21 gnb_bstring->buf[0] = 0xB5;
22 gnb_bstring->buf[1] = 0xC6;
23 gnb_bstring->buf[2] = 0x77;
24 gnb_bstring->buf[3] = 0x88;
26 gnb_bstring->bits_unused = 3;
28 uint8_t *buf2 = (uint8_t *)"747";
29 OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
30 plmn->buf = (uint8_t*)calloc(1,3);
31 memcpy(plmn->buf, buf2, 3);
34 GNB_ID_Choice_t *gnbchoice = (GNB_ID_Choice_t*)calloc(1,sizeof(GNB_ID_Choice_t));
35 GNB_ID_Choice_PR pres2 = GNB_ID_Choice_PR_gnb_ID;
36 gnbchoice->present = pres2;
37 gnbchoice->choice.gnb_ID = *gnb_bstring;
39 GlobalgNB_ID_t *gnb = (GlobalgNB_ID_t*)calloc(1, sizeof(GlobalgNB_ID_t));
41 gnb->gnb_id = *gnbchoice;
43 GlobalE2node_gNB_ID_t *e2gnb = (GlobalE2node_gNB_ID_t*)calloc(1, sizeof(GlobalE2node_gNB_ID_t));
44 e2gnb->global_gNB_ID = *gnb;
46 GlobalE2node_ID_t *globale2nodeid = (GlobalE2node_ID_t*)calloc(1, sizeof(GlobalE2node_ID_t));
47 GlobalE2node_ID_PR pres;
48 pres = GlobalE2node_ID_PR_gNB;
49 globale2nodeid->present = pres;
50 globale2nodeid->choice.gNB = e2gnb;
52 E2setupRequestIEs_t *e2setuprid = (E2setupRequestIEs_t*)calloc(1, sizeof(E2setupRequestIEs_t));
53 E2setupRequestIEs__value_PR pres3;
54 pres3 = E2setupRequestIEs__value_PR_GlobalE2node_ID;
56 e2setuprid->criticality = 0;
57 e2setuprid->value.choice.GlobalE2node_ID = *globale2nodeid;
58 e2setuprid->value.present = pres3;
61 auto *ranFlistIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t));
62 ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, ranFlistIEs);
63 ranFlistIEs->criticality = 0;
64 ranFlistIEs->id = ProtocolIE_ID_id_RANfunctionsAdded;
65 ranFlistIEs->value.present = E2setupRequestIEs__value_PR_RANfunctions_List;
67 auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t));
68 itemIes->id = ProtocolIE_ID_id_RANfunction_Item;
69 itemIes->criticality = Criticality_reject;
70 itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item;
71 itemIes->value.choice.RANfunction_Item.ranFunctionID = 1;
73 E2SM_KPM_RANfunction_Description_t *ranfunc_desc =
74 (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t));
75 encode_kpm_function_description(ranfunc_desc);
77 uint8_t e2smbuffer[8192];
78 size_t e2smbuffer_size = 8192;
80 asn_codec_ctx_t *opt_cod;
83 asn_encode_to_buffer(opt_cod,
84 ATS_ALIGNED_BASIC_PER,
85 &asn_DEF_E2SM_KPM_RANfunction_Description,
86 ranfunc_desc, e2smbuffer, e2smbuffer_size);
88 fprintf(stderr, "er encded is %d\n", er.encoded);
89 fprintf(stderr, "after encoding message\n");
91 OCTET_STRING_t *ranfuncdesc_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
92 ranfuncdesc_str->buf = (uint8_t*)calloc(1,er.encoded);
93 ranfuncdesc_str->size = er.encoded;
94 memcpy(ranfuncdesc_str->buf, e2smbuffer, er.encoded);
97 itemIes->value.choice.RANfunction_Item.ranFunctionDefinition = *ranfuncdesc_str;
98 itemIes->value.choice.RANfunction_Item.ranFunctionRevision = (long)2;
100 ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes);
102 E2setupRequest_t *e2setupreq = (E2setupRequest_t*)calloc(1, sizeof(E2setupRequest_t));
103 ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, e2setuprid);
104 ASN_SEQUENCE_ADD(&e2setupreq->protocolIEs.list, ranFlistIEs);
106 InitiatingMessage__value_PR pres4;
107 pres4 = InitiatingMessage__value_PR_E2setupRequest;
108 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
110 initmsg->procedureCode = ProcedureCode_id_E2setup;
111 initmsg->criticality = Criticality_reject;
112 initmsg->value.present = pres4;
113 initmsg->value.choice.E2setupRequest = *e2setupreq;
116 pres5 = E2AP_PDU_PR_initiatingMessage;
119 e2ap_pdu->present = pres5;
120 e2ap_pdu->choice.initiatingMessage = initmsg;
125 void generate_e2apv1_setup_response(E2AP_PDU_t *e2ap_pdu) {
127 E2setupResponseIEs *resp_ies1 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t));
128 E2setupResponseIEs *resp_ies2 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t));
129 E2setupResponseIEs *resp_ies3 = (E2setupResponseIEs_t*)calloc(1, sizeof(E2setupResponseIEs_t));
131 uint8_t *buf = (uint8_t *)"gnb1";
133 BIT_STRING_t *ricid_bstring = (BIT_STRING_t*)calloc(1,sizeof(BIT_STRING_t));
134 ricid_bstring->buf = buf;
135 ricid_bstring->size = 4;
136 ricid_bstring->bits_unused = 0;
138 uint8_t *buf2 = (uint8_t *)"plmn3";
139 OCTET_STRING_t *plmn = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
143 GlobalRIC_ID_t *globalricid = (GlobalRIC_ID_t*)calloc(1,sizeof(GlobalRIC_ID_t));
144 globalricid->pLMN_Identity = *plmn;
145 globalricid->ric_ID = *ricid_bstring;
147 E2setupResponseIEs__value_PR pres1;
148 pres1 = E2setupResponseIEs__value_PR_GlobalRIC_ID;
150 resp_ies1->id = ProtocolIE_ID_id_GlobalRIC_ID;
151 resp_ies1->criticality = 0;
152 resp_ies1->value.present = pres1;
153 resp_ies1->value.choice.GlobalRIC_ID = *globalricid;
155 E2setupResponse_t *e2setupresp = (E2setupResponse_t*)calloc(1,sizeof(E2setupResponse_t));
156 int ret = ASN_SEQUENCE_ADD(&e2setupresp->protocolIEs.list, resp_ies1);
159 SuccessfulOutcome__value_PR pres;
160 pres = SuccessfulOutcome__value_PR_E2setupResponse;
161 SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t));
162 successoutcome->procedureCode = 1;
163 successoutcome->criticality = 0;
164 successoutcome->value.present = pres;
165 successoutcome->value.choice.E2setupResponse = *e2setupresp;
167 E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome;
169 e2ap_pdu->present = pres5;
170 e2ap_pdu->choice.successfulOutcome = successoutcome;
175 void generate_e2apv1_subscription_request(E2AP_PDU *e2ap_pdu) {
177 fprintf(stderr, "in sub 1\n");
178 RICsubscriptionRequest_IEs_t *ricreqid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
179 fprintf(stderr, "in sub 2\n");
180 ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricreqid);
181 fprintf(stderr, "in sub 3\n");
182 auto *ricsubrid = (RICsubscriptionRequest_IEs_t*)calloc(1, sizeof(RICsubscriptionRequest_IEs_t));
183 fprintf(stderr, "in sub 4\n");
184 ASN_STRUCT_RESET(asn_DEF_RICsubscriptionRequest_IEs, ricsubrid);
186 fprintf(stderr, "in generate sub\n");
187 uint8_t *buf2 = (uint8_t *)"SubscriptionTriggers";
188 fprintf(stderr, "in gen sub 1\n");
189 OCTET_STRING_t *triggerdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
190 triggerdef->buf = (uint8_t *)calloc(1,20);
191 triggerdef->size = 20;
192 memcpy(triggerdef->buf, buf2, triggerdef->size);
195 fprintf(stderr, "sub1\n");
196 ProtocolIE_ID_t proto_id= ProtocolIE_ID_id_RICaction_ToBeSetup_Item;
198 RICaction_ToBeSetup_ItemIEs__value_PR pres6;
199 pres6 = RICaction_ToBeSetup_ItemIEs__value_PR_RICaction_ToBeSetup_Item;
203 uint8_t *buf5 = (uint8_t *)"ActionDef";
205 OCTET_STRING_t *actdef = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
206 actdef->buf = (uint8_t *)calloc(1,9);
208 memcpy(triggerdef->buf, buf5, 9);
210 auto *sa = (RICsubsequentAction_t *) calloc(1, sizeof(RICsubsequentAction_t));
211 ASN_STRUCT_RESET(asn_DEF_RICsubsequentAction, sa);
213 sa->ricTimeToWait = RICtimeToWait_w500ms;
214 sa->ricSubsequentActionType = RICsubsequentActionType_continue;
217 RICaction_ToBeSetup_Item_t *action_item = (RICaction_ToBeSetup_Item_t*)calloc(1, sizeof(RICaction_ToBeSetup_Item_t));
218 action_item->ricActionID = 5;
219 action_item->ricActionType = 9;
220 action_item->ricActionDefinition = actdef;
221 action_item->ricSubsequentAction = sa;
225 RICaction_ToBeSetup_ItemIEs_t *action_item_ies = (RICaction_ToBeSetup_ItemIEs_t *)calloc(1, sizeof(RICaction_ToBeSetup_Item_t));
226 action_item_ies->id = proto_id;
227 action_item_ies->criticality = 0;
229 action_item_ies->value.present = pres6;
230 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionID = 5;
231 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionType = RICactionType_report;
232 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricActionDefinition = actdef;
233 action_item_ies->value.choice.RICaction_ToBeSetup_Item.ricSubsequentAction = sa;
238 RICsubscriptionDetails_t *ricsubdetails = (RICsubscriptionDetails_t*)calloc(1, sizeof(RICsubscriptionDetails_t));
241 ASN_SEQUENCE_ADD(&ricsubdetails->ricAction_ToBeSetup_List.list, action_item_ies);
242 ricsubdetails->ricEventTriggerDefinition = *triggerdef;
248 RICsubscriptionRequest_IEs__value_PR pres3;
250 pres3 = RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails;
251 ricsubrid->id = ProtocolIE_ID_id_RICsubscriptionDetails;
254 ricsubrid->criticality = 0;
255 ricsubrid->value.present = pres3;
258 ricsubrid->value.choice.RICsubscriptionDetails.ricEventTriggerDefinition = *triggerdef;
261 ASN_SEQUENCE_ADD(&ricsubrid->value.choice.RICsubscriptionDetails.ricAction_ToBeSetup_List.list, action_item_ies);
266 ricreqid->id = ProtocolIE_ID_id_RICrequestID;
267 ricreqid->criticality = 0;
268 ricreqid->value.present = RICsubscriptionRequest_IEs__value_PR_RICrequestID;
269 ricreqid->value.choice.RICrequestID.ricRequestorID = 22;
270 ricreqid->value.choice.RICrequestID.ricInstanceID = 6;
272 RICsubscriptionRequest_t *ricsubreq = (RICsubscriptionRequest_t*)calloc(1, sizeof(RICsubscriptionRequest_t));
274 ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricreqid);
275 ASN_SEQUENCE_ADD(&ricsubreq->protocolIEs.list,ricsubrid);
279 InitiatingMessage__value_PR pres4;
280 pres4 = InitiatingMessage__value_PR_RICsubscriptionRequest;
281 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
282 initmsg->procedureCode = ProcedureCode_id_RICsubscription;
283 initmsg->criticality = Criticality_reject;
284 initmsg->value.present = pres4;
285 initmsg->value.choice.RICsubscriptionRequest = *ricsubreq;
288 pres5 = E2AP_PDU_PR_initiatingMessage;
291 e2ap_pdu->present = pres5;
292 e2ap_pdu->choice.initiatingMessage = initmsg;
294 char *error_buf = (char*)calloc(300, sizeof(char));;
297 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
298 printf("error length %d\n", errlen);
299 printf("error buf %s\n", error_buf);
301 // xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);
305 void generate_e2apv1_subscription_response_success(E2AP_PDU *e2ap_pdu, long reqActionIdsAccepted[],
306 long reqActionIdsRejected[], int accept_size, int reject_size,
307 long reqRequestorId, long reqInstanceId) {
309 RICsubscriptionResponse_IEs_t *respricreqid =
310 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
312 respricreqid->id = ProtocolIE_ID_id_RICrequestID;
313 respricreqid->criticality = 0;
314 respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
315 respricreqid->value.choice.RICrequestID.ricRequestorID = reqRequestorId;
317 respricreqid->value.choice.RICrequestID.ricInstanceID = reqInstanceId;
320 RICsubscriptionResponse_IEs_t *ricactionadmitted =
321 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
322 ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted;
323 ricactionadmitted->criticality = 0;
324 ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
326 RICaction_Admitted_List_t* admlist =
327 (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t));
328 ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist;
330 // int numAccept = sizeof(reqActionIdsAccepted);
331 int numAccept = accept_size;
332 int numReject = reject_size;
333 // int numReject = sizeof(reqActionIdsRejected);
336 for (int i=0; i < numAccept ; i++) {
337 fprintf(stderr, "in for loop i = %d\n", i);
339 long aid = reqActionIdsAccepted[i];
341 RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t));
342 admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
343 admitie->criticality = 0;
344 admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
345 admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid;
347 ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie);
351 RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t));
352 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid);
353 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted);
358 RICsubscriptionResponse_IEs_t *ricactionrejected =
359 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
360 ricactionrejected->id = ProtocolIE_ID_id_RICactions_NotAdmitted;
361 ricactionrejected->criticality = 0;
362 ricactionrejected->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_NotAdmitted_List;
364 RICaction_NotAdmitted_List_t* rejectlist =
365 (RICaction_NotAdmitted_List_t*)calloc(1,sizeof(RICaction_NotAdmitted_List_t));
366 ricactionadmitted->value.choice.RICaction_NotAdmitted_List = *rejectlist;
368 for (int i=0; i < numReject; i++) {
369 fprintf(stderr, "in for loop i = %d\n", i);
371 long aid = reqActionIdsRejected[i];
373 RICaction_NotAdmitted_ItemIEs_t *noadmitie = (RICaction_NotAdmitted_ItemIEs_t*)calloc(1,sizeof(RICaction_NotAdmitted_ItemIEs_t));
374 noadmitie->id = ProtocolIE_ID_id_RICaction_NotAdmitted_Item;
375 noadmitie->criticality = 0;
376 noadmitie->value.present = RICaction_NotAdmitted_ItemIEs__value_PR_RICaction_NotAdmitted_Item;
377 noadmitie->value.choice.RICaction_NotAdmitted_Item.ricActionID = aid;
379 ASN_SEQUENCE_ADD(&ricactionrejected->value.choice.RICaction_NotAdmitted_List.list, noadmitie);
380 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionrejected);
385 SuccessfulOutcome__value_PR pres2;
386 pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
387 SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t));
388 successoutcome->procedureCode = ProcedureCode_id_RICsubscription;
389 successoutcome->criticality = 0;
390 successoutcome->value.present = pres2;
391 successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp;
393 E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome;
395 e2ap_pdu->present = pres5;
396 e2ap_pdu->choice.successfulOutcome = successoutcome;
398 char *error_buf = (char*)calloc(300, sizeof(char));
401 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
402 printf("error length %d\n", errlen);
403 printf("error buf %s\n", error_buf);
408 void generate_e2apv1_subscription_response(E2AP_PDU *e2ap_pdu, E2AP_PDU *sub_req_pdu) {
410 //Gather details of the request
412 RICsubscriptionRequest_t orig_req =
413 sub_req_pdu->choice.initiatingMessage->value.choice.RICsubscriptionRequest;
415 RICsubscriptionResponse_IEs_t *ricreqid =
416 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
418 int count = orig_req.protocolIEs.list.count;
419 int size = orig_req.protocolIEs.list.size;
421 RICsubscriptionRequest_IEs_t **ies = (RICsubscriptionRequest_IEs_t**)orig_req.protocolIEs.list.array;
423 fprintf(stderr, "count%d\n", count);
424 fprintf(stderr, "size%d\n", size);
426 RICsubscriptionRequest_IEs__value_PR pres;
428 long responseRequestorId;
429 long responseInstanceId;
430 long responseActionId;
432 std::vector<long> actionIds;
434 for (int i=0; i < count; i++) {
435 RICsubscriptionRequest_IEs_t *next_ie = ies[i];
436 pres = next_ie->value.present;
438 fprintf(stderr, "next present value %d\n", pres);
441 case RICsubscriptionRequest_IEs__value_PR_RICrequestID:
443 RICrequestID_t reqId = next_ie->value.choice.RICrequestID;
444 long requestorId = reqId.ricRequestorID;
445 long instanceId = reqId.ricInstanceID;
446 fprintf(stderr, "requestorId %d\n", requestorId);
447 fprintf(stderr, "instanceId %d\n", instanceId);
448 responseRequestorId = requestorId;
449 responseInstanceId = instanceId;
453 case RICsubscriptionRequest_IEs__value_PR_RANfunctionID:
455 case RICsubscriptionRequest_IEs__value_PR_RICsubscriptionDetails:
457 RICsubscriptionDetails_t subDetails = next_ie->value.choice.RICsubscriptionDetails;
458 RICeventTriggerDefinition_t triggerDef = subDetails.ricEventTriggerDefinition;
459 RICactions_ToBeSetup_List_t actionList = subDetails.ricAction_ToBeSetup_List;
461 int actionCount = actionList.list.count;
462 fprintf(stderr, "action count%d\n", actionCount);
464 auto **item_array = actionList.list.array;
466 for (int i=0; i < actionCount; i++) {
467 //RICaction_ToBeSetup_Item_t
468 auto *next_item = item_array[i];
469 RICactionID_t actionId = ((RICaction_ToBeSetup_ItemIEs*)next_item)->value.choice.RICaction_ToBeSetup_Item.ricActionID;
470 fprintf(stderr, "Next Action ID %ld\n", actionId);
471 responseActionId = actionId;
472 actionIds.push_back(responseActionId);
481 fprintf(stderr, "After Processing Subscription Request\n");
483 fprintf(stderr, "requestorId %d\n", responseRequestorId);
484 fprintf(stderr, "instanceId %d\n", responseInstanceId);
487 for (int i=0; i < actionIds.size(); i++) {
488 fprintf(stderr, "Action ID %d %ld\n", i, actionIds.at(i));
493 RICsubscriptionResponse_IEs_t *respricreqid =
494 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
496 respricreqid->id = ProtocolIE_ID_id_RICrequestID;
497 respricreqid->criticality = 0;
498 respricreqid->value.present = RICsubscriptionResponse_IEs__value_PR_RICrequestID;
499 respricreqid->value.choice.RICrequestID.ricRequestorID = responseRequestorId;
501 respricreqid->value.choice.RICrequestID.ricInstanceID = responseInstanceId;
504 RICsubscriptionResponse_IEs_t *ricactionadmitted =
505 (RICsubscriptionResponse_IEs_t*)calloc(1, sizeof(RICsubscriptionResponse_IEs_t));
506 ricactionadmitted->id = ProtocolIE_ID_id_RICactions_Admitted;
507 ricactionadmitted->criticality = 0;
508 ricactionadmitted->value.present = RICsubscriptionResponse_IEs__value_PR_RICaction_Admitted_List;
510 RICaction_Admitted_List_t* admlist =
511 (RICaction_Admitted_List_t*)calloc(1,sizeof(RICaction_Admitted_List_t));
512 ricactionadmitted->value.choice.RICaction_Admitted_List = *admlist;
514 for (int i=0; i < actionIds.size(); i++) {
515 fprintf(stderr, "in for loop i = %d\n", i);
517 long aid = actionIds.at(i);
519 RICaction_Admitted_ItemIEs_t *admitie = (RICaction_Admitted_ItemIEs_t*)calloc(1,sizeof(RICaction_Admitted_ItemIEs_t));
520 admitie->id = ProtocolIE_ID_id_RICaction_Admitted_Item;
521 admitie->criticality = 0;
522 admitie->value.present = RICaction_Admitted_ItemIEs__value_PR_RICaction_Admitted_Item;
523 admitie->value.choice.RICaction_Admitted_Item.ricActionID = aid;
525 ASN_SEQUENCE_ADD(&ricactionadmitted->value.choice.RICaction_Admitted_List.list, admitie);
530 RICsubscriptionResponse_t *ricsubresp = (RICsubscriptionResponse_t*)calloc(1,sizeof(RICsubscriptionResponse_t));
532 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, respricreqid);
533 ASN_SEQUENCE_ADD(&ricsubresp->protocolIEs.list, ricactionadmitted);
536 SuccessfulOutcome__value_PR pres2;
537 pres2 = SuccessfulOutcome__value_PR_RICsubscriptionResponse;
538 SuccessfulOutcome_t *successoutcome = (SuccessfulOutcome_t*)calloc(1, sizeof(SuccessfulOutcome_t));
539 successoutcome->procedureCode = ProcedureCode_id_RICsubscription;
540 successoutcome->criticality = 0;
541 successoutcome->value.present = pres2;
542 successoutcome->value.choice.RICsubscriptionResponse = *ricsubresp;
544 E2AP_PDU_PR pres5 = E2AP_PDU_PR_successfulOutcome;
546 e2ap_pdu->present = pres5;
547 e2ap_pdu->choice.successfulOutcome = successoutcome;
549 char *error_buf = (char*)calloc(300, sizeof(char));
552 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
553 printf("error length %d\n", errlen);
554 printf("error buf %s\n", error_buf);
558 void generate_e2apv1_indication_request_parameterized(E2AP_PDU *e2ap_pdu,
564 uint8_t *ind_header_buf,
566 uint8_t *ind_message_buf,
567 int message_length) {
569 fprintf(stderr, "ind1\n");
570 RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
571 RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
572 RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
573 RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
574 RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
575 RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
576 RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
577 RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
579 RICindication_IEs__value_PR pres3;
581 pres3 = RICindication_IEs__value_PR_RICrequestID;
582 ricind_ies->id = ProtocolIE_ID_id_RICrequestID;
583 ricind_ies->criticality = 0;
584 ricind_ies->value.present = pres3;
585 ricind_ies->value.choice.RICrequestID.ricRequestorID = requestorId;
586 ricind_ies->value.choice.RICrequestID.ricInstanceID = instanceId;
588 fprintf(stderr, "ind2\n");
590 pres3 = RICindication_IEs__value_PR_RANfunctionID;
591 ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID;
592 ricind_ies2->criticality = 0;
593 ricind_ies2->value.present = pres3;
594 ricind_ies2->value.choice.RANfunctionID = ranFunctionId;
597 ricind_ies3->id = ProtocolIE_ID_id_RICactionID;
598 ricind_ies3->criticality = 0;
599 pres3 = RICindication_IEs__value_PR_RICactionID;
600 ricind_ies3->value.present = pres3;
601 ricind_ies3->value.choice.RICactionID = actionId;
604 pres3 = RICindication_IEs__value_PR_RICindicationSN;
605 ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN;
606 ricind_ies4->criticality = 0;
607 ricind_ies4->value.present = pres3;
608 ricind_ies4->value.choice.RICindicationSN = seqNum;
610 //Indication type is REPORT
611 pres3 = RICindication_IEs__value_PR_RICindicationType;
612 ricind_ies5->id = ProtocolIE_ID_id_RICindicationType;
613 ricind_ies5->criticality = 0;
614 ricind_ies5->value.present = pres3;
615 ricind_ies5->value.choice.RICindicationType = 0;
618 uint8_t *buf2 = (uint8_t *)"reportheader";
619 OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
621 hdr_str->buf = (uint8_t*)calloc(1,header_length);
622 hdr_str->size = header_length;
623 memcpy(hdr_str->buf, ind_header_buf, header_length);
625 fprintf(stderr, "ind3\n");
627 ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,header_length);
629 pres3 = RICindication_IEs__value_PR_RICindicationHeader;
630 ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader;
631 ricind_ies6->criticality = 0;
632 ricind_ies6->value.present = pres3;
633 ricind_ies6->value.choice.RICindicationHeader.size = header_length;
634 memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, ind_header_buf, header_length);
636 ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192);
641 pres3 = RICindication_IEs__value_PR_RICindicationMessage;
642 ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage;
643 fprintf(stderr, "after encoding message 1\n");
645 ricind_ies7->criticality = 0;
646 ricind_ies7->value.present = pres3;
648 fprintf(stderr, "after encoding message 2\n");
650 fprintf(stderr, "after encoding message 3\n");
651 ricind_ies7->value.choice.RICindicationMessage.size = message_length;
653 fprintf(stderr, "after encoding message 4\n");
654 memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, ind_message_buf, message_length);
656 fprintf(stderr, "after encoding message 5\n");
658 uint8_t *cpid_buf = (uint8_t *)"cpid";
659 OCTET_STRING_t cpid_str;
663 int cpid_buf_len = strlen((char*)cpid_buf);
664 pres3 = RICindication_IEs__value_PR_RICcallProcessID;
665 ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID;
667 ricind_ies8->criticality = 0;
668 ricind_ies8->value.present = pres3;
670 ricind_ies8->value.choice.RICcallProcessID.buf = (uint8_t*)calloc(1,cpid_buf_len);
671 ricind_ies8->value.choice.RICcallProcessID.size = cpid_buf_len;
673 memcpy(ricind_ies8->value.choice.RICcallProcessID.buf, cpid_buf, cpid_buf_len);
677 RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t));
682 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies);
684 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2);
688 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3);
692 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4);
696 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5);
700 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6);
704 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7);
706 // ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8);
709 InitiatingMessage__value_PR pres4;
710 pres4 = InitiatingMessage__value_PR_RICindication;
711 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
712 initmsg->procedureCode = 5;
713 initmsg->criticality = 1;
714 initmsg->value.present = pres4;
715 initmsg->value.choice.RICindication = *ricindication;
718 pres5 = E2AP_PDU_PR_initiatingMessage;
720 e2ap_pdu->present = pres5;
721 e2ap_pdu->choice.initiatingMessage = initmsg;
723 char *error_buf = (char*)calloc(300, sizeof(char));
726 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
727 printf("error length %d\n", errlen);
728 printf("error buf %s\n", error_buf);
730 xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);
734 void generate_e2apv1_indication_request(E2AP_PDU *e2ap_pdu) {
735 fprintf(stderr, "ind1\n");
736 RICindication_IEs_t *ricind_ies = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
737 RICindication_IEs_t *ricind_ies2 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
738 RICindication_IEs_t *ricind_ies3 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
739 RICindication_IEs_t *ricind_ies4 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
740 RICindication_IEs_t *ricind_ies5 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
741 RICindication_IEs_t *ricind_ies6 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
742 RICindication_IEs_t *ricind_ies7 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
743 RICindication_IEs_t *ricind_ies8 = (RICindication_IEs_t*)calloc(1, sizeof(RICindication_IEs_t));
745 RICindication_IEs__value_PR pres3;
747 pres3 = RICindication_IEs__value_PR_RICrequestID;
748 ricind_ies->id = ProtocolIE_ID_id_RICrequestID;
749 ricind_ies->criticality = 0;
750 ricind_ies->value.present = pres3;
751 ricind_ies->value.choice.RICrequestID.ricRequestorID = 25;
752 ricind_ies->value.choice.RICrequestID.ricInstanceID = 3;
754 fprintf(stderr, "ind2\n");
756 pres3 = RICindication_IEs__value_PR_RANfunctionID;
757 ricind_ies2->id = ProtocolIE_ID_id_RANfunctionID;
758 ricind_ies2->criticality = 0;
759 ricind_ies2->value.present = pres3;
760 ricind_ies2->value.choice.RANfunctionID = 70;
763 ricind_ies3->id = ProtocolIE_ID_id_RICactionID;
764 ricind_ies3->criticality = 0;
765 pres3 = RICindication_IEs__value_PR_RICactionID;
766 ricind_ies3->value.present = pres3;
767 ricind_ies3->value.choice.RICactionID = 80;
770 pres3 = RICindication_IEs__value_PR_RICindicationSN;
771 ricind_ies4->id = ProtocolIE_ID_id_RICindicationSN;
772 ricind_ies4->criticality = 0;
773 ricind_ies4->value.present = pres3;
774 ricind_ies4->value.choice.RICindicationSN = 45;
776 pres3 = RICindication_IEs__value_PR_RICindicationType;
777 ricind_ies5->id = ProtocolIE_ID_id_RICindicationType;
778 ricind_ies5->criticality = 0;
779 ricind_ies5->value.present = pres3;
780 ricind_ies5->value.choice.RICindicationType = 0;
783 uint8_t *buf2 = (uint8_t *)"reportheader";
784 OCTET_STRING_t *hdr_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
785 hdr_str->buf = (uint8_t*)calloc(1,12);
787 memcpy(hdr_str->buf, buf2, 12);
789 fprintf(stderr, "ind3\n");
791 ricind_ies6->value.choice.RICindicationHeader.buf = (uint8_t*)calloc(1,12);
793 pres3 = RICindication_IEs__value_PR_RICindicationHeader;
794 ricind_ies6->id = ProtocolIE_ID_id_RICindicationHeader;
795 ricind_ies6->criticality = 0;
796 ricind_ies6->value.present = pres3;
797 ricind_ies6->value.choice.RICindicationHeader.size = 12;
798 memcpy(ricind_ies6->value.choice.RICindicationHeader.buf, buf2, 12);
800 ricind_ies7->value.choice.RICindicationMessage.buf = (uint8_t*)calloc(1,8192);
801 // uint8_t *buf9 = (uint8_t *)"reportmsg";
804 E2SM_KPM_IndicationMessage_t *e2sm_ind_msg =
805 (E2SM_KPM_IndicationMessage_t*)calloc(1,sizeof(E2SM_KPM_IndicationMessage_t));
807 encode_kpm(e2sm_ind_msg);
810 E2SM_KPM_RANfunction_Description_t *e2sm_desc =
811 (E2SM_KPM_RANfunction_Description_t*)calloc(1,sizeof(E2SM_KPM_RANfunction_Description_t));
813 encode_kpm_function_description(e2sm_desc);
816 uint8_t e2smbuffer[8192];
817 size_t e2smbuffer_size = 8192;
819 asn_codec_ctx_t *opt_cod;
823 asn_encode_to_buffer(opt_cod,
824 ATS_ALIGNED_BASIC_PER,
825 &asn_DEF_E2SM_KPM_RANfunction_Description,
826 e2sm_desc, e2smbuffer, e2smbuffer_size);
829 asn_encode_to_buffer(opt_cod,
830 ATS_ALIGNED_BASIC_PER,
831 &asn_DEF_E2SM_KPM_IndicationMessage,
832 e2sm_ind_msg, e2smbuffer, e2smbuffer_size);
837 fprintf(stderr, "er encded is %d\n", er.encoded);
838 fprintf(stderr, "after encoding message\n");
840 OCTET_STRING_t *msg_str = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
841 msg_str->buf = (uint8_t*)calloc(1,er.encoded);
842 msg_str->size = er.encoded;
843 memcpy(msg_str->buf, e2smbuffer, er.encoded);
846 pres3 = RICindication_IEs__value_PR_RICindicationMessage;
847 ricind_ies7->id = ProtocolIE_ID_id_RICindicationMessage;
848 fprintf(stderr, "after encoding message 1\n");
850 ricind_ies7->criticality = 0;
851 ricind_ies7->value.present = pres3;
853 fprintf(stderr, "after encoding message 2\n");
855 fprintf(stderr, "after encoding message 3\n");
856 ricind_ies7->value.choice.RICindicationMessage.size = er.encoded;
858 fprintf(stderr, "after encoding message 4\n");
859 memcpy(ricind_ies7->value.choice.RICindicationMessage.buf, e2smbuffer, er.encoded);
861 fprintf(stderr, "after encoding message 5\n");
863 uint8_t *buf4 = (uint8_t *)"cpid";
864 OCTET_STRING_t cpid_str;
869 pres3 = RICindication_IEs__value_PR_RICcallProcessID;
870 ricind_ies8->id = ProtocolIE_ID_id_RICcallProcessID;
872 ricind_ies8->criticality = 0;
873 ricind_ies8->value.present = pres3;
875 ricind_ies8->value.choice.RICcallProcessID = cpid_str;
878 RICindication_t *ricindication = (RICindication_t*)calloc(1, sizeof(RICindication_t));
883 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies);
885 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies2);
887 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies3);
888 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies4);
889 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies5);
891 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies6);
893 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies7);
895 ret = ASN_SEQUENCE_ADD(&ricindication->protocolIEs.list, ricind_ies8);
898 InitiatingMessage__value_PR pres4;
899 pres4 = InitiatingMessage__value_PR_RICindication;
900 InitiatingMessage_t *initmsg = (InitiatingMessage_t*)calloc(1, sizeof(InitiatingMessage_t));
901 initmsg->procedureCode = 5;
902 initmsg->criticality = 1;
903 initmsg->value.present = pres4;
904 initmsg->value.choice.RICindication = *ricindication;
907 pres5 = E2AP_PDU_PR_initiatingMessage;
909 e2ap_pdu->present = pres5;
910 e2ap_pdu->choice.initiatingMessage = initmsg;
912 char *error_buf = (char*)calloc(300, sizeof(char));;
915 asn_check_constraints(&asn_DEF_E2AP_PDU, e2ap_pdu, error_buf, &errlen);
916 printf("error length %d\n", errlen);
917 printf("error buf %s\n", error_buf);
919 xer_fprint(stderr, &asn_DEF_E2AP_PDU, e2ap_pdu);
923 void generate_e2apv1_indication_response(E2AP_PDU *e2ap_pdu) {