Updating a set of supported NR metrics
[ric-app/mc.git] / mc-core / mc / local_datasource / rts_proto.c
1
2 /*
3 ==============================================================================
4
5         Copyright (c) 2018-2019 AT&T Intellectual Property.
6
7    Licensed under the Apache License, Version 2.0 (the "License");
8    you may not use this file except in compliance with the License.
9    You may obtain a copy of the License at
10
11        http://www.apache.org/licenses/LICENSE-2.0
12
13    Unless required by applicable law or agreed to in writing, software
14    distributed under the License is distributed on an "AS IS" BASIS,
15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16    See the License for the specific language governing permissions and
17    limitations under the License.
18 =============================================================================
19 */
20
21
22 #include <time.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <unistd.h>
26 #include <fcntl.h>
27 #include <sys/time.h>
28 #include <sys/stat.h>
29 #include <sys/types.h>
30 #include <sys/socket.h>
31 #include <netinet/in.h>
32 #include <poll.h>
33 #include "errno.h"
34
35 #include "gsconfig.h"
36 #include "gshub.h"
37 #include "gstypes.h"
38 #include "lapp.h"
39 #include "fta.h"
40 #include "stdio.h"
41 #include "stdlib.h"
42 #include "packet.h"
43 #include "schemaparser.h"
44 #include "lfta/rts.h"
45
46 void rts_fta_process_packet(struct packet * p);
47 void rts_fta_done();
48 void fta_init(gs_sp_t device);
49
50 gs_uint32_t (*process_buffer)(gs_uint8_t * buffer, gs_uint32_t buflen) = NULL; // set at initialization
51
52 #define MAXLINE 1000000
53
54 static int fd=-1;
55 struct pollfd pfd;
56 static struct packet cur_packet;
57 static gs_sp_t name, this_device;
58 static gs_uint32_t verbose=0;
59 static gs_uint32_t startupdelay=0;
60 static gs_uint32_t singlefile=0;
61 static gs_uint32_t fifo=0;
62 static gs_uint32_t gshub=0;
63 static int socket_desc=0;
64
65 static gs_uint8_t line[MAXLINE];
66 static gs_uint32_t lineend=0;
67 static unsigned long long timestamp; // extract from input header
68
69 //----------------  Specialized proto parsing -----------
70 #include "x2ap_streaming.pb-c.h"
71 #include "ue_context_release.pb-c.h"
72 #include "lfta/local/dc_release.h"
73 #include "ricgeomessages.pb-c.h"
74 #include "ricgeomessages_pcmdreport.pb-c.h"
75 #include "lfta/local/lte_thpt_meas.h"
76 #include "lfta/local/lte_rb_thpt.h"
77 #include "lfta/local/lte_dl_sched_trace.h"
78 #include "lfta/local/lte_pcell_meas.h"
79 #include "secondary_rat_data_usage_report.pb-c.h"
80 #include "lfta/local/rat_data_usage.h"
81 #include "sgnb_reconfiguration_complete.pb-c.h"
82 #include "lfta/local/reconfig_all.h"
83 #include "lfta/local/reconfig_success.h"
84 #include "lfta/local/reconfig_reject.h"
85 #include "sgnb_release_confirm.pb-c.h"
86 #include "lfta/local/sgnb_release_confirm_from_menb_erabs.h"
87 #include "lfta/local/sgnb_release_confirm_from_menb.h"
88 #include "sgnb_release_request.pb-c.h"
89 #include "lfta/local/release_req.h"
90 #include "sgnb_release_request_acknowledge.pb-c.h"
91 #include "lfta/local/release_req_ack.h"
92 #include "sgnb_release_required.pb-c.h"
93 #include "lfta/local/SgNB_release_rqd.h"
94 #include "rrctransfer.pb-c.h"
95 #include "lfta/local/serv_nr_cell.h"
96 #include "lfta/local/nr_neighbor.h"
97 #include "lfta/local/serv_cell_beam_csi.h"
98 #include "lfta/local/neighbor_beam_csi.h"
99 #include "lfta/local/serv_cell_beam_ssb.h"
100 #include "lfta/local/neighbor_beam_ssb.h"
101 #include "sgnb_addition_request_reject.pb-c.h"
102 #include "lfta/local/sgnb_add_req_reject.h"
103 #include "sgnb_addition_request_acknowledge.pb-c.h"
104 #include "lfta/local/eRABs_notadmitted_for_ue.h"
105 #include "lfta/local/add_req_ack_cellid.h"
106 #include "lfta/local/eRABs_acked_for_admit_for_ue.h"
107 #include "lfta/local/SgNB_ack_for_ue_NRfreqs.h"
108 #include "lfta/local/SgNB_ack_for_add_mod_for_ue.h"
109 #include "lfta/local/SgNB_ack_for_ue_measurements.h"
110 #include "lfta/local/SgNB_ack_for_ue_beam_csi.h"
111 #include "lfta/local/SgNB_ack_for_ue_beam_ssb.h"
112 #include "sgnb_addition_request.pb-c.h"
113 #include "lfta/local/sgnb_addreq_gtp_teid.h"
114 #include "lfta/local/sgnb_addreq_for_ue.h"
115 #include "lfta/local/sgnb_addreq_for_ue_bearers.h"
116 #include "lfta/local/sgnb_addreq_for_ue_sn_serv_ssb.h"
117 #include "lfta/local/sgnb_addreq_for_ue_sn_serv_csi_rs.h"
118 #include "lfta/local/sgnb_addreq_for_ue_mn_serv_ssb.h"
119 #include "lfta/local/sgnb_addreq_for_ue_mn_serv_csi_rs.h"
120 #include "lfta/local/sgnb_addreq_for_ue_sn_neigh_ssb.h"
121 #include "lfta/local/sgnb_addreq_for_ue_sn_neigh_csi_rs.h"
122 #include "lfta/local/sgnb_addreq_for_ue_mn_neigh_ssb.h"
123 #include "lfta/local/sgnb_addreq_for_ue_mn_neigh_csi_rs.h"
124 #include "sgnb_modification_confirm.pb-c.h"
125 #include "lfta/local/sgnb_mod_conf.h"
126 #include "sgnb_modification_request.pb-c.h"
127 #include "lfta/local/sgnb_mod_req.h"
128 #include "sgnb_modification_request_acknowledge.pb-c.h"
129 #include "lfta/local/sgnb_mod_req_ack.h"
130 #include "sgnb_modification_request_reject.pb-c.h"
131 #include "lfta/local/sgnb_mod_req_reject.h"
132 #include "sgnb_modification_required.pb-c.h"
133 #include "lfta/local/sgnb_mod_required.h"
134 #include "sgnb_modification_refuse.pb-c.h"
135 #include "lfta/local/sgnb_mod_refuse.h"
136 #include "sn_status_transfer.pb-c.h"
137 #include "lfta/local/sn_status_transfer.h"
138 gs_uint32_t process_buffer_CONRELEASE(gs_uint8_t * buffer, gs_uint32_t buflen){
139         char *empty_string = "";
140 unsigned long long int ts_lo, ts_hi;
141         StreamingProtobufs__X2APStreaming *hdr = NULL;
142 // ------------------------------------------
143 // ---  Variables for .proto ue_context_release.json, path context_release.json
144         struct _dc_release *dc_release = NULL;
145         StreamingProtobufs__UEContextRelease *node_0_0 = NULL;
146
147 // --------------------------------------------------
148 // ---  Specialized processing for .proto ue_context_release.json, path context_release.json
149
150         dc_release = (struct _dc_release *)(cur_packet.record.packed.values);
151         cur_packet.schema = 201;
152
153         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
154         if(hdr==NULL) return -1;
155
156         node_0_0 = hdr->uecontextrelease;
157         if(node_0_0==NULL) return -2;
158         if(hdr->header==NULL) return -3;
159
160         ts_lo = hdr->header->timestamp & 0xffffffff;
161         ts_hi = hdr->header->timestamp >> 32;
162         dc_release->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
163         if(hdr->header->gnbid==NULL)
164                 dc_release->gnb_id = empty_string;
165         else
166                 dc_release->gnb_id = hdr->header->gnbid->value;
167
168         if(node_0_0->id_old_enb_ue_x2ap_id_extension){
169                 dc_release->id_Old_eNB_UE_X2AP_ID_Extension = node_0_0->id_old_enb_ue_x2ap_id_extension->value;
170         }else{
171                 dc_release->id_Old_eNB_UE_X2AP_ID_Extension = 0;
172         }
173         dc_release->id_New_eNB_UE_X2AP_ID = node_0_0->id_new_enb_ue_x2ap_id;
174         if(node_0_0->id_sgnb_ue_x2ap_id){
175                 dc_release->id_SgNB_UE_X2AP_ID = node_0_0->id_sgnb_ue_x2ap_id->value;
176         }else{
177                 dc_release->id_SgNB_UE_X2AP_ID = 0;
178         }
179         if(node_0_0->id_new_enb_ue_x2ap_id_extension){
180                 dc_release->id_New_eNB_UE_X2AP_ID_Extension = node_0_0->id_new_enb_ue_x2ap_id_extension->value;
181         }else{
182                 dc_release->id_New_eNB_UE_X2AP_ID_Extension = 0;
183         }
184         dc_release->id_Old_eNB_UE_X2AP_ID = node_0_0->id_old_enb_ue_x2ap_id;
185         rts_fta_process_packet(&cur_packet);
186         streaming_protobufs__uecontext_release__free_unpacked(node_0_0,NULL);
187         return 0;
188 }
189
190 gs_uint32_t process_buffer_LTE_PCMD(gs_uint8_t * buffer, gs_uint32_t buflen){
191         char *empty_string = "";
192 unsigned long long int ts_lo, ts_hi;
193         GeoMsg *hdr = NULL;
194 // ------------------------------------------
195 // ---  Variables for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
196         struct _lte_thpt_meas *lte_thpt_meas = NULL;
197         PcmdReport *node_0_0 = NULL;
198         PcmdReport__TpDlUeThroughputMeasurements *node_0_1 = NULL;
199 // ------------------------------------------
200 // ---  Variables for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
201         struct _lte_rb_thpt *lte_rb_thpt = NULL;
202         PcmdReport *node_1_0 = NULL;
203         PcmdReport__TpDlRadioBearerPdcpThroughputRecord *node_1_1 = NULL;
204         PcmdReport__TpDlRadioBearerPdcpThroughputData *node_1_2 = NULL;
205         gs_uint32_t i_1_2;
206 // ------------------------------------------
207 // ---  Variables for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
208         struct _lte_dl_sched_trace *lte_dl_sched_trace = NULL;
209         PcmdReport *node_2_0 = NULL;
210         PcmdReport__TpDlSchedulingTraceRecord *node_2_1 = NULL;
211 // ------------------------------------------
212 // ---  Variables for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
213         struct _lte_pcell_meas *lte_pcell_meas = NULL;
214         PcmdReport *node_3_0 = NULL;
215         PcmdReport__TpUeMeasTraceRecord *node_3_1 = NULL;
216         PcmdReport__TpMeasResultPCell *node_3_2 = NULL;
217
218 // --------------------------------------------------
219 // ---  Specialized processing for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
220
221         lte_thpt_meas = (struct _lte_thpt_meas *)(cur_packet.record.packed.values);
222         cur_packet.schema = 10000;
223
224         hdr = geo_msg__unpack(NULL, buflen, buffer);
225         if(hdr==NULL) return -1;
226
227         node_0_0 = hdr->report;
228         if(node_0_0==NULL) return -2;
229         if(hdr->hdr==NULL) return -3;
230
231         ts_lo = hdr->hdr->timestamp & 0xffffffff;
232         ts_hi = hdr->hdr->timestamp >> 32;
233         lte_thpt_meas->timestamp_ms = (ts_hi) * 1000 + ((ts_lo * 1000) >> 32);
234         lte_thpt_meas->eci = hdr->hdr->eci;
235         lte_thpt_meas->plmn = hdr->hdr->plmn;
236         lte_thpt_meas->eutran_trace_id = hdr->hdr->eutrantraceid;
237         lte_thpt_meas->crnti = hdr->hdr->crnti;
238
239         if(node_0_0->dlschedulingrecord){
240                 lte_thpt_meas->numOfTtiUeSched = node_0_0->dlschedulingrecord->numofttiuesched;
241         }else{
242                 lte_thpt_meas->numOfTtiUeSched = -1;
243         }
244         if(node_0_0->sessioninfo){
245                 lte_thpt_meas->imei = node_0_0->sessioninfo->imei;
246         }else{
247                 lte_thpt_meas->imei = -1;
248         }
249         if(node_0_0->sessioninfo){
250                 lte_thpt_meas->imsi = node_0_0->sessioninfo->imsi;
251         }else{
252                 lte_thpt_meas->imsi = -1;
253         }
254         node_0_1 = node_0_0->dluethroughputmeasurementsrecord;
255         if(node_0_0->dluethroughputmeasurementsrecord){
256                 lte_thpt_meas->numOfTtiPositiveDlBuf = node_0_1->numofttipositivedlbuf;
257                 lte_thpt_meas->sumOfSentNonGbrBytes = node_0_1->sumofsentnongbrbytes;
258                 lte_thpt_meas->sumOfSentGbrBytes = node_0_1->sumofsentgbrbytes;
259                 rts_fta_process_packet(&cur_packet);
260         }
261 // --------------------------------------------------
262 // ---  Specialized processing for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
263
264         lte_rb_thpt = (struct _lte_rb_thpt *)(cur_packet.record.packed.values);
265         cur_packet.schema = 10001;
266         node_1_0 = node_0_0;
267         ts_lo = hdr->hdr->timestamp & 0xffffffff;
268         ts_hi = hdr->hdr->timestamp >> 32;
269         lte_rb_thpt->timestamp_ms = (ts_hi) * 1000 + ((ts_lo * 1000) >> 32);
270         lte_rb_thpt->eci = hdr->hdr->eci;
271         lte_rb_thpt->plmn = hdr->hdr->plmn;
272         lte_rb_thpt->eutran_trace_id = hdr->hdr->eutrantraceid;
273         lte_rb_thpt->crnti = hdr->hdr->crnti;
274
275         if(node_1_0->sessioninfo){
276                 lte_rb_thpt->imei = node_1_0->sessioninfo->imei;
277         }else{
278                 lte_rb_thpt->imei = -1;
279         }
280         if(node_1_0->sessioninfo){
281                 lte_rb_thpt->imsi = node_1_0->sessioninfo->imsi;
282         }else{
283                 lte_rb_thpt->imsi = -1;
284         }
285         node_1_1 = node_1_0->dlrbpdcpthroughputrecord;
286         if(node_1_0->dlrbpdcpthroughputrecord){
287                 for(i_1_2=0;i_1_2<node_1_1->n_dlradiobearerpdcpthroughputlist; i_1_2++){
288                         node_1_2 = node_1_1->dlradiobearerpdcpthroughputlist[i_1_2];
289                         lte_rb_thpt->dataCollectionDuration = node_1_2->datacollectionduration;
290                         lte_rb_thpt->numOfPdcpPduRcvdForTx = node_1_2->numofpdcppdurcvdfortx;
291                         lte_rb_thpt->numOfPdcpPduDiscarded = node_1_2->numofpdcppdudiscarded;
292                         lte_rb_thpt->drb_Id = node_1_2->drb_id;
293                         rts_fta_process_packet(&cur_packet);
294                 }
295         }
296 // --------------------------------------------------
297 // ---  Specialized processing for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
298
299         lte_dl_sched_trace = (struct _lte_dl_sched_trace *)(cur_packet.record.packed.values);
300         cur_packet.schema = 10002;
301         node_2_0 = node_1_0;
302         ts_lo = hdr->hdr->timestamp & 0xffffffff;
303         ts_hi = hdr->hdr->timestamp >> 32;
304         lte_dl_sched_trace->timestamp_ms = (ts_hi) * 1000 + ((ts_lo * 1000) >> 32);
305         lte_dl_sched_trace->eci = hdr->hdr->eci;
306         lte_dl_sched_trace->plmn = hdr->hdr->plmn;
307         lte_dl_sched_trace->eutran_trace_id = hdr->hdr->eutrantraceid;
308         lte_dl_sched_trace->crnti = hdr->hdr->crnti;
309
310         if(node_2_0->sessioninfo){
311                 lte_dl_sched_trace->imei = node_2_0->sessioninfo->imei;
312         }else{
313                 lte_dl_sched_trace->imei = -1;
314         }
315         if(node_2_0->sessioninfo){
316                 lte_dl_sched_trace->imsi = node_2_0->sessioninfo->imsi;
317         }else{
318                 lte_dl_sched_trace->imsi = -1;
319         }
320         node_2_1 = node_2_0->dlschedulingrecord;
321         if(node_2_0->dlschedulingrecord){
322                 if(node_2_1->numofharqretx){
323                         lte_dl_sched_trace->numOfHarqReTx = node_2_1->numofharqretx->value;
324                         lte_dl_sched_trace->numOfHarqReTx_exists = 1;
325                 }else{
326                         lte_dl_sched_trace->numOfHarqReTx_exists = 0;
327                 }
328                 lte_dl_sched_trace->numOfTtiUeSched = node_2_1->numofttiuesched;
329                 lte_dl_sched_trace->numOfHarq1stTx = node_2_1->numofharq1sttx;
330                 lte_dl_sched_trace->recordCollectionDuration = node_2_1->recordcollectionduration;
331                 if(node_2_1->numofttiueschedmimo){
332                         lte_dl_sched_trace->numOfTtiUeSchedMimo = node_2_1->numofttiueschedmimo->value;
333                         lte_dl_sched_trace->numOfTtiUeSchedMimo_exists = 1;
334                 }else{
335                         lte_dl_sched_trace->numOfTtiUeSchedMimo_exists = 0;
336                 }
337                 lte_dl_sched_trace->numOfPrbUsed = node_2_1->numofprbused;
338                 if(node_2_1->numofbad1stmacpdutx){
339                         lte_dl_sched_trace->numOfBad1stMacPduTx = node_2_1->numofbad1stmacpdutx->value;
340                         lte_dl_sched_trace->numOfBad1stMacPduTx_exists = 1;
341                 }else{
342                         lte_dl_sched_trace->numOfBad1stMacPduTx_exists = 0;
343                 }
344                 if(node_2_1->numofbadlastmacpdutx){
345                         lte_dl_sched_trace->numOfBadLastMacPduTx = node_2_1->numofbadlastmacpdutx->value;
346                         lte_dl_sched_trace->numOfBadLastMacPduTx_exists = 1;
347                 }else{
348                         lte_dl_sched_trace->numOfBadLastMacPduTx_exists = 0;
349                 }
350                 rts_fta_process_packet(&cur_packet);
351         }
352 // --------------------------------------------------
353 // ---  Specialized processing for .proto ricgeomessages_pcmdreport.json, path lte_pcmd.json
354
355         lte_pcell_meas = (struct _lte_pcell_meas *)(cur_packet.record.packed.values);
356         cur_packet.schema = 10003;
357         node_3_0 = node_2_0;
358         ts_lo = hdr->hdr->timestamp & 0xffffffff;
359         ts_hi = hdr->hdr->timestamp >> 32;
360         lte_pcell_meas->timestamp_ms = (ts_hi) * 1000 + ((ts_lo * 1000) >> 32);
361         lte_pcell_meas->eci = hdr->hdr->eci;
362         lte_pcell_meas->plmn = hdr->hdr->plmn;
363         lte_pcell_meas->eutran_trace_id = hdr->hdr->eutrantraceid;
364         lte_pcell_meas->crnti = hdr->hdr->crnti;
365
366         if(node_3_0->sessioninfo){
367                 lte_pcell_meas->imei = node_3_0->sessioninfo->imei;
368         }else{
369                 lte_pcell_meas->imei = -1;
370         }
371         if(node_3_0->sessioninfo){
372                 lte_pcell_meas->imsi = node_3_0->sessioninfo->imsi;
373         }else{
374                 lte_pcell_meas->imsi = -1;
375         }
376         node_3_1 = node_3_0->uemeastracerecord;
377         if(node_3_0->uemeastracerecord){
378                 node_3_2 = node_3_1->measresultpcell;
379                 if(node_3_1->measresultpcell){
380                         lte_pcell_meas->pci = node_3_2->pci;
381                         lte_pcell_meas->rsrq = node_3_2->rsrq;
382                         lte_pcell_meas->rsrp = node_3_2->rsrp;
383                         rts_fta_process_packet(&cur_packet);
384                 }
385         }
386         pcmd_report__free_unpacked(node_0_0,NULL);
387         return 0;
388 }
389
390 gs_uint32_t process_buffer_RATDATAUSAGE(gs_uint8_t * buffer, gs_uint32_t buflen){
391         char *empty_string = "";
392 unsigned long long int ts_lo, ts_hi;
393         StreamingProtobufs__X2APStreaming *hdr = NULL;
394 // ------------------------------------------
395 // ---  Variables for .proto secondary_rat_data_usage_report.json, path rat_data_usage.json
396         struct _rat_data_usage *rat_data_usage = NULL;
397         StreamingProtobufs__SecondaryRATDataUsageReport *node_0_0 = NULL;
398         StreamingProtobufs__SecondaryRATDataUsageReportIEs *node_0_1 = NULL;
399         StreamingProtobufs__SecondaryRATUsageReportList *node_0_2 = NULL;
400         StreamingProtobufs__SecondaryRATUsageReportItemIEs *node_0_3 = NULL;
401         gs_uint32_t i_0_3;
402         StreamingProtobufs__SecondaryRATUsageReportItem *node_0_4 = NULL;
403         StreamingProtobufs__ERABUsageReportList *node_0_5 = NULL;
404         StreamingProtobufs__ERABUsageReportItemIEs *node_0_6 = NULL;
405         gs_uint32_t i_0_6;
406         StreamingProtobufs__ERABUsageReportItem *node_0_7 = NULL;
407
408 // --------------------------------------------------
409 // ---  Specialized processing for .proto secondary_rat_data_usage_report.json, path rat_data_usage.json
410
411         rat_data_usage = (struct _rat_data_usage *)(cur_packet.record.packed.values);
412         cur_packet.schema = 1501;
413
414         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
415         if(hdr==NULL) return -1;
416
417         node_0_0 = hdr->secondaryratdatausagereport;
418         if(node_0_0==NULL) return -2;
419         if(hdr->header==NULL) return -3;
420
421         ts_lo = hdr->header->timestamp & 0xffffffff;
422         ts_hi = hdr->header->timestamp >> 32;
423         rat_data_usage->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
424         if(hdr->header->gnbid==NULL)
425                 rat_data_usage->gnb_id = empty_string;
426         else
427                 rat_data_usage->gnb_id = hdr->header->gnbid->value;
428
429         node_0_1 = node_0_0->protocolies;
430         if(node_0_0->protocolies){
431                 rat_data_usage->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
432                 rat_data_usage->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
433                 if(node_0_1->id_menb_ue_x2ap_id_extension){
434                         rat_data_usage->id_MeNB_UE_X2AP_ID_Extension = node_0_1->id_menb_ue_x2ap_id_extension->value;
435                 }else{
436                         rat_data_usage->id_MeNB_UE_X2AP_ID_Extension = 0;
437                 }
438                 node_0_2 = node_0_1->id_secondaryratusagereportlist;
439                 if(node_0_1->id_secondaryratusagereportlist){
440                         for(i_0_3=0;i_0_3<node_0_2->n_items; i_0_3++){
441                                 node_0_3 = node_0_2->items[i_0_3];
442                                 node_0_4 = node_0_3->id_secondaryratusagereport_item;
443                                 if(node_0_3->id_secondaryratusagereport_item){
444                                         rat_data_usage->e_RAB_ID = node_0_4->e_rab_id;
445                                         rat_data_usage->secondaryRATType = node_0_4->secondaryrattype;
446                                         node_0_5 = node_0_4->e_rabusagereportlist;
447                                         if(node_0_4->e_rabusagereportlist){
448                                                 for(i_0_6=0;i_0_6<node_0_5->n_items; i_0_6++){
449                                                         node_0_6 = node_0_5->items[i_0_6];
450                                                         node_0_7 = node_0_6->id_e_rabusagereport_item;
451                                                         if(node_0_6->id_e_rabusagereport_item){
452                                                                 rat_data_usage->startTimeStamp = node_0_7->starttimestamp;
453                                                                 rat_data_usage->endTimeStamp = node_0_7->endtimestamp;
454                                                                 rat_data_usage->usageCountDL = node_0_7->usagecountdl;
455                                                                 rts_fta_process_packet(&cur_packet);
456                                                         }
457                                                 }
458                                         }
459                                 }
460                         }
461                 }
462         }
463         streaming_protobufs__secondary_ratdata_usage_report__free_unpacked(node_0_0,NULL);
464         return 0;
465 }
466
467 gs_uint32_t process_buffer_RECONCOMPLETE(gs_uint8_t * buffer, gs_uint32_t buflen){
468         char *empty_string = "";
469 unsigned long long int ts_lo, ts_hi;
470         StreamingProtobufs__X2APStreaming *hdr = NULL;
471 // ------------------------------------------
472 // ---  Variables for .proto sgnb_reconfiguration_complete.json, path recon_complete.json
473         struct _reconfig_all *reconfig_all = NULL;
474         StreamingProtobufs__SgNBReconfigurationComplete *node_0_0 = NULL;
475 // ------------------------------------------
476 // ---  Variables for .proto sgnb_reconfiguration_complete.json, path recon_complete.json
477         struct _reconfig_success *reconfig_success = NULL;
478         StreamingProtobufs__SgNBReconfigurationComplete *node_1_0 = NULL;
479         StreamingProtobufs__ResponseInformationSgNBReconfComp *node_1_1 = NULL;
480         StreamingProtobufs__ResponseInformationSgNBReconfCompRejectByMeNBItem *node_1_2 = NULL;
481 // ------------------------------------------
482 // ---  Variables for .proto sgnb_reconfiguration_complete.json, path recon_complete.json
483         struct _reconfig_reject *reconfig_reject = NULL;
484         StreamingProtobufs__SgNBReconfigurationComplete *node_2_0 = NULL;
485         StreamingProtobufs__ResponseInformationSgNBReconfComp *node_2_1 = NULL;
486         StreamingProtobufs__ResponseInformationSgNBReconfCompRejectByMeNBItem *node_2_2 = NULL;
487
488 // --------------------------------------------------
489 // ---  Specialized processing for .proto sgnb_reconfiguration_complete.json, path recon_complete.json
490
491         reconfig_all = (struct _reconfig_all *)(cur_packet.record.packed.values);
492         cur_packet.schema = 103;
493
494         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
495         if(hdr==NULL) return -1;
496
497         node_0_0 = hdr->sgnbreconfigurationcomplete;
498         if(node_0_0==NULL) return -2;
499         if(hdr->header==NULL) return -3;
500
501         ts_lo = hdr->header->timestamp & 0xffffffff;
502         ts_hi = hdr->header->timestamp >> 32;
503         reconfig_all->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
504         if(hdr->header->gnbid==NULL)
505                 reconfig_all->gnb_id = empty_string;
506         else
507                 reconfig_all->gnb_id = hdr->header->gnbid->value;
508
509         reconfig_all->id_MeNB_UE_X2AP_ID = node_0_0->id_menb_ue_x2ap_id;
510         reconfig_all->id_SgNB_UE_X2AP_ID = node_0_0->id_sgnb_ue_x2ap_id;
511         if(node_0_0->id_menb_ue_x2ap_id_extension){
512                 reconfig_all->id_MeNB_UE_X2AP_ID_Extension = node_0_0->id_menb_ue_x2ap_id_extension->value;
513         }else{
514                 reconfig_all->id_MeNB_UE_X2AP_ID_Extension = 0;
515         }
516         rts_fta_process_packet(&cur_packet);
517 // --------------------------------------------------
518 // ---  Specialized processing for .proto sgnb_reconfiguration_complete.json, path recon_complete.json
519
520         reconfig_success = (struct _reconfig_success *)(cur_packet.record.packed.values);
521         cur_packet.schema = 101;
522         node_1_0 = node_0_0;
523         ts_lo = hdr->header->timestamp & 0xffffffff;
524         ts_hi = hdr->header->timestamp >> 32;
525         reconfig_success->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
526         if(hdr->header->gnbid==NULL)
527                 reconfig_success->gnb_id = empty_string;
528         else
529                 reconfig_success->gnb_id = hdr->header->gnbid->value;
530
531         reconfig_success->id_MeNB_UE_X2AP_ID = node_1_0->id_menb_ue_x2ap_id;
532         reconfig_success->id_SgNB_UE_X2AP_ID = node_1_0->id_sgnb_ue_x2ap_id;
533         if(node_1_0->id_menb_ue_x2ap_id_extension){
534                 reconfig_success->id_MeNB_UE_X2AP_ID_Extension = node_1_0->id_menb_ue_x2ap_id_extension->value;
535         }else{
536                 reconfig_success->id_MeNB_UE_X2AP_ID_Extension = 0;
537         }
538         node_1_1 = node_1_0->id_responseinformationsgnbreconfcomp;
539         if(!(node_1_0->id_responseinformationsgnbreconfcomp)){
540                 rts_fta_process_packet(&cur_packet);
541         }else{
542                 node_1_2 = node_1_1->reject_by_menb_sgnbreconfcomp;
543                 if(!(node_1_1->value_case == STREAMING_PROTOBUFS__RESPONSE_INFORMATION_SG_NBRECONF_COMP__VALUE_REJECT_BY__ME_NB__SG_NBRECONF_COMP)){
544                         rts_fta_process_packet(&cur_packet);
545                 }else{
546                         rts_fta_process_packet(&cur_packet);
547                 }
548         }
549 // --------------------------------------------------
550 // ---  Specialized processing for .proto sgnb_reconfiguration_complete.json, path recon_complete.json
551
552         reconfig_reject = (struct _reconfig_reject *)(cur_packet.record.packed.values);
553         cur_packet.schema = 102;
554         node_2_0 = node_1_0;
555         ts_lo = hdr->header->timestamp & 0xffffffff;
556         ts_hi = hdr->header->timestamp >> 32;
557         reconfig_reject->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
558         if(hdr->header->gnbid==NULL)
559                 reconfig_reject->gnb_id = empty_string;
560         else
561                 reconfig_reject->gnb_id = hdr->header->gnbid->value;
562
563         reconfig_reject->id_MeNB_UE_X2AP_ID = node_2_0->id_menb_ue_x2ap_id;
564         reconfig_reject->id_SgNB_UE_X2AP_ID = node_2_0->id_sgnb_ue_x2ap_id;
565         if(node_2_0->id_menb_ue_x2ap_id_extension){
566                 reconfig_reject->id_MeNB_UE_X2AP_ID_Extension = node_2_0->id_menb_ue_x2ap_id_extension->value;
567         }else{
568                 reconfig_reject->id_MeNB_UE_X2AP_ID_Extension = 0;
569         }
570         node_2_1 = node_2_0->id_responseinformationsgnbreconfcomp;
571         if(node_2_0->id_responseinformationsgnbreconfcomp){
572                 node_2_2 = node_2_1->reject_by_menb_sgnbreconfcomp;
573                 if(node_2_1->value_case == STREAMING_PROTOBUFS__RESPONSE_INFORMATION_SG_NBRECONF_COMP__VALUE_REJECT_BY__ME_NB__SG_NBRECONF_COMP){
574                         if(node_2_2->cause && node_2_2->cause->radionetwork){
575                                 reconfig_reject->cause_radio_network = node_2_2->cause->radionetwork->value;
576                         }else{
577                                 reconfig_reject->cause_radio_network = -1;
578                         }
579                         if(node_2_2->cause && node_2_2->cause->transport){
580                                 reconfig_reject->cause_transport = node_2_2->cause->transport->value;
581                         }else{
582                                 reconfig_reject->cause_transport = -1;
583                         }
584                         if(node_2_2->cause && node_2_2->cause->protocol){
585                                 reconfig_reject->cause_protocol = node_2_2->cause->protocol->value;
586                         }else{
587                                 reconfig_reject->cause_protocol = -1;
588                         }
589                         if(node_2_2->cause && node_2_2->cause->misc){
590                                 reconfig_reject->cause_misc = node_2_2->cause->misc->value;
591                         }else{
592                                 reconfig_reject->cause_misc = -1;
593                         }
594                         rts_fta_process_packet(&cur_packet);
595                 }
596         }
597         streaming_protobufs__sg_nbreconfiguration_complete__free_unpacked(node_0_0,NULL);
598         return 0;
599 }
600
601 gs_uint32_t process_buffer_RELCONF(gs_uint8_t * buffer, gs_uint32_t buflen){
602         char *empty_string = "";
603 unsigned long long int ts_lo, ts_hi;
604         StreamingProtobufs__X2APStreaming *hdr = NULL;
605 // ------------------------------------------
606 // ---  Variables for .proto sgnb_release_confirm.json, path release_confirm.json
607         struct _sgnb_release_confirm_from_menb_erabs *sgnb_release_confirm_from_menb_erabs = NULL;
608         StreamingProtobufs__SgNBReleaseConfirm *node_0_0 = NULL;
609         StreamingProtobufs__SgNBReleaseConfirmIEs *node_0_1 = NULL;
610         StreamingProtobufs__ERABsToBeReleasedSgNBRelConfList *node_0_2 = NULL;
611         StreamingProtobufs__ERABsToBeReleasedSgNBRelConfItem *node_0_3 = NULL;
612         gs_uint32_t i_0_3;
613         StreamingProtobufs__ERABsToBeReleasedSgNBRelConfSgNBPDCPpresent *node_0_4 = NULL;
614         StreamingProtobufs__GTPtunnelEndpoint *node_0_5 = NULL;
615 // ------------------------------------------
616 // ---  Variables for .proto sgnb_release_confirm.json, path release_confirm.json
617         struct _sgnb_release_confirm_from_menb *sgnb_release_confirm_from_menb = NULL;
618         StreamingProtobufs__SgNBReleaseConfirm *node_1_0 = NULL;
619         StreamingProtobufs__SgNBReleaseConfirmIEs *node_1_1 = NULL;
620
621 // --------------------------------------------------
622 // ---  Specialized processing for .proto sgnb_release_confirm.json, path release_confirm.json
623
624         sgnb_release_confirm_from_menb_erabs = (struct _sgnb_release_confirm_from_menb_erabs *)(cur_packet.record.packed.values);
625         cur_packet.schema = 1101;
626
627         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
628         if(hdr==NULL) return -1;
629
630         node_0_0 = hdr->sgnbreleaseconfirm;
631         if(node_0_0==NULL) return -2;
632         if(hdr->header==NULL) return -3;
633
634         ts_lo = hdr->header->timestamp & 0xffffffff;
635         ts_hi = hdr->header->timestamp >> 32;
636         sgnb_release_confirm_from_menb_erabs->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
637         if(hdr->header->gnbid==NULL)
638                 sgnb_release_confirm_from_menb_erabs->gnb_id = empty_string;
639         else
640                 sgnb_release_confirm_from_menb_erabs->gnb_id = hdr->header->gnbid->value;
641
642         node_0_1 = node_0_0->protocolies;
643         if(node_0_0->protocolies){
644                 sgnb_release_confirm_from_menb_erabs->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
645                 sgnb_release_confirm_from_menb_erabs->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
646                 if(node_0_1->id_menb_ue_x2ap_id_extension){
647                         sgnb_release_confirm_from_menb_erabs->id_MeNB_UE_X2AP_ID_Extension = node_0_1->id_menb_ue_x2ap_id_extension->value;
648                 }else{
649                         sgnb_release_confirm_from_menb_erabs->id_MeNB_UE_X2AP_ID_Extension = 0;
650                 }
651                 node_0_2 = node_0_1->id_e_rabs_tobereleased_sgnbrelconflist;
652                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelconflist){
653                         for(i_0_3=0;i_0_3<node_0_2->n_id_e_rabs_tobereleased_sgnbrelconf_item; i_0_3++){
654                                 node_0_3 = node_0_2->id_e_rabs_tobereleased_sgnbrelconf_item[i_0_3];
655                                 if(node_0_3->en_dc_resourceconfiguration){
656                                         sgnb_release_confirm_from_menb_erabs->sCGresources = node_0_3->en_dc_resourceconfiguration->scgresources;
657                                 }else{
658                                         sgnb_release_confirm_from_menb_erabs->sCGresources = -1;
659                                 }
660                                 sgnb_release_confirm_from_menb_erabs->e_RAB_ID = node_0_3->e_rab_id;
661                                 if(node_0_3->en_dc_resourceconfiguration){
662                                         sgnb_release_confirm_from_menb_erabs->pDCPatSgNB = node_0_3->en_dc_resourceconfiguration->pdcpatsgnb;
663                                 }else{
664                                         sgnb_release_confirm_from_menb_erabs->pDCPatSgNB = -1;
665                                 }
666                                 if(node_0_3->en_dc_resourceconfiguration){
667                                         sgnb_release_confirm_from_menb_erabs->mCGresources = node_0_3->en_dc_resourceconfiguration->mcgresources;
668                                 }else{
669                                         sgnb_release_confirm_from_menb_erabs->mCGresources = -1;
670                                 }
671                                 node_0_4 = node_0_3->sgnbpdcppresent;
672                                 if(node_0_3->sgnbpdcppresent){
673                                         node_0_5 = node_0_4->dl_gtptunnelendpoint;
674                                         if(node_0_4->dl_gtptunnelendpoint){
675                                                 sgnb_release_confirm_from_menb_erabs->gTP_TEID = node_0_5->gtp_teid;
676                                                 sgnb_release_confirm_from_menb_erabs->transportLayerAddress = node_0_5->transportlayeraddress;
677                                                 rts_fta_process_packet(&cur_packet);
678                                         }
679                                 }
680                         }
681                 }
682         }
683 // --------------------------------------------------
684 // ---  Specialized processing for .proto sgnb_release_confirm.json, path release_confirm.json
685
686         sgnb_release_confirm_from_menb = (struct _sgnb_release_confirm_from_menb *)(cur_packet.record.packed.values);
687         cur_packet.schema = 1102;
688         node_1_0 = node_0_0;
689         ts_lo = hdr->header->timestamp & 0xffffffff;
690         ts_hi = hdr->header->timestamp >> 32;
691         sgnb_release_confirm_from_menb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
692         if(hdr->header->gnbid==NULL)
693                 sgnb_release_confirm_from_menb->gnb_id = empty_string;
694         else
695                 sgnb_release_confirm_from_menb->gnb_id = hdr->header->gnbid->value;
696
697         node_1_1 = node_1_0->protocolies;
698         if(node_1_0->protocolies){
699                 sgnb_release_confirm_from_menb->id_MeNB_UE_X2AP_ID = node_1_1->id_menb_ue_x2ap_id;
700                 sgnb_release_confirm_from_menb->id_SgNB_UE_X2AP_ID = node_1_1->id_sgnb_ue_x2ap_id;
701                 if(node_1_1->id_menb_ue_x2ap_id_extension){
702                         sgnb_release_confirm_from_menb->id_MeNB_UE_X2AP_ID_Extension = node_1_1->id_menb_ue_x2ap_id_extension->value;
703                 }else{
704                         sgnb_release_confirm_from_menb->id_MeNB_UE_X2AP_ID_Extension = 0;
705                 }
706                 rts_fta_process_packet(&cur_packet);
707         }
708         streaming_protobufs__sg_nbrelease_confirm__free_unpacked(node_0_0,NULL);
709         return 0;
710 }
711
712 gs_uint32_t process_buffer_RELREQ(gs_uint8_t * buffer, gs_uint32_t buflen){
713         char *empty_string = "";
714 unsigned long long int ts_lo, ts_hi;
715         StreamingProtobufs__X2APStreaming *hdr = NULL;
716 // ------------------------------------------
717 // ---  Variables for .proto sgnb_release_request.json, path release_req.json
718         struct _release_req *release_req = NULL;
719         StreamingProtobufs__SgNBReleaseRequest *node_0_0 = NULL;
720         StreamingProtobufs__SgNBReleaseRequestIEs *node_0_1 = NULL;
721
722 // --------------------------------------------------
723 // ---  Specialized processing for .proto sgnb_release_request.json, path release_req.json
724
725         release_req = (struct _release_req *)(cur_packet.record.packed.values);
726         cur_packet.schema = 801;
727
728         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
729         if(hdr==NULL) return -1;
730
731         node_0_0 = hdr->sgnbreleaserequest;
732         if(node_0_0==NULL) return -2;
733         if(hdr->header==NULL) return -3;
734
735         ts_lo = hdr->header->timestamp & 0xffffffff;
736         ts_hi = hdr->header->timestamp >> 32;
737         release_req->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
738         if(hdr->header->gnbid==NULL)
739                 release_req->gnb_id = empty_string;
740         else
741                 release_req->gnb_id = hdr->header->gnbid->value;
742
743         node_0_1 = node_0_0->protocolies;
744         if(node_0_0->protocolies){
745                 if(node_0_1->id_cause && node_0_1->id_cause->protocol){
746                         release_req->cause_protocol = node_0_1->id_cause->protocol->value;
747                 }else{
748                         release_req->cause_protocol = -1;
749                 }
750                 release_req->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
751                 if(node_0_1->id_cause && node_0_1->id_cause->transport){
752                         release_req->cause_transport = node_0_1->id_cause->transport->value;
753                 }else{
754                         release_req->cause_transport = -1;
755                 }
756                 if(node_0_1->id_menb_ue_x2ap_id_extension){
757                         release_req->id_MeNB_UE_X2AP_ID_Extension = node_0_1->id_menb_ue_x2ap_id_extension->value;
758                 }else{
759                         release_req->id_MeNB_UE_X2AP_ID_Extension = 0;
760                 }
761                 if(node_0_1->id_cause && node_0_1->id_cause->radionetwork){
762                         release_req->cause_radio_network = node_0_1->id_cause->radionetwork->value;
763                 }else{
764                         release_req->cause_radio_network = -1;
765                 }
766                 if(node_0_1->id_sgnb_ue_x2ap_id){
767                         release_req->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id->value;
768                 }else{
769                         release_req->id_SgNB_UE_X2AP_ID = 0;
770                 }
771                 if(node_0_1->id_cause && node_0_1->id_cause->misc){
772                         release_req->cause_misc = node_0_1->id_cause->misc->value;
773                 }else{
774                         release_req->cause_misc = -1;
775                 }
776                 rts_fta_process_packet(&cur_packet);
777         }
778         streaming_protobufs__sg_nbrelease_request__free_unpacked(node_0_0,NULL);
779         return 0;
780 }
781
782 gs_uint32_t process_buffer_RELREQACK(gs_uint8_t * buffer, gs_uint32_t buflen){
783         char *empty_string = "";
784 unsigned long long int ts_lo, ts_hi;
785         StreamingProtobufs__X2APStreaming *hdr = NULL;
786 // ------------------------------------------
787 // ---  Variables for .proto sgnb_release_request_acknowledge.json, path release_req_ack.json
788         struct _release_req_ack *release_req_ack = NULL;
789         StreamingProtobufs__SgNBReleaseRequestAcknowledge *node_0_0 = NULL;
790         StreamingProtobufs__SgNBReleaseRequestAcknowledgeIEs *node_0_1 = NULL;
791
792 // --------------------------------------------------
793 // ---  Specialized processing for .proto sgnb_release_request_acknowledge.json, path release_req_ack.json
794
795         release_req_ack = (struct _release_req_ack *)(cur_packet.record.packed.values);
796         cur_packet.schema = 901;
797
798         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
799         if(hdr==NULL) return -1;
800
801         node_0_0 = hdr->sgnbreleaserequestacknowledge;
802         if(node_0_0==NULL) return -2;
803         if(hdr->header==NULL) return -3;
804
805         ts_lo = hdr->header->timestamp & 0xffffffff;
806         ts_hi = hdr->header->timestamp >> 32;
807         release_req_ack->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
808         if(hdr->header->gnbid==NULL)
809                 release_req_ack->gnb_id = empty_string;
810         else
811                 release_req_ack->gnb_id = hdr->header->gnbid->value;
812
813         node_0_1 = node_0_0->protocolies;
814         if(node_0_0->protocolies){
815                 release_req_ack->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
816                 release_req_ack->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
817                 if(node_0_1->id_menb_ue_x2ap_id_extension){
818                         release_req_ack->id_MeNB_UE_X2AP_ID_Extension = node_0_1->id_menb_ue_x2ap_id_extension->value;
819                 }else{
820                         release_req_ack->id_MeNB_UE_X2AP_ID_Extension = 0;
821                 }
822                 rts_fta_process_packet(&cur_packet);
823         }
824         streaming_protobufs__sg_nbrelease_request_acknowledge__free_unpacked(node_0_0,NULL);
825         return 0;
826 }
827
828 gs_uint32_t process_buffer_SGNBRELEASERQD(gs_uint8_t * buffer, gs_uint32_t buflen){
829         char *empty_string = "";
830 unsigned long long int ts_lo, ts_hi;
831         StreamingProtobufs__X2APStreaming *hdr = NULL;
832 // ------------------------------------------
833 // ---  Variables for .proto sgnb_release_required.json, path release_rqd.json
834         struct _SgNB_release_rqd *SgNB_release_rqd = NULL;
835         StreamingProtobufs__SgNBReleaseRequired *node_0_0 = NULL;
836         StreamingProtobufs__SgNBReleaseRequiredIEs *node_0_1 = NULL;
837
838 // --------------------------------------------------
839 // ---  Specialized processing for .proto sgnb_release_required.json, path release_rqd.json
840
841         SgNB_release_rqd = (struct _SgNB_release_rqd *)(cur_packet.record.packed.values);
842         cur_packet.schema = 1001;
843
844         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
845         if(hdr==NULL) return -1;
846
847         node_0_0 = hdr->sgnbreleaserequired;
848         if(node_0_0==NULL) return -2;
849         if(hdr->header==NULL) return -3;
850
851         ts_lo = hdr->header->timestamp & 0xffffffff;
852         ts_hi = hdr->header->timestamp >> 32;
853         SgNB_release_rqd->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
854         if(hdr->header->gnbid==NULL)
855                 SgNB_release_rqd->gnb_id = empty_string;
856         else
857                 SgNB_release_rqd->gnb_id = hdr->header->gnbid->value;
858
859         node_0_1 = node_0_0->protocolies;
860         if(node_0_0->protocolies){
861                 if(node_0_1->id_cause && node_0_1->id_cause->protocol){
862                         SgNB_release_rqd->cause_protocol = node_0_1->id_cause->protocol->value;
863                 }else{
864                         SgNB_release_rqd->cause_protocol = -1;
865                 }
866                 SgNB_release_rqd->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
867                 if(node_0_1->id_cause && node_0_1->id_cause->transport){
868                         SgNB_release_rqd->cause_transport = node_0_1->id_cause->transport->value;
869                 }else{
870                         SgNB_release_rqd->cause_transport = -1;
871                 }
872                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 0){
873                         SgNB_release_rqd->e_RAB_ID0 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[0]->e_rab_id;
874                         SgNB_release_rqd->e_RAB_ID0_exists = 1;
875                 }else{
876                         SgNB_release_rqd->e_RAB_ID0_exists = 0;
877                 }
878                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 1){
879                         SgNB_release_rqd->e_RAB_ID1 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[1]->e_rab_id;
880                         SgNB_release_rqd->e_RAB_ID1_exists = 1;
881                 }else{
882                         SgNB_release_rqd->e_RAB_ID1_exists = 0;
883                 }
884                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 2){
885                         SgNB_release_rqd->e_RAB_ID2 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[2]->e_rab_id;
886                         SgNB_release_rqd->e_RAB_ID2_exists = 1;
887                 }else{
888                         SgNB_release_rqd->e_RAB_ID2_exists = 0;
889                 }
890                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 3){
891                         SgNB_release_rqd->e_RAB_ID3 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[3]->e_rab_id;
892                         SgNB_release_rqd->e_RAB_ID3_exists = 1;
893                 }else{
894                         SgNB_release_rqd->e_RAB_ID3_exists = 0;
895                 }
896                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 4){
897                         SgNB_release_rqd->e_RAB_ID4 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[4]->e_rab_id;
898                         SgNB_release_rqd->e_RAB_ID4_exists = 1;
899                 }else{
900                         SgNB_release_rqd->e_RAB_ID4_exists = 0;
901                 }
902                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 5){
903                         SgNB_release_rqd->e_RAB_ID5 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[5]->e_rab_id;
904                         SgNB_release_rqd->e_RAB_ID5_exists = 1;
905                 }else{
906                         SgNB_release_rqd->e_RAB_ID5_exists = 0;
907                 }
908                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 6){
909                         SgNB_release_rqd->e_RAB_ID6 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[6]->e_rab_id;
910                         SgNB_release_rqd->e_RAB_ID6_exists = 1;
911                 }else{
912                         SgNB_release_rqd->e_RAB_ID6_exists = 0;
913                 }
914                 if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 7){
915                         SgNB_release_rqd->e_RAB_ID7 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[7]->e_rab_id;
916                         SgNB_release_rqd->e_RAB_ID7_exists = 1;
917                 }else{
918                         SgNB_release_rqd->e_RAB_ID7_exists = 0;
919                 }
920                 if(node_0_1->id_cause && node_0_1->id_cause->radionetwork){
921                         SgNB_release_rqd->cause_radio_network = node_0_1->id_cause->radionetwork->value;
922                 }else{
923                         SgNB_release_rqd->cause_radio_network = -1;
924                 }
925                 SgNB_release_rqd->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
926                 if(node_0_1->id_cause && node_0_1->id_cause->misc){
927                         SgNB_release_rqd->cause_misc = node_0_1->id_cause->misc->value;
928                 }else{
929                         SgNB_release_rqd->cause_misc = -1;
930                 }
931                 rts_fta_process_packet(&cur_packet);
932         }
933         streaming_protobufs__sg_nbrelease_required__free_unpacked(node_0_0,NULL);
934         return 0;
935 }
936
937 gs_uint32_t process_buffer_RRCXFER(gs_uint8_t * buffer, gs_uint32_t buflen){
938         char *empty_string = "";
939 unsigned long long int ts_lo, ts_hi;
940         StreamingProtobufs__X2APStreaming *hdr = NULL;
941 // ------------------------------------------
942 // ---  Variables for .proto rrctransfer.json, path rrc_metrics.json
943         struct _serv_nr_cell *serv_nr_cell = NULL;
944         StreamingProtobufs__RRCTransfer *node_0_0 = NULL;
945         StreamingProtobufs__RRCTransferIEs *node_0_1 = NULL;
946         StreamingProtobufs__UENRMeasurement *node_0_2 = NULL;
947         StreamingProtobufs__RRCContainer *node_0_3 = NULL;
948         StreamingProtobufs__ULDCCHMessageType *node_0_4 = NULL;
949         StreamingProtobufs__MeasurementReport *node_0_5 = NULL;
950         StreamingProtobufs__MeasurementReportIEs *node_0_6 = NULL;
951         StreamingProtobufs__MeasResults *node_0_7 = NULL;
952         StreamingProtobufs__MeasResultServMOList *node_0_8 = NULL;
953         StreamingProtobufs__MeasResultServMO *node_0_9 = NULL;
954         gs_uint32_t i_0_9;
955         StreamingProtobufs__MeasResultNR *node_0_10 = NULL;
956         StreamingProtobufs__MeasResult *node_0_11 = NULL;
957         StreamingProtobufs__CellResults *node_0_12 = NULL;
958         StreamingProtobufs__MeasQuantityResults *node_0_13 = NULL;
959 // ------------------------------------------
960 // ---  Variables for .proto rrctransfer.json, path rrc_metrics.json
961         struct _nr_neighbor *nr_neighbor = NULL;
962         StreamingProtobufs__RRCTransfer *node_1_0 = NULL;
963         StreamingProtobufs__RRCTransferIEs *node_1_1 = NULL;
964         StreamingProtobufs__UENRMeasurement *node_1_2 = NULL;
965         StreamingProtobufs__RRCContainer *node_1_3 = NULL;
966         StreamingProtobufs__ULDCCHMessageType *node_1_4 = NULL;
967         StreamingProtobufs__MeasurementReport *node_1_5 = NULL;
968         StreamingProtobufs__MeasurementReportIEs *node_1_6 = NULL;
969         StreamingProtobufs__MeasResults *node_1_7 = NULL;
970         StreamingProtobufs__MeasResultListNR *node_1_8 = NULL;
971         StreamingProtobufs__MeasResultNR *node_1_9 = NULL;
972         gs_uint32_t i_1_9;
973         StreamingProtobufs__MeasResult *node_1_10 = NULL;
974         StreamingProtobufs__CellResults *node_1_11 = NULL;
975         StreamingProtobufs__MeasQuantityResults *node_1_12 = NULL;
976 // ------------------------------------------
977 // ---  Variables for .proto rrctransfer.json, path rrc_metrics.json
978         struct _serv_cell_beam_csi *serv_cell_beam_csi = NULL;
979         StreamingProtobufs__RRCTransfer *node_2_0 = NULL;
980         StreamingProtobufs__RRCTransferIEs *node_2_1 = NULL;
981         StreamingProtobufs__UENRMeasurement *node_2_2 = NULL;
982         StreamingProtobufs__RRCContainer *node_2_3 = NULL;
983         StreamingProtobufs__ULDCCHMessageType *node_2_4 = NULL;
984         StreamingProtobufs__MeasurementReport *node_2_5 = NULL;
985         StreamingProtobufs__MeasurementReportIEs *node_2_6 = NULL;
986         StreamingProtobufs__MeasResults *node_2_7 = NULL;
987         StreamingProtobufs__MeasResultServMOList *node_2_8 = NULL;
988         StreamingProtobufs__MeasResultServMO *node_2_9 = NULL;
989         gs_uint32_t i_2_9;
990         StreamingProtobufs__MeasResultNR *node_2_10 = NULL;
991         StreamingProtobufs__MeasResult *node_2_11 = NULL;
992         StreamingProtobufs__RsIndexResults *node_2_12 = NULL;
993         StreamingProtobufs__ResultsPerCSIRSIndexList *node_2_13 = NULL;
994         StreamingProtobufs__ResultsPerCSIRSIndex *node_2_14 = NULL;
995         gs_uint32_t i_2_14;
996         StreamingProtobufs__MeasQuantityResults *node_2_15 = NULL;
997 // ------------------------------------------
998 // ---  Variables for .proto rrctransfer.json, path rrc_metrics.json
999         struct _neighbor_beam_csi *neighbor_beam_csi = NULL;
1000         StreamingProtobufs__RRCTransfer *node_3_0 = NULL;
1001         StreamingProtobufs__RRCTransferIEs *node_3_1 = NULL;
1002         StreamingProtobufs__UENRMeasurement *node_3_2 = NULL;
1003         StreamingProtobufs__RRCContainer *node_3_3 = NULL;
1004         StreamingProtobufs__ULDCCHMessageType *node_3_4 = NULL;
1005         StreamingProtobufs__MeasurementReport *node_3_5 = NULL;
1006         StreamingProtobufs__MeasurementReportIEs *node_3_6 = NULL;
1007         StreamingProtobufs__MeasResults *node_3_7 = NULL;
1008         StreamingProtobufs__MeasResultListNR *node_3_8 = NULL;
1009         StreamingProtobufs__MeasResultNR *node_3_9 = NULL;
1010         gs_uint32_t i_3_9;
1011         StreamingProtobufs__MeasResult *node_3_10 = NULL;
1012         StreamingProtobufs__RsIndexResults *node_3_11 = NULL;
1013         StreamingProtobufs__ResultsPerCSIRSIndexList *node_3_12 = NULL;
1014         StreamingProtobufs__ResultsPerCSIRSIndex *node_3_13 = NULL;
1015         gs_uint32_t i_3_13;
1016         StreamingProtobufs__MeasQuantityResults *node_3_14 = NULL;
1017 // ------------------------------------------
1018 // ---  Variables for .proto rrctransfer.json, path rrc_metrics.json
1019         struct _serv_cell_beam_ssb *serv_cell_beam_ssb = NULL;
1020         StreamingProtobufs__RRCTransfer *node_4_0 = NULL;
1021         StreamingProtobufs__RRCTransferIEs *node_4_1 = NULL;
1022         StreamingProtobufs__UENRMeasurement *node_4_2 = NULL;
1023         StreamingProtobufs__RRCContainer *node_4_3 = NULL;
1024         StreamingProtobufs__ULDCCHMessageType *node_4_4 = NULL;
1025         StreamingProtobufs__MeasurementReport *node_4_5 = NULL;
1026         StreamingProtobufs__MeasurementReportIEs *node_4_6 = NULL;
1027         StreamingProtobufs__MeasResults *node_4_7 = NULL;
1028         StreamingProtobufs__MeasResultServMOList *node_4_8 = NULL;
1029         StreamingProtobufs__MeasResultServMO *node_4_9 = NULL;
1030         gs_uint32_t i_4_9;
1031         StreamingProtobufs__MeasResultNR *node_4_10 = NULL;
1032         StreamingProtobufs__MeasResult *node_4_11 = NULL;
1033         StreamingProtobufs__RsIndexResults *node_4_12 = NULL;
1034         StreamingProtobufs__ResultsPerSSBIndexList *node_4_13 = NULL;
1035         StreamingProtobufs__ResultsPerSSBIndex *node_4_14 = NULL;
1036         gs_uint32_t i_4_14;
1037         StreamingProtobufs__MeasQuantityResults *node_4_15 = NULL;
1038 // ------------------------------------------
1039 // ---  Variables for .proto rrctransfer.json, path rrc_metrics.json
1040         struct _neighbor_beam_ssb *neighbor_beam_ssb = NULL;
1041         StreamingProtobufs__RRCTransfer *node_5_0 = NULL;
1042         StreamingProtobufs__RRCTransferIEs *node_5_1 = NULL;
1043         StreamingProtobufs__UENRMeasurement *node_5_2 = NULL;
1044         StreamingProtobufs__RRCContainer *node_5_3 = NULL;
1045         StreamingProtobufs__ULDCCHMessageType *node_5_4 = NULL;
1046         StreamingProtobufs__MeasurementReport *node_5_5 = NULL;
1047         StreamingProtobufs__MeasurementReportIEs *node_5_6 = NULL;
1048         StreamingProtobufs__MeasResults *node_5_7 = NULL;
1049         StreamingProtobufs__MeasResultListNR *node_5_8 = NULL;
1050         StreamingProtobufs__MeasResultNR *node_5_9 = NULL;
1051         gs_uint32_t i_5_9;
1052         StreamingProtobufs__MeasResult *node_5_10 = NULL;
1053         StreamingProtobufs__RsIndexResults *node_5_11 = NULL;
1054         StreamingProtobufs__ResultsPerSSBIndexList *node_5_12 = NULL;
1055         StreamingProtobufs__ResultsPerSSBIndex *node_5_13 = NULL;
1056         gs_uint32_t i_5_13;
1057         StreamingProtobufs__MeasQuantityResults *node_5_14 = NULL;
1058
1059 // --------------------------------------------------
1060 // ---  Specialized processing for .proto rrctransfer.json, path rrc_metrics.json
1061
1062         serv_nr_cell = (struct _serv_nr_cell *)(cur_packet.record.packed.values);
1063         cur_packet.schema = 1;
1064
1065         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
1066         if(hdr==NULL) return -1;
1067
1068         node_0_0 = hdr->rrctransfer;
1069         if(node_0_0==NULL) return -2;
1070         if(hdr->header==NULL) return -3;
1071
1072         ts_lo = hdr->header->timestamp & 0xffffffff;
1073         ts_hi = hdr->header->timestamp >> 32;
1074         serv_nr_cell->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1075         if(hdr->header->gnbid==NULL)
1076                 serv_nr_cell->gnb_id = empty_string;
1077         else
1078                 serv_nr_cell->gnb_id = hdr->header->gnbid->value;
1079
1080         node_0_1 = node_0_0->rrctransfer_ies;
1081         if(node_0_0->rrctransfer_ies){
1082                 serv_nr_cell->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
1083                 serv_nr_cell->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
1084                 node_0_2 = node_0_1->id_uenrmeasurement;
1085                 if(node_0_1->id_uenrmeasurement){
1086                         node_0_3 = node_0_2->uenrmeasurements;
1087                         if(node_0_2->uenrmeasurements){
1088                                 node_0_4 = node_0_3->ul_dcch_message;
1089                                 if(node_0_3->ul_dcch_message){
1090                                         node_0_5 = node_0_4->measurementreport;
1091                                         if(node_0_4->measurementreport){
1092                                                 node_0_6 = node_0_5->measurementreport;
1093                                                 if(node_0_5->measurementreport){
1094                                                         node_0_7 = node_0_6->measresults;
1095                                                         if(node_0_6->measresults){
1096                                                                 node_0_8 = node_0_7->measresultservingmolist;
1097                                                                 if(node_0_7->measresultservingmolist){
1098                                                                         for(i_0_9=0;i_0_9<node_0_8->n_items; i_0_9++){
1099                                                                                 node_0_9 = node_0_8->items[i_0_9];
1100                                                                                 serv_nr_cell->servCellID = node_0_9->servcellid;
1101                                                                                 node_0_10 = node_0_9->measresultservingcell;
1102                                                                                 if(node_0_9->measresultservingcell){
1103                                                                                         if(node_0_10->physcellid){
1104                                                                                                 serv_nr_cell->physCellId = node_0_10->physcellid->value;
1105                                                                                                 serv_nr_cell->physCellId_exists = 1;
1106                                                                                         }else{
1107                                                                                                 serv_nr_cell->physCellId_exists = 0;
1108                                                                                         }
1109                                                                                         node_0_11 = node_0_10->measresult;
1110                                                                                         if(node_0_10->measresult){
1111                                                                                                 node_0_12 = node_0_11->cellresults;
1112                                                                                                 if(node_0_11->cellresults){
1113                                                                                                         node_0_13 = node_0_12->resultsssb_cell;
1114                                                                                                         if(node_0_12->resultsssb_cell){
1115                                                                                                                 if(node_0_13->rsrq){
1116                                                                                                                         serv_nr_cell->rsrq = node_0_13->rsrq->value;
1117                                                                                                                         serv_nr_cell->rsrq_exists = 1;
1118                                                                                                                 }else{
1119                                                                                                                         serv_nr_cell->rsrq_exists = 0;
1120                                                                                                                 }
1121                                                                                                                 if(node_0_13->rsrp){
1122                                                                                                                         serv_nr_cell->rsrp = node_0_13->rsrp->value;
1123                                                                                                                         serv_nr_cell->rsrp_exists = 1;
1124                                                                                                                 }else{
1125                                                                                                                         serv_nr_cell->rsrp_exists = 0;
1126                                                                                                                 }
1127                                                                                                                 if(node_0_13->sinr){
1128                                                                                                                         serv_nr_cell->sinr = node_0_13->sinr->value;
1129                                                                                                                         serv_nr_cell->sinr_exists = 1;
1130                                                                                                                 }else{
1131                                                                                                                         serv_nr_cell->sinr_exists = 0;
1132                                                                                                                 }
1133                                                                                                                 rts_fta_process_packet(&cur_packet);
1134                                                                                                         }
1135                                                                                                 }
1136                                                                                         }
1137                                                                                 }
1138                                                                         }
1139                                                                 }
1140                                                         }
1141                                                 }
1142                                         }
1143                                 }
1144                         }
1145                 }
1146         }
1147 // --------------------------------------------------
1148 // ---  Specialized processing for .proto rrctransfer.json, path rrc_metrics.json
1149
1150         nr_neighbor = (struct _nr_neighbor *)(cur_packet.record.packed.values);
1151         cur_packet.schema = 4;
1152         node_1_0 = node_0_0;
1153         ts_lo = hdr->header->timestamp & 0xffffffff;
1154         ts_hi = hdr->header->timestamp >> 32;
1155         nr_neighbor->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1156         if(hdr->header->gnbid==NULL)
1157                 nr_neighbor->gnb_id = empty_string;
1158         else
1159                 nr_neighbor->gnb_id = hdr->header->gnbid->value;
1160
1161         node_1_1 = node_1_0->rrctransfer_ies;
1162         if(node_1_0->rrctransfer_ies){
1163                 nr_neighbor->id_MeNB_UE_X2AP_ID = node_1_1->id_menb_ue_x2ap_id;
1164                 nr_neighbor->id_SgNB_UE_X2AP_ID = node_1_1->id_sgnb_ue_x2ap_id;
1165                 node_1_2 = node_1_1->id_uenrmeasurement;
1166                 if(node_1_1->id_uenrmeasurement){
1167                         node_1_3 = node_1_2->uenrmeasurements;
1168                         if(node_1_2->uenrmeasurements){
1169                                 node_1_4 = node_1_3->ul_dcch_message;
1170                                 if(node_1_3->ul_dcch_message){
1171                                         node_1_5 = node_1_4->measurementreport;
1172                                         if(node_1_4->measurementreport){
1173                                                 node_1_6 = node_1_5->measurementreport;
1174                                                 if(node_1_5->measurementreport){
1175                                                         node_1_7 = node_1_6->measresults;
1176                                                         if(node_1_6->measresults){
1177                                                                 node_1_8 = node_1_7->measresultlistnr;
1178                                                                 if(node_1_7->measresultlistnr){
1179                                                                         for(i_1_9=0;i_1_9<node_1_8->n_items; i_1_9++){
1180                                                                                 node_1_9 = node_1_8->items[i_1_9];
1181                                                                                 if(node_1_9->physcellid){
1182                                                                                         nr_neighbor->physCellId = node_1_9->physcellid->value;
1183                                                                                         nr_neighbor->physCellId_exists = 1;
1184                                                                                 }else{
1185                                                                                         nr_neighbor->physCellId_exists = 0;
1186                                                                                 }
1187                                                                                 node_1_10 = node_1_9->measresult;
1188                                                                                 if(node_1_9->measresult){
1189                                                                                         node_1_11 = node_1_10->cellresults;
1190                                                                                         if(node_1_10->cellresults){
1191                                                                                                 node_1_12 = node_1_11->resultsssb_cell;
1192                                                                                                 if(node_1_11->resultsssb_cell){
1193                                                                                                         if(node_1_12->rsrq){
1194                                                                                                                 nr_neighbor->rsrq = node_1_12->rsrq->value;
1195                                                                                                                 nr_neighbor->rsrq_exists = 1;
1196                                                                                                         }else{
1197                                                                                                                 nr_neighbor->rsrq_exists = 0;
1198                                                                                                         }
1199                                                                                                         if(node_1_12->rsrp){
1200                                                                                                                 nr_neighbor->rsrp = node_1_12->rsrp->value;
1201                                                                                                                 nr_neighbor->rsrp_exists = 1;
1202                                                                                                         }else{
1203                                                                                                                 nr_neighbor->rsrp_exists = 0;
1204                                                                                                         }
1205                                                                                                         if(node_1_12->sinr){
1206                                                                                                                 nr_neighbor->sinr = node_1_12->sinr->value;
1207                                                                                                                 nr_neighbor->sinr_exists = 1;
1208                                                                                                         }else{
1209                                                                                                                 nr_neighbor->sinr_exists = 0;
1210                                                                                                         }
1211                                                                                                         rts_fta_process_packet(&cur_packet);
1212                                                                                                 }
1213                                                                                         }
1214                                                                                 }
1215                                                                         }
1216                                                                 }
1217                                                         }
1218                                                 }
1219                                         }
1220                                 }
1221                         }
1222                 }
1223         }
1224 // --------------------------------------------------
1225 // ---  Specialized processing for .proto rrctransfer.json, path rrc_metrics.json
1226
1227         serv_cell_beam_csi = (struct _serv_cell_beam_csi *)(cur_packet.record.packed.values);
1228         cur_packet.schema = 2;
1229         node_2_0 = node_1_0;
1230         ts_lo = hdr->header->timestamp & 0xffffffff;
1231         ts_hi = hdr->header->timestamp >> 32;
1232         serv_cell_beam_csi->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1233         if(hdr->header->gnbid==NULL)
1234                 serv_cell_beam_csi->gnb_id = empty_string;
1235         else
1236                 serv_cell_beam_csi->gnb_id = hdr->header->gnbid->value;
1237
1238         node_2_1 = node_2_0->rrctransfer_ies;
1239         if(node_2_0->rrctransfer_ies){
1240                 serv_cell_beam_csi->id_MeNB_UE_X2AP_ID = node_2_1->id_menb_ue_x2ap_id;
1241                 serv_cell_beam_csi->id_SgNB_UE_X2AP_ID = node_2_1->id_sgnb_ue_x2ap_id;
1242                 node_2_2 = node_2_1->id_uenrmeasurement;
1243                 if(node_2_1->id_uenrmeasurement){
1244                         node_2_3 = node_2_2->uenrmeasurements;
1245                         if(node_2_2->uenrmeasurements){
1246                                 node_2_4 = node_2_3->ul_dcch_message;
1247                                 if(node_2_3->ul_dcch_message){
1248                                         node_2_5 = node_2_4->measurementreport;
1249                                         if(node_2_4->measurementreport){
1250                                                 node_2_6 = node_2_5->measurementreport;
1251                                                 if(node_2_5->measurementreport){
1252                                                         node_2_7 = node_2_6->measresults;
1253                                                         if(node_2_6->measresults){
1254                                                                 node_2_8 = node_2_7->measresultservingmolist;
1255                                                                 if(node_2_7->measresultservingmolist){
1256                                                                         for(i_2_9=0;i_2_9<node_2_8->n_items; i_2_9++){
1257                                                                                 node_2_9 = node_2_8->items[i_2_9];
1258                                                                                 serv_cell_beam_csi->servCellID = node_2_9->servcellid;
1259                                                                                 node_2_10 = node_2_9->measresultservingcell;
1260                                                                                 if(node_2_9->measresultservingcell){
1261                                                                                         if(node_2_10->physcellid){
1262                                                                                                 serv_cell_beam_csi->physCellId = node_2_10->physcellid->value;
1263                                                                                                 serv_cell_beam_csi->physCellId_exists = 1;
1264                                                                                         }else{
1265                                                                                                 serv_cell_beam_csi->physCellId_exists = 0;
1266                                                                                         }
1267                                                                                         node_2_11 = node_2_10->measresult;
1268                                                                                         if(node_2_10->measresult){
1269                                                                                                 node_2_12 = node_2_11->rsindexresults;
1270                                                                                                 if(node_2_11->rsindexresults){
1271                                                                                                         node_2_13 = node_2_12->resultscsi_rs_indexes;
1272                                                                                                         if(node_2_12->resultscsi_rs_indexes){
1273                                                                                                                 for(i_2_14=0;i_2_14<node_2_13->n_items; i_2_14++){
1274                                                                                                                         node_2_14 = node_2_13->items[i_2_14];
1275                                                                                                                         serv_cell_beam_csi->csi_rs_index = node_2_14->csi_rs_index;
1276                                                                                                                         node_2_15 = node_2_14->csi_rs_results;
1277                                                                                                                         if(node_2_14->csi_rs_results){
1278                                                                                                                                 if(node_2_15->rsrq){
1279                                                                                                                                         serv_cell_beam_csi->rsrq = node_2_15->rsrq->value;
1280                                                                                                                                         serv_cell_beam_csi->rsrq_exists = 1;
1281                                                                                                                                 }else{
1282                                                                                                                                         serv_cell_beam_csi->rsrq_exists = 0;
1283                                                                                                                                 }
1284                                                                                                                                 if(node_2_15->rsrp){
1285                                                                                                                                         serv_cell_beam_csi->rsrp = node_2_15->rsrp->value;
1286                                                                                                                                         serv_cell_beam_csi->rsrp_exists = 1;
1287                                                                                                                                 }else{
1288                                                                                                                                         serv_cell_beam_csi->rsrp_exists = 0;
1289                                                                                                                                 }
1290                                                                                                                                 if(node_2_15->sinr){
1291                                                                                                                                         serv_cell_beam_csi->sinr = node_2_15->sinr->value;
1292                                                                                                                                         serv_cell_beam_csi->sinr_exists = 1;
1293                                                                                                                                 }else{
1294                                                                                                                                         serv_cell_beam_csi->sinr_exists = 0;
1295                                                                                                                                 }
1296                                                                                                                                 rts_fta_process_packet(&cur_packet);
1297                                                                                                                         }
1298                                                                                                                 }
1299                                                                                                         }
1300                                                                                                 }
1301                                                                                         }
1302                                                                                 }
1303                                                                         }
1304                                                                 }
1305                                                         }
1306                                                 }
1307                                         }
1308                                 }
1309                         }
1310                 }
1311         }
1312 // --------------------------------------------------
1313 // ---  Specialized processing for .proto rrctransfer.json, path rrc_metrics.json
1314
1315         neighbor_beam_csi = (struct _neighbor_beam_csi *)(cur_packet.record.packed.values);
1316         cur_packet.schema = 5;
1317         node_3_0 = node_2_0;
1318         ts_lo = hdr->header->timestamp & 0xffffffff;
1319         ts_hi = hdr->header->timestamp >> 32;
1320         neighbor_beam_csi->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1321         if(hdr->header->gnbid==NULL)
1322                 neighbor_beam_csi->gnb_id = empty_string;
1323         else
1324                 neighbor_beam_csi->gnb_id = hdr->header->gnbid->value;
1325
1326         node_3_1 = node_3_0->rrctransfer_ies;
1327         if(node_3_0->rrctransfer_ies){
1328                 neighbor_beam_csi->id_MeNB_UE_X2AP_ID = node_3_1->id_menb_ue_x2ap_id;
1329                 neighbor_beam_csi->id_SgNB_UE_X2AP_ID = node_3_1->id_sgnb_ue_x2ap_id;
1330                 node_3_2 = node_3_1->id_uenrmeasurement;
1331                 if(node_3_1->id_uenrmeasurement){
1332                         node_3_3 = node_3_2->uenrmeasurements;
1333                         if(node_3_2->uenrmeasurements){
1334                                 node_3_4 = node_3_3->ul_dcch_message;
1335                                 if(node_3_3->ul_dcch_message){
1336                                         node_3_5 = node_3_4->measurementreport;
1337                                         if(node_3_4->measurementreport){
1338                                                 node_3_6 = node_3_5->measurementreport;
1339                                                 if(node_3_5->measurementreport){
1340                                                         node_3_7 = node_3_6->measresults;
1341                                                         if(node_3_6->measresults){
1342                                                                 node_3_8 = node_3_7->measresultlistnr;
1343                                                                 if(node_3_7->measresultlistnr){
1344                                                                         for(i_3_9=0;i_3_9<node_3_8->n_items; i_3_9++){
1345                                                                                 node_3_9 = node_3_8->items[i_3_9];
1346                                                                                 if(node_3_9->physcellid){
1347                                                                                         neighbor_beam_csi->physCellId = node_3_9->physcellid->value;
1348                                                                                         neighbor_beam_csi->physCellId_exists = 1;
1349                                                                                 }else{
1350                                                                                         neighbor_beam_csi->physCellId_exists = 0;
1351                                                                                 }
1352                                                                                 node_3_10 = node_3_9->measresult;
1353                                                                                 if(node_3_9->measresult){
1354                                                                                         node_3_11 = node_3_10->rsindexresults;
1355                                                                                         if(node_3_10->rsindexresults){
1356                                                                                                 node_3_12 = node_3_11->resultscsi_rs_indexes;
1357                                                                                                 if(node_3_11->resultscsi_rs_indexes){
1358                                                                                                         for(i_3_13=0;i_3_13<node_3_12->n_items; i_3_13++){
1359                                                                                                                 node_3_13 = node_3_12->items[i_3_13];
1360                                                                                                                 neighbor_beam_csi->csi_rs_index = node_3_13->csi_rs_index;
1361                                                                                                                 node_3_14 = node_3_13->csi_rs_results;
1362                                                                                                                 if(node_3_13->csi_rs_results){
1363                                                                                                                         if(node_3_14->rsrq){
1364                                                                                                                                 neighbor_beam_csi->rsrq = node_3_14->rsrq->value;
1365                                                                                                                                 neighbor_beam_csi->rsrq_exists = 1;
1366                                                                                                                         }else{
1367                                                                                                                                 neighbor_beam_csi->rsrq_exists = 0;
1368                                                                                                                         }
1369                                                                                                                         if(node_3_14->rsrp){
1370                                                                                                                                 neighbor_beam_csi->rsrp = node_3_14->rsrp->value;
1371                                                                                                                                 neighbor_beam_csi->rsrp_exists = 1;
1372                                                                                                                         }else{
1373                                                                                                                                 neighbor_beam_csi->rsrp_exists = 0;
1374                                                                                                                         }
1375                                                                                                                         if(node_3_14->sinr){
1376                                                                                                                                 neighbor_beam_csi->sinr = node_3_14->sinr->value;
1377                                                                                                                                 neighbor_beam_csi->sinr_exists = 1;
1378                                                                                                                         }else{
1379                                                                                                                                 neighbor_beam_csi->sinr_exists = 0;
1380                                                                                                                         }
1381                                                                                                                         rts_fta_process_packet(&cur_packet);
1382                                                                                                                 }
1383                                                                                                         }
1384                                                                                                 }
1385                                                                                         }
1386                                                                                 }
1387                                                                         }
1388                                                                 }
1389                                                         }
1390                                                 }
1391                                         }
1392                                 }
1393                         }
1394                 }
1395         }
1396 // --------------------------------------------------
1397 // ---  Specialized processing for .proto rrctransfer.json, path rrc_metrics.json
1398
1399         serv_cell_beam_ssb = (struct _serv_cell_beam_ssb *)(cur_packet.record.packed.values);
1400         cur_packet.schema = 3;
1401         node_4_0 = node_3_0;
1402         ts_lo = hdr->header->timestamp & 0xffffffff;
1403         ts_hi = hdr->header->timestamp >> 32;
1404         serv_cell_beam_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1405         if(hdr->header->gnbid==NULL)
1406                 serv_cell_beam_ssb->gnb_id = empty_string;
1407         else
1408                 serv_cell_beam_ssb->gnb_id = hdr->header->gnbid->value;
1409
1410         node_4_1 = node_4_0->rrctransfer_ies;
1411         if(node_4_0->rrctransfer_ies){
1412                 serv_cell_beam_ssb->id_MeNB_UE_X2AP_ID = node_4_1->id_menb_ue_x2ap_id;
1413                 serv_cell_beam_ssb->id_SgNB_UE_X2AP_ID = node_4_1->id_sgnb_ue_x2ap_id;
1414                 node_4_2 = node_4_1->id_uenrmeasurement;
1415                 if(node_4_1->id_uenrmeasurement){
1416                         node_4_3 = node_4_2->uenrmeasurements;
1417                         if(node_4_2->uenrmeasurements){
1418                                 node_4_4 = node_4_3->ul_dcch_message;
1419                                 if(node_4_3->ul_dcch_message){
1420                                         node_4_5 = node_4_4->measurementreport;
1421                                         if(node_4_4->measurementreport){
1422                                                 node_4_6 = node_4_5->measurementreport;
1423                                                 if(node_4_5->measurementreport){
1424                                                         node_4_7 = node_4_6->measresults;
1425                                                         if(node_4_6->measresults){
1426                                                                 node_4_8 = node_4_7->measresultservingmolist;
1427                                                                 if(node_4_7->measresultservingmolist){
1428                                                                         for(i_4_9=0;i_4_9<node_4_8->n_items; i_4_9++){
1429                                                                                 node_4_9 = node_4_8->items[i_4_9];
1430                                                                                 serv_cell_beam_ssb->servCellID = node_4_9->servcellid;
1431                                                                                 node_4_10 = node_4_9->measresultservingcell;
1432                                                                                 if(node_4_9->measresultservingcell){
1433                                                                                         if(node_4_10->physcellid){
1434                                                                                                 serv_cell_beam_ssb->physCellId = node_4_10->physcellid->value;
1435                                                                                                 serv_cell_beam_ssb->physCellId_exists = 1;
1436                                                                                         }else{
1437                                                                                                 serv_cell_beam_ssb->physCellId_exists = 0;
1438                                                                                         }
1439                                                                                         node_4_11 = node_4_10->measresult;
1440                                                                                         if(node_4_10->measresult){
1441                                                                                                 node_4_12 = node_4_11->rsindexresults;
1442                                                                                                 if(node_4_11->rsindexresults){
1443                                                                                                         node_4_13 = node_4_12->resultsssb_indexes;
1444                                                                                                         if(node_4_12->resultsssb_indexes){
1445                                                                                                                 for(i_4_14=0;i_4_14<node_4_13->n_items; i_4_14++){
1446                                                                                                                         node_4_14 = node_4_13->items[i_4_14];
1447                                                                                                                         serv_cell_beam_ssb->ssb_Index = node_4_14->ssb_index;
1448                                                                                                                         node_4_15 = node_4_14->ssb_results;
1449                                                                                                                         if(node_4_14->ssb_results){
1450                                                                                                                                 if(node_4_15->rsrq){
1451                                                                                                                                         serv_cell_beam_ssb->rsrq = node_4_15->rsrq->value;
1452                                                                                                                                         serv_cell_beam_ssb->rsrq_exists = 1;
1453                                                                                                                                 }else{
1454                                                                                                                                         serv_cell_beam_ssb->rsrq_exists = 0;
1455                                                                                                                                 }
1456                                                                                                                                 if(node_4_15->rsrp){
1457                                                                                                                                         serv_cell_beam_ssb->rsrp = node_4_15->rsrp->value;
1458                                                                                                                                         serv_cell_beam_ssb->rsrp_exists = 1;
1459                                                                                                                                 }else{
1460                                                                                                                                         serv_cell_beam_ssb->rsrp_exists = 0;
1461                                                                                                                                 }
1462                                                                                                                                 if(node_4_15->sinr){
1463                                                                                                                                         serv_cell_beam_ssb->sinr = node_4_15->sinr->value;
1464                                                                                                                                         serv_cell_beam_ssb->sinr_exists = 1;
1465                                                                                                                                 }else{
1466                                                                                                                                         serv_cell_beam_ssb->sinr_exists = 0;
1467                                                                                                                                 }
1468                                                                                                                                 rts_fta_process_packet(&cur_packet);
1469                                                                                                                         }
1470                                                                                                                 }
1471                                                                                                         }
1472                                                                                                 }
1473                                                                                         }
1474                                                                                 }
1475                                                                         }
1476                                                                 }
1477                                                         }
1478                                                 }
1479                                         }
1480                                 }
1481                         }
1482                 }
1483         }
1484 // --------------------------------------------------
1485 // ---  Specialized processing for .proto rrctransfer.json, path rrc_metrics.json
1486
1487         neighbor_beam_ssb = (struct _neighbor_beam_ssb *)(cur_packet.record.packed.values);
1488         cur_packet.schema = 6;
1489         node_5_0 = node_4_0;
1490         ts_lo = hdr->header->timestamp & 0xffffffff;
1491         ts_hi = hdr->header->timestamp >> 32;
1492         neighbor_beam_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1493         if(hdr->header->gnbid==NULL)
1494                 neighbor_beam_ssb->gnb_id = empty_string;
1495         else
1496                 neighbor_beam_ssb->gnb_id = hdr->header->gnbid->value;
1497
1498         node_5_1 = node_5_0->rrctransfer_ies;
1499         if(node_5_0->rrctransfer_ies){
1500                 neighbor_beam_ssb->id_MeNB_UE_X2AP_ID = node_5_1->id_menb_ue_x2ap_id;
1501                 neighbor_beam_ssb->id_SgNB_UE_X2AP_ID = node_5_1->id_sgnb_ue_x2ap_id;
1502                 node_5_2 = node_5_1->id_uenrmeasurement;
1503                 if(node_5_1->id_uenrmeasurement){
1504                         node_5_3 = node_5_2->uenrmeasurements;
1505                         if(node_5_2->uenrmeasurements){
1506                                 node_5_4 = node_5_3->ul_dcch_message;
1507                                 if(node_5_3->ul_dcch_message){
1508                                         node_5_5 = node_5_4->measurementreport;
1509                                         if(node_5_4->measurementreport){
1510                                                 node_5_6 = node_5_5->measurementreport;
1511                                                 if(node_5_5->measurementreport){
1512                                                         node_5_7 = node_5_6->measresults;
1513                                                         if(node_5_6->measresults){
1514                                                                 node_5_8 = node_5_7->measresultlistnr;
1515                                                                 if(node_5_7->measresultlistnr){
1516                                                                         for(i_5_9=0;i_5_9<node_5_8->n_items; i_5_9++){
1517                                                                                 node_5_9 = node_5_8->items[i_5_9];
1518                                                                                 if(node_5_9->physcellid){
1519                                                                                         neighbor_beam_ssb->physCellId = node_5_9->physcellid->value;
1520                                                                                         neighbor_beam_ssb->physCellId_exists = 1;
1521                                                                                 }else{
1522                                                                                         neighbor_beam_ssb->physCellId_exists = 0;
1523                                                                                 }
1524                                                                                 node_5_10 = node_5_9->measresult;
1525                                                                                 if(node_5_9->measresult){
1526                                                                                         node_5_11 = node_5_10->rsindexresults;
1527                                                                                         if(node_5_10->rsindexresults){
1528                                                                                                 node_5_12 = node_5_11->resultsssb_indexes;
1529                                                                                                 if(node_5_11->resultsssb_indexes){
1530                                                                                                         for(i_5_13=0;i_5_13<node_5_12->n_items; i_5_13++){
1531                                                                                                                 node_5_13 = node_5_12->items[i_5_13];
1532                                                                                                                 neighbor_beam_ssb->ssb_Index = node_5_13->ssb_index;
1533                                                                                                                 node_5_14 = node_5_13->ssb_results;
1534                                                                                                                 if(node_5_13->ssb_results){
1535                                                                                                                         if(node_5_14->rsrq){
1536                                                                                                                                 neighbor_beam_ssb->rsrq = node_5_14->rsrq->value;
1537                                                                                                                                 neighbor_beam_ssb->rsrq_exists = 1;
1538                                                                                                                         }else{
1539                                                                                                                                 neighbor_beam_ssb->rsrq_exists = 0;
1540                                                                                                                         }
1541                                                                                                                         if(node_5_14->rsrp){
1542                                                                                                                                 neighbor_beam_ssb->rsrp = node_5_14->rsrp->value;
1543                                                                                                                                 neighbor_beam_ssb->rsrp_exists = 1;
1544                                                                                                                         }else{
1545                                                                                                                                 neighbor_beam_ssb->rsrp_exists = 0;
1546                                                                                                                         }
1547                                                                                                                         if(node_5_14->sinr){
1548                                                                                                                                 neighbor_beam_ssb->sinr = node_5_14->sinr->value;
1549                                                                                                                                 neighbor_beam_ssb->sinr_exists = 1;
1550                                                                                                                         }else{
1551                                                                                                                                 neighbor_beam_ssb->sinr_exists = 0;
1552                                                                                                                         }
1553                                                                                                                         rts_fta_process_packet(&cur_packet);
1554                                                                                                                 }
1555                                                                                                         }
1556                                                                                                 }
1557                                                                                         }
1558                                                                                 }
1559                                                                         }
1560                                                                 }
1561                                                         }
1562                                                 }
1563                                         }
1564                                 }
1565                         }
1566                 }
1567         }
1568         streaming_protobufs__rrctransfer__free_unpacked(node_0_0,NULL);
1569         return 0;
1570 }
1571
1572 gs_uint32_t process_buffer_ADDREQREJECT(gs_uint8_t * buffer, gs_uint32_t buflen){
1573         char *empty_string = "";
1574 unsigned long long int ts_lo, ts_hi;
1575         StreamingProtobufs__X2APStreaming *hdr = NULL;
1576 // ------------------------------------------
1577 // ---  Variables for .proto sgnb_addition_request_reject.json, path sgnb_add_req_reject.json
1578         struct _sgnb_add_req_reject *sgnb_add_req_reject = NULL;
1579         StreamingProtobufs__SgNBAdditionRequestReject *node_0_0 = NULL;
1580         StreamingProtobufs__Cause *node_0_1 = NULL;
1581
1582 // --------------------------------------------------
1583 // ---  Specialized processing for .proto sgnb_addition_request_reject.json, path sgnb_add_req_reject.json
1584
1585         sgnb_add_req_reject = (struct _sgnb_add_req_reject *)(cur_packet.record.packed.values);
1586         cur_packet.schema = 701;
1587
1588         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
1589         if(hdr==NULL) return -1;
1590
1591         node_0_0 = hdr->sgnbadditionrequestreject;
1592         if(node_0_0==NULL) return -2;
1593         if(hdr->header==NULL) return -3;
1594
1595         ts_lo = hdr->header->timestamp & 0xffffffff;
1596         ts_hi = hdr->header->timestamp >> 32;
1597         sgnb_add_req_reject->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1598         if(hdr->header->gnbid==NULL)
1599                 sgnb_add_req_reject->gnb_id = empty_string;
1600         else
1601                 sgnb_add_req_reject->gnb_id = hdr->header->gnbid->value;
1602
1603         sgnb_add_req_reject->id_MeNB_UE_X2AP_ID = node_0_0->id_menb_ue_x2ap_id;
1604         if(node_0_0->id_sgnb_ue_x2ap_id){
1605                 sgnb_add_req_reject->id_SgNB_UE_X2AP_ID = node_0_0->id_sgnb_ue_x2ap_id->value;
1606                 sgnb_add_req_reject->id_SgNB_UE_X2AP_ID_exists = 1;
1607         }else{
1608                 sgnb_add_req_reject->id_SgNB_UE_X2AP_ID_exists = 0;
1609         }
1610         node_0_1 = node_0_0->id_cause;
1611         if(node_0_0->id_cause){
1612                 if(node_0_1->radionetwork){
1613                         sgnb_add_req_reject->cause_radio_network = node_0_1->radionetwork->value;
1614                 }else{
1615                         sgnb_add_req_reject->cause_radio_network = -1;
1616                 }
1617                 if(node_0_1->transport){
1618                         sgnb_add_req_reject->cause_transport = node_0_1->transport->value;
1619                 }else{
1620                         sgnb_add_req_reject->cause_transport = -1;
1621                 }
1622                 if(node_0_1->protocol){
1623                         sgnb_add_req_reject->cause_protocol = node_0_1->protocol->value;
1624                 }else{
1625                         sgnb_add_req_reject->cause_protocol = -1;
1626                 }
1627                 if(node_0_1->misc){
1628                         sgnb_add_req_reject->cause_misc = node_0_1->misc->value;
1629                 }else{
1630                         sgnb_add_req_reject->cause_misc = -1;
1631                 }
1632                 rts_fta_process_packet(&cur_packet);
1633         }
1634         streaming_protobufs__sg_nbaddition_request_reject__free_unpacked(node_0_0,NULL);
1635         return 0;
1636 }
1637
1638 gs_uint32_t process_buffer_SGNB_ADDITION_REQ_ACK(gs_uint8_t * buffer, gs_uint32_t buflen){
1639         char *empty_string = "";
1640 unsigned long long int ts_lo, ts_hi;
1641         StreamingProtobufs__X2APStreaming *hdr = NULL;
1642 // ------------------------------------------
1643 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1644         struct _eRABs_notadmitted_for_ue *eRABs_notadmitted_for_ue = NULL;
1645         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_0_0 = NULL;
1646         StreamingProtobufs__ERABList *node_0_1 = NULL;
1647         StreamingProtobufs__ERABItemIEs *node_0_2 = NULL;
1648         gs_uint32_t i_0_2;
1649         StreamingProtobufs__ERABItem *node_0_3 = NULL;
1650 // ------------------------------------------
1651 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1652         struct _add_req_ack_cellid *add_req_ack_cellid = NULL;
1653         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_1_0 = NULL;
1654         StreamingProtobufs__CGConfig *node_1_1 = NULL;
1655         StreamingProtobufs__CGConfigCriticalExtensionsChoice1 *node_1_2 = NULL;
1656         StreamingProtobufs__CGConfigIEs *node_1_3 = NULL;
1657         StreamingProtobufs__RRCReconfiguration *node_1_4 = NULL;
1658         StreamingProtobufs__RRCReconfigurationIEs *node_1_5 = NULL;
1659         StreamingProtobufs__CellGroupConfig *node_1_6 = NULL;
1660         StreamingProtobufs__SpCellConfig *node_1_7 = NULL;
1661         StreamingProtobufs__ReconfigurationWithSync *node_1_8 = NULL;
1662         StreamingProtobufs__ServingCellConfigCommon *node_1_9 = NULL;
1663 // ------------------------------------------
1664 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1665         struct _eRABs_acked_for_admit_for_ue *eRABs_acked_for_admit_for_ue = NULL;
1666         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_2_0 = NULL;
1667         StreamingProtobufs__ERABsAdmittedToBeAddedSgNBAddReqAckList *node_2_1 = NULL;
1668         StreamingProtobufs__ERABsAdmittedToBeAddedSgNBAddReqAckItem *node_2_2 = NULL;
1669         gs_uint32_t i_2_2;
1670 // ------------------------------------------
1671 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1672         struct _SgNB_ack_for_ue_NRfreqs *SgNB_ack_for_ue_NRfreqs = NULL;
1673         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_3_0 = NULL;
1674         StreamingProtobufs__CGConfig *node_3_1 = NULL;
1675         StreamingProtobufs__CGConfigCriticalExtensionsChoice1 *node_3_2 = NULL;
1676         StreamingProtobufs__CGConfigIEs *node_3_3 = NULL;
1677 // ------------------------------------------
1678 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1679         struct _SgNB_ack_for_add_mod_for_ue *SgNB_ack_for_add_mod_for_ue = NULL;
1680         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_4_0 = NULL;
1681         StreamingProtobufs__CGConfig *node_4_1 = NULL;
1682         StreamingProtobufs__CGConfigCriticalExtensionsChoice1 *node_4_2 = NULL;
1683         StreamingProtobufs__CGConfigIEs *node_4_3 = NULL;
1684         StreamingProtobufs__RadioBearerConfig *node_4_4 = NULL;
1685         StreamingProtobufs__DRBToAddModList *node_4_5 = NULL;
1686         StreamingProtobufs__DRBToAddMod *node_4_6 = NULL;
1687         gs_uint32_t i_4_6;
1688 // ------------------------------------------
1689 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1690         struct _SgNB_ack_for_ue_measurements *SgNB_ack_for_ue_measurements = NULL;
1691         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_5_0 = NULL;
1692         StreamingProtobufs__CGConfig *node_5_1 = NULL;
1693         StreamingProtobufs__CGConfigCriticalExtensionsChoice1 *node_5_2 = NULL;
1694         StreamingProtobufs__CGConfigIEs *node_5_3 = NULL;
1695         StreamingProtobufs__MeasResultList2NR *node_5_4 = NULL;
1696         StreamingProtobufs__MeasResult2NR *node_5_5 = NULL;
1697         gs_uint32_t i_5_5;
1698         StreamingProtobufs__MeasResultNR *node_5_6 = NULL;
1699         StreamingProtobufs__MeasResult *node_5_7 = NULL;
1700         StreamingProtobufs__CellResults *node_5_8 = NULL;
1701         StreamingProtobufs__MeasQuantityResults *node_5_9 = NULL;
1702 // ------------------------------------------
1703 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1704         struct _SgNB_ack_for_ue_beam_csi *SgNB_ack_for_ue_beam_csi = NULL;
1705         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_6_0 = NULL;
1706         StreamingProtobufs__CGConfig *node_6_1 = NULL;
1707         StreamingProtobufs__CGConfigCriticalExtensionsChoice1 *node_6_2 = NULL;
1708         StreamingProtobufs__CGConfigIEs *node_6_3 = NULL;
1709         StreamingProtobufs__MeasResultList2NR *node_6_4 = NULL;
1710         StreamingProtobufs__MeasResult2NR *node_6_5 = NULL;
1711         gs_uint32_t i_6_5;
1712         StreamingProtobufs__MeasResultNR *node_6_6 = NULL;
1713         StreamingProtobufs__MeasResult *node_6_7 = NULL;
1714         StreamingProtobufs__RsIndexResults *node_6_8 = NULL;
1715         StreamingProtobufs__ResultsPerCSIRSIndexList *node_6_9 = NULL;
1716         StreamingProtobufs__ResultsPerCSIRSIndex *node_6_10 = NULL;
1717         gs_uint32_t i_6_10;
1718         StreamingProtobufs__MeasQuantityResults *node_6_11 = NULL;
1719 // ------------------------------------------
1720 // ---  Variables for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1721         struct _SgNB_ack_for_ue_beam_ssb *SgNB_ack_for_ue_beam_ssb = NULL;
1722         StreamingProtobufs__SgNBAdditionRequestAcknowledge *node_7_0 = NULL;
1723         StreamingProtobufs__CGConfig *node_7_1 = NULL;
1724         StreamingProtobufs__CGConfigCriticalExtensionsChoice1 *node_7_2 = NULL;
1725         StreamingProtobufs__CGConfigIEs *node_7_3 = NULL;
1726         StreamingProtobufs__MeasResultList2NR *node_7_4 = NULL;
1727         StreamingProtobufs__MeasResult2NR *node_7_5 = NULL;
1728         gs_uint32_t i_7_5;
1729         StreamingProtobufs__MeasResultNR *node_7_6 = NULL;
1730         StreamingProtobufs__MeasResult *node_7_7 = NULL;
1731         StreamingProtobufs__RsIndexResults *node_7_8 = NULL;
1732         StreamingProtobufs__ResultsPerSSBIndexList *node_7_9 = NULL;
1733         StreamingProtobufs__ResultsPerSSBIndex *node_7_10 = NULL;
1734         gs_uint32_t i_7_10;
1735         StreamingProtobufs__MeasQuantityResults *node_7_11 = NULL;
1736
1737 // --------------------------------------------------
1738 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1739
1740         eRABs_notadmitted_for_ue = (struct _eRABs_notadmitted_for_ue *)(cur_packet.record.packed.values);
1741         cur_packet.schema = 501;
1742
1743         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
1744         if(hdr==NULL) return -1;
1745
1746         node_0_0 = hdr->sgnbadditionrequestacknowledge;
1747         if(node_0_0==NULL) return -2;
1748         if(hdr->header==NULL) return -3;
1749
1750         ts_lo = hdr->header->timestamp & 0xffffffff;
1751         ts_hi = hdr->header->timestamp >> 32;
1752         eRABs_notadmitted_for_ue->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1753         if(hdr->header->gnbid==NULL)
1754                 eRABs_notadmitted_for_ue->gnb_id = empty_string;
1755         else
1756                 eRABs_notadmitted_for_ue->gnb_id = hdr->header->gnbid->value;
1757
1758         eRABs_notadmitted_for_ue->id_MeNB_UE_X2AP_ID = node_0_0->id_menb_ue_x2ap_id;
1759         eRABs_notadmitted_for_ue->id_SgNB_UE_X2AP_ID = node_0_0->id_sgnb_ue_x2ap_id;
1760         if(node_0_0->id_menb_ue_x2ap_id_extension){
1761                 eRABs_notadmitted_for_ue->id_MeNB_UE_X2AP_ID_Extension = node_0_0->id_menb_ue_x2ap_id_extension->value;
1762         }else{
1763                 eRABs_notadmitted_for_ue->id_MeNB_UE_X2AP_ID_Extension = 0;
1764         }
1765         node_0_1 = node_0_0->id_e_rabs_notadmitted_list;
1766         if(node_0_0->id_e_rabs_notadmitted_list){
1767                 for(i_0_2=0;i_0_2<node_0_1->n_items; i_0_2++){
1768                         node_0_2 = node_0_1->items[i_0_2];
1769                         node_0_3 = node_0_2->id_e_rab_item;
1770                         if(node_0_2->id_e_rab_item){
1771                                 eRABs_notadmitted_for_ue->e_RAB_ID = node_0_3->e_rab_id;
1772                                 if(node_0_3->cause && node_0_3->cause->transport){
1773                                         eRABs_notadmitted_for_ue->cause_transport = node_0_3->cause->transport->value;
1774                                 }else{
1775                                         eRABs_notadmitted_for_ue->cause_transport = -1;
1776                                 }
1777                                 if(node_0_3->cause && node_0_3->cause->protocol){
1778                                         eRABs_notadmitted_for_ue->cause_protocol = node_0_3->cause->protocol->value;
1779                                 }else{
1780                                         eRABs_notadmitted_for_ue->cause_protocol = -1;
1781                                 }
1782                                 if(node_0_3->cause && node_0_3->cause->misc){
1783                                         eRABs_notadmitted_for_ue->cause_misc = node_0_3->cause->misc->value;
1784                                 }else{
1785                                         eRABs_notadmitted_for_ue->cause_misc = -1;
1786                                 }
1787                                 if(node_0_3->cause && node_0_3->cause->radionetwork){
1788                                         eRABs_notadmitted_for_ue->cause_radio_network = node_0_3->cause->radionetwork->value;
1789                                 }else{
1790                                         eRABs_notadmitted_for_ue->cause_radio_network = -1;
1791                                 }
1792                                 rts_fta_process_packet(&cur_packet);
1793                         }
1794                 }
1795         }
1796 // --------------------------------------------------
1797 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1798
1799         add_req_ack_cellid = (struct _add_req_ack_cellid *)(cur_packet.record.packed.values);
1800         cur_packet.schema = 10004;
1801         node_1_0 = node_0_0;
1802         ts_lo = hdr->header->timestamp & 0xffffffff;
1803         ts_hi = hdr->header->timestamp >> 32;
1804         add_req_ack_cellid->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1805         if(hdr->header->gnbid==NULL)
1806                 add_req_ack_cellid->gnb_id = empty_string;
1807         else
1808                 add_req_ack_cellid->gnb_id = hdr->header->gnbid->value;
1809
1810         add_req_ack_cellid->id_MeNB_UE_X2AP_ID = node_1_0->id_menb_ue_x2ap_id;
1811         add_req_ack_cellid->id_SgNB_UE_X2AP_ID = node_1_0->id_sgnb_ue_x2ap_id;
1812         if(node_1_0->id_menb_ue_x2ap_id_extension){
1813                 add_req_ack_cellid->id_MeNB_UE_X2AP_ID_Extension = node_1_0->id_menb_ue_x2ap_id_extension->value;
1814         }else{
1815                 add_req_ack_cellid->id_MeNB_UE_X2AP_ID_Extension = 0;
1816         }
1817         node_1_1 = node_1_0->id_sgnbtomenbcontainer;
1818         if(node_1_0->id_sgnbtomenbcontainer){
1819                 node_1_2 = node_1_1->criticalextensionschoice1;
1820                 if(node_1_1->criticalextensionschoice1){
1821                         node_1_3 = node_1_2->protocolies;
1822                         if(node_1_2->protocolies){
1823                                 node_1_4 = node_1_3->scg_cellgroupconfig;
1824                                 if(node_1_3->scg_cellgroupconfig){
1825                                         node_1_5 = node_1_4->rrcreconfiguration;
1826                                         if(node_1_4->rrcreconfiguration){
1827                                                 node_1_6 = node_1_5->secondarycellgroup;
1828                                                 if(node_1_5->secondarycellgroup){
1829                                                         node_1_7 = node_1_6->spcellconfig;
1830                                                         if(node_1_6->spcellconfig){
1831                                                                 node_1_8 = node_1_7->reconfigurationwithsync;
1832                                                                 if(node_1_7->reconfigurationwithsync){
1833                                                                         node_1_9 = node_1_8->spcellconfigcommon;
1834                                                                         if(node_1_8->spcellconfigcommon){
1835                                                                                 if(node_1_9->physcellid){
1836                                                                                         add_req_ack_cellid->physCellId = node_1_9->physcellid->value;
1837                                                                                         add_req_ack_cellid->physCellId_exists = 1;
1838                                                                                 }else{
1839                                                                                         add_req_ack_cellid->physCellId_exists = 0;
1840                                                                                 }
1841                                                                                 rts_fta_process_packet(&cur_packet);
1842                                                                         }
1843                                                                 }
1844                                                         }
1845                                                 }
1846                                         }
1847                                 }
1848                         }
1849                 }
1850         }
1851 // --------------------------------------------------
1852 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1853
1854         eRABs_acked_for_admit_for_ue = (struct _eRABs_acked_for_admit_for_ue *)(cur_packet.record.packed.values);
1855         cur_packet.schema = 502;
1856         node_2_0 = node_1_0;
1857         ts_lo = hdr->header->timestamp & 0xffffffff;
1858         ts_hi = hdr->header->timestamp >> 32;
1859         eRABs_acked_for_admit_for_ue->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1860         if(hdr->header->gnbid==NULL)
1861                 eRABs_acked_for_admit_for_ue->gnb_id = empty_string;
1862         else
1863                 eRABs_acked_for_admit_for_ue->gnb_id = hdr->header->gnbid->value;
1864
1865         eRABs_acked_for_admit_for_ue->id_MeNB_UE_X2AP_ID = node_2_0->id_menb_ue_x2ap_id;
1866         eRABs_acked_for_admit_for_ue->id_SgNB_UE_X2AP_ID = node_2_0->id_sgnb_ue_x2ap_id;
1867         if(node_2_0->id_menb_ue_x2ap_id_extension){
1868                 eRABs_acked_for_admit_for_ue->id_MeNB_UE_X2AP_ID_Extension = node_2_0->id_menb_ue_x2ap_id_extension->value;
1869         }else{
1870                 eRABs_acked_for_admit_for_ue->id_MeNB_UE_X2AP_ID_Extension = 0;
1871         }
1872         node_2_1 = node_2_0->id_e_rabs_admitted_tobeadded_sgnbaddreqacklist;
1873         if(node_2_0->id_e_rabs_admitted_tobeadded_sgnbaddreqacklist){
1874                 for(i_2_2=0;i_2_2<node_2_1->n_id_e_rabs_admitted_tobeadded_sgnbaddreqack_item; i_2_2++){
1875                         node_2_2 = node_2_1->id_e_rabs_admitted_tobeadded_sgnbaddreqack_item[i_2_2];
1876                         if(node_2_2->sgnbpdcppresent && node_2_2->sgnbpdcppresent->mcg_e_rab_level_qos_parameters && node_2_2->sgnbpdcppresent->mcg_e_rab_level_qos_parameters->allocationandretentionpriority){
1877                                 eRABs_acked_for_admit_for_ue->ARP = node_2_2->sgnbpdcppresent->mcg_e_rab_level_qos_parameters->allocationandretentionpriority->prioritylevel;
1878                         }else{
1879                                 eRABs_acked_for_admit_for_ue->ARP = 0;
1880                         }
1881                         if(node_2_2->sgnbpdcppresent && node_2_2->sgnbpdcppresent->dl_forwarding_gtptunnelendpoint){
1882                                 eRABs_acked_for_admit_for_ue->gTP_TEID_dl = node_2_2->sgnbpdcppresent->dl_forwarding_gtptunnelendpoint->gtp_teid;
1883                                 eRABs_acked_for_admit_for_ue->gTP_TEID_dl_exists = 1;
1884                         }else{
1885                                 eRABs_acked_for_admit_for_ue->gTP_TEID_dl_exists = 0;
1886                         }
1887                         if(node_2_2->en_dc_resourceconfiguration){
1888                                 eRABs_acked_for_admit_for_ue->mCGresources = node_2_2->en_dc_resourceconfiguration->mcgresources;
1889                                 eRABs_acked_for_admit_for_ue->mCGresources_exists = 1;
1890                         }else{
1891                                 eRABs_acked_for_admit_for_ue->mCGresources_exists = 0;
1892                         }
1893                         if(node_2_2->sgnbpdcppresent && node_2_2->sgnbpdcppresent->dl_forwarding_gtptunnelendpoint){
1894                                 eRABs_acked_for_admit_for_ue->transportLayerAddress_dl = node_2_2->sgnbpdcppresent->dl_forwarding_gtptunnelendpoint->transportlayeraddress;
1895                                 eRABs_acked_for_admit_for_ue->transportLayerAddress_dl_exists = 1;
1896                         }else{
1897                                 eRABs_acked_for_admit_for_ue->transportLayerAddress_dl_exists = 0;
1898                         }
1899                         if(node_2_2->en_dc_resourceconfiguration){
1900                                 eRABs_acked_for_admit_for_ue->pDCPatSgNB = node_2_2->en_dc_resourceconfiguration->pdcpatsgnb;
1901                                 eRABs_acked_for_admit_for_ue->pDCPatSgNB_exists = 1;
1902                         }else{
1903                                 eRABs_acked_for_admit_for_ue->pDCPatSgNB_exists = 0;
1904                         }
1905                         if(node_2_2->en_dc_resourceconfiguration){
1906                                 eRABs_acked_for_admit_for_ue->sCGresources = node_2_2->en_dc_resourceconfiguration->scgresources;
1907                                 eRABs_acked_for_admit_for_ue->sCGresources_exists = 1;
1908                         }else{
1909                                 eRABs_acked_for_admit_for_ue->sCGresources_exists = 0;
1910                         }
1911                         eRABs_acked_for_admit_for_ue->e_RAB_ID = node_2_2->e_rab_id;
1912                         if(node_2_2->sgnbpdcppresent && node_2_2->sgnbpdcppresent->mcg_e_rab_level_qos_parameters){
1913                                 eRABs_acked_for_admit_for_ue->qCI = node_2_2->sgnbpdcppresent->mcg_e_rab_level_qos_parameters->qci;
1914                         }else{
1915                                 eRABs_acked_for_admit_for_ue->qCI = 0;
1916                         }
1917                         rts_fta_process_packet(&cur_packet);
1918                 }
1919         }
1920 // --------------------------------------------------
1921 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
1922
1923         SgNB_ack_for_ue_NRfreqs = (struct _SgNB_ack_for_ue_NRfreqs *)(cur_packet.record.packed.values);
1924         cur_packet.schema = 503;
1925         node_3_0 = node_2_0;
1926         ts_lo = hdr->header->timestamp & 0xffffffff;
1927         ts_hi = hdr->header->timestamp >> 32;
1928         SgNB_ack_for_ue_NRfreqs->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
1929         if(hdr->header->gnbid==NULL)
1930                 SgNB_ack_for_ue_NRfreqs->gnb_id = empty_string;
1931         else
1932                 SgNB_ack_for_ue_NRfreqs->gnb_id = hdr->header->gnbid->value;
1933
1934         SgNB_ack_for_ue_NRfreqs->id_MeNB_UE_X2AP_ID = node_3_0->id_menb_ue_x2ap_id;
1935         SgNB_ack_for_ue_NRfreqs->id_SgNB_UE_X2AP_ID = node_3_0->id_sgnb_ue_x2ap_id;
1936         if(node_3_0->id_menb_ue_x2ap_id_extension){
1937                 SgNB_ack_for_ue_NRfreqs->id_MeNB_UE_X2AP_ID_Extension = node_3_0->id_menb_ue_x2ap_id_extension->value;
1938         }else{
1939                 SgNB_ack_for_ue_NRfreqs->id_MeNB_UE_X2AP_ID_Extension = 0;
1940         }
1941         node_3_1 = node_3_0->id_sgnbtomenbcontainer;
1942         if(node_3_0->id_sgnbtomenbcontainer){
1943                 node_3_2 = node_3_1->criticalextensionschoice1;
1944                 if(node_3_1->criticalextensionschoice1){
1945                         node_3_3 = node_3_2->protocolies;
1946                         if(node_3_2->protocolies){
1947                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 0 && node_3_3->measconfigsn->measuredfrequenciessn[0]->measuredfrequency){
1948                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN0 = node_3_3->measconfigsn->measuredfrequenciessn[0]->measuredfrequency->value;
1949                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN0_exists = 1;
1950                                 }else{
1951                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN0_exists = 0;
1952                                 }
1953                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 1 && node_3_3->measconfigsn->measuredfrequenciessn[1]->measuredfrequency){
1954                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN1 = node_3_3->measconfigsn->measuredfrequenciessn[1]->measuredfrequency->value;
1955                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN1_exists = 1;
1956                                 }else{
1957                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN1_exists = 0;
1958                                 }
1959                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 2 && node_3_3->measconfigsn->measuredfrequenciessn[2]->measuredfrequency){
1960                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN2 = node_3_3->measconfigsn->measuredfrequenciessn[2]->measuredfrequency->value;
1961                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN2_exists = 1;
1962                                 }else{
1963                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN2_exists = 0;
1964                                 }
1965                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 3 && node_3_3->measconfigsn->measuredfrequenciessn[3]->measuredfrequency){
1966                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN3 = node_3_3->measconfigsn->measuredfrequenciessn[3]->measuredfrequency->value;
1967                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN3_exists = 1;
1968                                 }else{
1969                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN3_exists = 0;
1970                                 }
1971                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 4 && node_3_3->measconfigsn->measuredfrequenciessn[4]->measuredfrequency){
1972                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN4 = node_3_3->measconfigsn->measuredfrequenciessn[4]->measuredfrequency->value;
1973                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN4_exists = 1;
1974                                 }else{
1975                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN4_exists = 0;
1976                                 }
1977                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 5 && node_3_3->measconfigsn->measuredfrequenciessn[5]->measuredfrequency){
1978                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN5 = node_3_3->measconfigsn->measuredfrequenciessn[5]->measuredfrequency->value;
1979                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN5_exists = 1;
1980                                 }else{
1981                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN5_exists = 0;
1982                                 }
1983                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 6 && node_3_3->measconfigsn->measuredfrequenciessn[6]->measuredfrequency){
1984                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN6 = node_3_3->measconfigsn->measuredfrequenciessn[6]->measuredfrequency->value;
1985                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN6_exists = 1;
1986                                 }else{
1987                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN6_exists = 0;
1988                                 }
1989                                 if(node_3_3->measconfigsn && node_3_3->measconfigsn->measuredfrequenciessn && node_3_3->measconfigsn->n_measuredfrequenciessn > 7 && node_3_3->measconfigsn->measuredfrequenciessn[7]->measuredfrequency){
1990                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN7 = node_3_3->measconfigsn->measuredfrequenciessn[7]->measuredfrequency->value;
1991                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN7_exists = 1;
1992                                 }else{
1993                                         SgNB_ack_for_ue_NRfreqs->measuredFrequenciesSN7_exists = 0;
1994                                 }
1995                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 0){
1996                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs0 = node_3_3->candidateservingfreqlistnr->items[0];
1997                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs0_exists = 1;
1998                                 }else{
1999                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs0_exists = 0;
2000                                 }
2001                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 1){
2002                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs1 = node_3_3->candidateservingfreqlistnr->items[1];
2003                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs1_exists = 1;
2004                                 }else{
2005                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs1_exists = 0;
2006                                 }
2007                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 2){
2008                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs2 = node_3_3->candidateservingfreqlistnr->items[2];
2009                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs2_exists = 1;
2010                                 }else{
2011                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs2_exists = 0;
2012                                 }
2013                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 3){
2014                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs3 = node_3_3->candidateservingfreqlistnr->items[3];
2015                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs3_exists = 1;
2016                                 }else{
2017                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs3_exists = 0;
2018                                 }
2019                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 4){
2020                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs4 = node_3_3->candidateservingfreqlistnr->items[4];
2021                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs4_exists = 1;
2022                                 }else{
2023                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs4_exists = 0;
2024                                 }
2025                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 5){
2026                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs5 = node_3_3->candidateservingfreqlistnr->items[5];
2027                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs5_exists = 1;
2028                                 }else{
2029                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs5_exists = 0;
2030                                 }
2031                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 6){
2032                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs6 = node_3_3->candidateservingfreqlistnr->items[6];
2033                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs6_exists = 1;
2034                                 }else{
2035                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs6_exists = 0;
2036                                 }
2037                                 if(node_3_3->candidateservingfreqlistnr && node_3_3->candidateservingfreqlistnr->n_items > 7){
2038                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs7 = node_3_3->candidateservingfreqlistnr->items[7];
2039                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs7_exists = 1;
2040                                 }else{
2041                                         SgNB_ack_for_ue_NRfreqs->candidate_serving_cell_freqs7_exists = 0;
2042                                 }
2043                                 rts_fta_process_packet(&cur_packet);
2044                         }
2045                 }
2046         }
2047 // --------------------------------------------------
2048 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
2049
2050         SgNB_ack_for_add_mod_for_ue = (struct _SgNB_ack_for_add_mod_for_ue *)(cur_packet.record.packed.values);
2051         cur_packet.schema = 504;
2052         node_4_0 = node_3_0;
2053         ts_lo = hdr->header->timestamp & 0xffffffff;
2054         ts_hi = hdr->header->timestamp >> 32;
2055         SgNB_ack_for_add_mod_for_ue->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2056         if(hdr->header->gnbid==NULL)
2057                 SgNB_ack_for_add_mod_for_ue->gnb_id = empty_string;
2058         else
2059                 SgNB_ack_for_add_mod_for_ue->gnb_id = hdr->header->gnbid->value;
2060
2061         SgNB_ack_for_add_mod_for_ue->id_MeNB_UE_X2AP_ID = node_4_0->id_menb_ue_x2ap_id;
2062         SgNB_ack_for_add_mod_for_ue->id_SgNB_UE_X2AP_ID = node_4_0->id_sgnb_ue_x2ap_id;
2063         if(node_4_0->id_menb_ue_x2ap_id_extension){
2064                 SgNB_ack_for_add_mod_for_ue->id_MeNB_UE_X2AP_ID_Extension = node_4_0->id_menb_ue_x2ap_id_extension->value;
2065         }else{
2066                 SgNB_ack_for_add_mod_for_ue->id_MeNB_UE_X2AP_ID_Extension = 0;
2067         }
2068         node_4_1 = node_4_0->id_sgnbtomenbcontainer;
2069         if(node_4_0->id_sgnbtomenbcontainer){
2070                 node_4_2 = node_4_1->criticalextensionschoice1;
2071                 if(node_4_1->criticalextensionschoice1){
2072                         node_4_3 = node_4_2->protocolies;
2073                         if(node_4_2->protocolies){
2074                                 node_4_4 = node_4_3->scg_rb_config;
2075                                 if(node_4_3->scg_rb_config){
2076                                         if(node_4_4->drb_toreleaselist && node_4_4->drb_toreleaselist->n_items > 0){
2077                                                 SgNB_ack_for_add_mod_for_ue->toRelease0 = node_4_4->drb_toreleaselist->items[0];
2078                                                 SgNB_ack_for_add_mod_for_ue->toRelease0_exists = 1;
2079                                         }else{
2080                                                 SgNB_ack_for_add_mod_for_ue->toRelease0_exists = 0;
2081                                         }
2082                                         if(node_4_4->drb_toreleaselist && node_4_4->drb_toreleaselist->n_items > 1){
2083                                                 SgNB_ack_for_add_mod_for_ue->toRelease1 = node_4_4->drb_toreleaselist->items[1];
2084                                                 SgNB_ack_for_add_mod_for_ue->toRelease1_exists = 1;
2085                                         }else{
2086                                                 SgNB_ack_for_add_mod_for_ue->toRelease1_exists = 0;
2087                                         }
2088                                         if(node_4_4->drb_toreleaselist && node_4_4->drb_toreleaselist->n_items > 2){
2089                                                 SgNB_ack_for_add_mod_for_ue->toRelease2 = node_4_4->drb_toreleaselist->items[2];
2090                                                 SgNB_ack_for_add_mod_for_ue->toRelease2_exists = 1;
2091                                         }else{
2092                                                 SgNB_ack_for_add_mod_for_ue->toRelease2_exists = 0;
2093                                         }
2094                                         if(node_4_4->drb_toreleaselist && node_4_4->drb_toreleaselist->n_items > 3){
2095                                                 SgNB_ack_for_add_mod_for_ue->toRelease3 = node_4_4->drb_toreleaselist->items[3];
2096                                                 SgNB_ack_for_add_mod_for_ue->toRelease3_exists = 1;
2097                                         }else{
2098                                                 SgNB_ack_for_add_mod_for_ue->toRelease3_exists = 0;
2099                                         }
2100                                         node_4_5 = node_4_4->drb_toaddmodlist;
2101                                         if(node_4_4->drb_toaddmodlist){
2102                                                 for(i_4_6=0;i_4_6<node_4_5->n_items; i_4_6++){
2103                                                         node_4_6 = node_4_5->items[i_4_6];
2104                                                         if(node_4_6->recoverpdcp){
2105                                                                 SgNB_ack_for_add_mod_for_ue->recoverPDCP = node_4_6->recoverpdcp->value;
2106                                                                 SgNB_ack_for_add_mod_for_ue->recoverPDCP_exists = 1;
2107                                                         }else{
2108                                                                 SgNB_ack_for_add_mod_for_ue->recoverPDCP_exists = 0;
2109                                                         }
2110                                                         if(node_4_6->reestablishpdcp){
2111                                                                 SgNB_ack_for_add_mod_for_ue->reestablishPDCP = node_4_6->reestablishpdcp->value;
2112                                                                 SgNB_ack_for_add_mod_for_ue->reestablishPDCP_exists = 1;
2113                                                         }else{
2114                                                                 SgNB_ack_for_add_mod_for_ue->reestablishPDCP_exists = 0;
2115                                                         }
2116                                                         SgNB_ack_for_add_mod_for_ue->drb_Identity = node_4_6->drb_identity;
2117                                                         SgNB_ack_for_add_mod_for_ue->eps_BearerIdentity = node_4_6->eps_beareridentity;
2118                                                         rts_fta_process_packet(&cur_packet);
2119                                                 }
2120                                         }
2121                                 }
2122                         }
2123                 }
2124         }
2125 // --------------------------------------------------
2126 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
2127
2128         SgNB_ack_for_ue_measurements = (struct _SgNB_ack_for_ue_measurements *)(cur_packet.record.packed.values);
2129         cur_packet.schema = 505;
2130         node_5_0 = node_4_0;
2131         ts_lo = hdr->header->timestamp & 0xffffffff;
2132         ts_hi = hdr->header->timestamp >> 32;
2133         SgNB_ack_for_ue_measurements->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2134         if(hdr->header->gnbid==NULL)
2135                 SgNB_ack_for_ue_measurements->gnb_id = empty_string;
2136         else
2137                 SgNB_ack_for_ue_measurements->gnb_id = hdr->header->gnbid->value;
2138
2139         SgNB_ack_for_ue_measurements->id_MeNB_UE_X2AP_ID = node_5_0->id_menb_ue_x2ap_id;
2140         SgNB_ack_for_ue_measurements->id_SgNB_UE_X2AP_ID = node_5_0->id_sgnb_ue_x2ap_id;
2141         if(node_5_0->id_menb_ue_x2ap_id_extension){
2142                 SgNB_ack_for_ue_measurements->id_MeNB_UE_X2AP_ID_Extension = node_5_0->id_menb_ue_x2ap_id_extension->value;
2143         }else{
2144                 SgNB_ack_for_ue_measurements->id_MeNB_UE_X2AP_ID_Extension = 0;
2145         }
2146         node_5_1 = node_5_0->id_sgnbtomenbcontainer;
2147         if(node_5_0->id_sgnbtomenbcontainer){
2148                 node_5_2 = node_5_1->criticalextensionschoice1;
2149                 if(node_5_1->criticalextensionschoice1){
2150                         node_5_3 = node_5_2->protocolies;
2151                         if(node_5_2->protocolies){
2152                                 node_5_4 = node_5_3->candidatecellinfolistsn;
2153                                 if(node_5_3->candidatecellinfolistsn){
2154                                         for(i_5_5=0;i_5_5<node_5_4->n_items; i_5_5++){
2155                                                 node_5_5 = node_5_4->items[i_5_5];
2156                                                 if(node_5_5->ssbfrequency){
2157                                                         SgNB_ack_for_ue_measurements->ssbFrequency = node_5_5->ssbfrequency->value;
2158                                                         SgNB_ack_for_ue_measurements->ssbFrequency_exists = 1;
2159                                                 }else{
2160                                                         SgNB_ack_for_ue_measurements->ssbFrequency_exists = 0;
2161                                                 }
2162                                                 if(node_5_5->reffreqcsi_rs){
2163                                                         SgNB_ack_for_ue_measurements->refFreqCSI_RS = node_5_5->reffreqcsi_rs->value;
2164                                                         SgNB_ack_for_ue_measurements->refFreqCSI_RS_exists = 1;
2165                                                 }else{
2166                                                         SgNB_ack_for_ue_measurements->refFreqCSI_RS_exists = 0;
2167                                                 }
2168                                                 node_5_6 = node_5_5->measresultservingcell;
2169                                                 if(node_5_5->measresultservingcell){
2170                                                         if(node_5_6->physcellid){
2171                                                                 SgNB_ack_for_ue_measurements->physCellId = node_5_6->physcellid->value;
2172                                                                 SgNB_ack_for_ue_measurements->physCellId_exists = 1;
2173                                                         }else{
2174                                                                 SgNB_ack_for_ue_measurements->physCellId_exists = 0;
2175                                                         }
2176                                                         node_5_7 = node_5_6->measresult;
2177                                                         if(node_5_6->measresult){
2178                                                                 node_5_8 = node_5_7->cellresults;
2179                                                                 if(node_5_7->cellresults){
2180                                                                         node_5_9 = node_5_8->resultscsi_rs_cell;
2181                                                                         if(node_5_8->resultscsi_rs_cell){
2182                                                                                 if(node_5_9->rsrq){
2183                                                                                         SgNB_ack_for_ue_measurements->rsrq = node_5_9->rsrq->value;
2184                                                                                         SgNB_ack_for_ue_measurements->rsrq_exists = 1;
2185                                                                                 }else{
2186                                                                                         SgNB_ack_for_ue_measurements->rsrq_exists = 0;
2187                                                                                 }
2188                                                                                 if(node_5_9->rsrp){
2189                                                                                         SgNB_ack_for_ue_measurements->rsrp = node_5_9->rsrp->value;
2190                                                                                         SgNB_ack_for_ue_measurements->rsrp_exists = 1;
2191                                                                                 }else{
2192                                                                                         SgNB_ack_for_ue_measurements->rsrp_exists = 0;
2193                                                                                 }
2194                                                                                 if(node_5_9->sinr){
2195                                                                                         SgNB_ack_for_ue_measurements->sinr = node_5_9->sinr->value;
2196                                                                                         SgNB_ack_for_ue_measurements->sinr_exists = 1;
2197                                                                                 }else{
2198                                                                                         SgNB_ack_for_ue_measurements->sinr_exists = 0;
2199                                                                                 }
2200                                                                                 rts_fta_process_packet(&cur_packet);
2201                                                                         }
2202                                                                 }
2203                                                         }
2204                                                 }
2205                                         }
2206                                 }
2207                         }
2208                 }
2209         }
2210 // --------------------------------------------------
2211 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
2212
2213         SgNB_ack_for_ue_beam_csi = (struct _SgNB_ack_for_ue_beam_csi *)(cur_packet.record.packed.values);
2214         cur_packet.schema = 506;
2215         node_6_0 = node_5_0;
2216         ts_lo = hdr->header->timestamp & 0xffffffff;
2217         ts_hi = hdr->header->timestamp >> 32;
2218         SgNB_ack_for_ue_beam_csi->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2219         if(hdr->header->gnbid==NULL)
2220                 SgNB_ack_for_ue_beam_csi->gnb_id = empty_string;
2221         else
2222                 SgNB_ack_for_ue_beam_csi->gnb_id = hdr->header->gnbid->value;
2223
2224         SgNB_ack_for_ue_beam_csi->id_MeNB_UE_X2AP_ID = node_6_0->id_menb_ue_x2ap_id;
2225         SgNB_ack_for_ue_beam_csi->id_SgNB_UE_X2AP_ID = node_6_0->id_sgnb_ue_x2ap_id;
2226         if(node_6_0->id_menb_ue_x2ap_id_extension){
2227                 SgNB_ack_for_ue_beam_csi->id_MeNB_UE_X2AP_ID_Extension = node_6_0->id_menb_ue_x2ap_id_extension->value;
2228         }else{
2229                 SgNB_ack_for_ue_beam_csi->id_MeNB_UE_X2AP_ID_Extension = 0;
2230         }
2231         node_6_1 = node_6_0->id_sgnbtomenbcontainer;
2232         if(node_6_0->id_sgnbtomenbcontainer){
2233                 node_6_2 = node_6_1->criticalextensionschoice1;
2234                 if(node_6_1->criticalextensionschoice1){
2235                         node_6_3 = node_6_2->protocolies;
2236                         if(node_6_2->protocolies){
2237                                 node_6_4 = node_6_3->candidatecellinfolistsn;
2238                                 if(node_6_3->candidatecellinfolistsn){
2239                                         for(i_6_5=0;i_6_5<node_6_4->n_items; i_6_5++){
2240                                                 node_6_5 = node_6_4->items[i_6_5];
2241                                                 if(node_6_5->ssbfrequency){
2242                                                         SgNB_ack_for_ue_beam_csi->ssbFrequency = node_6_5->ssbfrequency->value;
2243                                                         SgNB_ack_for_ue_beam_csi->ssbFrequency_exists = 1;
2244                                                 }else{
2245                                                         SgNB_ack_for_ue_beam_csi->ssbFrequency_exists = 0;
2246                                                 }
2247                                                 if(node_6_5->reffreqcsi_rs){
2248                                                         SgNB_ack_for_ue_beam_csi->refFreqCSI_RS = node_6_5->reffreqcsi_rs->value;
2249                                                         SgNB_ack_for_ue_beam_csi->refFreqCSI_RS_exists = 1;
2250                                                 }else{
2251                                                         SgNB_ack_for_ue_beam_csi->refFreqCSI_RS_exists = 0;
2252                                                 }
2253                                                 node_6_6 = node_6_5->measresultservingcell;
2254                                                 if(node_6_5->measresultservingcell){
2255                                                         if(node_6_6->physcellid){
2256                                                                 SgNB_ack_for_ue_beam_csi->physCellId = node_6_6->physcellid->value;
2257                                                                 SgNB_ack_for_ue_beam_csi->physCellId_exists = 1;
2258                                                         }else{
2259                                                                 SgNB_ack_for_ue_beam_csi->physCellId_exists = 0;
2260                                                         }
2261                                                         node_6_7 = node_6_6->measresult;
2262                                                         if(node_6_6->measresult){
2263                                                                 node_6_8 = node_6_7->rsindexresults;
2264                                                                 if(node_6_7->rsindexresults){
2265                                                                         node_6_9 = node_6_8->resultscsi_rs_indexes;
2266                                                                         if(node_6_8->resultscsi_rs_indexes){
2267                                                                                 for(i_6_10=0;i_6_10<node_6_9->n_items; i_6_10++){
2268                                                                                         node_6_10 = node_6_9->items[i_6_10];
2269                                                                                         SgNB_ack_for_ue_beam_csi->csi_rs_index = node_6_10->csi_rs_index;
2270                                                                                         node_6_11 = node_6_10->csi_rs_results;
2271                                                                                         if(node_6_10->csi_rs_results){
2272                                                                                                 if(node_6_11->rsrq){
2273                                                                                                         SgNB_ack_for_ue_beam_csi->rsrq = node_6_11->rsrq->value;
2274                                                                                                         SgNB_ack_for_ue_beam_csi->rsrq_exists = 1;
2275                                                                                                 }else{
2276                                                                                                         SgNB_ack_for_ue_beam_csi->rsrq_exists = 0;
2277                                                                                                 }
2278                                                                                                 if(node_6_11->rsrp){
2279                                                                                                         SgNB_ack_for_ue_beam_csi->rsrp = node_6_11->rsrp->value;
2280                                                                                                         SgNB_ack_for_ue_beam_csi->rsrp_exists = 1;
2281                                                                                                 }else{
2282                                                                                                         SgNB_ack_for_ue_beam_csi->rsrp_exists = 0;
2283                                                                                                 }
2284                                                                                                 if(node_6_11->sinr){
2285                                                                                                         SgNB_ack_for_ue_beam_csi->sinr = node_6_11->sinr->value;
2286                                                                                                         SgNB_ack_for_ue_beam_csi->sinr_exists = 1;
2287                                                                                                 }else{
2288                                                                                                         SgNB_ack_for_ue_beam_csi->sinr_exists = 0;
2289                                                                                                 }
2290                                                                                                 rts_fta_process_packet(&cur_packet);
2291                                                                                         }
2292                                                                                 }
2293                                                                         }
2294                                                                 }
2295                                                         }
2296                                                 }
2297                                         }
2298                                 }
2299                         }
2300                 }
2301         }
2302 // --------------------------------------------------
2303 // ---  Specialized processing for .proto sgnb_addition_request_acknowledge.json, path sgnb_addition_ack.json
2304
2305         SgNB_ack_for_ue_beam_ssb = (struct _SgNB_ack_for_ue_beam_ssb *)(cur_packet.record.packed.values);
2306         cur_packet.schema = 507;
2307         node_7_0 = node_6_0;
2308         ts_lo = hdr->header->timestamp & 0xffffffff;
2309         ts_hi = hdr->header->timestamp >> 32;
2310         SgNB_ack_for_ue_beam_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2311         if(hdr->header->gnbid==NULL)
2312                 SgNB_ack_for_ue_beam_ssb->gnb_id = empty_string;
2313         else
2314                 SgNB_ack_for_ue_beam_ssb->gnb_id = hdr->header->gnbid->value;
2315
2316         SgNB_ack_for_ue_beam_ssb->id_MeNB_UE_X2AP_ID = node_7_0->id_menb_ue_x2ap_id;
2317         SgNB_ack_for_ue_beam_ssb->id_SgNB_UE_X2AP_ID = node_7_0->id_sgnb_ue_x2ap_id;
2318         if(node_7_0->id_menb_ue_x2ap_id_extension){
2319                 SgNB_ack_for_ue_beam_ssb->id_MeNB_UE_X2AP_ID_Extension = node_7_0->id_menb_ue_x2ap_id_extension->value;
2320         }else{
2321                 SgNB_ack_for_ue_beam_ssb->id_MeNB_UE_X2AP_ID_Extension = 0;
2322         }
2323         node_7_1 = node_7_0->id_sgnbtomenbcontainer;
2324         if(node_7_0->id_sgnbtomenbcontainer){
2325                 node_7_2 = node_7_1->criticalextensionschoice1;
2326                 if(node_7_1->criticalextensionschoice1){
2327                         node_7_3 = node_7_2->protocolies;
2328                         if(node_7_2->protocolies){
2329                                 node_7_4 = node_7_3->candidatecellinfolistsn;
2330                                 if(node_7_3->candidatecellinfolistsn){
2331                                         for(i_7_5=0;i_7_5<node_7_4->n_items; i_7_5++){
2332                                                 node_7_5 = node_7_4->items[i_7_5];
2333                                                 if(node_7_5->ssbfrequency){
2334                                                         SgNB_ack_for_ue_beam_ssb->ssbFrequency = node_7_5->ssbfrequency->value;
2335                                                         SgNB_ack_for_ue_beam_ssb->ssbFrequency_exists = 1;
2336                                                 }else{
2337                                                         SgNB_ack_for_ue_beam_ssb->ssbFrequency_exists = 0;
2338                                                 }
2339                                                 if(node_7_5->reffreqcsi_rs){
2340                                                         SgNB_ack_for_ue_beam_ssb->refFreqCSI_RS = node_7_5->reffreqcsi_rs->value;
2341                                                         SgNB_ack_for_ue_beam_ssb->refFreqCSI_RS_exists = 1;
2342                                                 }else{
2343                                                         SgNB_ack_for_ue_beam_ssb->refFreqCSI_RS_exists = 0;
2344                                                 }
2345                                                 node_7_6 = node_7_5->measresultservingcell;
2346                                                 if(node_7_5->measresultservingcell){
2347                                                         if(node_7_6->physcellid){
2348                                                                 SgNB_ack_for_ue_beam_ssb->physCellId = node_7_6->physcellid->value;
2349                                                                 SgNB_ack_for_ue_beam_ssb->physCellId_exists = 1;
2350                                                         }else{
2351                                                                 SgNB_ack_for_ue_beam_ssb->physCellId_exists = 0;
2352                                                         }
2353                                                         node_7_7 = node_7_6->measresult;
2354                                                         if(node_7_6->measresult){
2355                                                                 node_7_8 = node_7_7->rsindexresults;
2356                                                                 if(node_7_7->rsindexresults){
2357                                                                         node_7_9 = node_7_8->resultsssb_indexes;
2358                                                                         if(node_7_8->resultsssb_indexes){
2359                                                                                 for(i_7_10=0;i_7_10<node_7_9->n_items; i_7_10++){
2360                                                                                         node_7_10 = node_7_9->items[i_7_10];
2361                                                                                         SgNB_ack_for_ue_beam_ssb->ssb_Index = node_7_10->ssb_index;
2362                                                                                         node_7_11 = node_7_10->ssb_results;
2363                                                                                         if(node_7_10->ssb_results){
2364                                                                                                 if(node_7_11->rsrq){
2365                                                                                                         SgNB_ack_for_ue_beam_ssb->rsrq = node_7_11->rsrq->value;
2366                                                                                                         SgNB_ack_for_ue_beam_ssb->rsrq_exists = 1;
2367                                                                                                 }else{
2368                                                                                                         SgNB_ack_for_ue_beam_ssb->rsrq_exists = 0;
2369                                                                                                 }
2370                                                                                                 if(node_7_11->rsrp){
2371                                                                                                         SgNB_ack_for_ue_beam_ssb->rsrp = node_7_11->rsrp->value;
2372                                                                                                         SgNB_ack_for_ue_beam_ssb->rsrp_exists = 1;
2373                                                                                                 }else{
2374                                                                                                         SgNB_ack_for_ue_beam_ssb->rsrp_exists = 0;
2375                                                                                                 }
2376                                                                                                 if(node_7_11->sinr){
2377                                                                                                         SgNB_ack_for_ue_beam_ssb->sinr = node_7_11->sinr->value;
2378                                                                                                         SgNB_ack_for_ue_beam_ssb->sinr_exists = 1;
2379                                                                                                 }else{
2380                                                                                                         SgNB_ack_for_ue_beam_ssb->sinr_exists = 0;
2381                                                                                                 }
2382                                                                                                 rts_fta_process_packet(&cur_packet);
2383                                                                                         }
2384                                                                                 }
2385                                                                         }
2386                                                                 }
2387                                                         }
2388                                                 }
2389                                         }
2390                                 }
2391                         }
2392                 }
2393         }
2394         streaming_protobufs__sg_nbaddition_request_acknowledge__free_unpacked(node_0_0,NULL);
2395         return 0;
2396 }
2397
2398 gs_uint32_t process_buffer_SGNB_ADDITION_REQ(gs_uint8_t * buffer, gs_uint32_t buflen){
2399         char *empty_string = "";
2400 unsigned long long int ts_lo, ts_hi;
2401         StreamingProtobufs__X2APStreaming *hdr = NULL;
2402 // ------------------------------------------
2403 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2404         struct _sgnb_addreq_gtp_teid *sgnb_addreq_gtp_teid = NULL;
2405         StreamingProtobufs__SgNBAdditionRequest *node_0_0 = NULL;
2406         StreamingProtobufs__SgNBAdditionRequestIEs *node_0_1 = NULL;
2407         StreamingProtobufs__ERABsToBeAddedSgNBAddReqList *node_0_2 = NULL;
2408         StreamingProtobufs__ERABsToBeAddedSgNBAddReqItemIEs *node_0_3 = NULL;
2409         gs_uint32_t i_0_3;
2410         StreamingProtobufs__ERABsToBeAddedSgNBAddReqItem *node_0_4 = NULL;
2411         StreamingProtobufs__ERABsToBeAddedSgNBAddReqSgNBPDCPpresent *node_0_5 = NULL;
2412         StreamingProtobufs__GTPtunnelEndpoint *node_0_6 = NULL;
2413 // ------------------------------------------
2414 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2415         struct _sgnb_addreq_for_ue *sgnb_addreq_for_ue = NULL;
2416         StreamingProtobufs__SgNBAdditionRequest *node_1_0 = NULL;
2417         StreamingProtobufs__SgNBAdditionRequestIEs *node_1_1 = NULL;
2418         StreamingProtobufs__ECGI *node_1_2 = NULL;
2419 // ------------------------------------------
2420 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2421         struct _sgnb_addreq_for_ue_bearers *sgnb_addreq_for_ue_bearers = NULL;
2422         StreamingProtobufs__SgNBAdditionRequest *node_2_0 = NULL;
2423         StreamingProtobufs__SgNBAdditionRequestIEs *node_2_1 = NULL;
2424         StreamingProtobufs__ERABsToBeAddedSgNBAddReqList *node_2_2 = NULL;
2425         StreamingProtobufs__ERABsToBeAddedSgNBAddReqItemIEs *node_2_3 = NULL;
2426         gs_uint32_t i_2_3;
2427         StreamingProtobufs__ERABsToBeAddedSgNBAddReqItem *node_2_4 = NULL;
2428 // ------------------------------------------
2429 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2430         struct _sgnb_addreq_for_ue_sn_serv_ssb *sgnb_addreq_for_ue_sn_serv_ssb = NULL;
2431         StreamingProtobufs__SgNBAdditionRequest *node_3_0 = NULL;
2432         StreamingProtobufs__SgNBAdditionRequestIEs *node_3_1 = NULL;
2433         StreamingProtobufs__CGConfigInfo *node_3_2 = NULL;
2434         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_3_3 = NULL;
2435         StreamingProtobufs__CGConfigInfoIEs *node_3_4 = NULL;
2436         StreamingProtobufs__MeasResultList2NR *node_3_5 = NULL;
2437         StreamingProtobufs__MeasResult2NR *node_3_6 = NULL;
2438         gs_uint32_t i_3_6;
2439         StreamingProtobufs__MeasResultNR *node_3_7 = NULL;
2440         StreamingProtobufs__MeasResult *node_3_8 = NULL;
2441         StreamingProtobufs__CellResults *node_3_9 = NULL;
2442         StreamingProtobufs__MeasQuantityResults *node_3_10 = NULL;
2443 // ------------------------------------------
2444 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2445         struct _sgnb_addreq_for_ue_sn_serv_csi_rs *sgnb_addreq_for_ue_sn_serv_csi_rs = NULL;
2446         StreamingProtobufs__SgNBAdditionRequest *node_4_0 = NULL;
2447         StreamingProtobufs__SgNBAdditionRequestIEs *node_4_1 = NULL;
2448         StreamingProtobufs__CGConfigInfo *node_4_2 = NULL;
2449         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_4_3 = NULL;
2450         StreamingProtobufs__CGConfigInfoIEs *node_4_4 = NULL;
2451         StreamingProtobufs__MeasResultList2NR *node_4_5 = NULL;
2452         StreamingProtobufs__MeasResult2NR *node_4_6 = NULL;
2453         gs_uint32_t i_4_6;
2454         StreamingProtobufs__MeasResultNR *node_4_7 = NULL;
2455         StreamingProtobufs__MeasResult *node_4_8 = NULL;
2456         StreamingProtobufs__CellResults *node_4_9 = NULL;
2457         StreamingProtobufs__MeasQuantityResults *node_4_10 = NULL;
2458 // ------------------------------------------
2459 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2460         struct _sgnb_addreq_for_ue_mn_serv_ssb *sgnb_addreq_for_ue_mn_serv_ssb = NULL;
2461         StreamingProtobufs__SgNBAdditionRequest *node_5_0 = NULL;
2462         StreamingProtobufs__SgNBAdditionRequestIEs *node_5_1 = NULL;
2463         StreamingProtobufs__CGConfigInfo *node_5_2 = NULL;
2464         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_5_3 = NULL;
2465         StreamingProtobufs__CGConfigInfoIEs *node_5_4 = NULL;
2466         StreamingProtobufs__MeasResultList2NR *node_5_5 = NULL;
2467         StreamingProtobufs__MeasResult2NR *node_5_6 = NULL;
2468         gs_uint32_t i_5_6;
2469         StreamingProtobufs__MeasResultNR *node_5_7 = NULL;
2470         StreamingProtobufs__MeasResult *node_5_8 = NULL;
2471         StreamingProtobufs__CellResults *node_5_9 = NULL;
2472         StreamingProtobufs__MeasQuantityResults *node_5_10 = NULL;
2473 // ------------------------------------------
2474 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2475         struct _sgnb_addreq_for_ue_mn_serv_csi_rs *sgnb_addreq_for_ue_mn_serv_csi_rs = NULL;
2476         StreamingProtobufs__SgNBAdditionRequest *node_6_0 = NULL;
2477         StreamingProtobufs__SgNBAdditionRequestIEs *node_6_1 = NULL;
2478         StreamingProtobufs__CGConfigInfo *node_6_2 = NULL;
2479         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_6_3 = NULL;
2480         StreamingProtobufs__CGConfigInfoIEs *node_6_4 = NULL;
2481         StreamingProtobufs__MeasResultList2NR *node_6_5 = NULL;
2482         StreamingProtobufs__MeasResult2NR *node_6_6 = NULL;
2483         gs_uint32_t i_6_6;
2484         StreamingProtobufs__MeasResultNR *node_6_7 = NULL;
2485         StreamingProtobufs__MeasResult *node_6_8 = NULL;
2486         StreamingProtobufs__CellResults *node_6_9 = NULL;
2487         StreamingProtobufs__MeasQuantityResults *node_6_10 = NULL;
2488 // ------------------------------------------
2489 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2490         struct _sgnb_addreq_for_ue_sn_neigh_ssb *sgnb_addreq_for_ue_sn_neigh_ssb = NULL;
2491         StreamingProtobufs__SgNBAdditionRequest *node_7_0 = NULL;
2492         StreamingProtobufs__SgNBAdditionRequestIEs *node_7_1 = NULL;
2493         StreamingProtobufs__CGConfigInfo *node_7_2 = NULL;
2494         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_7_3 = NULL;
2495         StreamingProtobufs__CGConfigInfoIEs *node_7_4 = NULL;
2496         StreamingProtobufs__MeasResultList2NR *node_7_5 = NULL;
2497         StreamingProtobufs__MeasResult2NR *node_7_6 = NULL;
2498         gs_uint32_t i_7_6;
2499         StreamingProtobufs__MeasResultListNR *node_7_7 = NULL;
2500         StreamingProtobufs__MeasResultNR *node_7_8 = NULL;
2501         gs_uint32_t i_7_8;
2502         StreamingProtobufs__MeasResult *node_7_9 = NULL;
2503         StreamingProtobufs__CellResults *node_7_10 = NULL;
2504         StreamingProtobufs__MeasQuantityResults *node_7_11 = NULL;
2505 // ------------------------------------------
2506 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2507         struct _sgnb_addreq_for_ue_sn_neigh_csi_rs *sgnb_addreq_for_ue_sn_neigh_csi_rs = NULL;
2508         StreamingProtobufs__SgNBAdditionRequest *node_8_0 = NULL;
2509         StreamingProtobufs__SgNBAdditionRequestIEs *node_8_1 = NULL;
2510         StreamingProtobufs__CGConfigInfo *node_8_2 = NULL;
2511         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_8_3 = NULL;
2512         StreamingProtobufs__CGConfigInfoIEs *node_8_4 = NULL;
2513         StreamingProtobufs__MeasResultList2NR *node_8_5 = NULL;
2514         StreamingProtobufs__MeasResult2NR *node_8_6 = NULL;
2515         gs_uint32_t i_8_6;
2516         StreamingProtobufs__MeasResultListNR *node_8_7 = NULL;
2517         StreamingProtobufs__MeasResultNR *node_8_8 = NULL;
2518         gs_uint32_t i_8_8;
2519         StreamingProtobufs__MeasResult *node_8_9 = NULL;
2520         StreamingProtobufs__CellResults *node_8_10 = NULL;
2521         StreamingProtobufs__MeasQuantityResults *node_8_11 = NULL;
2522 // ------------------------------------------
2523 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2524         struct _sgnb_addreq_for_ue_mn_neigh_ssb *sgnb_addreq_for_ue_mn_neigh_ssb = NULL;
2525         StreamingProtobufs__SgNBAdditionRequest *node_9_0 = NULL;
2526         StreamingProtobufs__SgNBAdditionRequestIEs *node_9_1 = NULL;
2527         StreamingProtobufs__CGConfigInfo *node_9_2 = NULL;
2528         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_9_3 = NULL;
2529         StreamingProtobufs__CGConfigInfoIEs *node_9_4 = NULL;
2530         StreamingProtobufs__MeasResultList2NR *node_9_5 = NULL;
2531         StreamingProtobufs__MeasResult2NR *node_9_6 = NULL;
2532         gs_uint32_t i_9_6;
2533         StreamingProtobufs__MeasResultListNR *node_9_7 = NULL;
2534         StreamingProtobufs__MeasResultNR *node_9_8 = NULL;
2535         gs_uint32_t i_9_8;
2536         StreamingProtobufs__MeasResult *node_9_9 = NULL;
2537         StreamingProtobufs__CellResults *node_9_10 = NULL;
2538         StreamingProtobufs__MeasQuantityResults *node_9_11 = NULL;
2539 // ------------------------------------------
2540 // ---  Variables for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2541         struct _sgnb_addreq_for_ue_mn_neigh_csi_rs *sgnb_addreq_for_ue_mn_neigh_csi_rs = NULL;
2542         StreamingProtobufs__SgNBAdditionRequest *node_10_0 = NULL;
2543         StreamingProtobufs__SgNBAdditionRequestIEs *node_10_1 = NULL;
2544         StreamingProtobufs__CGConfigInfo *node_10_2 = NULL;
2545         StreamingProtobufs__CGConfigInfoCriticalExtensionsChoice1 *node_10_3 = NULL;
2546         StreamingProtobufs__CGConfigInfoIEs *node_10_4 = NULL;
2547         StreamingProtobufs__MeasResultList2NR *node_10_5 = NULL;
2548         StreamingProtobufs__MeasResult2NR *node_10_6 = NULL;
2549         gs_uint32_t i_10_6;
2550         StreamingProtobufs__MeasResultListNR *node_10_7 = NULL;
2551         StreamingProtobufs__MeasResultNR *node_10_8 = NULL;
2552         gs_uint32_t i_10_8;
2553         StreamingProtobufs__MeasResult *node_10_9 = NULL;
2554         StreamingProtobufs__CellResults *node_10_10 = NULL;
2555         StreamingProtobufs__MeasQuantityResults *node_10_11 = NULL;
2556
2557 // --------------------------------------------------
2558 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2559
2560         sgnb_addreq_gtp_teid = (struct _sgnb_addreq_gtp_teid *)(cur_packet.record.packed.values);
2561         cur_packet.schema = 10005;
2562
2563         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
2564         if(hdr==NULL) return -1;
2565
2566         node_0_0 = hdr->sgnbadditionrequest;
2567         if(node_0_0==NULL) return -2;
2568         if(hdr->header==NULL) return -3;
2569
2570         ts_lo = hdr->header->timestamp & 0xffffffff;
2571         ts_hi = hdr->header->timestamp >> 32;
2572         sgnb_addreq_gtp_teid->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2573         if(hdr->header->gnbid==NULL)
2574                 sgnb_addreq_gtp_teid->gnb_id = empty_string;
2575         else
2576                 sgnb_addreq_gtp_teid->gnb_id = hdr->header->gnbid->value;
2577
2578         node_0_1 = node_0_0->protocolies;
2579         if(node_0_0->protocolies){
2580                 sgnb_addreq_gtp_teid->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
2581                 node_0_2 = node_0_1->id_e_rabs_tobeadded_sgnbaddreqlist;
2582                 if(node_0_1->id_e_rabs_tobeadded_sgnbaddreqlist){
2583                         for(i_0_3=0;i_0_3<node_0_2->n_items; i_0_3++){
2584                                 node_0_3 = node_0_2->items[i_0_3];
2585                                 node_0_4 = node_0_3->id_e_rabs_tobeadded_sgnbaddreq_item;
2586                                 if(node_0_3->id_e_rabs_tobeadded_sgnbaddreq_item){
2587                                         node_0_5 = node_0_4->sgnbpdcppresent;
2588                                         if(node_0_4->sgnbpdcppresent){
2589                                                 node_0_6 = node_0_5->s1_ul_gtptunnelendpoint;
2590                                                 if(node_0_5->s1_ul_gtptunnelendpoint){
2591                                                         sgnb_addreq_gtp_teid->gTP_TEID = node_0_6->gtp_teid;
2592                                                         sgnb_addreq_gtp_teid->transportLayerAddress = node_0_6->transportlayeraddress;
2593                                                         rts_fta_process_packet(&cur_packet);
2594                                                 }
2595                                         }
2596                                 }
2597                         }
2598                 }
2599         }
2600 // --------------------------------------------------
2601 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2602
2603         sgnb_addreq_for_ue = (struct _sgnb_addreq_for_ue *)(cur_packet.record.packed.values);
2604         cur_packet.schema = 401;
2605         node_1_0 = node_0_0;
2606         ts_lo = hdr->header->timestamp & 0xffffffff;
2607         ts_hi = hdr->header->timestamp >> 32;
2608         sgnb_addreq_for_ue->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2609         if(hdr->header->gnbid==NULL)
2610                 sgnb_addreq_for_ue->gnb_id = empty_string;
2611         else
2612                 sgnb_addreq_for_ue->gnb_id = hdr->header->gnbid->value;
2613
2614         node_1_1 = node_1_0->protocolies;
2615         if(node_1_0->protocolies){
2616                 sgnb_addreq_for_ue->id_MeNB_UE_X2AP_ID = node_1_1->id_menb_ue_x2ap_id;
2617                 if(node_1_1->id_sgnbueaggregatemaximumbitrate){
2618                         sgnb_addreq_for_ue->uEaggregateMaximumBitRateDownlink = node_1_1->id_sgnbueaggregatemaximumbitrate->ueaggregatemaximumbitratedownlink;
2619                         sgnb_addreq_for_ue->uEaggregateMaximumBitRateDownlink_exists = 1;
2620                 }else{
2621                         sgnb_addreq_for_ue->uEaggregateMaximumBitRateDownlink_exists = 0;
2622                 }
2623                 if(node_1_1->id_menb_ue_x2ap_id_extension){
2624                         sgnb_addreq_for_ue->id_MeNB_UE_X2AP_ID_Extension = node_1_1->id_menb_ue_x2ap_id_extension->value;
2625                 }else{
2626                         sgnb_addreq_for_ue->id_MeNB_UE_X2AP_ID_Extension = 0;
2627                 }
2628                 node_1_2 = node_1_1->id_menbcell_id;
2629                 if(node_1_1->id_menbcell_id){
2630                         sgnb_addreq_for_ue->eUTRANcellIdentifier = node_1_2->eutrancellidentifier;
2631                         sgnb_addreq_for_ue->pLMN_Identity = node_1_2->plmn_identity;
2632                         rts_fta_process_packet(&cur_packet);
2633                 }
2634         }
2635 // --------------------------------------------------
2636 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2637
2638         sgnb_addreq_for_ue_bearers = (struct _sgnb_addreq_for_ue_bearers *)(cur_packet.record.packed.values);
2639         cur_packet.schema = 402;
2640         node_2_0 = node_1_0;
2641         ts_lo = hdr->header->timestamp & 0xffffffff;
2642         ts_hi = hdr->header->timestamp >> 32;
2643         sgnb_addreq_for_ue_bearers->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2644         if(hdr->header->gnbid==NULL)
2645                 sgnb_addreq_for_ue_bearers->gnb_id = empty_string;
2646         else
2647                 sgnb_addreq_for_ue_bearers->gnb_id = hdr->header->gnbid->value;
2648
2649         node_2_1 = node_2_0->protocolies;
2650         if(node_2_0->protocolies){
2651                 sgnb_addreq_for_ue_bearers->id_MeNB_UE_X2AP_ID = node_2_1->id_menb_ue_x2ap_id;
2652                 node_2_2 = node_2_1->id_e_rabs_tobeadded_sgnbaddreqlist;
2653                 if(node_2_1->id_e_rabs_tobeadded_sgnbaddreqlist){
2654                         for(i_2_3=0;i_2_3<node_2_2->n_items; i_2_3++){
2655                                 node_2_3 = node_2_2->items[i_2_3];
2656                                 node_2_4 = node_2_3->id_e_rabs_tobeadded_sgnbaddreq_item;
2657                                 if(node_2_3->id_e_rabs_tobeadded_sgnbaddreq_item){
2658                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters){
2659                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_MaximumBitrateDL = node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters->e_rab_maximumbitratedl;
2660                                         }else{
2661                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_MaximumBitrateDL = 0;
2662                                         }
2663                                         if(node_2_4->en_dc_resourceconfiguration){
2664                                                 sgnb_addreq_for_ue_bearers->pDCPatSgNB = node_2_4->en_dc_resourceconfiguration->pdcpatsgnb;
2665                                         }else{
2666                                                 sgnb_addreq_for_ue_bearers->pDCPatSgNB = -1;
2667                                         }
2668                                         sgnb_addreq_for_ue_bearers->drb_ID = node_2_4->drb_id;
2669                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority){
2670                                                 sgnb_addreq_for_ue_bearers->priorityLevel = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority->prioritylevel;
2671                                         }else{
2672                                                 sgnb_addreq_for_ue_bearers->priorityLevel = 0;
2673                                         }
2674                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->menb_dl_gtp_teidatmcg){
2675                                                 sgnb_addreq_for_ue_bearers->gTP_TEID = node_2_4->sgnbpdcppresent->menb_dl_gtp_teidatmcg->gtp_teid;
2676                                         }else{
2677                                                 sgnb_addreq_for_ue_bearers->gTP_TEID.data = "";
2678                                                 sgnb_addreq_for_ue_bearers->gTP_TEID.len = 1;
2679                                         }
2680                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority->pre_emptioncapability){
2681                                                 sgnb_addreq_for_ue_bearers->pre_emptionCapability = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority->pre_emptioncapability->value;
2682                                         }else{
2683                                                 sgnb_addreq_for_ue_bearers->pre_emptionCapability = -1;
2684                                         }
2685                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters){
2686                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_GuaranteedBitrateUL = node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters->e_rab_guaranteedbitrateul;
2687                                         }else{
2688                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_GuaranteedBitrateUL = 0;
2689                                         }
2690                                         if(node_2_4->en_dc_resourceconfiguration){
2691                                                 sgnb_addreq_for_ue_bearers->mCGresources = node_2_4->en_dc_resourceconfiguration->mcgresources;
2692                                         }else{
2693                                                 sgnb_addreq_for_ue_bearers->mCGresources = -1;
2694                                         }
2695                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->menb_dl_gtp_teidatmcg){
2696                                                 sgnb_addreq_for_ue_bearers->transportLayerAddress = node_2_4->sgnbpdcppresent->menb_dl_gtp_teidatmcg->transportlayeraddress;
2697                                         }else{
2698                                                 sgnb_addreq_for_ue_bearers->transportLayerAddress.data = "";
2699                                                 sgnb_addreq_for_ue_bearers->transportLayerAddress.len = 1;
2700                                         }
2701                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation){
2702                                                 sgnb_addreq_for_ue_bearers->full_eRAB_GuaranteedBitrateUL = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation->e_rab_guaranteedbitrateul;
2703                                         }else{
2704                                                 sgnb_addreq_for_ue_bearers->full_eRAB_GuaranteedBitrateUL = 0;
2705                                         }
2706                                         if(node_2_4->en_dc_resourceconfiguration){
2707                                                 sgnb_addreq_for_ue_bearers->sCGresources = node_2_4->en_dc_resourceconfiguration->scgresources;
2708                                         }else{
2709                                                 sgnb_addreq_for_ue_bearers->sCGresources = -1;
2710                                         }
2711                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters){
2712                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_MaximumBitrateUL = node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters->e_rab_maximumbitrateul;
2713                                         }else{
2714                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_MaximumBitrateUL = 0;
2715                                         }
2716                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation){
2717                                                 sgnb_addreq_for_ue_bearers->full_eRAB_MaximumBitrateUL = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation->e_rab_maximumbitrateul;
2718                                         }else{
2719                                                 sgnb_addreq_for_ue_bearers->full_eRAB_MaximumBitrateUL = 0;
2720                                         }
2721                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority->pre_emptionvulnerability){
2722                                                 sgnb_addreq_for_ue_bearers->pre_emptionVulnerability = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->allocationandretentionpriority->pre_emptionvulnerability->value;
2723                                         }else{
2724                                                 sgnb_addreq_for_ue_bearers->pre_emptionVulnerability = -1;
2725                                         }
2726                                         sgnb_addreq_for_ue_bearers->e_RAB_ID = node_2_4->e_rab_id;
2727                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters){
2728                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_GuaranteedBitrateDL = node_2_4->sgnbpdcppresent->max_mcg_admit_e_rab_level_qos_parameters->e_rab_guaranteedbitratedl;
2729                                         }else{
2730                                                 sgnb_addreq_for_ue_bearers->MCG_eRAB_GuaranteedBitrateDL = 0;
2731                                         }
2732                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters){
2733                                                 sgnb_addreq_for_ue_bearers->qCI = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->qci;
2734                                         }else{
2735                                                 sgnb_addreq_for_ue_bearers->qCI = 0;
2736                                         }
2737                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation){
2738                                                 sgnb_addreq_for_ue_bearers->full_eRAB_MaximumBitrateDL = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation->e_rab_maximumbitratedl;
2739                                         }else{
2740                                                 sgnb_addreq_for_ue_bearers->full_eRAB_MaximumBitrateDL = 0;
2741                                         }
2742                                         if(node_2_4->sgnbpdcppresent && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters && node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation){
2743                                                 sgnb_addreq_for_ue_bearers->full_eRAB_GuaranteedBitrateDL = node_2_4->sgnbpdcppresent->full_e_rab_level_qos_parameters->gbrqosinformation->e_rab_guaranteedbitratedl;
2744                                         }else{
2745                                                 sgnb_addreq_for_ue_bearers->full_eRAB_GuaranteedBitrateDL = 0;
2746                                         }
2747                                         rts_fta_process_packet(&cur_packet);
2748                                 }
2749                         }
2750                 }
2751         }
2752 // --------------------------------------------------
2753 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2754
2755         sgnb_addreq_for_ue_sn_serv_ssb = (struct _sgnb_addreq_for_ue_sn_serv_ssb *)(cur_packet.record.packed.values);
2756         cur_packet.schema = 403;
2757         node_3_0 = node_2_0;
2758         ts_lo = hdr->header->timestamp & 0xffffffff;
2759         ts_hi = hdr->header->timestamp >> 32;
2760         sgnb_addreq_for_ue_sn_serv_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2761         if(hdr->header->gnbid==NULL)
2762                 sgnb_addreq_for_ue_sn_serv_ssb->gnb_id = empty_string;
2763         else
2764                 sgnb_addreq_for_ue_sn_serv_ssb->gnb_id = hdr->header->gnbid->value;
2765
2766         node_3_1 = node_3_0->protocolies;
2767         if(node_3_0->protocolies){
2768                 sgnb_addreq_for_ue_sn_serv_ssb->id_MeNB_UE_X2AP_ID = node_3_1->id_menb_ue_x2ap_id;
2769                 if(node_3_1->id_menb_ue_x2ap_id_extension){
2770                         sgnb_addreq_for_ue_sn_serv_ssb->id_MeNB_UE_X2AP_ID_Extension = node_3_1->id_menb_ue_x2ap_id_extension->value;
2771                 }else{
2772                         sgnb_addreq_for_ue_sn_serv_ssb->id_MeNB_UE_X2AP_ID_Extension = 0;
2773                 }
2774                 node_3_2 = node_3_1->id_menbtosgnbcontainer;
2775                 if(node_3_1->id_menbtosgnbcontainer){
2776                         node_3_3 = node_3_2->criticalextensionschoice1;
2777                         if(node_3_2->criticalextensionschoice1){
2778                                 node_3_4 = node_3_3->protocolies;
2779                                 if(node_3_3->protocolies){
2780                                         node_3_5 = node_3_4->candidatecellinfolistsn;
2781                                         if(node_3_4->candidatecellinfolistsn){
2782                                                 for(i_3_6=0;i_3_6<node_3_5->n_items; i_3_6++){
2783                                                         node_3_6 = node_3_5->items[i_3_6];
2784                                                         node_3_7 = node_3_6->measresultservingcell;
2785                                                         if(node_3_6->measresultservingcell){
2786                                                                 if(node_3_7->physcellid){
2787                                                                         sgnb_addreq_for_ue_sn_serv_ssb->physCellId = node_3_7->physcellid->value;
2788                                                                         sgnb_addreq_for_ue_sn_serv_ssb->physCellId_exists = 1;
2789                                                                 }else{
2790                                                                         sgnb_addreq_for_ue_sn_serv_ssb->physCellId_exists = 0;
2791                                                                 }
2792                                                                 node_3_8 = node_3_7->measresult;
2793                                                                 if(node_3_7->measresult){
2794                                                                         node_3_9 = node_3_8->cellresults;
2795                                                                         if(node_3_8->cellresults){
2796                                                                                 node_3_10 = node_3_9->resultsssb_cell;
2797                                                                                 if(node_3_9->resultsssb_cell){
2798                                                                                         if(node_3_10->rsrq){
2799                                                                                                 sgnb_addreq_for_ue_sn_serv_ssb->rsrq = node_3_10->rsrq->value;
2800                                                                                         }else{
2801                                                                                                 sgnb_addreq_for_ue_sn_serv_ssb->rsrq = 128;
2802                                                                                         }
2803                                                                                         if(node_3_10->rsrp){
2804                                                                                                 sgnb_addreq_for_ue_sn_serv_ssb->rsrp = node_3_10->rsrp->value;
2805                                                                                         }else{
2806                                                                                                 sgnb_addreq_for_ue_sn_serv_ssb->rsrp = 128;
2807                                                                                         }
2808                                                                                         if(node_3_10->sinr){
2809                                                                                                 sgnb_addreq_for_ue_sn_serv_ssb->sinr = node_3_10->sinr->value;
2810                                                                                         }else{
2811                                                                                                 sgnb_addreq_for_ue_sn_serv_ssb->sinr = 128;
2812                                                                                         }
2813                                                                                         rts_fta_process_packet(&cur_packet);
2814                                                                                 }
2815                                                                         }
2816                                                                 }
2817                                                         }
2818                                                 }
2819                                         }
2820                                 }
2821                         }
2822                 }
2823         }
2824 // --------------------------------------------------
2825 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2826
2827         sgnb_addreq_for_ue_sn_serv_csi_rs = (struct _sgnb_addreq_for_ue_sn_serv_csi_rs *)(cur_packet.record.packed.values);
2828         cur_packet.schema = 404;
2829         node_4_0 = node_3_0;
2830         ts_lo = hdr->header->timestamp & 0xffffffff;
2831         ts_hi = hdr->header->timestamp >> 32;
2832         sgnb_addreq_for_ue_sn_serv_csi_rs->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2833         if(hdr->header->gnbid==NULL)
2834                 sgnb_addreq_for_ue_sn_serv_csi_rs->gnb_id = empty_string;
2835         else
2836                 sgnb_addreq_for_ue_sn_serv_csi_rs->gnb_id = hdr->header->gnbid->value;
2837
2838         node_4_1 = node_4_0->protocolies;
2839         if(node_4_0->protocolies){
2840                 sgnb_addreq_for_ue_sn_serv_csi_rs->id_MeNB_UE_X2AP_ID = node_4_1->id_menb_ue_x2ap_id;
2841                 if(node_4_1->id_menb_ue_x2ap_id_extension){
2842                         sgnb_addreq_for_ue_sn_serv_csi_rs->id_MeNB_UE_X2AP_ID_Extension = node_4_1->id_menb_ue_x2ap_id_extension->value;
2843                 }else{
2844                         sgnb_addreq_for_ue_sn_serv_csi_rs->id_MeNB_UE_X2AP_ID_Extension = 0;
2845                 }
2846                 node_4_2 = node_4_1->id_menbtosgnbcontainer;
2847                 if(node_4_1->id_menbtosgnbcontainer){
2848                         node_4_3 = node_4_2->criticalextensionschoice1;
2849                         if(node_4_2->criticalextensionschoice1){
2850                                 node_4_4 = node_4_3->protocolies;
2851                                 if(node_4_3->protocolies){
2852                                         node_4_5 = node_4_4->candidatecellinfolistsn;
2853                                         if(node_4_4->candidatecellinfolistsn){
2854                                                 for(i_4_6=0;i_4_6<node_4_5->n_items; i_4_6++){
2855                                                         node_4_6 = node_4_5->items[i_4_6];
2856                                                         node_4_7 = node_4_6->measresultservingcell;
2857                                                         if(node_4_6->measresultservingcell){
2858                                                                 if(node_4_7->physcellid){
2859                                                                         sgnb_addreq_for_ue_sn_serv_csi_rs->physCellId = node_4_7->physcellid->value;
2860                                                                         sgnb_addreq_for_ue_sn_serv_csi_rs->physCellId_exists = 1;
2861                                                                 }else{
2862                                                                         sgnb_addreq_for_ue_sn_serv_csi_rs->physCellId_exists = 0;
2863                                                                 }
2864                                                                 node_4_8 = node_4_7->measresult;
2865                                                                 if(node_4_7->measresult){
2866                                                                         node_4_9 = node_4_8->cellresults;
2867                                                                         if(node_4_8->cellresults){
2868                                                                                 node_4_10 = node_4_9->resultscsi_rs_cell;
2869                                                                                 if(node_4_9->resultscsi_rs_cell){
2870                                                                                         if(node_4_10->rsrq){
2871                                                                                                 sgnb_addreq_for_ue_sn_serv_csi_rs->rsrq = node_4_10->rsrq->value;
2872                                                                                         }else{
2873                                                                                                 sgnb_addreq_for_ue_sn_serv_csi_rs->rsrq = 128;
2874                                                                                         }
2875                                                                                         if(node_4_10->rsrp){
2876                                                                                                 sgnb_addreq_for_ue_sn_serv_csi_rs->rsrp = node_4_10->rsrp->value;
2877                                                                                         }else{
2878                                                                                                 sgnb_addreq_for_ue_sn_serv_csi_rs->rsrp = 128;
2879                                                                                         }
2880                                                                                         if(node_4_10->sinr){
2881                                                                                                 sgnb_addreq_for_ue_sn_serv_csi_rs->sinr = node_4_10->sinr->value;
2882                                                                                         }else{
2883                                                                                                 sgnb_addreq_for_ue_sn_serv_csi_rs->sinr = 128;
2884                                                                                         }
2885                                                                                         rts_fta_process_packet(&cur_packet);
2886                                                                                 }
2887                                                                         }
2888                                                                 }
2889                                                         }
2890                                                 }
2891                                         }
2892                                 }
2893                         }
2894                 }
2895         }
2896 // --------------------------------------------------
2897 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2898
2899         sgnb_addreq_for_ue_mn_serv_ssb = (struct _sgnb_addreq_for_ue_mn_serv_ssb *)(cur_packet.record.packed.values);
2900         cur_packet.schema = 405;
2901         node_5_0 = node_4_0;
2902         ts_lo = hdr->header->timestamp & 0xffffffff;
2903         ts_hi = hdr->header->timestamp >> 32;
2904         sgnb_addreq_for_ue_mn_serv_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2905         if(hdr->header->gnbid==NULL)
2906                 sgnb_addreq_for_ue_mn_serv_ssb->gnb_id = empty_string;
2907         else
2908                 sgnb_addreq_for_ue_mn_serv_ssb->gnb_id = hdr->header->gnbid->value;
2909
2910         node_5_1 = node_5_0->protocolies;
2911         if(node_5_0->protocolies){
2912                 sgnb_addreq_for_ue_mn_serv_ssb->id_MeNB_UE_X2AP_ID = node_5_1->id_menb_ue_x2ap_id;
2913                 if(node_5_1->id_menb_ue_x2ap_id_extension){
2914                         sgnb_addreq_for_ue_mn_serv_ssb->id_MeNB_UE_X2AP_ID_Extension = node_5_1->id_menb_ue_x2ap_id_extension->value;
2915                 }else{
2916                         sgnb_addreq_for_ue_mn_serv_ssb->id_MeNB_UE_X2AP_ID_Extension = 0;
2917                 }
2918                 node_5_2 = node_5_1->id_menbtosgnbcontainer;
2919                 if(node_5_1->id_menbtosgnbcontainer){
2920                         node_5_3 = node_5_2->criticalextensionschoice1;
2921                         if(node_5_2->criticalextensionschoice1){
2922                                 node_5_4 = node_5_3->protocolies;
2923                                 if(node_5_3->protocolies){
2924                                         node_5_5 = node_5_4->candidatecellinfolistmn;
2925                                         if(node_5_4->candidatecellinfolistmn){
2926                                                 for(i_5_6=0;i_5_6<node_5_5->n_items; i_5_6++){
2927                                                         node_5_6 = node_5_5->items[i_5_6];
2928                                                         node_5_7 = node_5_6->measresultservingcell;
2929                                                         if(node_5_6->measresultservingcell){
2930                                                                 if(node_5_7->physcellid){
2931                                                                         sgnb_addreq_for_ue_mn_serv_ssb->physCellId = node_5_7->physcellid->value;
2932                                                                         sgnb_addreq_for_ue_mn_serv_ssb->physCellId_exists = 1;
2933                                                                 }else{
2934                                                                         sgnb_addreq_for_ue_mn_serv_ssb->physCellId_exists = 0;
2935                                                                 }
2936                                                                 node_5_8 = node_5_7->measresult;
2937                                                                 if(node_5_7->measresult){
2938                                                                         node_5_9 = node_5_8->cellresults;
2939                                                                         if(node_5_8->cellresults){
2940                                                                                 node_5_10 = node_5_9->resultsssb_cell;
2941                                                                                 if(node_5_9->resultsssb_cell){
2942                                                                                         if(node_5_10->rsrq){
2943                                                                                                 sgnb_addreq_for_ue_mn_serv_ssb->rsrq = node_5_10->rsrq->value;
2944                                                                                         }else{
2945                                                                                                 sgnb_addreq_for_ue_mn_serv_ssb->rsrq = 128;
2946                                                                                         }
2947                                                                                         if(node_5_10->rsrp){
2948                                                                                                 sgnb_addreq_for_ue_mn_serv_ssb->rsrp = node_5_10->rsrp->value;
2949                                                                                         }else{
2950                                                                                                 sgnb_addreq_for_ue_mn_serv_ssb->rsrp = 128;
2951                                                                                         }
2952                                                                                         if(node_5_10->sinr){
2953                                                                                                 sgnb_addreq_for_ue_mn_serv_ssb->sinr = node_5_10->sinr->value;
2954                                                                                         }else{
2955                                                                                                 sgnb_addreq_for_ue_mn_serv_ssb->sinr = 128;
2956                                                                                         }
2957                                                                                         rts_fta_process_packet(&cur_packet);
2958                                                                                 }
2959                                                                         }
2960                                                                 }
2961                                                         }
2962                                                 }
2963                                         }
2964                                 }
2965                         }
2966                 }
2967         }
2968 // --------------------------------------------------
2969 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
2970
2971         sgnb_addreq_for_ue_mn_serv_csi_rs = (struct _sgnb_addreq_for_ue_mn_serv_csi_rs *)(cur_packet.record.packed.values);
2972         cur_packet.schema = 406;
2973         node_6_0 = node_5_0;
2974         ts_lo = hdr->header->timestamp & 0xffffffff;
2975         ts_hi = hdr->header->timestamp >> 32;
2976         sgnb_addreq_for_ue_mn_serv_csi_rs->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
2977         if(hdr->header->gnbid==NULL)
2978                 sgnb_addreq_for_ue_mn_serv_csi_rs->gnb_id = empty_string;
2979         else
2980                 sgnb_addreq_for_ue_mn_serv_csi_rs->gnb_id = hdr->header->gnbid->value;
2981
2982         node_6_1 = node_6_0->protocolies;
2983         if(node_6_0->protocolies){
2984                 sgnb_addreq_for_ue_mn_serv_csi_rs->id_MeNB_UE_X2AP_ID = node_6_1->id_menb_ue_x2ap_id;
2985                 if(node_6_1->id_menb_ue_x2ap_id_extension){
2986                         sgnb_addreq_for_ue_mn_serv_csi_rs->id_MeNB_UE_X2AP_ID_Extension = node_6_1->id_menb_ue_x2ap_id_extension->value;
2987                 }else{
2988                         sgnb_addreq_for_ue_mn_serv_csi_rs->id_MeNB_UE_X2AP_ID_Extension = 0;
2989                 }
2990                 node_6_2 = node_6_1->id_menbtosgnbcontainer;
2991                 if(node_6_1->id_menbtosgnbcontainer){
2992                         node_6_3 = node_6_2->criticalextensionschoice1;
2993                         if(node_6_2->criticalextensionschoice1){
2994                                 node_6_4 = node_6_3->protocolies;
2995                                 if(node_6_3->protocolies){
2996                                         node_6_5 = node_6_4->candidatecellinfolistmn;
2997                                         if(node_6_4->candidatecellinfolistmn){
2998                                                 for(i_6_6=0;i_6_6<node_6_5->n_items; i_6_6++){
2999                                                         node_6_6 = node_6_5->items[i_6_6];
3000                                                         node_6_7 = node_6_6->measresultservingcell;
3001                                                         if(node_6_6->measresultservingcell){
3002                                                                 if(node_6_7->physcellid){
3003                                                                         sgnb_addreq_for_ue_mn_serv_csi_rs->physCellId = node_6_7->physcellid->value;
3004                                                                         sgnb_addreq_for_ue_mn_serv_csi_rs->physCellId_exists = 1;
3005                                                                 }else{
3006                                                                         sgnb_addreq_for_ue_mn_serv_csi_rs->physCellId_exists = 0;
3007                                                                 }
3008                                                                 node_6_8 = node_6_7->measresult;
3009                                                                 if(node_6_7->measresult){
3010                                                                         node_6_9 = node_6_8->cellresults;
3011                                                                         if(node_6_8->cellresults){
3012                                                                                 node_6_10 = node_6_9->resultscsi_rs_cell;
3013                                                                                 if(node_6_9->resultscsi_rs_cell){
3014                                                                                         if(node_6_10->rsrq){
3015                                                                                                 sgnb_addreq_for_ue_mn_serv_csi_rs->rsrq = node_6_10->rsrq->value;
3016                                                                                         }else{
3017                                                                                                 sgnb_addreq_for_ue_mn_serv_csi_rs->rsrq = 128;
3018                                                                                         }
3019                                                                                         if(node_6_10->rsrp){
3020                                                                                                 sgnb_addreq_for_ue_mn_serv_csi_rs->rsrp = node_6_10->rsrp->value;
3021                                                                                         }else{
3022                                                                                                 sgnb_addreq_for_ue_mn_serv_csi_rs->rsrp = 128;
3023                                                                                         }
3024                                                                                         if(node_6_10->sinr){
3025                                                                                                 sgnb_addreq_for_ue_mn_serv_csi_rs->sinr = node_6_10->sinr->value;
3026                                                                                         }else{
3027                                                                                                 sgnb_addreq_for_ue_mn_serv_csi_rs->sinr = 128;
3028                                                                                         }
3029                                                                                         rts_fta_process_packet(&cur_packet);
3030                                                                                 }
3031                                                                         }
3032                                                                 }
3033                                                         }
3034                                                 }
3035                                         }
3036                                 }
3037                         }
3038                 }
3039         }
3040 // --------------------------------------------------
3041 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
3042
3043         sgnb_addreq_for_ue_sn_neigh_ssb = (struct _sgnb_addreq_for_ue_sn_neigh_ssb *)(cur_packet.record.packed.values);
3044         cur_packet.schema = 408;
3045         node_7_0 = node_6_0;
3046         ts_lo = hdr->header->timestamp & 0xffffffff;
3047         ts_hi = hdr->header->timestamp >> 32;
3048         sgnb_addreq_for_ue_sn_neigh_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3049         if(hdr->header->gnbid==NULL)
3050                 sgnb_addreq_for_ue_sn_neigh_ssb->gnb_id = empty_string;
3051         else
3052                 sgnb_addreq_for_ue_sn_neigh_ssb->gnb_id = hdr->header->gnbid->value;
3053
3054         node_7_1 = node_7_0->protocolies;
3055         if(node_7_0->protocolies){
3056                 sgnb_addreq_for_ue_sn_neigh_ssb->id_MeNB_UE_X2AP_ID = node_7_1->id_menb_ue_x2ap_id;
3057                 if(node_7_1->id_menb_ue_x2ap_id_extension){
3058                         sgnb_addreq_for_ue_sn_neigh_ssb->id_MeNB_UE_X2AP_ID_Extension = node_7_1->id_menb_ue_x2ap_id_extension->value;
3059                 }else{
3060                         sgnb_addreq_for_ue_sn_neigh_ssb->id_MeNB_UE_X2AP_ID_Extension = 0;
3061                 }
3062                 node_7_2 = node_7_1->id_menbtosgnbcontainer;
3063                 if(node_7_1->id_menbtosgnbcontainer){
3064                         node_7_3 = node_7_2->criticalextensionschoice1;
3065                         if(node_7_2->criticalextensionschoice1){
3066                                 node_7_4 = node_7_3->protocolies;
3067                                 if(node_7_3->protocolies){
3068                                         node_7_5 = node_7_4->candidatecellinfolistsn;
3069                                         if(node_7_4->candidatecellinfolistsn){
3070                                                 for(i_7_6=0;i_7_6<node_7_5->n_items; i_7_6++){
3071                                                         node_7_6 = node_7_5->items[i_7_6];
3072                                                         node_7_7 = node_7_6->measresultneighcelllistnr;
3073                                                         if(node_7_6->measresultneighcelllistnr){
3074                                                                 for(i_7_8=0;i_7_8<node_7_7->n_items; i_7_8++){
3075                                                                         node_7_8 = node_7_7->items[i_7_8];
3076                                                                         if(node_7_8->physcellid){
3077                                                                                 sgnb_addreq_for_ue_sn_neigh_ssb->physCellId = node_7_8->physcellid->value;
3078                                                                                 sgnb_addreq_for_ue_sn_neigh_ssb->physCellId_exists = 1;
3079                                                                         }else{
3080                                                                                 sgnb_addreq_for_ue_sn_neigh_ssb->physCellId_exists = 0;
3081                                                                         }
3082                                                                         node_7_9 = node_7_8->measresult;
3083                                                                         if(node_7_8->measresult){
3084                                                                                 node_7_10 = node_7_9->cellresults;
3085                                                                                 if(node_7_9->cellresults){
3086                                                                                         node_7_11 = node_7_10->resultsssb_cell;
3087                                                                                         if(node_7_10->resultsssb_cell){
3088                                                                                                 if(node_7_11->rsrq){
3089                                                                                                         sgnb_addreq_for_ue_sn_neigh_ssb->rsrq = node_7_11->rsrq->value;
3090                                                                                                 }else{
3091                                                                                                         sgnb_addreq_for_ue_sn_neigh_ssb->rsrq = 128;
3092                                                                                                 }
3093                                                                                                 if(node_7_11->rsrp){
3094                                                                                                         sgnb_addreq_for_ue_sn_neigh_ssb->rsrp = node_7_11->rsrp->value;
3095                                                                                                 }else{
3096                                                                                                         sgnb_addreq_for_ue_sn_neigh_ssb->rsrp = 128;
3097                                                                                                 }
3098                                                                                                 if(node_7_11->sinr){
3099                                                                                                         sgnb_addreq_for_ue_sn_neigh_ssb->sinr = node_7_11->sinr->value;
3100                                                                                                 }else{
3101                                                                                                         sgnb_addreq_for_ue_sn_neigh_ssb->sinr = 128;
3102                                                                                                 }
3103                                                                                                 rts_fta_process_packet(&cur_packet);
3104                                                                                         }
3105                                                                                 }
3106                                                                         }
3107                                                                 }
3108                                                         }
3109                                                 }
3110                                         }
3111                                 }
3112                         }
3113                 }
3114         }
3115 // --------------------------------------------------
3116 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
3117
3118         sgnb_addreq_for_ue_sn_neigh_csi_rs = (struct _sgnb_addreq_for_ue_sn_neigh_csi_rs *)(cur_packet.record.packed.values);
3119         cur_packet.schema = 409;
3120         node_8_0 = node_7_0;
3121         ts_lo = hdr->header->timestamp & 0xffffffff;
3122         ts_hi = hdr->header->timestamp >> 32;
3123         sgnb_addreq_for_ue_sn_neigh_csi_rs->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3124         if(hdr->header->gnbid==NULL)
3125                 sgnb_addreq_for_ue_sn_neigh_csi_rs->gnb_id = empty_string;
3126         else
3127                 sgnb_addreq_for_ue_sn_neigh_csi_rs->gnb_id = hdr->header->gnbid->value;
3128
3129         node_8_1 = node_8_0->protocolies;
3130         if(node_8_0->protocolies){
3131                 sgnb_addreq_for_ue_sn_neigh_csi_rs->id_MeNB_UE_X2AP_ID = node_8_1->id_menb_ue_x2ap_id;
3132                 if(node_8_1->id_menb_ue_x2ap_id_extension){
3133                         sgnb_addreq_for_ue_sn_neigh_csi_rs->id_MeNB_UE_X2AP_ID_Extension = node_8_1->id_menb_ue_x2ap_id_extension->value;
3134                 }else{
3135                         sgnb_addreq_for_ue_sn_neigh_csi_rs->id_MeNB_UE_X2AP_ID_Extension = 0;
3136                 }
3137                 node_8_2 = node_8_1->id_menbtosgnbcontainer;
3138                 if(node_8_1->id_menbtosgnbcontainer){
3139                         node_8_3 = node_8_2->criticalextensionschoice1;
3140                         if(node_8_2->criticalextensionschoice1){
3141                                 node_8_4 = node_8_3->protocolies;
3142                                 if(node_8_3->protocolies){
3143                                         node_8_5 = node_8_4->candidatecellinfolistsn;
3144                                         if(node_8_4->candidatecellinfolistsn){
3145                                                 for(i_8_6=0;i_8_6<node_8_5->n_items; i_8_6++){
3146                                                         node_8_6 = node_8_5->items[i_8_6];
3147                                                         node_8_7 = node_8_6->measresultneighcelllistnr;
3148                                                         if(node_8_6->measresultneighcelllistnr){
3149                                                                 for(i_8_8=0;i_8_8<node_8_7->n_items; i_8_8++){
3150                                                                         node_8_8 = node_8_7->items[i_8_8];
3151                                                                         if(node_8_8->physcellid){
3152                                                                                 sgnb_addreq_for_ue_sn_neigh_csi_rs->physCellId = node_8_8->physcellid->value;
3153                                                                                 sgnb_addreq_for_ue_sn_neigh_csi_rs->physCellId_exists = 1;
3154                                                                         }else{
3155                                                                                 sgnb_addreq_for_ue_sn_neigh_csi_rs->physCellId_exists = 0;
3156                                                                         }
3157                                                                         node_8_9 = node_8_8->measresult;
3158                                                                         if(node_8_8->measresult){
3159                                                                                 node_8_10 = node_8_9->cellresults;
3160                                                                                 if(node_8_9->cellresults){
3161                                                                                         node_8_11 = node_8_10->resultscsi_rs_cell;
3162                                                                                         if(node_8_10->resultscsi_rs_cell){
3163                                                                                                 if(node_8_11->rsrq){
3164                                                                                                         sgnb_addreq_for_ue_sn_neigh_csi_rs->rsrq = node_8_11->rsrq->value;
3165                                                                                                 }else{
3166                                                                                                         sgnb_addreq_for_ue_sn_neigh_csi_rs->rsrq = 128;
3167                                                                                                 }
3168                                                                                                 if(node_8_11->rsrp){
3169                                                                                                         sgnb_addreq_for_ue_sn_neigh_csi_rs->rsrp = node_8_11->rsrp->value;
3170                                                                                                 }else{
3171                                                                                                         sgnb_addreq_for_ue_sn_neigh_csi_rs->rsrp = 128;
3172                                                                                                 }
3173                                                                                                 if(node_8_11->sinr){
3174                                                                                                         sgnb_addreq_for_ue_sn_neigh_csi_rs->sinr = node_8_11->sinr->value;
3175                                                                                                 }else{
3176                                                                                                         sgnb_addreq_for_ue_sn_neigh_csi_rs->sinr = 128;
3177                                                                                                 }
3178                                                                                                 rts_fta_process_packet(&cur_packet);
3179                                                                                         }
3180                                                                                 }
3181                                                                         }
3182                                                                 }
3183                                                         }
3184                                                 }
3185                                         }
3186                                 }
3187                         }
3188                 }
3189         }
3190 // --------------------------------------------------
3191 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
3192
3193         sgnb_addreq_for_ue_mn_neigh_ssb = (struct _sgnb_addreq_for_ue_mn_neigh_ssb *)(cur_packet.record.packed.values);
3194         cur_packet.schema = 410;
3195         node_9_0 = node_8_0;
3196         ts_lo = hdr->header->timestamp & 0xffffffff;
3197         ts_hi = hdr->header->timestamp >> 32;
3198         sgnb_addreq_for_ue_mn_neigh_ssb->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3199         if(hdr->header->gnbid==NULL)
3200                 sgnb_addreq_for_ue_mn_neigh_ssb->gnb_id = empty_string;
3201         else
3202                 sgnb_addreq_for_ue_mn_neigh_ssb->gnb_id = hdr->header->gnbid->value;
3203
3204         node_9_1 = node_9_0->protocolies;
3205         if(node_9_0->protocolies){
3206                 sgnb_addreq_for_ue_mn_neigh_ssb->id_MeNB_UE_X2AP_ID = node_9_1->id_menb_ue_x2ap_id;
3207                 if(node_9_1->id_menb_ue_x2ap_id_extension){
3208                         sgnb_addreq_for_ue_mn_neigh_ssb->id_MeNB_UE_X2AP_ID_Extension = node_9_1->id_menb_ue_x2ap_id_extension->value;
3209                 }else{
3210                         sgnb_addreq_for_ue_mn_neigh_ssb->id_MeNB_UE_X2AP_ID_Extension = 0;
3211                 }
3212                 node_9_2 = node_9_1->id_menbtosgnbcontainer;
3213                 if(node_9_1->id_menbtosgnbcontainer){
3214                         node_9_3 = node_9_2->criticalextensionschoice1;
3215                         if(node_9_2->criticalextensionschoice1){
3216                                 node_9_4 = node_9_3->protocolies;
3217                                 if(node_9_3->protocolies){
3218                                         node_9_5 = node_9_4->candidatecellinfolistmn;
3219                                         if(node_9_4->candidatecellinfolistmn){
3220                                                 for(i_9_6=0;i_9_6<node_9_5->n_items; i_9_6++){
3221                                                         node_9_6 = node_9_5->items[i_9_6];
3222                                                         node_9_7 = node_9_6->measresultneighcelllistnr;
3223                                                         if(node_9_6->measresultneighcelllistnr){
3224                                                                 for(i_9_8=0;i_9_8<node_9_7->n_items; i_9_8++){
3225                                                                         node_9_8 = node_9_7->items[i_9_8];
3226                                                                         if(node_9_8->physcellid){
3227                                                                                 sgnb_addreq_for_ue_mn_neigh_ssb->physCellId = node_9_8->physcellid->value;
3228                                                                                 sgnb_addreq_for_ue_mn_neigh_ssb->physCellId_exists = 1;
3229                                                                         }else{
3230                                                                                 sgnb_addreq_for_ue_mn_neigh_ssb->physCellId_exists = 0;
3231                                                                         }
3232                                                                         node_9_9 = node_9_8->measresult;
3233                                                                         if(node_9_8->measresult){
3234                                                                                 node_9_10 = node_9_9->cellresults;
3235                                                                                 if(node_9_9->cellresults){
3236                                                                                         node_9_11 = node_9_10->resultsssb_cell;
3237                                                                                         if(node_9_10->resultsssb_cell){
3238                                                                                                 if(node_9_11->rsrq){
3239                                                                                                         sgnb_addreq_for_ue_mn_neigh_ssb->rsrq = node_9_11->rsrq->value;
3240                                                                                                 }else{
3241                                                                                                         sgnb_addreq_for_ue_mn_neigh_ssb->rsrq = 128;
3242                                                                                                 }
3243                                                                                                 if(node_9_11->rsrp){
3244                                                                                                         sgnb_addreq_for_ue_mn_neigh_ssb->rsrp = node_9_11->rsrp->value;
3245                                                                                                 }else{
3246                                                                                                         sgnb_addreq_for_ue_mn_neigh_ssb->rsrp = 128;
3247                                                                                                 }
3248                                                                                                 if(node_9_11->sinr){
3249                                                                                                         sgnb_addreq_for_ue_mn_neigh_ssb->sinr = node_9_11->sinr->value;
3250                                                                                                 }else{
3251                                                                                                         sgnb_addreq_for_ue_mn_neigh_ssb->sinr = 128;
3252                                                                                                 }
3253                                                                                                 rts_fta_process_packet(&cur_packet);
3254                                                                                         }
3255                                                                                 }
3256                                                                         }
3257                                                                 }
3258                                                         }
3259                                                 }
3260                                         }
3261                                 }
3262                         }
3263                 }
3264         }
3265 // --------------------------------------------------
3266 // ---  Specialized processing for .proto sgnb_addition_request.json, path sgnb_addition_req.json
3267
3268         sgnb_addreq_for_ue_mn_neigh_csi_rs = (struct _sgnb_addreq_for_ue_mn_neigh_csi_rs *)(cur_packet.record.packed.values);
3269         cur_packet.schema = 411;
3270         node_10_0 = node_9_0;
3271         ts_lo = hdr->header->timestamp & 0xffffffff;
3272         ts_hi = hdr->header->timestamp >> 32;
3273         sgnb_addreq_for_ue_mn_neigh_csi_rs->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3274         if(hdr->header->gnbid==NULL)
3275                 sgnb_addreq_for_ue_mn_neigh_csi_rs->gnb_id = empty_string;
3276         else
3277                 sgnb_addreq_for_ue_mn_neigh_csi_rs->gnb_id = hdr->header->gnbid->value;
3278
3279         node_10_1 = node_10_0->protocolies;
3280         if(node_10_0->protocolies){
3281                 sgnb_addreq_for_ue_mn_neigh_csi_rs->id_MeNB_UE_X2AP_ID = node_10_1->id_menb_ue_x2ap_id;
3282                 if(node_10_1->id_menb_ue_x2ap_id_extension){
3283                         sgnb_addreq_for_ue_mn_neigh_csi_rs->id_MeNB_UE_X2AP_ID_Extension = node_10_1->id_menb_ue_x2ap_id_extension->value;
3284                 }else{
3285                         sgnb_addreq_for_ue_mn_neigh_csi_rs->id_MeNB_UE_X2AP_ID_Extension = 0;
3286                 }
3287                 node_10_2 = node_10_1->id_menbtosgnbcontainer;
3288                 if(node_10_1->id_menbtosgnbcontainer){
3289                         node_10_3 = node_10_2->criticalextensionschoice1;
3290                         if(node_10_2->criticalextensionschoice1){
3291                                 node_10_4 = node_10_3->protocolies;
3292                                 if(node_10_3->protocolies){
3293                                         node_10_5 = node_10_4->candidatecellinfolistmn;
3294                                         if(node_10_4->candidatecellinfolistmn){
3295                                                 for(i_10_6=0;i_10_6<node_10_5->n_items; i_10_6++){
3296                                                         node_10_6 = node_10_5->items[i_10_6];
3297                                                         node_10_7 = node_10_6->measresultneighcelllistnr;
3298                                                         if(node_10_6->measresultneighcelllistnr){
3299                                                                 for(i_10_8=0;i_10_8<node_10_7->n_items; i_10_8++){
3300                                                                         node_10_8 = node_10_7->items[i_10_8];
3301                                                                         if(node_10_8->physcellid){
3302                                                                                 sgnb_addreq_for_ue_mn_neigh_csi_rs->physCellId = node_10_8->physcellid->value;
3303                                                                                 sgnb_addreq_for_ue_mn_neigh_csi_rs->physCellId_exists = 1;
3304                                                                         }else{
3305                                                                                 sgnb_addreq_for_ue_mn_neigh_csi_rs->physCellId_exists = 0;
3306                                                                         }
3307                                                                         node_10_9 = node_10_8->measresult;
3308                                                                         if(node_10_8->measresult){
3309                                                                                 node_10_10 = node_10_9->cellresults;
3310                                                                                 if(node_10_9->cellresults){
3311                                                                                         node_10_11 = node_10_10->resultscsi_rs_cell;
3312                                                                                         if(node_10_10->resultscsi_rs_cell){
3313                                                                                                 if(node_10_11->rsrq){
3314                                                                                                         sgnb_addreq_for_ue_mn_neigh_csi_rs->rsrq = node_10_11->rsrq->value;
3315                                                                                                 }else{
3316                                                                                                         sgnb_addreq_for_ue_mn_neigh_csi_rs->rsrq = 128;
3317                                                                                                 }
3318                                                                                                 if(node_10_11->rsrp){
3319                                                                                                         sgnb_addreq_for_ue_mn_neigh_csi_rs->rsrp = node_10_11->rsrp->value;
3320                                                                                                 }else{
3321                                                                                                         sgnb_addreq_for_ue_mn_neigh_csi_rs->rsrp = 128;
3322                                                                                                 }
3323                                                                                                 if(node_10_11->sinr){
3324                                                                                                         sgnb_addreq_for_ue_mn_neigh_csi_rs->sinr = node_10_11->sinr->value;
3325                                                                                                 }else{
3326                                                                                                         sgnb_addreq_for_ue_mn_neigh_csi_rs->sinr = 128;
3327                                                                                                 }
3328                                                                                                 rts_fta_process_packet(&cur_packet);
3329                                                                                         }
3330                                                                                 }
3331                                                                         }
3332                                                                 }
3333                                                         }
3334                                                 }
3335                                         }
3336                                 }
3337                         }
3338                 }
3339         }
3340         streaming_protobufs__sg_nbaddition_request__free_unpacked(node_0_0,NULL);
3341         return 0;
3342 }
3343
3344 gs_uint32_t process_buffer_SGNBMODCONF(gs_uint8_t * buffer, gs_uint32_t buflen){
3345         char *empty_string = "";
3346 unsigned long long int ts_lo, ts_hi;
3347         StreamingProtobufs__X2APStreaming *hdr = NULL;
3348 // ------------------------------------------
3349 // ---  Variables for .proto sgnb_modification_confirm.json, path sgnb_mod_confirm.json
3350         struct _sgnb_mod_conf *sgnb_mod_conf = NULL;
3351         StreamingProtobufs__SgNBModificationConfirm *node_0_0 = NULL;
3352         StreamingProtobufs__SgNBModificationConfirmIEs *node_0_1 = NULL;
3353
3354 // --------------------------------------------------
3355 // ---  Specialized processing for .proto sgnb_modification_confirm.json, path sgnb_mod_confirm.json
3356
3357         sgnb_mod_conf = (struct _sgnb_mod_conf *)(cur_packet.record.packed.values);
3358         cur_packet.schema = 1301;
3359
3360         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3361         if(hdr==NULL) return -1;
3362
3363         node_0_0 = hdr->sgnbmodificationconfirm;
3364         if(node_0_0==NULL) return -2;
3365         if(hdr->header==NULL) return -3;
3366
3367         ts_lo = hdr->header->timestamp & 0xffffffff;
3368         ts_hi = hdr->header->timestamp >> 32;
3369         sgnb_mod_conf->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3370         if(hdr->header->gnbid==NULL)
3371                 sgnb_mod_conf->gnb_id = empty_string;
3372         else
3373                 sgnb_mod_conf->gnb_id = hdr->header->gnbid->value;
3374
3375         node_0_1 = node_0_0->protocolies;
3376         if(node_0_0->protocolies){
3377                 sgnb_mod_conf->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
3378                 sgnb_mod_conf->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
3379                 rts_fta_process_packet(&cur_packet);
3380         }
3381         streaming_protobufs__sg_nbmodification_confirm__free_unpacked(node_0_0,NULL);
3382         return 0;
3383 }
3384
3385 gs_uint32_t process_buffer_SGNBMODREQ(gs_uint8_t * buffer, gs_uint32_t buflen){
3386         char *empty_string = "";
3387 unsigned long long int ts_lo, ts_hi;
3388         StreamingProtobufs__X2APStreaming *hdr = NULL;
3389 // ------------------------------------------
3390 // ---  Variables for .proto sgnb_modification_request.json, path sgnb_mod_req.json
3391         struct _sgnb_mod_req *sgnb_mod_req = NULL;
3392         StreamingProtobufs__SgNBModificationRequest *node_0_0 = NULL;
3393         StreamingProtobufs__SgNBModificationRequestIEs *node_0_1 = NULL;
3394
3395 // --------------------------------------------------
3396 // ---  Specialized processing for .proto sgnb_modification_request.json, path sgnb_mod_req.json
3397
3398         sgnb_mod_req = (struct _sgnb_mod_req *)(cur_packet.record.packed.values);
3399         cur_packet.schema = 1201;
3400
3401         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3402         if(hdr==NULL) return -1;
3403
3404         node_0_0 = hdr->sgnbmodificationrequest;
3405         if(node_0_0==NULL) return -2;
3406         if(hdr->header==NULL) return -3;
3407
3408         ts_lo = hdr->header->timestamp & 0xffffffff;
3409         ts_hi = hdr->header->timestamp >> 32;
3410         sgnb_mod_req->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3411         if(hdr->header->gnbid==NULL)
3412                 sgnb_mod_req->gnb_id = empty_string;
3413         else
3414                 sgnb_mod_req->gnb_id = hdr->header->gnbid->value;
3415
3416         node_0_1 = node_0_0->protocolies;
3417         if(node_0_0->protocolies){
3418                 if(node_0_1->id_cause && node_0_1->id_cause->protocol){
3419                         sgnb_mod_req->cause_protocol = node_0_1->id_cause->protocol->value;
3420                 }else{
3421                         sgnb_mod_req->cause_protocol = -1;
3422                 }
3423                 sgnb_mod_req->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
3424                 if(node_0_1->id_cause && node_0_1->id_cause->transport){
3425                         sgnb_mod_req->cause_transport = node_0_1->id_cause->transport->value;
3426                 }else{
3427                         sgnb_mod_req->cause_transport = -1;
3428                 }
3429                 if(node_0_1->id_menbtosgnbcontainer && node_0_1->id_menbtosgnbcontainer->criticalextensionschoice1 && node_0_1->id_menbtosgnbcontainer->criticalextensionschoice1->protocolies && node_0_1->id_menbtosgnbcontainer->criticalextensionschoice1->protocolies->scgfailureinfo){
3430                         sgnb_mod_req->failureType = node_0_1->id_menbtosgnbcontainer->criticalextensionschoice1->protocolies->scgfailureinfo->failuretype;
3431                 }else{
3432                         sgnb_mod_req->failureType = -1;
3433                 }
3434                 if(node_0_1->id_cause && node_0_1->id_cause->radionetwork){
3435                         sgnb_mod_req->cause_radio_network = node_0_1->id_cause->radionetwork->value;
3436                 }else{
3437                         sgnb_mod_req->cause_radio_network = -1;
3438                 }
3439                 sgnb_mod_req->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
3440                 if(node_0_1->id_cause && node_0_1->id_cause->misc){
3441                         sgnb_mod_req->cause_misc = node_0_1->id_cause->misc->value;
3442                 }else{
3443                         sgnb_mod_req->cause_misc = -1;
3444                 }
3445                 rts_fta_process_packet(&cur_packet);
3446         }
3447         streaming_protobufs__sg_nbmodification_request__free_unpacked(node_0_0,NULL);
3448         return 0;
3449 }
3450
3451 gs_uint32_t process_buffer_SGNBMODREQACK(gs_uint8_t * buffer, gs_uint32_t buflen){
3452         char *empty_string = "";
3453 unsigned long long int ts_lo, ts_hi;
3454         StreamingProtobufs__X2APStreaming *hdr = NULL;
3455 // ------------------------------------------
3456 // ---  Variables for .proto sgnb_modification_request_acknowledge.json, path sgnb_mod_req_ack.json
3457         struct _sgnb_mod_req_ack *sgnb_mod_req_ack = NULL;
3458         StreamingProtobufs__SgNBModificationRequestAcknowledge *node_0_0 = NULL;
3459         StreamingProtobufs__SgNBModificationRequestAcknowledgeIEs *node_0_1 = NULL;
3460
3461 // --------------------------------------------------
3462 // ---  Specialized processing for .proto sgnb_modification_request_acknowledge.json, path sgnb_mod_req_ack.json
3463
3464         sgnb_mod_req_ack = (struct _sgnb_mod_req_ack *)(cur_packet.record.packed.values);
3465         cur_packet.schema = 1701;
3466
3467         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3468         if(hdr==NULL) return -1;
3469
3470         node_0_0 = hdr->sgnbmodificationrequestacknowledge;
3471         if(node_0_0==NULL) return -2;
3472         if(hdr->header==NULL) return -3;
3473
3474         ts_lo = hdr->header->timestamp & 0xffffffff;
3475         ts_hi = hdr->header->timestamp >> 32;
3476         sgnb_mod_req_ack->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3477         if(hdr->header->gnbid==NULL)
3478                 sgnb_mod_req_ack->gnb_id = empty_string;
3479         else
3480                 sgnb_mod_req_ack->gnb_id = hdr->header->gnbid->value;
3481
3482         node_0_1 = node_0_0->protocolies;
3483         if(node_0_0->protocolies){
3484                 sgnb_mod_req_ack->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
3485                 sgnb_mod_req_ack->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
3486                 rts_fta_process_packet(&cur_packet);
3487         }
3488         streaming_protobufs__sg_nbmodification_request_acknowledge__free_unpacked(node_0_0,NULL);
3489         return 0;
3490 }
3491
3492 gs_uint32_t process_buffer_SGNBMODREQREJECT(gs_uint8_t * buffer, gs_uint32_t buflen){
3493         char *empty_string = "";
3494 unsigned long long int ts_lo, ts_hi;
3495         StreamingProtobufs__X2APStreaming *hdr = NULL;
3496 // ------------------------------------------
3497 // ---  Variables for .proto sgnb_modification_request_reject.json, path sgnb_mod_req_reject.json
3498         struct _sgnb_mod_req_reject *sgnb_mod_req_reject = NULL;
3499         StreamingProtobufs__SgNBModificationRequestReject *node_0_0 = NULL;
3500         StreamingProtobufs__SgNBModificationRequestRejectIEs *node_0_1 = NULL;
3501
3502 // --------------------------------------------------
3503 // ---  Specialized processing for .proto sgnb_modification_request_reject.json, path sgnb_mod_req_reject.json
3504
3505         sgnb_mod_req_reject = (struct _sgnb_mod_req_reject *)(cur_packet.record.packed.values);
3506         cur_packet.schema = 1801;
3507
3508         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3509         if(hdr==NULL) return -1;
3510
3511         node_0_0 = hdr->sgnbmodificationrequestreject;
3512         if(node_0_0==NULL) return -2;
3513         if(hdr->header==NULL) return -3;
3514
3515         ts_lo = hdr->header->timestamp & 0xffffffff;
3516         ts_hi = hdr->header->timestamp >> 32;
3517         sgnb_mod_req_reject->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3518         if(hdr->header->gnbid==NULL)
3519                 sgnb_mod_req_reject->gnb_id = empty_string;
3520         else
3521                 sgnb_mod_req_reject->gnb_id = hdr->header->gnbid->value;
3522
3523         node_0_1 = node_0_0->protocolies;
3524         if(node_0_0->protocolies){
3525                 if(node_0_1->id_cause && node_0_1->id_cause->protocol){
3526                         sgnb_mod_req_reject->cause_protocol = node_0_1->id_cause->protocol->value;
3527                 }else{
3528                         sgnb_mod_req_reject->cause_protocol = -1;
3529                 }
3530                 sgnb_mod_req_reject->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
3531                 if(node_0_1->id_cause && node_0_1->id_cause->transport){
3532                         sgnb_mod_req_reject->cause_transport = node_0_1->id_cause->transport->value;
3533                 }else{
3534                         sgnb_mod_req_reject->cause_transport = -1;
3535                 }
3536                 if(node_0_1->id_cause && node_0_1->id_cause->radionetwork){
3537                         sgnb_mod_req_reject->cause_radio_network = node_0_1->id_cause->radionetwork->value;
3538                 }else{
3539                         sgnb_mod_req_reject->cause_radio_network = -1;
3540                 }
3541                 sgnb_mod_req_reject->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
3542                 if(node_0_1->id_cause && node_0_1->id_cause->misc){
3543                         sgnb_mod_req_reject->cause_misc = node_0_1->id_cause->misc->value;
3544                 }else{
3545                         sgnb_mod_req_reject->cause_misc = -1;
3546                 }
3547                 rts_fta_process_packet(&cur_packet);
3548         }
3549         streaming_protobufs__sg_nbmodification_request_reject__free_unpacked(node_0_0,NULL);
3550         return 0;
3551 }
3552
3553 gs_uint32_t process_buffer_SGNBMODREQUIRED(gs_uint8_t * buffer, gs_uint32_t buflen){
3554         char *empty_string = "";
3555 unsigned long long int ts_lo, ts_hi;
3556         StreamingProtobufs__X2APStreaming *hdr = NULL;
3557 // ------------------------------------------
3558 // ---  Variables for .proto sgnb_modification_required.json, path sgnb_mod_rqd.json
3559         struct _sgnb_mod_required *sgnb_mod_required = NULL;
3560         StreamingProtobufs__SgNBModificationRequired *node_0_0 = NULL;
3561         StreamingProtobufs__SgNBModificationRequiredIEs *node_0_1 = NULL;
3562
3563 // --------------------------------------------------
3564 // ---  Specialized processing for .proto sgnb_modification_required.json, path sgnb_mod_rqd.json
3565
3566         sgnb_mod_required = (struct _sgnb_mod_required *)(cur_packet.record.packed.values);
3567         cur_packet.schema = 1901;
3568
3569         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3570         if(hdr==NULL) return -1;
3571
3572         node_0_0 = hdr->sgnbmodificationrequired;
3573         if(node_0_0==NULL) return -2;
3574         if(hdr->header==NULL) return -3;
3575
3576         ts_lo = hdr->header->timestamp & 0xffffffff;
3577         ts_hi = hdr->header->timestamp >> 32;
3578         sgnb_mod_required->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3579         if(hdr->header->gnbid==NULL)
3580                 sgnb_mod_required->gnb_id = empty_string;
3581         else
3582                 sgnb_mod_required->gnb_id = hdr->header->gnbid->value;
3583
3584         node_0_1 = node_0_0->protocolies;
3585         if(node_0_0->protocolies){
3586                 if(node_0_1->id_cause && node_0_1->id_cause->protocol){
3587                         sgnb_mod_required->cause_protocol = node_0_1->id_cause->protocol->value;
3588                 }else{
3589                         sgnb_mod_required->cause_protocol = -1;
3590                 }
3591                 sgnb_mod_required->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
3592                 if(node_0_1->id_cause && node_0_1->id_cause->transport){
3593                         sgnb_mod_required->cause_transport = node_0_1->id_cause->transport->value;
3594                 }else{
3595                         sgnb_mod_required->cause_transport = -1;
3596                 }
3597                 if(node_0_1->id_cause && node_0_1->id_cause->radionetwork){
3598                         sgnb_mod_required->cause_radio_network = node_0_1->id_cause->radionetwork->value;
3599                 }else{
3600                         sgnb_mod_required->cause_radio_network = -1;
3601                 }
3602                 sgnb_mod_required->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
3603                 if(node_0_1->id_cause && node_0_1->id_cause->misc){
3604                         sgnb_mod_required->cause_misc = node_0_1->id_cause->misc->value;
3605                 }else{
3606                         sgnb_mod_required->cause_misc = -1;
3607                 }
3608                 rts_fta_process_packet(&cur_packet);
3609         }
3610         streaming_protobufs__sg_nbmodification_required__free_unpacked(node_0_0,NULL);
3611         return 0;
3612 }
3613
3614 gs_uint32_t process_buffer_SGNBMODREFUSE(gs_uint8_t * buffer, gs_uint32_t buflen){
3615         char *empty_string = "";
3616 unsigned long long int ts_lo, ts_hi;
3617         StreamingProtobufs__X2APStreaming *hdr = NULL;
3618 // ------------------------------------------
3619 // ---  Variables for .proto sgnb_modification_refuse.json, path sgnb_modification_refuse.json
3620         struct _sgnb_mod_refuse *sgnb_mod_refuse = NULL;
3621         StreamingProtobufs__SgNBModificationRefuse *node_0_0 = NULL;
3622         StreamingProtobufs__SgNBModificationRefuseIEs *node_0_1 = NULL;
3623         StreamingProtobufs__Cause *node_0_2 = NULL;
3624
3625 // --------------------------------------------------
3626 // ---  Specialized processing for .proto sgnb_modification_refuse.json, path sgnb_modification_refuse.json
3627
3628         sgnb_mod_refuse = (struct _sgnb_mod_refuse *)(cur_packet.record.packed.values);
3629         cur_packet.schema = 1401;
3630
3631         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3632         if(hdr==NULL) return -1;
3633
3634         node_0_0 = hdr->sgnbmodificationrefuse;
3635         if(node_0_0==NULL) return -2;
3636         if(hdr->header==NULL) return -3;
3637
3638         ts_lo = hdr->header->timestamp & 0xffffffff;
3639         ts_hi = hdr->header->timestamp >> 32;
3640         sgnb_mod_refuse->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3641         if(hdr->header->gnbid==NULL)
3642                 sgnb_mod_refuse->gnb_id = empty_string;
3643         else
3644                 sgnb_mod_refuse->gnb_id = hdr->header->gnbid->value;
3645
3646         node_0_1 = node_0_0->protocolies;
3647         if(node_0_0->protocolies){
3648                 sgnb_mod_refuse->id_MeNB_UE_X2AP_ID = node_0_1->id_menb_ue_x2ap_id;
3649                 sgnb_mod_refuse->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id;
3650                 node_0_2 = node_0_1->id_cause;
3651                 if(node_0_1->id_cause){
3652                         if(node_0_2->radionetwork){
3653                                 sgnb_mod_refuse->cause_radio_network = node_0_2->radionetwork->value;
3654                         }else{
3655                                 sgnb_mod_refuse->cause_radio_network = -1;
3656                         }
3657                         if(node_0_2->transport){
3658                                 sgnb_mod_refuse->cause_transport = node_0_2->transport->value;
3659                         }else{
3660                                 sgnb_mod_refuse->cause_transport = -1;
3661                         }
3662                         if(node_0_2->protocol){
3663                                 sgnb_mod_refuse->cause_protocol = node_0_2->protocol->value;
3664                         }else{
3665                                 sgnb_mod_refuse->cause_protocol = -1;
3666                         }
3667                         if(node_0_2->misc){
3668                                 sgnb_mod_refuse->cause_misc = node_0_2->misc->value;
3669                         }else{
3670                                 sgnb_mod_refuse->cause_misc = -1;
3671                         }
3672                         rts_fta_process_packet(&cur_packet);
3673                 }
3674         }
3675         streaming_protobufs__sg_nbmodification_refuse__free_unpacked(node_0_0,NULL);
3676         return 0;
3677 }
3678
3679 gs_uint32_t process_buffer_SNSTATUSXFER(gs_uint8_t * buffer, gs_uint32_t buflen){
3680         char *empty_string = "";
3681 unsigned long long int ts_lo, ts_hi;
3682         StreamingProtobufs__X2APStreaming *hdr = NULL;
3683 // ------------------------------------------
3684 // ---  Variables for .proto sn_status_transfer.json, path snstatusxfer.json
3685         struct _sn_status_transfer *sn_status_transfer = NULL;
3686         StreamingProtobufs__SNStatusTransfer *node_0_0 = NULL;
3687         StreamingProtobufs__SNStatusTransferIEs *node_0_1 = NULL;
3688         StreamingProtobufs__ERABsSubjectToStatusTransferList *node_0_2 = NULL;
3689         StreamingProtobufs__ERABsSubjectToStatusTransferItemIEs *node_0_3 = NULL;
3690         gs_uint32_t i_0_3;
3691         StreamingProtobufs__ERABsSubjectToStatusTransferItem *node_0_4 = NULL;
3692         StreamingProtobufs__ERABsSubjectToStatusTransferItemExtIEs *node_0_5 = NULL;
3693         gs_uint32_t i_0_5;
3694         StreamingProtobufs__COUNTvaluePDCPSNlength18 *node_0_6 = NULL;
3695
3696 // --------------------------------------------------
3697 // ---  Specialized processing for .proto sn_status_transfer.json, path snstatusxfer.json
3698
3699         sn_status_transfer = (struct _sn_status_transfer *)(cur_packet.record.packed.values);
3700         cur_packet.schema = 1601;
3701
3702         hdr = streaming_protobufs__x2_apstreaming__unpack(NULL, buflen, buffer);
3703         if(hdr==NULL) return -1;
3704
3705         node_0_0 = hdr->snstatustransfer;
3706         if(node_0_0==NULL) return -2;
3707         if(hdr->header==NULL) return -3;
3708
3709         ts_lo = hdr->header->timestamp & 0xffffffff;
3710         ts_hi = hdr->header->timestamp >> 32;
3711         sn_status_transfer->timestamp_ms = (ts_hi - 2208988800) * 1000 + ((ts_lo * 1000) >> 32);
3712         if(hdr->header->gnbid==NULL)
3713                 sn_status_transfer->gnb_id = empty_string;
3714         else
3715                 sn_status_transfer->gnb_id = hdr->header->gnbid->value;
3716
3717         node_0_1 = node_0_0->protocolies;
3718         if(node_0_0->protocolies){
3719                 sn_status_transfer->id_Old_eNB_UE_X2AP_ID = node_0_1->id_old_enb_ue_x2ap_id;
3720                 if(node_0_1->id_sgnb_ue_x2ap_id){
3721                         sn_status_transfer->id_SgNB_UE_X2AP_ID = node_0_1->id_sgnb_ue_x2ap_id->value;
3722                 }else{
3723                         sn_status_transfer->id_SgNB_UE_X2AP_ID = 0;
3724                 }
3725                 node_0_2 = node_0_1->id_e_rabs_subjecttostatustransfer_list;
3726                 if(node_0_1->id_e_rabs_subjecttostatustransfer_list){
3727                         for(i_0_3=0;i_0_3<node_0_2->n_items; i_0_3++){
3728                                 node_0_3 = node_0_2->items[i_0_3];
3729                                 node_0_4 = node_0_3->id_e_rabs_subjecttostatustransfer_item;
3730                                 if(node_0_3->id_e_rabs_subjecttostatustransfer_item){
3731                                         sn_status_transfer->e_RAB_ID = node_0_4->e_rab_id;
3732                                         for(i_0_5=0;i_0_5<node_0_4->n_ie_extensions; i_0_5++){
3733                                                 node_0_5 = node_0_4->ie_extensions[i_0_5];
3734                                                 node_0_6 = node_0_5->id_dlcountvaluepdcp_snlength18;
3735                                                 if(node_0_5->id_dlcountvaluepdcp_snlength18){
3736                                                         sn_status_transfer->pDCP_SNlength18 = node_0_6->pdcp_snlength18;
3737                                                         rts_fta_process_packet(&cur_packet);
3738                                                 }
3739                                         }
3740                                 }
3741                         }
3742                 }
3743         }
3744         streaming_protobufs__snstatus_transfer__free_unpacked(node_0_0,NULL);
3745         return 0;
3746 }
3747
3748
3749 int init_cur_packet(){
3750         cur_packet.ptype=PTYPE_STRUCT;
3751         cur_packet.record.packed.values = (void *)(malloc(10000));
3752
3753         if(cur_packet.record.packed.values==NULL){
3754                 print_error("could not malloc a data block for cur_packet in init_cur_packet.");
3755                 exit(10);
3756         }
3757         return 0;
3758 }
3759 //----------------  END Specialized proto parsing -----------
3760
3761 static void dproto_replay_check_messages() {
3762     if (fta_start_service(0)<0) {
3763         print_error("Error:in processing the msg queue for a replay file");
3764         exit(9);
3765     }
3766 }
3767
3768 //      Read length bytes from the current socket into buffer.
3769 static gs_uint32_t gs_read_buffer(gs_uint8_t * buffer, gs_uint32_t length){
3770     gs_uint32_t used=0;
3771     gs_uint32_t cur;
3772     fd_set socket_rset;
3773     fd_set socket_eset;
3774     struct timeval socket_timeout;
3775     int retval;
3776     
3777     FD_ZERO(&socket_rset);
3778     FD_SET(socket_desc,&socket_rset);
3779     FD_ZERO(&socket_eset);
3780     FD_SET(socket_desc,&socket_eset);
3781     // timeout in one millisecon
3782     socket_timeout.tv_sec=0;
3783     socket_timeout.tv_usec=1000;
3784     
3785     if ((retval=select(socket_desc+1,&socket_rset,0,&socket_eset,&socket_timeout))<=0) {
3786         if (retval==0) {
3787             // caught a timeout
3788             return -1;
3789         }
3790         return -2;
3791     }
3792     
3793     while(used < length) {
3794         if ((cur=read(socket_desc,&(buffer[used]),length-used))<=0) {
3795             print_error("ERROR:could not read data from PROTO stream");
3796             return -2;
3797         }
3798         used+=cur;
3799     }
3800         return 0;
3801 }
3802
3803 //      query gshub and use that info to open a socket
3804 static void init_socket() {
3805         endpoint gshub;
3806         endpoint srcinfo;
3807         struct sockaddr_in server;
3808         
3809         if (get_hub(&gshub)!=0) {
3810                 print_error("ERROR:could not find gshub for data source");
3811                 exit(0);
3812         }
3813     
3814         if (get_streamsource(gshub,name,&srcinfo,1) !=0) {
3815                 print_error("ERROR:could not find data source for stream\n");
3816                 exit(0);
3817         }
3818     
3819         socket_desc = socket(AF_INET , SOCK_STREAM , 0);
3820     if (socket_desc == -1)
3821     {
3822         print_error("ERROR:could not create socket for data stream");
3823                 exit(0);
3824     }
3825         server.sin_addr.s_addr = srcinfo.ip;
3826     server.sin_family = AF_INET;
3827     server.sin_port = srcinfo.port;
3828     
3829         if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0)
3830     {
3831                 print_error("ERROR: could not open connection to data source");
3832                 exit(0);
3833         }
3834     
3835 }
3836
3837 int read_fifo(struct pollfd* pfd, char* buffer, size_t len, time_t timeout) {
3838     int i, bytes_read = 0;
3839     while (bytes_read < len) {      
3840         if (poll(pfd, 1, timeout)) {         
3841             if (pfd->revents & POLLIN) {
3842                                 while ((i = read(pfd->fd,buffer+bytes_read,len-bytes_read))==-1 && errno==EINTR);
3843                 if (i <= 0) {
3844                     break;              // writer closed fifo or error
3845                 } else {
3846                     bytes_read += i;
3847                 } 
3848             } else
3849                 break;                  // writer closed fifo
3850         }
3851         if (!bytes_read)
3852             return -1;                  // timeout
3853     }
3854     return bytes_read;  
3855 }
3856
3857 //      proceed to the next file
3858 static void next_file() {
3859         int open_flag = O_RDONLY;
3860         if (fifo)
3861                 open_flag |= O_NONBLOCK;
3862
3863         struct stat s;
3864         if (verbose) {
3865                 fprintf(stderr,"Opening %s\n",name);
3866         }
3867         while (lstat(name,&s)!=0) {
3868                 if (errno!=ENOENT) {
3869                         print_error("dproto::lstat unexpected return value");
3870                         exit(10);
3871                 }
3872                 dproto_replay_check_messages();
3873                 usleep(10000);
3874         }
3875         if  (fd > 0) {
3876                 close(fd);
3877         }
3878     if ((fd=open(name,open_flag)) <= 0) {
3879         print_error("dproto::open failed ");
3880         exit(10);
3881     }
3882         // setup polling for this file descriptor
3883         pfd.fd = fd;
3884         pfd.events = POLLIN;
3885
3886         if (singlefile==0) {
3887                 unlink(name);
3888         }
3889 }
3890
3891 //      Perform initialization when reading from a file
3892 static gs_retval_t dproto_replay_init(gs_sp_t device) {
3893     gs_sp_t  verbosetmp;
3894     gs_sp_t  delaytmp;
3895     gs_sp_t  gshubtmp;
3896     gs_sp_t  tempdel;
3897     gs_sp_t  singlefiletmp;
3898     gs_sp_t  fifotmp;   
3899     
3900     if ((name=get_iface_properties(device,"filename"))==0) {
3901                 print_error("dproto_init::No protobuf \"Filename\" defined");
3902                 exit(0);
3903         }
3904     
3905     if ((verbosetmp=get_iface_properties(device,"verbose"))!=0) {
3906         if (strncmp(verbosetmp,"TRUE",4)==0) {
3907             verbose=1;
3908             fprintf(stderr,"VERBOSE ENABLED\n");
3909         } else {
3910             fprintf(stderr,"VERBOSE DISABLED\n");
3911         }
3912     }
3913     if ((singlefiletmp=get_iface_properties(device,"singlefile"))!=0) {
3914         if (strncmp(singlefiletmp,"TRUE",4)==0) {
3915             singlefile=1;
3916             if (verbose)
3917                 fprintf(stderr,"SINGLEFILE ENABLED\n");
3918         } else {
3919             if (verbose)
3920                 fprintf(stderr,"SINGLEFILE DISABLED\n");
3921         }
3922     }
3923     if ((fifotmp=get_iface_properties(device,"fifo"))!=0) {
3924         if (strncmp(fifotmp,"TRUE",4)==0) {
3925             fifo=1;
3926             if (verbose)
3927                 fprintf(stderr,"FIFO ENABLED\n");
3928         } else {
3929             if (verbose)
3930                 fprintf(stderr,"FIFO DISABLED\n");
3931         }
3932     }   
3933     
3934     if ((delaytmp=get_iface_properties(device,"startupdelay"))!=0) {
3935         if (verbose) {
3936             fprintf(stderr,"Startup delay of %u seconds\n",atoi(get_iface_properties(device,"startupdelay")));
3937         }
3938         startupdelay=atoi(get_iface_properties(device,"startupdelay"));
3939     }
3940     if ((gshubtmp=get_iface_properties(device,"gshub"))!=0) {
3941         if (verbose) {
3942             fprintf(stderr,"PROTO format using gshub\n");
3943         }
3944         gshub=1;
3945     }
3946         init_cur_packet();
3947     
3948     return 0;
3949 }
3950
3951 //      Read one message from a socket
3952 static gs_retval_t dproto_read_socket()
3953 {
3954         gs_uint32_t i;
3955         gs_uint32_t p;
3956         gs_uint32_t x;
3957         gs_uint32_t pkg_len;
3958         gs_int32_t r;
3959         gs_retval_t ret=0;
3960         gs_uint32_t done;
3961         char *pkg_len_s;
3962         char *timestamp_s;
3963     
3964         if((ret=gs_read_buffer(line,28))<0) { return ret;}
3965         pkg_len_s = line+4;
3966         pkg_len = atoi(pkg_len_s);
3967
3968         if((ret=gs_read_buffer(line,pkg_len))<0) { return ret;}
3969
3970         cur_packet.systemTime=time(0);
3971         ret = process_buffer(line, pkg_len);
3972         if(ret < 0){
3973             fprintf(stderr,"proto rejected by device %s, err=%d\n",this_device, ret);
3974         }
3975
3976     return 0;
3977 }
3978     
3979 // read one message from a file
3980 static gs_retval_t dproto_read_tuple(){
3981     gs_uint32_t retlen=0;
3982     gs_uint32_t done=0;
3983     gs_uint32_t pkg_len=0;
3984     gs_uint32_t eof=0;
3985         char *pkg_len_s;
3986         char *timestamp_s;
3987         gs_retval_t ret;
3988
3989     if (fd==-1) next_file();
3990
3991         retlen = read_fifo(&pfd, line, 28, 10); // use 10ms timeout
3992
3993         if(retlen==0){
3994                 eof=1;
3995         }else if(retlen==-1) {          
3996                 return -1;              // -1 indicates a timeout
3997         }else if(retlen == 28) {
3998                 pkg_len_s = line+4;
3999                 timestamp_s = line+12;
4000                 pkg_len = atoi(pkg_len_s);
4001
4002                 if(pkg_len >= MAXLINE){
4003 // TODO be more graceful here, but a large pkg_len likely indicates
4004 //              a garbaged file.
4005                         print_error("Error in dproto_read_tuple, message too long.");
4006                         fprintf(stderr,"Error in dproto_read_tuple, message length is %d, max is %d\n",pkg_len, MAXLINE);
4007                         exit(10);
4008                 }
4009
4010                 // once we received header we will wait for the main message indefinetly
4011                 retlen = read_fifo(&pfd, line, pkg_len, -1);
4012                 if(retlen<pkg_len){
4013                         print_error("Error in dproto_read_tuple, line too short.");
4014                         fprintf(stderr,"Error, read %d bytes, expecting %d\n",retlen, pkg_len);
4015                         eof=1;
4016                 }
4017
4018                 if(eof==0){
4019                         cur_packet.systemTime=time(0);
4020                         ret = process_buffer(line, pkg_len);
4021                         if(ret < 0){
4022                 fprintf(stderr,"proto rejected by device %s, err=%d\n",this_device, ret);
4023                 }
4024                 }
4025         }
4026         if(eof){
4027             if (singlefile==1) {
4028                 if(verbose) {
4029                 fprintf(stderr,"SINGLEFILE PROCESSING DONE!\n");
4030                 }
4031                 if (verbose) {
4032                 fprintf(stderr,"RTS SAYS BYe\n");
4033                 }
4034                 return -2;
4035         } else {
4036                 next_file();
4037         }
4038         }
4039
4040         return 0;
4041 }
4042     
4043 //      Main loop for processing records from a file or socket    
4044 static gs_retval_t dproto_process_file(){
4045     unsigned cnt=0;
4046     static unsigned totalcnt=0;
4047
4048     gs_retval_t retval;
4049     for(cnt=0;cnt<50000;cnt++) {
4050         if (gshub!=0) {
4051             retval=dproto_read_socket();
4052         } else {
4053             retval=dproto_read_tuple();
4054         }
4055         if (retval==-1) return 0; // got a timeout so service message queue
4056         if (retval==-2) {
4057             // we signal that everything is done if we either see an EOF tuple OR the socket is closed by the peer
4058             if (verbose)
4059                 fprintf(stderr,"Done processing waiting for things to shut down\n");
4060             rts_fta_done();
4061             // now just service message queue until we get killed or loose connectivity
4062             while (0==0) {
4063                 fta_start_service(0); // service all waiting messages
4064                 usleep(1000); // sleep a millisecond
4065             }
4066         } 
4067     }
4068     totalcnt=totalcnt+cnt;
4069     if (verbose) {
4070         fprintf(stderr,"Processed %u messages from %s\n",totalcnt, name);
4071     }
4072     return 0;
4073 }
4074     
4075 //      Entry for processing this interface
4076 gs_retval_t main_dproto(gs_int32_t devicenum, gs_sp_t device, gs_int32_t mapcnt, gs_sp_t map[]) {
4077     gs_uint32_t cont;
4078     endpoint mygshub;
4079         
4080     dproto_replay_init(device); // will call init_cur_packet
4081     this_device = strdup(device); // save for error messages.
4082         
4083     /* initalize host_lib */
4084     if (verbose) {
4085         fprintf(stderr,"Init LFTAs for %s\n",device);
4086     }
4087         
4088     if (hostlib_init(LFTA,0,devicenum,mapcnt,map)<0) {
4089         fprintf(stderr,"%s::error:could not initiate host lib for clearinghouse\n", device);
4090         exit(7);
4091     }
4092
4093 //--------------------------------------------
4094 //----  Generated dispatch code 
4095         if(strcmp(device,"CONRELEASE")==0){
4096                 process_buffer = &process_buffer_CONRELEASE;
4097         }
4098         if(strcmp(device,"LTE_PCMD")==0){
4099                 process_buffer = &process_buffer_LTE_PCMD;
4100         }
4101         if(strcmp(device,"RATDATAUSAGE")==0){
4102                 process_buffer = &process_buffer_RATDATAUSAGE;
4103         }
4104         if(strcmp(device,"RECONCOMPLETE")==0){
4105                 process_buffer = &process_buffer_RECONCOMPLETE;
4106         }
4107         if(strcmp(device,"RELCONF")==0){
4108                 process_buffer = &process_buffer_RELCONF;
4109         }
4110         if(strcmp(device,"RELREQ")==0){
4111                 process_buffer = &process_buffer_RELREQ;
4112         }
4113         if(strcmp(device,"RELREQACK")==0){
4114                 process_buffer = &process_buffer_RELREQACK;
4115         }
4116         if(strcmp(device,"SGNBRELEASERQD")==0){
4117                 process_buffer = &process_buffer_SGNBRELEASERQD;
4118         }
4119         if(strcmp(device,"RRCXFER")==0){
4120                 process_buffer = &process_buffer_RRCXFER;
4121         }
4122         if(strcmp(device,"ADDREQREJECT")==0){
4123                 process_buffer = &process_buffer_ADDREQREJECT;
4124         }
4125         if(strcmp(device,"SGNB_ADDITION_REQ_ACK")==0){
4126                 process_buffer = &process_buffer_SGNB_ADDITION_REQ_ACK;
4127         }
4128         if(strcmp(device,"SGNB_ADDITION_REQ")==0){
4129                 process_buffer = &process_buffer_SGNB_ADDITION_REQ;
4130         }
4131         if(strcmp(device,"SGNBMODCONF")==0){
4132                 process_buffer = &process_buffer_SGNBMODCONF;
4133         }
4134         if(strcmp(device,"SGNBMODREQ")==0){
4135                 process_buffer = &process_buffer_SGNBMODREQ;
4136         }
4137         if(strcmp(device,"SGNBMODREQACK")==0){
4138                 process_buffer = &process_buffer_SGNBMODREQACK;
4139         }
4140         if(strcmp(device,"SGNBMODREQREJECT")==0){
4141                 process_buffer = &process_buffer_SGNBMODREQREJECT;
4142         }
4143         if(strcmp(device,"SGNBMODREQUIRED")==0){
4144                 process_buffer = &process_buffer_SGNBMODREQUIRED;
4145         }
4146         if(strcmp(device,"SGNBMODREFUSE")==0){
4147                 process_buffer = &process_buffer_SGNBMODREFUSE;
4148         }
4149         if(strcmp(device,"SNSTATUSXFER")==0){
4150                 process_buffer = &process_buffer_SNSTATUSXFER;
4151         }
4152         if(process_buffer == NULL){
4153                 fprintf(stderr,"Error, interface %s not recognized\n",device);
4154                 exit(8);
4155         }
4156 //--------------------------------------------
4157
4158         
4159     fta_init(device); /*xxx probably should get error code back put Ted doesn't give me one*/
4160         
4161     cont=startupdelay+time(0);
4162         
4163     if (verbose) { fprintf(stderr,"Start startup delay"); }
4164         
4165     while (cont>time(NULL)) {
4166         if (fta_start_service(0)<0) {
4167             fprintf(stderr,"%s::error:in processing the msg queue\n", device);
4168             exit(9);
4169         }
4170         usleep(1000); /* sleep for one millisecond */
4171     }
4172         
4173     if (verbose) { fprintf(stderr,"... Done\n"); }
4174         
4175     // open the connection to the data source
4176     if (gshub!=0) { init_socket();}
4177         
4178     // wait to process till we get the signal from GSHUB
4179     if (get_hub(&mygshub)!=0) {
4180         print_error("ERROR:could not find gshub for data source");
4181         exit(0);
4182     }
4183     while(get_startprocessing(mygshub,get_instance_name(),0)!=0) {
4184         usleep(100);
4185         if (fta_start_service(0)<0) {
4186             fprintf(stderr,"%s::error:in processing the msg queue\n", device);
4187             exit(9);
4188         }
4189     }
4190         
4191    /* now we enter an endless loop to process data */
4192     if (verbose) {
4193         fprintf(stderr,"Start processing %s\n",device);
4194     }
4195         
4196     while (1==1) {
4197         if (dproto_process_file()<0) {
4198             fprintf(stderr,"%s::error:in processing packets\n", device);
4199             exit(8);
4200         }
4201         /* process all messages on the message queue*/
4202         if (fta_start_service(0)<0) {
4203             fprintf(stderr,"%s::error:in processing the msg queue\n", device);
4204             exit(9);
4205         }
4206     }
4207     return 0;
4208 }
4209