Enhanced SIM for E2AP v1 for TS UC
[sim/e2-interface.git] / e2sim / e2apv1sim / encode_kpm.cpp
1 #include <stdio.h>
2 #include <string.h>
3 #include <iostream>
4 #include <unistd.h>
5 #include <vector>
6
7 #include "encode_kpm.hpp";
8
9 using namespace std;
10
11 void encode_kpm(E2SM_KPM_IndicationMessage_t* indicationmessage) {
12   ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage);
13   std::string gn = "GNBCUUP5";
14   std::vector<uint8_t> gnvec(gn.begin(), gn.end());
15   uint8_t *buf = &gnvec[0];
16   OCTET_STRING_t *gnbcuupname = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
17   gnbcuupname->size = 8;
18   gnbcuupname->buf = (uint8_t*)calloc(1,8);
19   memcpy(gnbcuupname->buf, buf, gnbcuupname->size);
20
21
22   INTEGER_t *bytesdl = (INTEGER_t*)calloc(1, sizeof(INTEGER_t));
23   uint8_t buffer[1];
24   buffer[0]= 40000;
25   bytesdl->buf = (uint8_t*)calloc(1,1);
26   memcpy(bytesdl->buf, buffer,1);
27   bytesdl->size = 1;
28
29   INTEGER_t *bytesul = (INTEGER_t*)calloc(1, sizeof(INTEGER_t));
30   uint8_t buffer1[1];
31   buffer1[0] = 50000;
32   bytesul->buf = (uint8_t*)calloc(1,1);
33   memcpy(bytesul->buf, buffer1, 1);
34   bytesul->size = 1;
35
36   FQIPERSlicesPerPlmnListItem_t *fqilistitem = (FQIPERSlicesPerPlmnListItem_t*)calloc(1, sizeof(FQIPERSlicesPerPlmnListItem_t));
37   ASN_STRUCT_RESET(asn_DEF_FQIPERSlicesPerPlmnListItem, fqilistitem);
38   fqilistitem->fiveQI = 9;
39   fqilistitem->pDCPBytesDL = bytesdl;
40   fqilistitem->pDCPBytesUL = bytesul;
41
42
43
44   std::string sl = "SLICE4";
45   std::vector<uint8_t> slvec(sl.begin(), sl.end());
46   //  uint8_t *buf1 = &slvec[0];
47   uint8_t *buf1 = (uint8_t*)"SLICE4";  
48   OCTET_STRING_t *sst = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
49   sst->size = 6;
50   sst->buf = (uint8_t*)calloc(1,6);
51   memcpy(sst->buf,buf1,sst->size);
52
53   std::string sd = "SD1";
54   std::vector<uint8_t> sdvec(sd.begin(), sd.end());
55   //  uint8_t *bufz = &sdvec[0];
56   uint8_t *bufz = (uint8_t*)"SD1";
57   OCTET_STRING_t *sds = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
58   sds->size = 3;
59   sds->buf = (uint8_t*)calloc(1,3);
60   memcpy(sds->buf, bufz, sds->size);
61
62   
63   SNSSAI_t *snssai = (SNSSAI_t*)calloc(1, sizeof(SNSSAI_t));
64   ASN_STRUCT_RESET(asn_DEF_SNSSAI,snssai);
65   snssai->sST.buf = (uint8_t*)calloc(6,1);
66   snssai->sST.size = 6;
67   memcpy(snssai->sST.buf, buf1, 6);
68   snssai->sD = (OCTET_STRING_t*)calloc(1, sizeof(OCTET_STRING_t));
69   snssai->sD->buf = (uint8_t*)calloc(1,3);
70   snssai->sD->size = 3;
71   memcpy(snssai->sD->buf, bufz, 3);
72
73   
74
75   SliceToReportListItem_t *slicelistitem = (SliceToReportListItem_t*)calloc(1,sizeof(SliceToReportListItem_t));
76   ASN_STRUCT_RESET(asn_DEF_SliceToReportListItem, slicelistitem);
77   slicelistitem->sliceID = *snssai;
78   int ret = ASN_SEQUENCE_ADD(&slicelistitem->fQIPERSlicesPerPlmnList.list, fqilistitem);
79
80   uint8_t e2smbuffera[8192];
81   size_t e2smbuffer_sizea = 8192;  
82
83   auto era =
84     asn_encode_to_buffer(nullptr,
85                          ATS_ALIGNED_BASIC_PER,
86                          &asn_DEF_SliceToReportListItem,
87                          slicelistitem, e2smbuffera, e2smbuffer_sizea);
88   fprintf(stderr, "inner er encded is %d\n", era.encoded);
89   fprintf(stderr, "after encoding message\n");      
90
91   FGC_CUUP_PM_Format_t *pm_format = (FGC_CUUP_PM_Format_t*)calloc(1,sizeof(FGC_CUUP_PM_Format_t));
92   ASN_STRUCT_RESET(asn_DEF_FGC_CUUP_PM_Format, pm_format);
93   ret = ASN_SEQUENCE_ADD(&pm_format->sliceToReportList.list, slicelistitem);
94
95   std::string pl = "PLMNID7";
96   std::vector<uint8_t> plvec(pl.begin(), pl.end());
97   uint8_t *buf2 = &plvec[0];
98   
99   OCTET_STRING_t *plmnid = (OCTET_STRING_t*)calloc(1,sizeof(OCTET_STRING_t));
100   plmnid->buf = (uint8_t*)calloc(1,7);
101   plmnid->size = 7;  
102   memcpy(plmnid->buf, buf2, plmnid->size);
103
104
105   PlmnID_List_t *plmnidlist = (PlmnID_List_t*)calloc(1,sizeof(PlmnID_List_t));
106   ASN_STRUCT_RESET(asn_DEF_PlmnID_List, plmnidlist);
107   plmnidlist->pLMN_Identity = *plmnid;
108   plmnidlist->cu_UP_PM_5GC = pm_format;
109
110   CUUPMeasurement_Container_t *meas_cont = (CUUPMeasurement_Container_t*)calloc(1, sizeof(CUUPMeasurement_Container_t));
111   ASN_STRUCT_RESET(asn_DEF_CUUPMeasurement_Container, meas_cont);
112   ret = ASN_SEQUENCE_ADD(&meas_cont->plmnList.list, plmnidlist);
113
114
115   
116   
117   PF_ContainerListItem_t *listitem1 = (PF_ContainerListItem_t*)calloc(1, sizeof(PF_ContainerListItem_t));
118   ASN_STRUCT_RESET(asn_DEF_PF_ContainerListItem, listitem1);
119   listitem1->interface_type = 2;
120   listitem1->o_CU_UP_PM_Container = *meas_cont;
121
122   OCUUP_PF_Container_t *cuupcont = (OCUUP_PF_Container_t*)calloc(1,sizeof(OCUUP_PF_Container_t));
123   ASN_STRUCT_RESET(asn_DEF_OCUUP_PF_Container, cuupcont);
124   cuupcont->gNB_CU_UP_Name = gnbcuupname;
125   ret = ASN_SEQUENCE_ADD(&cuupcont->pf_ContainerList.list, listitem1);
126   
127   PF_Container_PR pres1 = PF_Container_PR_oCU_UP;
128
129   PF_Container_t *pfcontainer = (PF_Container_t*)calloc(1, sizeof(PF_Container_t));
130   ASN_STRUCT_RESET(asn_DEF_PF_Container, pfcontainer);
131   pfcontainer->present = pres1;
132   pfcontainer->choice.oCU_UP = *cuupcont;
133
134   PM_Containers_List_t *containers_list = (PM_Containers_List_t*)calloc(1, sizeof(PM_Containers_List_t));
135   ASN_STRUCT_RESET(asn_DEF_PM_Containers_List, containers_list);
136   containers_list->performanceContainer = pfcontainer;
137
138   E2SM_KPM_IndicationMessage_Format1_t *format =
139     (E2SM_KPM_IndicationMessage_Format1_t*)calloc(1, sizeof(E2SM_KPM_IndicationMessage_Format1_t));
140   ASN_STRUCT_RESET(asn_DEF_E2SM_KPM_IndicationMessage_Format1, format);
141
142   ret = ASN_SEQUENCE_ADD(&format->pm_Containers.list, containers_list);
143   
144   E2SM_KPM_IndicationMessage_PR pres = E2SM_KPM_IndicationMessage_PR_indicationMessage_Format1;
145
146   indicationmessage->present = pres;
147
148   indicationmessage->choice.indicationMessage_Format1 = *format;
149
150   char *error_buf = (char*)calloc(300, sizeof(char));
151   size_t errlen;
152
153   asn_check_constraints(&asn_DEF_E2SM_KPM_IndicationMessage, indicationmessage, error_buf, &errlen);
154   printf("error length %d\n", errlen);
155   printf("error buf %s\n", error_buf);
156   
157
158   uint8_t e2smbuffer[8192];
159   size_t e2smbuffer_size = 8192;
160
161   uint8_t e2smbuffer2[8192];
162   size_t e2smbuffer_size2 = 8192;  
163
164   auto er =
165     asn_encode_to_buffer(nullptr,
166                          ATS_ALIGNED_BASIC_PER,
167                          &asn_DEF_E2SM_KPM_IndicationMessage,
168                          indicationmessage, e2smbuffer, e2smbuffer_size);
169
170   fprintf(stderr, "er encded is %d\n", er.encoded);
171   fprintf(stderr, "after encoding message\n");
172
173   
174 }