Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-kpm-v2.c
blob9b074b54c3ac6f29da9c92d79f133d56917d6d29
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-kpm-v2.c */
4 /* asn2wrs.py -q -L -p kpm-v2 -c ./kpm-v2.cnf -s ./packet-kpm-v2-template -D . -O ../.. e2sm-kpm-v2.02.asn e2sm-v3.01.asn */
6 /* packet-kpm-v2-template.c
7 * Copyright 2021, Martin Mathieson
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
13 * SPDX-License-Identifier: GPL-2.0-or-later
15 * References: ORAN-WG3.E2SM-KPM-v02.02
18 #include "config.h"
20 #include <epan/packet.h>
21 #include <epan/strutil.h>
22 #include <epan/asn1.h>
23 #include <wsutil/array.h>
25 #include "packet-e2ap.h"
26 #include "packet-per.h"
27 #include "packet-ntp.h"
29 #define PNAME "KPM V2"
30 #define PSNAME "KPMv2"
31 #define PFNAME "kpm-v2"
34 void proto_register_kpm_v2(void);
35 void proto_reg_handoff_kpm_v2(void);
38 #define maxnoofCells 16384
39 #define maxnoofRICStyles 63
40 #define maxnoofMeasurementInfo 65535
41 #define maxnoofLabelInfo 2147483647
42 #define maxnoofMeasurementRecord 65535
43 #define maxnoofMeasurementValue 2147483647
44 #define maxnoofConditionInfo 32768
45 #define maxnoofUEID 65535
46 #define maxnoofConditionInfoPerSub 32768
47 #define maxnoofUEIDPerSub 65535
48 #define maxnoofUEMeasReport 65535
49 #define maxE1APid 65535
50 #define maxF1APid 4
51 #define maxEARFCN 65535
52 #define maxNRARFCN 3279165
53 #define maxnoofNrCellBands 32
55 /* Initialize the protocol and registered fields */
56 static int proto_kpm_v2;
57 static int hf_kpm_v2_E2SM_KPM_EventTriggerDefinition_PDU; /* E2SM_KPM_EventTriggerDefinition */
58 static int hf_kpm_v2_E2SM_KPM_ActionDefinition_PDU; /* E2SM_KPM_ActionDefinition */
59 static int hf_kpm_v2_E2SM_KPM_IndicationHeader_PDU; /* E2SM_KPM_IndicationHeader */
60 static int hf_kpm_v2_E2SM_KPM_IndicationMessage_PDU; /* E2SM_KPM_IndicationMessage */
61 static int hf_kpm_v2_E2SM_KPM_RANfunction_Description_PDU; /* E2SM_KPM_RANfunction_Description */
62 static int hf_kpm_v2_measName; /* MeasurementTypeName */
63 static int hf_kpm_v2_measID; /* MeasurementTypeID */
64 static int hf_kpm_v2_noLabel; /* T_noLabel */
65 static int hf_kpm_v2_plmnID; /* PLMNIdentity */
66 static int hf_kpm_v2_sliceID; /* S_NSSAI */
67 static int hf_kpm_v2_fiveQI; /* FiveQI */
68 static int hf_kpm_v2_qFI; /* QosFlowIdentifier */
69 static int hf_kpm_v2_qCI; /* QCI */
70 static int hf_kpm_v2_qCImax; /* QCI */
71 static int hf_kpm_v2_qCImin; /* QCI */
72 static int hf_kpm_v2_aRPmax; /* INTEGER_1_15_ */
73 static int hf_kpm_v2_aRPmin; /* INTEGER_1_15_ */
74 static int hf_kpm_v2_bitrateRange; /* INTEGER_1_65535_ */
75 static int hf_kpm_v2_layerMU_MIMO; /* INTEGER_1_65535_ */
76 static int hf_kpm_v2_sUM; /* T_sUM */
77 static int hf_kpm_v2_distBinX; /* INTEGER_1_65535_ */
78 static int hf_kpm_v2_distBinY; /* INTEGER_1_65535_ */
79 static int hf_kpm_v2_distBinZ; /* INTEGER_1_65535_ */
80 static int hf_kpm_v2_preLabelOverride; /* T_preLabelOverride */
81 static int hf_kpm_v2_startEndInd; /* T_startEndInd */
82 static int hf_kpm_v2_min; /* T_min */
83 static int hf_kpm_v2_max; /* T_max */
84 static int hf_kpm_v2_avg; /* T_avg */
85 static int hf_kpm_v2_testType; /* TestCond_Type */
86 static int hf_kpm_v2_testExpr; /* TestCond_Expression */
87 static int hf_kpm_v2_testValue; /* TestCond_Value */
88 static int hf_kpm_v2_gBR; /* T_gBR */
89 static int hf_kpm_v2_aMBR; /* T_aMBR */
90 static int hf_kpm_v2_isStat; /* T_isStat */
91 static int hf_kpm_v2_isCatM; /* T_isCatM */
92 static int hf_kpm_v2_rSRP; /* T_rSRP */
93 static int hf_kpm_v2_rSRQ; /* T_rSRQ */
94 static int hf_kpm_v2_ul_rSRP; /* T_ul_rSRP */
95 static int hf_kpm_v2_cQI; /* T_cQI */
96 static int hf_kpm_v2_fiveQI_01; /* T_fiveQI */
97 static int hf_kpm_v2_qCI_01; /* T_qCI */
98 static int hf_kpm_v2_sNSSAI; /* T_sNSSAI */
99 static int hf_kpm_v2_valueInt; /* INTEGER */
100 static int hf_kpm_v2_valueEnum; /* INTEGER */
101 static int hf_kpm_v2_valueBool; /* BOOLEAN */
102 static int hf_kpm_v2_valueBitS; /* BIT_STRING */
103 static int hf_kpm_v2_valueOctS; /* OCTET_STRING */
104 static int hf_kpm_v2_valuePrtS; /* PrintableString */
105 static int hf_kpm_v2_valueReal; /* REAL */
106 static int hf_kpm_v2_MeasurementInfoList_item; /* MeasurementInfoItem */
107 static int hf_kpm_v2_measType; /* MeasurementType */
108 static int hf_kpm_v2_labelInfoList; /* LabelInfoList */
109 static int hf_kpm_v2_LabelInfoList_item; /* LabelInfoItem */
110 static int hf_kpm_v2_measLabel; /* MeasurementLabel */
111 static int hf_kpm_v2_MeasurementData_item; /* MeasurementDataItem */
112 static int hf_kpm_v2_measRecord; /* MeasurementRecord */
113 static int hf_kpm_v2_incompleteFlag; /* T_incompleteFlag */
114 static int hf_kpm_v2_MeasurementRecord_item; /* MeasurementRecordItem */
115 static int hf_kpm_v2_integer; /* INTEGER_0_4294967295 */
116 static int hf_kpm_v2_real; /* REAL */
117 static int hf_kpm_v2_noValue; /* NULL */
118 static int hf_kpm_v2_MeasurementInfo_Action_List_item; /* MeasurementInfo_Action_Item */
119 static int hf_kpm_v2_MeasurementCondList_item; /* MeasurementCondItem */
120 static int hf_kpm_v2_matchingCond; /* MatchingCondList */
121 static int hf_kpm_v2_MeasurementCondUEidList_item; /* MeasurementCondUEidItem */
122 static int hf_kpm_v2_matchingUEidList; /* MatchingUEidList */
123 static int hf_kpm_v2_MatchingCondList_item; /* MatchingCondItem */
124 static int hf_kpm_v2_testCondInfo; /* TestCondInfo */
125 static int hf_kpm_v2_MatchingUEidList_item; /* MatchingUEidItem */
126 static int hf_kpm_v2_ueID; /* UEID */
127 static int hf_kpm_v2_MatchingUeCondPerSubList_item; /* MatchingUeCondPerSubItem */
128 static int hf_kpm_v2_MatchingUEidPerSubList_item; /* MatchingUEidPerSubItem */
129 static int hf_kpm_v2_UEMeasurementReportList_item; /* UEMeasurementReportItem */
130 static int hf_kpm_v2_measReport; /* E2SM_KPM_IndicationMessage_Format1 */
131 static int hf_kpm_v2_eventDefinition_formats; /* T_eventDefinition_formats */
132 static int hf_kpm_v2_eventDefinition_Format1; /* E2SM_KPM_EventTriggerDefinition_Format1 */
133 static int hf_kpm_v2_reportingPeriod; /* INTEGER_1_4294967295 */
134 static int hf_kpm_v2_ric_Style_Type; /* RIC_Style_Type */
135 static int hf_kpm_v2_actionDefinition_formats; /* T_actionDefinition_formats */
136 static int hf_kpm_v2_actionDefinition_Format1; /* E2SM_KPM_ActionDefinition_Format1 */
137 static int hf_kpm_v2_actionDefinition_Format2; /* E2SM_KPM_ActionDefinition_Format2 */
138 static int hf_kpm_v2_actionDefinition_Format3; /* E2SM_KPM_ActionDefinition_Format3 */
139 static int hf_kpm_v2_actionDefinition_Format4; /* E2SM_KPM_ActionDefinition_Format4 */
140 static int hf_kpm_v2_actionDefinition_Format5; /* E2SM_KPM_ActionDefinition_Format5 */
141 static int hf_kpm_v2_measInfoList; /* MeasurementInfoList */
142 static int hf_kpm_v2_granulPeriod; /* GranularityPeriod */
143 static int hf_kpm_v2_cellGlobalID; /* CGI */
144 static int hf_kpm_v2_subscriptInfo; /* E2SM_KPM_ActionDefinition_Format1 */
145 static int hf_kpm_v2_measCondList; /* MeasurementCondList */
146 static int hf_kpm_v2_matchingUeCondList; /* MatchingUeCondPerSubList */
147 static int hf_kpm_v2_subscriptionInfo; /* E2SM_KPM_ActionDefinition_Format1 */
148 static int hf_kpm_v2_matchingUEidList_01; /* MatchingUEidPerSubList */
149 static int hf_kpm_v2_indicationHeader_formats; /* T_indicationHeader_formats */
150 static int hf_kpm_v2_indicationHeader_Format1; /* E2SM_KPM_IndicationHeader_Format1 */
151 static int hf_kpm_v2_colletStartTime; /* T_colletStartTime */
152 static int hf_kpm_v2_fileFormatversion; /* PrintableString_SIZE_0_15_ */
153 static int hf_kpm_v2_senderName; /* PrintableString_SIZE_0_400_ */
154 static int hf_kpm_v2_senderType; /* PrintableString_SIZE_0_8_ */
155 static int hf_kpm_v2_vendorName; /* PrintableString_SIZE_0_32_ */
156 static int hf_kpm_v2_indicationMessage_formats; /* T_indicationMessage_formats */
157 static int hf_kpm_v2_indicationMessage_Format1; /* E2SM_KPM_IndicationMessage_Format1 */
158 static int hf_kpm_v2_indicationMessage_Format2; /* E2SM_KPM_IndicationMessage_Format2 */
159 static int hf_kpm_v2_indicationMessage_Format3; /* E2SM_KPM_IndicationMessage_Format3 */
160 static int hf_kpm_v2_measData; /* MeasurementData */
161 static int hf_kpm_v2_measCondUEidList; /* MeasurementCondUEidList */
162 static int hf_kpm_v2_ueMeasReportList; /* UEMeasurementReportList */
163 static int hf_kpm_v2_ranFunction_Name; /* RANfunction_Name */
164 static int hf_kpm_v2_ric_EventTriggerStyle_List; /* SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item */
165 static int hf_kpm_v2_ric_EventTriggerStyle_List_item; /* RIC_EventTriggerStyle_Item */
166 static int hf_kpm_v2_ric_ReportStyle_List; /* SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item */
167 static int hf_kpm_v2_ric_ReportStyle_List_item; /* RIC_ReportStyle_Item */
168 static int hf_kpm_v2_ric_EventTriggerStyle_Type; /* RIC_Style_Type */
169 static int hf_kpm_v2_ric_EventTriggerStyle_Name; /* RIC_Style_Name */
170 static int hf_kpm_v2_ric_EventTriggerFormat_Type; /* RIC_Format_Type */
171 static int hf_kpm_v2_ric_ReportStyle_Type; /* RIC_Style_Type */
172 static int hf_kpm_v2_ric_ReportStyle_Name; /* RIC_Style_Name */
173 static int hf_kpm_v2_ric_ActionFormat_Type; /* RIC_Format_Type */
174 static int hf_kpm_v2_measInfo_Action_List; /* MeasurementInfo_Action_List */
175 static int hf_kpm_v2_ric_IndicationHeaderFormat_Type; /* RIC_Format_Type */
176 static int hf_kpm_v2_ric_IndicationMessageFormat_Type; /* RIC_Format_Type */
177 static int hf_kpm_v2_nR_CGI; /* NR_CGI */
178 static int hf_kpm_v2_eUTRA_CGI; /* EUTRA_CGI */
179 static int hf_kpm_v2_ranFunction_ShortName; /* T_ranFunction_ShortName */
180 static int hf_kpm_v2_ranFunction_E2SM_OID; /* T_ranFunction_E2SM_OID */
181 static int hf_kpm_v2_ranFunction_Description; /* PrintableString_SIZE_1_150_ */
182 static int hf_kpm_v2_ranFunction_Instance; /* INTEGER */
183 static int hf_kpm_v2_gNB_UEID; /* UEID_GNB */
184 static int hf_kpm_v2_gNB_DU_UEID; /* UEID_GNB_DU */
185 static int hf_kpm_v2_gNB_CU_UP_UEID; /* UEID_GNB_CU_UP */
186 static int hf_kpm_v2_ng_eNB_UEID; /* UEID_NG_ENB */
187 static int hf_kpm_v2_ng_eNB_DU_UEID; /* UEID_NG_ENB_DU */
188 static int hf_kpm_v2_en_gNB_UEID; /* UEID_EN_GNB */
189 static int hf_kpm_v2_eNB_UEID; /* UEID_ENB */
190 static int hf_kpm_v2_amf_UE_NGAP_ID; /* AMF_UE_NGAP_ID */
191 static int hf_kpm_v2_guami; /* GUAMI */
192 static int hf_kpm_v2_gNB_CU_UE_F1AP_ID_List; /* UEID_GNB_CU_F1AP_ID_List */
193 static int hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID_List; /* UEID_GNB_CU_CP_E1AP_ID_List */
194 static int hf_kpm_v2_ran_UEID; /* RANUEID */
195 static int hf_kpm_v2_m_NG_RAN_UE_XnAP_ID; /* NG_RANnodeUEXnAPID */
196 static int hf_kpm_v2_globalGNB_ID; /* GlobalGNB_ID */
197 static int hf_kpm_v2_globalNG_RANNode_ID; /* GlobalNGRANNodeID */
198 static int hf_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List_item; /* UEID_GNB_CU_CP_E1AP_ID_Item */
199 static int hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID; /* GNB_CU_CP_UE_E1AP_ID */
200 static int hf_kpm_v2_UEID_GNB_CU_F1AP_ID_List_item; /* UEID_GNB_CU_CP_F1AP_ID_Item */
201 static int hf_kpm_v2_gNB_CU_UE_F1AP_ID; /* GNB_CU_UE_F1AP_ID */
202 static int hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID; /* NGENB_CU_UE_W1AP_ID */
203 static int hf_kpm_v2_globalNgENB_ID; /* GlobalNgENB_ID */
204 static int hf_kpm_v2_m_eNB_UE_X2AP_ID; /* ENB_UE_X2AP_ID */
205 static int hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension; /* ENB_UE_X2AP_ID_Extension */
206 static int hf_kpm_v2_globalENB_ID; /* GlobalENB_ID */
207 static int hf_kpm_v2_mME_UE_S1AP_ID; /* MME_UE_S1AP_ID */
208 static int hf_kpm_v2_gUMMEI; /* GUMMEI */
209 static int hf_kpm_v2_macro_eNB_ID; /* BIT_STRING_SIZE_20 */
210 static int hf_kpm_v2_home_eNB_ID; /* BIT_STRING_SIZE_28 */
211 static int hf_kpm_v2_short_Macro_eNB_ID; /* BIT_STRING_SIZE_18 */
212 static int hf_kpm_v2_long_Macro_eNB_ID; /* BIT_STRING_SIZE_21 */
213 static int hf_kpm_v2_pLMNIdentity; /* PLMNIdentity */
214 static int hf_kpm_v2_eNB_ID; /* ENB_ID */
215 static int hf_kpm_v2_pLMN_Identity; /* PLMNIdentity */
216 static int hf_kpm_v2_mME_Group_ID; /* MME_Group_ID */
217 static int hf_kpm_v2_mME_Code; /* MME_Code */
218 static int hf_kpm_v2_eUTRACellIdentity; /* EUTRACellIdentity */
219 static int hf_kpm_v2_gNB_ID; /* GNB_ID */
220 static int hf_kpm_v2_ngENB_ID; /* NgENB_ID */
221 static int hf_kpm_v2_gNB_ID_01; /* BIT_STRING_SIZE_22_32 */
222 static int hf_kpm_v2_aMFRegionID; /* AMFRegionID */
223 static int hf_kpm_v2_aMFSetID; /* AMFSetID */
224 static int hf_kpm_v2_aMFPointer; /* AMFPointer */
225 static int hf_kpm_v2_macroNgENB_ID; /* BIT_STRING_SIZE_20 */
226 static int hf_kpm_v2_shortMacroNgENB_ID; /* BIT_STRING_SIZE_18 */
227 static int hf_kpm_v2_longMacroNgENB_ID; /* BIT_STRING_SIZE_21 */
228 static int hf_kpm_v2_nRCellIdentity; /* NRCellIdentity */
229 static int hf_kpm_v2_sST; /* SST */
230 static int hf_kpm_v2_sD; /* SD */
231 static int hf_kpm_v2_gNB; /* GlobalGNB_ID */
232 static int hf_kpm_v2_ng_eNB; /* GlobalNgENB_ID */
234 static int hf_kpm_v2_timestamp_string;
237 static int ett_kpm_v2_MeasurementType;
238 static int ett_kpm_v2_MeasurementLabel;
239 static int ett_kpm_v2_TestCondInfo;
240 static int ett_kpm_v2_TestCond_Type;
241 static int ett_kpm_v2_TestCond_Value;
242 static int ett_kpm_v2_MeasurementInfoList;
243 static int ett_kpm_v2_MeasurementInfoItem;
244 static int ett_kpm_v2_LabelInfoList;
245 static int ett_kpm_v2_LabelInfoItem;
246 static int ett_kpm_v2_MeasurementData;
247 static int ett_kpm_v2_MeasurementDataItem;
248 static int ett_kpm_v2_MeasurementRecord;
249 static int ett_kpm_v2_MeasurementRecordItem;
250 static int ett_kpm_v2_MeasurementInfo_Action_List;
251 static int ett_kpm_v2_MeasurementInfo_Action_Item;
252 static int ett_kpm_v2_MeasurementCondList;
253 static int ett_kpm_v2_MeasurementCondItem;
254 static int ett_kpm_v2_MeasurementCondUEidList;
255 static int ett_kpm_v2_MeasurementCondUEidItem;
256 static int ett_kpm_v2_MatchingCondList;
257 static int ett_kpm_v2_MatchingCondItem;
258 static int ett_kpm_v2_MatchingUEidList;
259 static int ett_kpm_v2_MatchingUEidItem;
260 static int ett_kpm_v2_MatchingUeCondPerSubList;
261 static int ett_kpm_v2_MatchingUeCondPerSubItem;
262 static int ett_kpm_v2_MatchingUEidPerSubList;
263 static int ett_kpm_v2_MatchingUEidPerSubItem;
264 static int ett_kpm_v2_UEMeasurementReportList;
265 static int ett_kpm_v2_UEMeasurementReportItem;
266 static int ett_kpm_v2_E2SM_KPM_EventTriggerDefinition;
267 static int ett_kpm_v2_T_eventDefinition_formats;
268 static int ett_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1;
269 static int ett_kpm_v2_E2SM_KPM_ActionDefinition;
270 static int ett_kpm_v2_T_actionDefinition_formats;
271 static int ett_kpm_v2_E2SM_KPM_ActionDefinition_Format1;
272 static int ett_kpm_v2_E2SM_KPM_ActionDefinition_Format2;
273 static int ett_kpm_v2_E2SM_KPM_ActionDefinition_Format3;
274 static int ett_kpm_v2_E2SM_KPM_ActionDefinition_Format4;
275 static int ett_kpm_v2_E2SM_KPM_ActionDefinition_Format5;
276 static int ett_kpm_v2_E2SM_KPM_IndicationHeader;
277 static int ett_kpm_v2_T_indicationHeader_formats;
278 static int ett_kpm_v2_E2SM_KPM_IndicationHeader_Format1;
279 static int ett_kpm_v2_E2SM_KPM_IndicationMessage;
280 static int ett_kpm_v2_T_indicationMessage_formats;
281 static int ett_kpm_v2_E2SM_KPM_IndicationMessage_Format1;
282 static int ett_kpm_v2_E2SM_KPM_IndicationMessage_Format2;
283 static int ett_kpm_v2_E2SM_KPM_IndicationMessage_Format3;
284 static int ett_kpm_v2_E2SM_KPM_RANfunction_Description;
285 static int ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item;
286 static int ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item;
287 static int ett_kpm_v2_RIC_EventTriggerStyle_Item;
288 static int ett_kpm_v2_RIC_ReportStyle_Item;
289 static int ett_kpm_v2_CGI;
290 static int ett_kpm_v2_RANfunction_Name;
291 static int ett_kpm_v2_UEID;
292 static int ett_kpm_v2_UEID_GNB;
293 static int ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List;
294 static int ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item;
295 static int ett_kpm_v2_UEID_GNB_CU_F1AP_ID_List;
296 static int ett_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item;
297 static int ett_kpm_v2_UEID_GNB_DU;
298 static int ett_kpm_v2_UEID_GNB_CU_UP;
299 static int ett_kpm_v2_UEID_NG_ENB;
300 static int ett_kpm_v2_UEID_NG_ENB_DU;
301 static int ett_kpm_v2_UEID_EN_GNB;
302 static int ett_kpm_v2_UEID_ENB;
303 static int ett_kpm_v2_ENB_ID;
304 static int ett_kpm_v2_GlobalENB_ID;
305 static int ett_kpm_v2_GUMMEI;
306 static int ett_kpm_v2_EUTRA_CGI;
307 static int ett_kpm_v2_GlobalGNB_ID;
308 static int ett_kpm_v2_GlobalNgENB_ID;
309 static int ett_kpm_v2_GNB_ID;
310 static int ett_kpm_v2_GUAMI;
311 static int ett_kpm_v2_NgENB_ID;
312 static int ett_kpm_v2_NR_CGI;
313 static int ett_kpm_v2_S_NSSAI;
314 static int ett_kpm_v2_GlobalNGRANNodeID;
317 /* Forward declarations */
318 static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
319 static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
320 static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
321 static int dissect_E2SM_KPM_IndicationMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
322 static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
326 static int
327 dissect_kpm_v2_TimeStamp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
328 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
329 4, 4, false, NULL);
331 return offset;
336 static int
337 dissect_kpm_v2_GranularityPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
338 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
339 1U, 4294967295U, NULL, false);
341 return offset;
346 static int
347 dissect_kpm_v2_MeasurementTypeName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
348 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
349 1, 150, true,
350 NULL);
352 return offset;
357 static int
358 dissect_kpm_v2_MeasurementTypeID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
359 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
360 1U, 65536U, NULL, true);
362 return offset;
366 static const value_string kpm_v2_MeasurementType_vals[] = {
367 { 0, "measName" },
368 { 1, "measID" },
369 { 0, NULL }
372 static const per_choice_t MeasurementType_choice[] = {
373 { 0, &hf_kpm_v2_measName , ASN1_EXTENSION_ROOT , dissect_kpm_v2_MeasurementTypeName },
374 { 1, &hf_kpm_v2_measID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_MeasurementTypeID },
375 { 0, NULL, 0, NULL }
378 static int
379 dissect_kpm_v2_MeasurementType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
380 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
381 ett_kpm_v2_MeasurementType, MeasurementType_choice,
382 NULL);
384 return offset;
388 static const value_string kpm_v2_T_noLabel_vals[] = {
389 { 0, "true" },
390 { 0, NULL }
394 static int
395 dissect_kpm_v2_T_noLabel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
396 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
397 1, NULL, true, 0, NULL);
399 return offset;
404 static int
405 dissect_kpm_v2_PLMNIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
406 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
407 3, 3, false, NULL);
409 return offset;
414 static int
415 dissect_kpm_v2_SST(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
416 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
417 1, 1, false, NULL);
419 return offset;
424 static int
425 dissect_kpm_v2_SD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
426 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
427 3, 3, false, NULL);
429 return offset;
433 static const per_sequence_t S_NSSAI_sequence[] = {
434 { &hf_kpm_v2_sST , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_SST },
435 { &hf_kpm_v2_sD , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_SD },
436 { NULL, 0, 0, NULL }
439 static int
440 dissect_kpm_v2_S_NSSAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
441 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
442 ett_kpm_v2_S_NSSAI, S_NSSAI_sequence);
444 return offset;
449 static int
450 dissect_kpm_v2_FiveQI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
451 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
452 0U, 255U, NULL, true);
454 return offset;
459 static int
460 dissect_kpm_v2_QosFlowIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
461 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
462 0U, 63U, NULL, true);
464 return offset;
469 static int
470 dissect_kpm_v2_QCI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
471 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
472 0U, 255U, NULL, false);
474 return offset;
479 static int
480 dissect_kpm_v2_INTEGER_1_15_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
481 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
482 1U, 15U, NULL, true);
484 return offset;
489 static int
490 dissect_kpm_v2_INTEGER_1_65535_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
491 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
492 1U, 65535U, NULL, true);
494 return offset;
498 static const value_string kpm_v2_T_sUM_vals[] = {
499 { 0, "true" },
500 { 0, NULL }
504 static int
505 dissect_kpm_v2_T_sUM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
506 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
507 1, NULL, true, 0, NULL);
509 return offset;
513 static const value_string kpm_v2_T_preLabelOverride_vals[] = {
514 { 0, "true" },
515 { 0, NULL }
519 static int
520 dissect_kpm_v2_T_preLabelOverride(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
521 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
522 1, NULL, true, 0, NULL);
524 return offset;
528 static const value_string kpm_v2_T_startEndInd_vals[] = {
529 { 0, "start" },
530 { 1, "end" },
531 { 0, NULL }
535 static int
536 dissect_kpm_v2_T_startEndInd(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
537 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
538 2, NULL, true, 0, NULL);
540 return offset;
544 static const value_string kpm_v2_T_min_vals[] = {
545 { 0, "true" },
546 { 0, NULL }
550 static int
551 dissect_kpm_v2_T_min(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
552 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
553 1, NULL, true, 0, NULL);
555 return offset;
559 static const value_string kpm_v2_T_max_vals[] = {
560 { 0, "true" },
561 { 0, NULL }
565 static int
566 dissect_kpm_v2_T_max(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
567 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
568 1, NULL, true, 0, NULL);
570 return offset;
574 static const value_string kpm_v2_T_avg_vals[] = {
575 { 0, "true" },
576 { 0, NULL }
580 static int
581 dissect_kpm_v2_T_avg(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
582 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
583 1, NULL, true, 0, NULL);
585 return offset;
589 static const per_sequence_t MeasurementLabel_sequence[] = {
590 { &hf_kpm_v2_noLabel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_noLabel },
591 { &hf_kpm_v2_plmnID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PLMNIdentity },
592 { &hf_kpm_v2_sliceID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_S_NSSAI },
593 { &hf_kpm_v2_fiveQI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_FiveQI },
594 { &hf_kpm_v2_qFI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QosFlowIdentifier },
595 { &hf_kpm_v2_qCI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QCI },
596 { &hf_kpm_v2_qCImax , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QCI },
597 { &hf_kpm_v2_qCImin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QCI },
598 { &hf_kpm_v2_aRPmax , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_15_ },
599 { &hf_kpm_v2_aRPmin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_15_ },
600 { &hf_kpm_v2_bitrateRange , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
601 { &hf_kpm_v2_layerMU_MIMO , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
602 { &hf_kpm_v2_sUM , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_sUM },
603 { &hf_kpm_v2_distBinX , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
604 { &hf_kpm_v2_distBinY , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
605 { &hf_kpm_v2_distBinZ , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
606 { &hf_kpm_v2_preLabelOverride, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_preLabelOverride },
607 { &hf_kpm_v2_startEndInd , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_startEndInd },
608 { &hf_kpm_v2_min , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_min },
609 { &hf_kpm_v2_max , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_max },
610 { &hf_kpm_v2_avg , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_avg },
611 { NULL, 0, 0, NULL }
614 static int
615 dissect_kpm_v2_MeasurementLabel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
616 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
617 ett_kpm_v2_MeasurementLabel, MeasurementLabel_sequence);
619 return offset;
623 static const value_string kpm_v2_T_gBR_vals[] = {
624 { 0, "true" },
625 { 0, NULL }
629 static int
630 dissect_kpm_v2_T_gBR(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
631 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
632 1, NULL, true, 0, NULL);
634 return offset;
638 static const value_string kpm_v2_T_aMBR_vals[] = {
639 { 0, "true" },
640 { 0, NULL }
644 static int
645 dissect_kpm_v2_T_aMBR(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
646 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
647 1, NULL, true, 0, NULL);
649 return offset;
653 static const value_string kpm_v2_T_isStat_vals[] = {
654 { 0, "true" },
655 { 0, NULL }
659 static int
660 dissect_kpm_v2_T_isStat(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
661 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
662 1, NULL, true, 0, NULL);
664 return offset;
668 static const value_string kpm_v2_T_isCatM_vals[] = {
669 { 0, "true" },
670 { 0, NULL }
674 static int
675 dissect_kpm_v2_T_isCatM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
676 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
677 1, NULL, true, 0, NULL);
679 return offset;
683 static const value_string kpm_v2_T_rSRP_vals[] = {
684 { 0, "true" },
685 { 0, NULL }
689 static int
690 dissect_kpm_v2_T_rSRP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
691 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
692 1, NULL, true, 0, NULL);
694 return offset;
698 static const value_string kpm_v2_T_rSRQ_vals[] = {
699 { 0, "true" },
700 { 0, NULL }
704 static int
705 dissect_kpm_v2_T_rSRQ(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
706 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
707 1, NULL, true, 0, NULL);
709 return offset;
713 static const value_string kpm_v2_T_ul_rSRP_vals[] = {
714 { 0, "true" },
715 { 0, NULL }
719 static int
720 dissect_kpm_v2_T_ul_rSRP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
721 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
722 1, NULL, true, 0, NULL);
724 return offset;
728 static const value_string kpm_v2_T_cQI_vals[] = {
729 { 0, "true" },
730 { 0, NULL }
734 static int
735 dissect_kpm_v2_T_cQI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
736 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
737 1, NULL, true, 0, NULL);
739 return offset;
743 static const value_string kpm_v2_T_fiveQI_vals[] = {
744 { 0, "true" },
745 { 0, NULL }
749 static int
750 dissect_kpm_v2_T_fiveQI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
751 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
752 1, NULL, true, 0, NULL);
754 return offset;
758 static const value_string kpm_v2_T_qCI_vals[] = {
759 { 0, "true" },
760 { 0, NULL }
764 static int
765 dissect_kpm_v2_T_qCI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
766 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
767 1, NULL, true, 0, NULL);
769 return offset;
773 static const value_string kpm_v2_T_sNSSAI_vals[] = {
774 { 0, "true" },
775 { 0, NULL }
779 static int
780 dissect_kpm_v2_T_sNSSAI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
781 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
782 1, NULL, true, 0, NULL);
784 return offset;
788 static const value_string kpm_v2_TestCond_Type_vals[] = {
789 { 0, "gBR" },
790 { 1, "aMBR" },
791 { 2, "isStat" },
792 { 3, "isCatM" },
793 { 4, "rSRP" },
794 { 5, "rSRQ" },
795 { 6, "ul-rSRP" },
796 { 7, "cQI" },
797 { 8, "fiveQI" },
798 { 9, "qCI" },
799 { 10, "sNSSAI" },
800 { 0, NULL }
803 static const per_choice_t TestCond_Type_choice[] = {
804 { 0, &hf_kpm_v2_gBR , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_gBR },
805 { 1, &hf_kpm_v2_aMBR , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_aMBR },
806 { 2, &hf_kpm_v2_isStat , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_isStat },
807 { 3, &hf_kpm_v2_isCatM , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_isCatM },
808 { 4, &hf_kpm_v2_rSRP , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_rSRP },
809 { 5, &hf_kpm_v2_rSRQ , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_rSRQ },
810 { 6, &hf_kpm_v2_ul_rSRP , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_ul_rSRP },
811 { 7, &hf_kpm_v2_cQI , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_cQI },
812 { 8, &hf_kpm_v2_fiveQI_01 , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_fiveQI },
813 { 9, &hf_kpm_v2_qCI_01 , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_qCI },
814 { 10, &hf_kpm_v2_sNSSAI , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_sNSSAI },
815 { 0, NULL, 0, NULL }
818 static int
819 dissect_kpm_v2_TestCond_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
820 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
821 ett_kpm_v2_TestCond_Type, TestCond_Type_choice,
822 NULL);
824 return offset;
828 static const value_string kpm_v2_TestCond_Expression_vals[] = {
829 { 0, "equal" },
830 { 1, "greaterthan" },
831 { 2, "lessthan" },
832 { 3, "contains" },
833 { 4, "present" },
834 { 0, NULL }
838 static int
839 dissect_kpm_v2_TestCond_Expression(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
840 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
841 5, NULL, true, 0, NULL);
843 return offset;
848 static int
849 dissect_kpm_v2_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
850 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
852 return offset;
857 static int
858 dissect_kpm_v2_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
859 offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
861 return offset;
866 static int
867 dissect_kpm_v2_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
868 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
869 NO_BOUND, NO_BOUND, false, NULL, 0, NULL, NULL);
871 return offset;
876 static int
877 dissect_kpm_v2_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
878 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
879 NO_BOUND, NO_BOUND, false, NULL);
881 return offset;
886 static int
887 dissect_kpm_v2_PrintableString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
888 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
889 NO_BOUND, NO_BOUND, false,
890 NULL);
892 return offset;
897 static int
898 dissect_kpm_v2_REAL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
899 offset = dissect_per_real(tvb, offset, actx, tree, hf_index, NULL);
901 return offset;
905 static const value_string kpm_v2_TestCond_Value_vals[] = {
906 { 0, "valueInt" },
907 { 1, "valueEnum" },
908 { 2, "valueBool" },
909 { 3, "valueBitS" },
910 { 4, "valueOctS" },
911 { 5, "valuePrtS" },
912 { 6, "valueReal" },
913 { 0, NULL }
916 static const per_choice_t TestCond_Value_choice[] = {
917 { 0, &hf_kpm_v2_valueInt , ASN1_EXTENSION_ROOT , dissect_kpm_v2_INTEGER },
918 { 1, &hf_kpm_v2_valueEnum , ASN1_EXTENSION_ROOT , dissect_kpm_v2_INTEGER },
919 { 2, &hf_kpm_v2_valueBool , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BOOLEAN },
920 { 3, &hf_kpm_v2_valueBitS , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING },
921 { 4, &hf_kpm_v2_valueOctS , ASN1_EXTENSION_ROOT , dissect_kpm_v2_OCTET_STRING },
922 { 5, &hf_kpm_v2_valuePrtS , ASN1_EXTENSION_ROOT , dissect_kpm_v2_PrintableString },
923 { 6, &hf_kpm_v2_valueReal , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_REAL },
924 { 0, NULL, 0, NULL }
927 static int
928 dissect_kpm_v2_TestCond_Value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
929 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
930 ett_kpm_v2_TestCond_Value, TestCond_Value_choice,
931 NULL);
933 return offset;
937 static const per_sequence_t TestCondInfo_sequence[] = {
938 { &hf_kpm_v2_testType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_TestCond_Type },
939 { &hf_kpm_v2_testExpr , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_TestCond_Expression },
940 { &hf_kpm_v2_testValue , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_TestCond_Value },
941 { NULL, 0, 0, NULL }
944 static int
945 dissect_kpm_v2_TestCondInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
946 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
947 ett_kpm_v2_TestCondInfo, TestCondInfo_sequence);
949 return offset;
953 static const per_sequence_t LabelInfoItem_sequence[] = {
954 { &hf_kpm_v2_measLabel , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementLabel },
955 { NULL, 0, 0, NULL }
958 static int
959 dissect_kpm_v2_LabelInfoItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
960 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
961 ett_kpm_v2_LabelInfoItem, LabelInfoItem_sequence);
963 return offset;
967 static const per_sequence_t LabelInfoList_sequence_of[1] = {
968 { &hf_kpm_v2_LabelInfoList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_LabelInfoItem },
971 static int
972 dissect_kpm_v2_LabelInfoList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
973 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
974 ett_kpm_v2_LabelInfoList, LabelInfoList_sequence_of,
975 1, maxnoofLabelInfo, false);
977 return offset;
981 static const per_sequence_t MeasurementInfoItem_sequence[] = {
982 { &hf_kpm_v2_measType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementType },
983 { &hf_kpm_v2_labelInfoList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_LabelInfoList },
984 { NULL, 0, 0, NULL }
987 static int
988 dissect_kpm_v2_MeasurementInfoItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
989 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
990 ett_kpm_v2_MeasurementInfoItem, MeasurementInfoItem_sequence);
992 return offset;
996 static const per_sequence_t MeasurementInfoList_sequence_of[1] = {
997 { &hf_kpm_v2_MeasurementInfoList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfoItem },
1000 static int
1001 dissect_kpm_v2_MeasurementInfoList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1002 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1003 ett_kpm_v2_MeasurementInfoList, MeasurementInfoList_sequence_of,
1004 1, maxnoofMeasurementInfo, false);
1006 return offset;
1011 static int
1012 dissect_kpm_v2_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1013 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1014 0U, 4294967295U, NULL, false);
1016 return offset;
1021 static int
1022 dissect_kpm_v2_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1023 offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
1025 return offset;
1029 static const value_string kpm_v2_MeasurementRecordItem_vals[] = {
1030 { 0, "integer" },
1031 { 1, "real" },
1032 { 2, "noValue" },
1033 { 0, NULL }
1036 static const per_choice_t MeasurementRecordItem_choice[] = {
1037 { 0, &hf_kpm_v2_integer , ASN1_EXTENSION_ROOT , dissect_kpm_v2_INTEGER_0_4294967295 },
1038 { 1, &hf_kpm_v2_real , ASN1_EXTENSION_ROOT , dissect_kpm_v2_REAL },
1039 { 2, &hf_kpm_v2_noValue , ASN1_EXTENSION_ROOT , dissect_kpm_v2_NULL },
1040 { 0, NULL, 0, NULL }
1043 static int
1044 dissect_kpm_v2_MeasurementRecordItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1045 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1046 ett_kpm_v2_MeasurementRecordItem, MeasurementRecordItem_choice,
1047 NULL);
1049 return offset;
1053 static const per_sequence_t MeasurementRecord_sequence_of[1] = {
1054 { &hf_kpm_v2_MeasurementRecord_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementRecordItem },
1057 static int
1058 dissect_kpm_v2_MeasurementRecord(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1059 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1060 ett_kpm_v2_MeasurementRecord, MeasurementRecord_sequence_of,
1061 1, maxnoofMeasurementValue, false);
1063 return offset;
1067 static const value_string kpm_v2_T_incompleteFlag_vals[] = {
1068 { 0, "true" },
1069 { 0, NULL }
1073 static int
1074 dissect_kpm_v2_T_incompleteFlag(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1075 offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1076 1, NULL, true, 0, NULL);
1078 return offset;
1082 static const per_sequence_t MeasurementDataItem_sequence[] = {
1083 { &hf_kpm_v2_measRecord , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementRecord },
1084 { &hf_kpm_v2_incompleteFlag, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_incompleteFlag },
1085 { NULL, 0, 0, NULL }
1088 static int
1089 dissect_kpm_v2_MeasurementDataItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1090 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1091 ett_kpm_v2_MeasurementDataItem, MeasurementDataItem_sequence);
1093 return offset;
1097 static const per_sequence_t MeasurementData_sequence_of[1] = {
1098 { &hf_kpm_v2_MeasurementData_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementDataItem },
1101 static int
1102 dissect_kpm_v2_MeasurementData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1103 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1104 ett_kpm_v2_MeasurementData, MeasurementData_sequence_of,
1105 1, maxnoofMeasurementRecord, false);
1107 return offset;
1111 static const per_sequence_t MeasurementInfo_Action_Item_sequence[] = {
1112 { &hf_kpm_v2_measName , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementTypeName },
1113 { &hf_kpm_v2_measID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_MeasurementTypeID },
1114 { NULL, 0, 0, NULL }
1117 static int
1118 dissect_kpm_v2_MeasurementInfo_Action_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1119 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1120 ett_kpm_v2_MeasurementInfo_Action_Item, MeasurementInfo_Action_Item_sequence);
1122 return offset;
1126 static const per_sequence_t MeasurementInfo_Action_List_sequence_of[1] = {
1127 { &hf_kpm_v2_MeasurementInfo_Action_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfo_Action_Item },
1130 static int
1131 dissect_kpm_v2_MeasurementInfo_Action_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1132 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1133 ett_kpm_v2_MeasurementInfo_Action_List, MeasurementInfo_Action_List_sequence_of,
1134 1, maxnoofMeasurementInfo, false);
1136 return offset;
1140 static const value_string kpm_v2_MatchingCondItem_vals[] = {
1141 { 0, "measLabel" },
1142 { 1, "testCondInfo" },
1143 { 0, NULL }
1146 static const per_choice_t MatchingCondItem_choice[] = {
1147 { 0, &hf_kpm_v2_measLabel , ASN1_EXTENSION_ROOT , dissect_kpm_v2_MeasurementLabel },
1148 { 1, &hf_kpm_v2_testCondInfo , ASN1_EXTENSION_ROOT , dissect_kpm_v2_TestCondInfo },
1149 { 0, NULL, 0, NULL }
1152 static int
1153 dissect_kpm_v2_MatchingCondItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1154 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1155 ett_kpm_v2_MatchingCondItem, MatchingCondItem_choice,
1156 NULL);
1158 return offset;
1162 static const per_sequence_t MatchingCondList_sequence_of[1] = {
1163 { &hf_kpm_v2_MatchingCondList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingCondItem },
1166 static int
1167 dissect_kpm_v2_MatchingCondList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1168 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1169 ett_kpm_v2_MatchingCondList, MatchingCondList_sequence_of,
1170 1, maxnoofConditionInfo, false);
1172 return offset;
1176 static const per_sequence_t MeasurementCondItem_sequence[] = {
1177 { &hf_kpm_v2_measType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementType },
1178 { &hf_kpm_v2_matchingCond , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingCondList },
1179 { NULL, 0, 0, NULL }
1182 static int
1183 dissect_kpm_v2_MeasurementCondItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1184 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1185 ett_kpm_v2_MeasurementCondItem, MeasurementCondItem_sequence);
1187 return offset;
1191 static const per_sequence_t MeasurementCondList_sequence_of[1] = {
1192 { &hf_kpm_v2_MeasurementCondList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondItem },
1195 static int
1196 dissect_kpm_v2_MeasurementCondList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1197 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1198 ett_kpm_v2_MeasurementCondList, MeasurementCondList_sequence_of,
1199 1, maxnoofMeasurementInfo, false);
1201 return offset;
1206 static int
1207 dissect_kpm_v2_AMF_UE_NGAP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1208 offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index,
1209 0U, UINT64_C(1099511627775), NULL, false);
1211 return offset;
1216 static int
1217 dissect_kpm_v2_AMFRegionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1218 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1219 8, 8, false, NULL, 0, NULL, NULL);
1221 return offset;
1226 static int
1227 dissect_kpm_v2_AMFSetID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1228 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1229 10, 10, false, NULL, 0, NULL, NULL);
1231 return offset;
1236 static int
1237 dissect_kpm_v2_AMFPointer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1238 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1239 6, 6, false, NULL, 0, NULL, NULL);
1241 return offset;
1245 static const per_sequence_t GUAMI_sequence[] = {
1246 { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
1247 { &hf_kpm_v2_aMFRegionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMFRegionID },
1248 { &hf_kpm_v2_aMFSetID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMFSetID },
1249 { &hf_kpm_v2_aMFPointer , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMFPointer },
1250 { NULL, 0, 0, NULL }
1253 static int
1254 dissect_kpm_v2_GUAMI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1255 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1256 ett_kpm_v2_GUAMI, GUAMI_sequence);
1258 return offset;
1263 static int
1264 dissect_kpm_v2_GNB_CU_UE_F1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1265 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1266 0U, 4294967295U, NULL, false);
1268 return offset;
1272 static const per_sequence_t UEID_GNB_CU_CP_F1AP_ID_Item_sequence[] = {
1273 { &hf_kpm_v2_gNB_CU_UE_F1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_UE_F1AP_ID },
1274 { NULL, 0, 0, NULL }
1277 static int
1278 dissect_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1279 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1280 ett_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item, UEID_GNB_CU_CP_F1AP_ID_Item_sequence);
1282 return offset;
1286 static const per_sequence_t UEID_GNB_CU_F1AP_ID_List_sequence_of[1] = {
1287 { &hf_kpm_v2_UEID_GNB_CU_F1AP_ID_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item },
1290 static int
1291 dissect_kpm_v2_UEID_GNB_CU_F1AP_ID_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1292 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1293 ett_kpm_v2_UEID_GNB_CU_F1AP_ID_List, UEID_GNB_CU_F1AP_ID_List_sequence_of,
1294 1, maxF1APid, false);
1296 return offset;
1301 static int
1302 dissect_kpm_v2_GNB_CU_CP_UE_E1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1303 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1304 0U, 4294967295U, NULL, false);
1306 return offset;
1310 static const per_sequence_t UEID_GNB_CU_CP_E1AP_ID_Item_sequence[] = {
1311 { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_CP_UE_E1AP_ID },
1312 { NULL, 0, 0, NULL }
1315 static int
1316 dissect_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1317 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1318 ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item, UEID_GNB_CU_CP_E1AP_ID_Item_sequence);
1320 return offset;
1324 static const per_sequence_t UEID_GNB_CU_CP_E1AP_ID_List_sequence_of[1] = {
1325 { &hf_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item },
1328 static int
1329 dissect_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1330 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1331 ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List, UEID_GNB_CU_CP_E1AP_ID_List_sequence_of,
1332 1, maxE1APid, false);
1334 return offset;
1339 static int
1340 dissect_kpm_v2_RANUEID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1341 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1342 8, 8, false, NULL);
1344 return offset;
1349 static int
1350 dissect_kpm_v2_NG_RANnodeUEXnAPID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1351 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1352 0U, 4294967295U, NULL, false);
1354 return offset;
1359 static int
1360 dissect_kpm_v2_BIT_STRING_SIZE_22_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1361 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1362 22, 32, false, NULL, 0, NULL, NULL);
1364 return offset;
1368 static const value_string kpm_v2_GNB_ID_vals[] = {
1369 { 0, "gNB-ID" },
1370 { 0, NULL }
1373 static const per_choice_t GNB_ID_choice[] = {
1374 { 0, &hf_kpm_v2_gNB_ID_01 , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_22_32 },
1375 { 0, NULL, 0, NULL }
1378 static int
1379 dissect_kpm_v2_GNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1380 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1381 ett_kpm_v2_GNB_ID, GNB_ID_choice,
1382 NULL);
1384 return offset;
1388 static const per_sequence_t GlobalGNB_ID_sequence[] = {
1389 { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
1390 { &hf_kpm_v2_gNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_ID },
1391 { NULL, 0, 0, NULL }
1394 static int
1395 dissect_kpm_v2_GlobalGNB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1396 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1397 ett_kpm_v2_GlobalGNB_ID, GlobalGNB_ID_sequence);
1399 return offset;
1404 static int
1405 dissect_kpm_v2_BIT_STRING_SIZE_20(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1406 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1407 20, 20, false, NULL, 0, NULL, NULL);
1409 return offset;
1414 static int
1415 dissect_kpm_v2_BIT_STRING_SIZE_18(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1416 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1417 18, 18, false, NULL, 0, NULL, NULL);
1419 return offset;
1424 static int
1425 dissect_kpm_v2_BIT_STRING_SIZE_21(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1426 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1427 21, 21, false, NULL, 0, NULL, NULL);
1429 return offset;
1433 static const value_string kpm_v2_NgENB_ID_vals[] = {
1434 { 0, "macroNgENB-ID" },
1435 { 1, "shortMacroNgENB-ID" },
1436 { 2, "longMacroNgENB-ID" },
1437 { 0, NULL }
1440 static const per_choice_t NgENB_ID_choice[] = {
1441 { 0, &hf_kpm_v2_macroNgENB_ID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_20 },
1442 { 1, &hf_kpm_v2_shortMacroNgENB_ID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_18 },
1443 { 2, &hf_kpm_v2_longMacroNgENB_ID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_21 },
1444 { 0, NULL, 0, NULL }
1447 static int
1448 dissect_kpm_v2_NgENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1449 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1450 ett_kpm_v2_NgENB_ID, NgENB_ID_choice,
1451 NULL);
1453 return offset;
1457 static const per_sequence_t GlobalNgENB_ID_sequence[] = {
1458 { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
1459 { &hf_kpm_v2_ngENB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_NgENB_ID },
1460 { NULL, 0, 0, NULL }
1463 static int
1464 dissect_kpm_v2_GlobalNgENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1465 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1466 ett_kpm_v2_GlobalNgENB_ID, GlobalNgENB_ID_sequence);
1468 return offset;
1472 static const value_string kpm_v2_GlobalNGRANNodeID_vals[] = {
1473 { 0, "gNB" },
1474 { 1, "ng-eNB" },
1475 { 0, NULL }
1478 static const per_choice_t GlobalNGRANNodeID_choice[] = {
1479 { 0, &hf_kpm_v2_gNB , ASN1_EXTENSION_ROOT , dissect_kpm_v2_GlobalGNB_ID },
1480 { 1, &hf_kpm_v2_ng_eNB , ASN1_EXTENSION_ROOT , dissect_kpm_v2_GlobalNgENB_ID },
1481 { 0, NULL, 0, NULL }
1484 static int
1485 dissect_kpm_v2_GlobalNGRANNodeID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1486 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1487 ett_kpm_v2_GlobalNGRANNodeID, GlobalNGRANNodeID_choice,
1488 NULL);
1490 return offset;
1494 static const per_sequence_t UEID_GNB_sequence[] = {
1495 { &hf_kpm_v2_amf_UE_NGAP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMF_UE_NGAP_ID },
1496 { &hf_kpm_v2_guami , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GUAMI },
1497 { &hf_kpm_v2_gNB_CU_UE_F1AP_ID_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_UEID_GNB_CU_F1AP_ID_List },
1498 { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List },
1499 { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
1500 { &hf_kpm_v2_m_NG_RAN_UE_XnAP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_NG_RANnodeUEXnAPID },
1501 { &hf_kpm_v2_globalGNB_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GlobalGNB_ID },
1502 { &hf_kpm_v2_globalNG_RANNode_ID, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_kpm_v2_GlobalNGRANNodeID },
1503 { NULL, 0, 0, NULL }
1506 static int
1507 dissect_kpm_v2_UEID_GNB(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1508 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1509 ett_kpm_v2_UEID_GNB, UEID_GNB_sequence);
1511 return offset;
1515 static const per_sequence_t UEID_GNB_DU_sequence[] = {
1516 { &hf_kpm_v2_gNB_CU_UE_F1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_UE_F1AP_ID },
1517 { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
1518 { NULL, 0, 0, NULL }
1521 static int
1522 dissect_kpm_v2_UEID_GNB_DU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1523 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1524 ett_kpm_v2_UEID_GNB_DU, UEID_GNB_DU_sequence);
1526 return offset;
1530 static const per_sequence_t UEID_GNB_CU_UP_sequence[] = {
1531 { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_CP_UE_E1AP_ID },
1532 { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
1533 { NULL, 0, 0, NULL }
1536 static int
1537 dissect_kpm_v2_UEID_GNB_CU_UP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1538 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1539 ett_kpm_v2_UEID_GNB_CU_UP, UEID_GNB_CU_UP_sequence);
1541 return offset;
1546 static int
1547 dissect_kpm_v2_NGENB_CU_UE_W1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1548 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1549 0U, 4294967295U, NULL, false);
1551 return offset;
1555 static const per_sequence_t UEID_NG_ENB_sequence[] = {
1556 { &hf_kpm_v2_amf_UE_NGAP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMF_UE_NGAP_ID },
1557 { &hf_kpm_v2_guami , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GUAMI },
1558 { &hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_NGENB_CU_UE_W1AP_ID },
1559 { &hf_kpm_v2_m_NG_RAN_UE_XnAP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_NG_RANnodeUEXnAPID },
1560 { &hf_kpm_v2_globalNgENB_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GlobalNgENB_ID },
1561 { &hf_kpm_v2_globalNG_RANNode_ID, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_kpm_v2_GlobalNGRANNodeID },
1562 { NULL, 0, 0, NULL }
1565 static int
1566 dissect_kpm_v2_UEID_NG_ENB(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1567 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1568 ett_kpm_v2_UEID_NG_ENB, UEID_NG_ENB_sequence);
1570 return offset;
1574 static const per_sequence_t UEID_NG_ENB_DU_sequence[] = {
1575 { &hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_NGENB_CU_UE_W1AP_ID },
1576 { NULL, 0, 0, NULL }
1579 static int
1580 dissect_kpm_v2_UEID_NG_ENB_DU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1581 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1582 ett_kpm_v2_UEID_NG_ENB_DU, UEID_NG_ENB_DU_sequence);
1584 return offset;
1589 static int
1590 dissect_kpm_v2_ENB_UE_X2AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1591 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1592 0U, 4095U, NULL, false);
1594 return offset;
1599 static int
1600 dissect_kpm_v2_ENB_UE_X2AP_ID_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1601 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1602 0U, 4095U, NULL, true);
1604 return offset;
1609 static int
1610 dissect_kpm_v2_BIT_STRING_SIZE_28(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1611 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
1612 28, 28, false, NULL, 0, NULL, NULL);
1614 return offset;
1618 static const value_string kpm_v2_ENB_ID_vals[] = {
1619 { 0, "macro-eNB-ID" },
1620 { 1, "home-eNB-ID" },
1621 { 2, "short-Macro-eNB-ID" },
1622 { 3, "long-Macro-eNB-ID" },
1623 { 0, NULL }
1626 static const per_choice_t ENB_ID_choice[] = {
1627 { 0, &hf_kpm_v2_macro_eNB_ID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_20 },
1628 { 1, &hf_kpm_v2_home_eNB_ID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_28 },
1629 { 2, &hf_kpm_v2_short_Macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_BIT_STRING_SIZE_18 },
1630 { 3, &hf_kpm_v2_long_Macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_BIT_STRING_SIZE_21 },
1631 { 0, NULL, 0, NULL }
1634 static int
1635 dissect_kpm_v2_ENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1636 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1637 ett_kpm_v2_ENB_ID, ENB_ID_choice,
1638 NULL);
1640 return offset;
1644 static const per_sequence_t GlobalENB_ID_sequence[] = {
1645 { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
1646 { &hf_kpm_v2_eNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_ENB_ID },
1647 { NULL, 0, 0, NULL }
1650 static int
1651 dissect_kpm_v2_GlobalENB_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1652 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1653 ett_kpm_v2_GlobalENB_ID, GlobalENB_ID_sequence);
1655 return offset;
1659 static const per_sequence_t UEID_EN_GNB_sequence[] = {
1660 { &hf_kpm_v2_m_eNB_UE_X2AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_ENB_UE_X2AP_ID },
1661 { &hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_ENB_UE_X2AP_ID_Extension },
1662 { &hf_kpm_v2_globalENB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GlobalENB_ID },
1663 { &hf_kpm_v2_gNB_CU_UE_F1AP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GNB_CU_UE_F1AP_ID },
1664 { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List },
1665 { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
1666 { NULL, 0, 0, NULL }
1669 static int
1670 dissect_kpm_v2_UEID_EN_GNB(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1671 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1672 ett_kpm_v2_UEID_EN_GNB, UEID_EN_GNB_sequence);
1674 return offset;
1679 static int
1680 dissect_kpm_v2_MME_UE_S1AP_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1681 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1682 0U, 4294967295U, NULL, false);
1684 return offset;
1689 static int
1690 dissect_kpm_v2_MME_Group_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1691 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1692 2, 2, false, NULL);
1694 return offset;
1699 static int
1700 dissect_kpm_v2_MME_Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1701 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1702 1, 1, false, NULL);
1704 return offset;
1708 static const per_sequence_t GUMMEI_sequence[] = {
1709 { &hf_kpm_v2_pLMN_Identity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
1710 { &hf_kpm_v2_mME_Group_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MME_Group_ID },
1711 { &hf_kpm_v2_mME_Code , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MME_Code },
1712 { NULL, 0, 0, NULL }
1715 static int
1716 dissect_kpm_v2_GUMMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1717 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1718 ett_kpm_v2_GUMMEI, GUMMEI_sequence);
1720 return offset;
1724 static const per_sequence_t UEID_ENB_sequence[] = {
1725 { &hf_kpm_v2_mME_UE_S1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MME_UE_S1AP_ID },
1726 { &hf_kpm_v2_gUMMEI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GUMMEI },
1727 { &hf_kpm_v2_m_eNB_UE_X2AP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_ENB_UE_X2AP_ID },
1728 { &hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_ENB_UE_X2AP_ID_Extension },
1729 { &hf_kpm_v2_globalENB_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GlobalENB_ID },
1730 { NULL, 0, 0, NULL }
1733 static int
1734 dissect_kpm_v2_UEID_ENB(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1735 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1736 ett_kpm_v2_UEID_ENB, UEID_ENB_sequence);
1738 return offset;
1742 static const value_string kpm_v2_UEID_vals[] = {
1743 { 0, "gNB-UEID" },
1744 { 1, "gNB-DU-UEID" },
1745 { 2, "gNB-CU-UP-UEID" },
1746 { 3, "ng-eNB-UEID" },
1747 { 4, "ng-eNB-DU-UEID" },
1748 { 5, "en-gNB-UEID" },
1749 { 6, "eNB-UEID" },
1750 { 0, NULL }
1753 static const per_choice_t UEID_choice[] = {
1754 { 0, &hf_kpm_v2_gNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_GNB },
1755 { 1, &hf_kpm_v2_gNB_DU_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_GNB_DU },
1756 { 2, &hf_kpm_v2_gNB_CU_UP_UEID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_GNB_CU_UP },
1757 { 3, &hf_kpm_v2_ng_eNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_NG_ENB },
1758 { 4, &hf_kpm_v2_ng_eNB_DU_UEID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_NG_ENB_DU },
1759 { 5, &hf_kpm_v2_en_gNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_EN_GNB },
1760 { 6, &hf_kpm_v2_eNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_ENB },
1761 { 0, NULL, 0, NULL }
1764 static int
1765 dissect_kpm_v2_UEID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1766 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1767 ett_kpm_v2_UEID, UEID_choice,
1768 NULL);
1770 return offset;
1774 static const per_sequence_t MatchingUEidItem_sequence[] = {
1775 { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
1776 { NULL, 0, 0, NULL }
1779 static int
1780 dissect_kpm_v2_MatchingUEidItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1781 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1782 ett_kpm_v2_MatchingUEidItem, MatchingUEidItem_sequence);
1784 return offset;
1788 static const per_sequence_t MatchingUEidList_sequence_of[1] = {
1789 { &hf_kpm_v2_MatchingUEidList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUEidItem },
1792 static int
1793 dissect_kpm_v2_MatchingUEidList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1794 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1795 ett_kpm_v2_MatchingUEidList, MatchingUEidList_sequence_of,
1796 1, maxnoofUEID, false);
1798 return offset;
1802 static const per_sequence_t MeasurementCondUEidItem_sequence[] = {
1803 { &hf_kpm_v2_measType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementType },
1804 { &hf_kpm_v2_matchingCond , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingCondList },
1805 { &hf_kpm_v2_matchingUEidList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_MatchingUEidList },
1806 { NULL, 0, 0, NULL }
1809 static int
1810 dissect_kpm_v2_MeasurementCondUEidItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1811 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1812 ett_kpm_v2_MeasurementCondUEidItem, MeasurementCondUEidItem_sequence);
1814 return offset;
1818 static const per_sequence_t MeasurementCondUEidList_sequence_of[1] = {
1819 { &hf_kpm_v2_MeasurementCondUEidList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondUEidItem },
1822 static int
1823 dissect_kpm_v2_MeasurementCondUEidList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1824 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1825 ett_kpm_v2_MeasurementCondUEidList, MeasurementCondUEidList_sequence_of,
1826 1, maxnoofMeasurementInfo, false);
1828 return offset;
1832 static const per_sequence_t MatchingUeCondPerSubItem_sequence[] = {
1833 { &hf_kpm_v2_testCondInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_TestCondInfo },
1834 { NULL, 0, 0, NULL }
1837 static int
1838 dissect_kpm_v2_MatchingUeCondPerSubItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1839 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1840 ett_kpm_v2_MatchingUeCondPerSubItem, MatchingUeCondPerSubItem_sequence);
1842 return offset;
1846 static const per_sequence_t MatchingUeCondPerSubList_sequence_of[1] = {
1847 { &hf_kpm_v2_MatchingUeCondPerSubList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUeCondPerSubItem },
1850 static int
1851 dissect_kpm_v2_MatchingUeCondPerSubList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1852 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1853 ett_kpm_v2_MatchingUeCondPerSubList, MatchingUeCondPerSubList_sequence_of,
1854 1, maxnoofConditionInfoPerSub, false);
1856 return offset;
1860 static const per_sequence_t MatchingUEidPerSubItem_sequence[] = {
1861 { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
1862 { NULL, 0, 0, NULL }
1865 static int
1866 dissect_kpm_v2_MatchingUEidPerSubItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1867 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1868 ett_kpm_v2_MatchingUEidPerSubItem, MatchingUEidPerSubItem_sequence);
1870 return offset;
1874 static const per_sequence_t MatchingUEidPerSubList_sequence_of[1] = {
1875 { &hf_kpm_v2_MatchingUEidPerSubList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUEidPerSubItem },
1878 static int
1879 dissect_kpm_v2_MatchingUEidPerSubList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1880 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1881 ett_kpm_v2_MatchingUEidPerSubList, MatchingUEidPerSubList_sequence_of,
1882 2, maxnoofUEIDPerSub, false);
1884 return offset;
1888 static const per_sequence_t E2SM_KPM_IndicationMessage_Format1_sequence[] = {
1889 { &hf_kpm_v2_measData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementData },
1890 { &hf_kpm_v2_measInfoList , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_MeasurementInfoList },
1891 { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GranularityPeriod },
1892 { NULL, 0, 0, NULL }
1895 static int
1896 dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1897 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1898 ett_kpm_v2_E2SM_KPM_IndicationMessage_Format1, E2SM_KPM_IndicationMessage_Format1_sequence);
1900 return offset;
1904 static const per_sequence_t UEMeasurementReportItem_sequence[] = {
1905 { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
1906 { &hf_kpm_v2_measReport , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format1 },
1907 { NULL, 0, 0, NULL }
1910 static int
1911 dissect_kpm_v2_UEMeasurementReportItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1912 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1913 ett_kpm_v2_UEMeasurementReportItem, UEMeasurementReportItem_sequence);
1915 return offset;
1919 static const per_sequence_t UEMeasurementReportList_sequence_of[1] = {
1920 { &hf_kpm_v2_UEMeasurementReportList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEMeasurementReportItem },
1923 static int
1924 dissect_kpm_v2_UEMeasurementReportList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1925 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1926 ett_kpm_v2_UEMeasurementReportList, UEMeasurementReportList_sequence_of,
1927 1, maxnoofUEMeasReport, false);
1929 return offset;
1934 static int
1935 dissect_kpm_v2_INTEGER_1_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1936 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1937 1U, 4294967295U, NULL, false);
1939 return offset;
1943 static const per_sequence_t E2SM_KPM_EventTriggerDefinition_Format1_sequence[] = {
1944 { &hf_kpm_v2_reportingPeriod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_INTEGER_1_4294967295 },
1945 { NULL, 0, 0, NULL }
1948 static int
1949 dissect_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1950 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1951 ett_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1, E2SM_KPM_EventTriggerDefinition_Format1_sequence);
1953 return offset;
1957 static const value_string kpm_v2_T_eventDefinition_formats_vals[] = {
1958 { 0, "eventDefinition-Format1" },
1959 { 0, NULL }
1962 static const per_choice_t T_eventDefinition_formats_choice[] = {
1963 { 0, &hf_kpm_v2_eventDefinition_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1 },
1964 { 0, NULL, 0, NULL }
1967 static int
1968 dissect_kpm_v2_T_eventDefinition_formats(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1969 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1970 ett_kpm_v2_T_eventDefinition_formats, T_eventDefinition_formats_choice,
1971 NULL);
1973 return offset;
1977 static const per_sequence_t E2SM_KPM_EventTriggerDefinition_sequence[] = {
1978 { &hf_kpm_v2_eventDefinition_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_eventDefinition_formats },
1979 { NULL, 0, 0, NULL }
1982 static int
1983 dissect_kpm_v2_E2SM_KPM_EventTriggerDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1984 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1985 ett_kpm_v2_E2SM_KPM_EventTriggerDefinition, E2SM_KPM_EventTriggerDefinition_sequence);
1987 return offset;
1992 static int
1993 dissect_kpm_v2_RIC_Style_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1994 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
1996 return offset;
2001 static int
2002 dissect_kpm_v2_NRCellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2003 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2004 36, 36, false, NULL, 0, NULL, NULL);
2006 return offset;
2010 static const per_sequence_t NR_CGI_sequence[] = {
2011 { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
2012 { &hf_kpm_v2_nRCellIdentity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_NRCellIdentity },
2013 { NULL, 0, 0, NULL }
2016 static int
2017 dissect_kpm_v2_NR_CGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2018 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2019 ett_kpm_v2_NR_CGI, NR_CGI_sequence);
2021 return offset;
2026 static int
2027 dissect_kpm_v2_EUTRACellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2028 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
2029 28, 28, false, NULL, 0, NULL, NULL);
2031 return offset;
2035 static const per_sequence_t EUTRA_CGI_sequence[] = {
2036 { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
2037 { &hf_kpm_v2_eUTRACellIdentity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_EUTRACellIdentity },
2038 { NULL, 0, 0, NULL }
2041 static int
2042 dissect_kpm_v2_EUTRA_CGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2043 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2044 ett_kpm_v2_EUTRA_CGI, EUTRA_CGI_sequence);
2046 return offset;
2050 static const value_string kpm_v2_CGI_vals[] = {
2051 { 0, "nR-CGI" },
2052 { 1, "eUTRA-CGI" },
2053 { 0, NULL }
2056 static const per_choice_t CGI_choice[] = {
2057 { 0, &hf_kpm_v2_nR_CGI , ASN1_EXTENSION_ROOT , dissect_kpm_v2_NR_CGI },
2058 { 1, &hf_kpm_v2_eUTRA_CGI , ASN1_EXTENSION_ROOT , dissect_kpm_v2_EUTRA_CGI },
2059 { 0, NULL, 0, NULL }
2062 static int
2063 dissect_kpm_v2_CGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2064 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2065 ett_kpm_v2_CGI, CGI_choice,
2066 NULL);
2068 return offset;
2072 static const per_sequence_t E2SM_KPM_ActionDefinition_Format1_sequence[] = {
2073 { &hf_kpm_v2_measInfoList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfoList },
2074 { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GranularityPeriod },
2075 { &hf_kpm_v2_cellGlobalID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_CGI },
2076 { NULL, 0, 0, NULL }
2079 static int
2080 dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2081 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2082 ett_kpm_v2_E2SM_KPM_ActionDefinition_Format1, E2SM_KPM_ActionDefinition_Format1_sequence);
2084 return offset;
2088 static const per_sequence_t E2SM_KPM_ActionDefinition_Format2_sequence[] = {
2089 { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
2090 { &hf_kpm_v2_subscriptInfo, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
2091 { NULL, 0, 0, NULL }
2094 static int
2095 dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2096 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2097 ett_kpm_v2_E2SM_KPM_ActionDefinition_Format2, E2SM_KPM_ActionDefinition_Format2_sequence);
2099 return offset;
2103 static const per_sequence_t E2SM_KPM_ActionDefinition_Format3_sequence[] = {
2104 { &hf_kpm_v2_measCondList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondList },
2105 { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GranularityPeriod },
2106 { &hf_kpm_v2_cellGlobalID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_CGI },
2107 { NULL, 0, 0, NULL }
2110 static int
2111 dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2112 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2113 ett_kpm_v2_E2SM_KPM_ActionDefinition_Format3, E2SM_KPM_ActionDefinition_Format3_sequence);
2115 return offset;
2119 static const per_sequence_t E2SM_KPM_ActionDefinition_Format4_sequence[] = {
2120 { &hf_kpm_v2_matchingUeCondList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUeCondPerSubList },
2121 { &hf_kpm_v2_subscriptionInfo, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
2122 { NULL, 0, 0, NULL }
2125 static int
2126 dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format4(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2127 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2128 ett_kpm_v2_E2SM_KPM_ActionDefinition_Format4, E2SM_KPM_ActionDefinition_Format4_sequence);
2130 return offset;
2134 static const per_sequence_t E2SM_KPM_ActionDefinition_Format5_sequence[] = {
2135 { &hf_kpm_v2_matchingUEidList_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUEidPerSubList },
2136 { &hf_kpm_v2_subscriptionInfo, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
2137 { NULL, 0, 0, NULL }
2140 static int
2141 dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format5(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2142 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2143 ett_kpm_v2_E2SM_KPM_ActionDefinition_Format5, E2SM_KPM_ActionDefinition_Format5_sequence);
2145 return offset;
2149 static const value_string kpm_v2_T_actionDefinition_formats_vals[] = {
2150 { 0, "actionDefinition-Format1" },
2151 { 1, "actionDefinition-Format2" },
2152 { 2, "actionDefinition-Format3" },
2153 { 3, "actionDefinition-Format4" },
2154 { 4, "actionDefinition-Format5" },
2155 { 0, NULL }
2158 static const per_choice_t T_actionDefinition_formats_choice[] = {
2159 { 0, &hf_kpm_v2_actionDefinition_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
2160 { 1, &hf_kpm_v2_actionDefinition_Format2, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format2 },
2161 { 2, &hf_kpm_v2_actionDefinition_Format3, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format3 },
2162 { 3, &hf_kpm_v2_actionDefinition_Format4, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format4 },
2163 { 4, &hf_kpm_v2_actionDefinition_Format5, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format5 },
2164 { 0, NULL, 0, NULL }
2167 static int
2168 dissect_kpm_v2_T_actionDefinition_formats(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2169 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2170 ett_kpm_v2_T_actionDefinition_formats, T_actionDefinition_formats_choice,
2171 NULL);
2173 return offset;
2177 static const per_sequence_t E2SM_KPM_ActionDefinition_sequence[] = {
2178 { &hf_kpm_v2_ric_Style_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Type },
2179 { &hf_kpm_v2_actionDefinition_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_actionDefinition_formats },
2180 { NULL, 0, 0, NULL }
2183 static int
2184 dissect_kpm_v2_E2SM_KPM_ActionDefinition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2185 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2186 ett_kpm_v2_E2SM_KPM_ActionDefinition, E2SM_KPM_ActionDefinition_sequence);
2188 return offset;
2193 static int
2194 dissect_kpm_v2_T_colletStartTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2195 int ts_offset = offset;
2196 offset = dissect_kpm_v2_TimeStamp(tvb, offset, actx, tree, hf_index);
2198 /* Add as a generated field the timestamp decoded */
2199 const char *time_str = tvb_ntp_fmt_ts_sec(tvb, (ts_offset+7)/8);
2200 proto_item *ti = proto_tree_add_string(tree, hf_kpm_v2_timestamp_string, tvb, (ts_offset+7)/8, 4, time_str);
2201 proto_item_set_generated(ti);
2204 return offset;
2209 static int
2210 dissect_kpm_v2_PrintableString_SIZE_0_15_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2211 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2212 0, 15, true,
2213 NULL);
2215 return offset;
2220 static int
2221 dissect_kpm_v2_PrintableString_SIZE_0_400_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2222 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2223 0, 400, true,
2224 NULL);
2226 return offset;
2231 static int
2232 dissect_kpm_v2_PrintableString_SIZE_0_8_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2233 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2234 0, 8, true,
2235 NULL);
2237 return offset;
2242 static int
2243 dissect_kpm_v2_PrintableString_SIZE_0_32_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2244 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2245 0, 32, true,
2246 NULL);
2248 return offset;
2252 static const per_sequence_t E2SM_KPM_IndicationHeader_Format1_sequence[] = {
2253 { &hf_kpm_v2_colletStartTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_colletStartTime },
2254 { &hf_kpm_v2_fileFormatversion, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_15_ },
2255 { &hf_kpm_v2_senderName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_400_ },
2256 { &hf_kpm_v2_senderType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_8_ },
2257 { &hf_kpm_v2_vendorName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_32_ },
2258 { NULL, 0, 0, NULL }
2261 static int
2262 dissect_kpm_v2_E2SM_KPM_IndicationHeader_Format1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2263 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2264 ett_kpm_v2_E2SM_KPM_IndicationHeader_Format1, E2SM_KPM_IndicationHeader_Format1_sequence);
2266 return offset;
2270 static const value_string kpm_v2_T_indicationHeader_formats_vals[] = {
2271 { 0, "indicationHeader-Format1" },
2272 { 0, NULL }
2275 static const per_choice_t T_indicationHeader_formats_choice[] = {
2276 { 0, &hf_kpm_v2_indicationHeader_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_IndicationHeader_Format1 },
2277 { 0, NULL, 0, NULL }
2280 static int
2281 dissect_kpm_v2_T_indicationHeader_formats(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2282 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2283 ett_kpm_v2_T_indicationHeader_formats, T_indicationHeader_formats_choice,
2284 NULL);
2286 return offset;
2290 static const per_sequence_t E2SM_KPM_IndicationHeader_sequence[] = {
2291 { &hf_kpm_v2_indicationHeader_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_indicationHeader_formats },
2292 { NULL, 0, 0, NULL }
2295 static int
2296 dissect_kpm_v2_E2SM_KPM_IndicationHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2297 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2298 ett_kpm_v2_E2SM_KPM_IndicationHeader, E2SM_KPM_IndicationHeader_sequence);
2300 return offset;
2304 static const per_sequence_t E2SM_KPM_IndicationMessage_Format2_sequence[] = {
2305 { &hf_kpm_v2_measData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementData },
2306 { &hf_kpm_v2_measCondUEidList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondUEidList },
2307 { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GranularityPeriod },
2308 { NULL, 0, 0, NULL }
2311 static int
2312 dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2313 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2314 ett_kpm_v2_E2SM_KPM_IndicationMessage_Format2, E2SM_KPM_IndicationMessage_Format2_sequence);
2316 return offset;
2320 static const per_sequence_t E2SM_KPM_IndicationMessage_Format3_sequence[] = {
2321 { &hf_kpm_v2_ueMeasReportList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEMeasurementReportList },
2322 { NULL, 0, 0, NULL }
2325 static int
2326 dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2327 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2328 ett_kpm_v2_E2SM_KPM_IndicationMessage_Format3, E2SM_KPM_IndicationMessage_Format3_sequence);
2330 return offset;
2334 static const value_string kpm_v2_T_indicationMessage_formats_vals[] = {
2335 { 0, "indicationMessage-Format1" },
2336 { 1, "indicationMessage-Format2" },
2337 { 2, "indicationMessage-Format3" },
2338 { 0, NULL }
2341 static const per_choice_t T_indicationMessage_formats_choice[] = {
2342 { 0, &hf_kpm_v2_indicationMessage_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format1 },
2343 { 1, &hf_kpm_v2_indicationMessage_Format2, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format2 },
2344 { 2, &hf_kpm_v2_indicationMessage_Format3, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format3 },
2345 { 0, NULL, 0, NULL }
2348 static int
2349 dissect_kpm_v2_T_indicationMessage_formats(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2350 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
2351 ett_kpm_v2_T_indicationMessage_formats, T_indicationMessage_formats_choice,
2352 NULL);
2354 return offset;
2358 static const per_sequence_t E2SM_KPM_IndicationMessage_sequence[] = {
2359 { &hf_kpm_v2_indicationMessage_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_indicationMessage_formats },
2360 { NULL, 0, 0, NULL }
2363 static int
2364 dissect_kpm_v2_E2SM_KPM_IndicationMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2365 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2366 ett_kpm_v2_E2SM_KPM_IndicationMessage, E2SM_KPM_IndicationMessage_sequence);
2368 return offset;
2373 static int
2374 dissect_kpm_v2_T_ranFunction_ShortName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2375 tvbuff_t *value_tvb;
2376 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2377 1, 150, true,
2378 &value_tvb);
2380 if (!actx->pinfo->fd->visited) {
2381 /* N.B. too early to work out exact dissector, as don't have OID yet */
2382 e2ap_store_ran_function_mapping(actx->pinfo, tree, value_tvb,
2383 tvb_get_string_enc(actx->pinfo->pool, value_tvb, 0, tvb_captured_length(value_tvb), ENC_ASCII));
2388 return offset;
2393 static int
2394 dissect_kpm_v2_T_ranFunction_E2SM_OID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2395 tvbuff_t *parameter_tvb;
2396 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2397 1, 1000, true,
2398 &parameter_tvb);
2400 e2ap_update_ran_function_mapping(actx->pinfo, tree, parameter_tvb,
2401 tvb_get_string_enc(actx->pinfo->pool, parameter_tvb, 0,
2402 tvb_captured_length(parameter_tvb), ENC_ASCII));
2406 return offset;
2411 static int
2412 dissect_kpm_v2_PrintableString_SIZE_1_150_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2413 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2414 1, 150, true,
2415 NULL);
2417 return offset;
2421 static const per_sequence_t RANfunction_Name_sequence[] = {
2422 { &hf_kpm_v2_ranFunction_ShortName, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_ranFunction_ShortName },
2423 { &hf_kpm_v2_ranFunction_E2SM_OID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_ranFunction_E2SM_OID },
2424 { &hf_kpm_v2_ranFunction_Description, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PrintableString_SIZE_1_150_ },
2425 { &hf_kpm_v2_ranFunction_Instance, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER },
2426 { NULL, 0, 0, NULL }
2429 static int
2430 dissect_kpm_v2_RANfunction_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2431 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2432 ett_kpm_v2_RANfunction_Name, RANfunction_Name_sequence);
2434 return offset;
2439 static int
2440 dissect_kpm_v2_RIC_Style_Name(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2441 offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
2442 1, 150, true,
2443 NULL);
2445 return offset;
2450 static int
2451 dissect_kpm_v2_RIC_Format_Type(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2452 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
2454 return offset;
2458 static const per_sequence_t RIC_EventTriggerStyle_Item_sequence[] = {
2459 { &hf_kpm_v2_ric_EventTriggerStyle_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Type },
2460 { &hf_kpm_v2_ric_EventTriggerStyle_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Name },
2461 { &hf_kpm_v2_ric_EventTriggerFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
2462 { NULL, 0, 0, NULL }
2465 static int
2466 dissect_kpm_v2_RIC_EventTriggerStyle_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2467 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2468 ett_kpm_v2_RIC_EventTriggerStyle_Item, RIC_EventTriggerStyle_Item_sequence);
2470 return offset;
2474 static const per_sequence_t SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item_sequence_of[1] = {
2475 { &hf_kpm_v2_ric_EventTriggerStyle_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_EventTriggerStyle_Item },
2478 static int
2479 dissect_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2480 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2481 ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item, SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item_sequence_of,
2482 1, maxnoofRICStyles, false);
2484 return offset;
2488 static const per_sequence_t RIC_ReportStyle_Item_sequence[] = {
2489 { &hf_kpm_v2_ric_ReportStyle_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Type },
2490 { &hf_kpm_v2_ric_ReportStyle_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Name },
2491 { &hf_kpm_v2_ric_ActionFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
2492 { &hf_kpm_v2_measInfo_Action_List, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfo_Action_List },
2493 { &hf_kpm_v2_ric_IndicationHeaderFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
2494 { &hf_kpm_v2_ric_IndicationMessageFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
2495 { NULL, 0, 0, NULL }
2498 static int
2499 dissect_kpm_v2_RIC_ReportStyle_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2500 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2501 ett_kpm_v2_RIC_ReportStyle_Item, RIC_ReportStyle_Item_sequence);
2503 return offset;
2507 static const per_sequence_t SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item_sequence_of[1] = {
2508 { &hf_kpm_v2_ric_ReportStyle_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_ReportStyle_Item },
2511 static int
2512 dissect_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2513 offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2514 ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item, SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item_sequence_of,
2515 1, maxnoofRICStyles, false);
2517 return offset;
2521 static const per_sequence_t E2SM_KPM_RANfunction_Description_sequence[] = {
2522 { &hf_kpm_v2_ranFunction_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RANfunction_Name },
2523 { &hf_kpm_v2_ric_EventTriggerStyle_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item },
2524 { &hf_kpm_v2_ric_ReportStyle_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item },
2525 { NULL, 0, 0, NULL }
2528 static int
2529 dissect_kpm_v2_E2SM_KPM_RANfunction_Description(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2530 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
2531 ett_kpm_v2_E2SM_KPM_RANfunction_Description, E2SM_KPM_RANfunction_Description_sequence);
2533 return offset;
2536 /*--- PDUs ---*/
2538 static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2539 int offset = 0;
2540 asn1_ctx_t asn1_ctx;
2541 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2542 offset = dissect_kpm_v2_E2SM_KPM_EventTriggerDefinition(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_EventTriggerDefinition_PDU);
2543 offset += 7; offset >>= 3;
2544 return offset;
2546 static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2547 int offset = 0;
2548 asn1_ctx_t asn1_ctx;
2549 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2550 offset = dissect_kpm_v2_E2SM_KPM_ActionDefinition(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_ActionDefinition_PDU);
2551 offset += 7; offset >>= 3;
2552 return offset;
2554 static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2555 int offset = 0;
2556 asn1_ctx_t asn1_ctx;
2557 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2558 offset = dissect_kpm_v2_E2SM_KPM_IndicationHeader(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_IndicationHeader_PDU);
2559 offset += 7; offset >>= 3;
2560 return offset;
2562 static int dissect_E2SM_KPM_IndicationMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2563 int offset = 0;
2564 asn1_ctx_t asn1_ctx;
2565 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2566 offset = dissect_kpm_v2_E2SM_KPM_IndicationMessage(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_IndicationMessage_PDU);
2567 offset += 7; offset >>= 3;
2568 return offset;
2570 static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
2571 int offset = 0;
2572 asn1_ctx_t asn1_ctx;
2573 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
2574 offset = dissect_kpm_v2_E2SM_KPM_RANfunction_Description(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_RANfunction_Description_PDU);
2575 offset += 7; offset >>= 3;
2576 return offset;
2581 /*--- proto_reg_handoff_kpm_v2 ---------------------------------------*/
2582 void
2583 proto_reg_handoff_kpm_v2(void)
2585 //#include "packet-kpm-v2-dis-tab.c"
2587 static ran_function_dissector_t kpm_v2 =
2588 { "ORAN-E2SM-KPM", "1.3.6.1.4.1.53148.1.2.2.2", 2, 2,
2589 { dissect_E2SM_KPM_RANfunction_Description_PDU,
2591 NULL,
2592 NULL,
2593 NULL,
2594 NULL,
2595 NULL,
2596 NULL,
2598 dissect_E2SM_KPM_ActionDefinition_PDU,
2599 dissect_E2SM_KPM_IndicationMessage_PDU,
2600 dissect_E2SM_KPM_IndicationHeader_PDU,
2601 NULL, /* no dissect_E2SM_KPM_CallProcessID_PDU */
2602 dissect_E2SM_KPM_EventTriggerDefinition_PDU
2606 /* Register dissector with e2ap */
2607 register_e2ap_ran_function_dissector(KPM_RANFUNCTIONS, &kpm_v2);
2612 /*--- proto_register_kpm_v2 -------------------------------------------*/
2613 void proto_register_kpm_v2(void) {
2615 /* List of fields */
2617 static hf_register_info hf[] = {
2618 { &hf_kpm_v2_E2SM_KPM_EventTriggerDefinition_PDU,
2619 { "E2SM-KPM-EventTriggerDefinition", "kpm-v2.E2SM_KPM_EventTriggerDefinition_element",
2620 FT_NONE, BASE_NONE, NULL, 0,
2621 NULL, HFILL }},
2622 { &hf_kpm_v2_E2SM_KPM_ActionDefinition_PDU,
2623 { "E2SM-KPM-ActionDefinition", "kpm-v2.E2SM_KPM_ActionDefinition_element",
2624 FT_NONE, BASE_NONE, NULL, 0,
2625 NULL, HFILL }},
2626 { &hf_kpm_v2_E2SM_KPM_IndicationHeader_PDU,
2627 { "E2SM-KPM-IndicationHeader", "kpm-v2.E2SM_KPM_IndicationHeader_element",
2628 FT_NONE, BASE_NONE, NULL, 0,
2629 NULL, HFILL }},
2630 { &hf_kpm_v2_E2SM_KPM_IndicationMessage_PDU,
2631 { "E2SM-KPM-IndicationMessage", "kpm-v2.E2SM_KPM_IndicationMessage_element",
2632 FT_NONE, BASE_NONE, NULL, 0,
2633 NULL, HFILL }},
2634 { &hf_kpm_v2_E2SM_KPM_RANfunction_Description_PDU,
2635 { "E2SM-KPM-RANfunction-Description", "kpm-v2.E2SM_KPM_RANfunction_Description_element",
2636 FT_NONE, BASE_NONE, NULL, 0,
2637 NULL, HFILL }},
2638 { &hf_kpm_v2_measName,
2639 { "measName", "kpm-v2.measName",
2640 FT_STRING, BASE_NONE, NULL, 0,
2641 "MeasurementTypeName", HFILL }},
2642 { &hf_kpm_v2_measID,
2643 { "measID", "kpm-v2.measID",
2644 FT_UINT32, BASE_DEC, NULL, 0,
2645 "MeasurementTypeID", HFILL }},
2646 { &hf_kpm_v2_noLabel,
2647 { "noLabel", "kpm-v2.noLabel",
2648 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_noLabel_vals), 0,
2649 NULL, HFILL }},
2650 { &hf_kpm_v2_plmnID,
2651 { "plmnID", "kpm-v2.plmnID",
2652 FT_BYTES, BASE_NONE, NULL, 0,
2653 "PLMNIdentity", HFILL }},
2654 { &hf_kpm_v2_sliceID,
2655 { "sliceID", "kpm-v2.sliceID_element",
2656 FT_NONE, BASE_NONE, NULL, 0,
2657 "S_NSSAI", HFILL }},
2658 { &hf_kpm_v2_fiveQI,
2659 { "fiveQI", "kpm-v2.fiveQI",
2660 FT_UINT32, BASE_DEC, NULL, 0,
2661 NULL, HFILL }},
2662 { &hf_kpm_v2_qFI,
2663 { "qFI", "kpm-v2.qFI",
2664 FT_UINT32, BASE_DEC, NULL, 0,
2665 "QosFlowIdentifier", HFILL }},
2666 { &hf_kpm_v2_qCI,
2667 { "qCI", "kpm-v2.qCI",
2668 FT_UINT32, BASE_DEC, NULL, 0,
2669 NULL, HFILL }},
2670 { &hf_kpm_v2_qCImax,
2671 { "qCImax", "kpm-v2.qCImax",
2672 FT_UINT32, BASE_DEC, NULL, 0,
2673 "QCI", HFILL }},
2674 { &hf_kpm_v2_qCImin,
2675 { "qCImin", "kpm-v2.qCImin",
2676 FT_UINT32, BASE_DEC, NULL, 0,
2677 "QCI", HFILL }},
2678 { &hf_kpm_v2_aRPmax,
2679 { "aRPmax", "kpm-v2.aRPmax",
2680 FT_UINT32, BASE_DEC, NULL, 0,
2681 "INTEGER_1_15_", HFILL }},
2682 { &hf_kpm_v2_aRPmin,
2683 { "aRPmin", "kpm-v2.aRPmin",
2684 FT_UINT32, BASE_DEC, NULL, 0,
2685 "INTEGER_1_15_", HFILL }},
2686 { &hf_kpm_v2_bitrateRange,
2687 { "bitrateRange", "kpm-v2.bitrateRange",
2688 FT_UINT32, BASE_DEC, NULL, 0,
2689 "INTEGER_1_65535_", HFILL }},
2690 { &hf_kpm_v2_layerMU_MIMO,
2691 { "layerMU-MIMO", "kpm-v2.layerMU_MIMO",
2692 FT_UINT32, BASE_DEC, NULL, 0,
2693 "INTEGER_1_65535_", HFILL }},
2694 { &hf_kpm_v2_sUM,
2695 { "sUM", "kpm-v2.sUM",
2696 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_sUM_vals), 0,
2697 NULL, HFILL }},
2698 { &hf_kpm_v2_distBinX,
2699 { "distBinX", "kpm-v2.distBinX",
2700 FT_UINT32, BASE_DEC, NULL, 0,
2701 "INTEGER_1_65535_", HFILL }},
2702 { &hf_kpm_v2_distBinY,
2703 { "distBinY", "kpm-v2.distBinY",
2704 FT_UINT32, BASE_DEC, NULL, 0,
2705 "INTEGER_1_65535_", HFILL }},
2706 { &hf_kpm_v2_distBinZ,
2707 { "distBinZ", "kpm-v2.distBinZ",
2708 FT_UINT32, BASE_DEC, NULL, 0,
2709 "INTEGER_1_65535_", HFILL }},
2710 { &hf_kpm_v2_preLabelOverride,
2711 { "preLabelOverride", "kpm-v2.preLabelOverride",
2712 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_preLabelOverride_vals), 0,
2713 NULL, HFILL }},
2714 { &hf_kpm_v2_startEndInd,
2715 { "startEndInd", "kpm-v2.startEndInd",
2716 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_startEndInd_vals), 0,
2717 NULL, HFILL }},
2718 { &hf_kpm_v2_min,
2719 { "min", "kpm-v2.min",
2720 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_min_vals), 0,
2721 NULL, HFILL }},
2722 { &hf_kpm_v2_max,
2723 { "max", "kpm-v2.max",
2724 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_max_vals), 0,
2725 NULL, HFILL }},
2726 { &hf_kpm_v2_avg,
2727 { "avg", "kpm-v2.avg",
2728 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_avg_vals), 0,
2729 NULL, HFILL }},
2730 { &hf_kpm_v2_testType,
2731 { "testType", "kpm-v2.testType",
2732 FT_UINT32, BASE_DEC, VALS(kpm_v2_TestCond_Type_vals), 0,
2733 "TestCond_Type", HFILL }},
2734 { &hf_kpm_v2_testExpr,
2735 { "testExpr", "kpm-v2.testExpr",
2736 FT_UINT32, BASE_DEC, VALS(kpm_v2_TestCond_Expression_vals), 0,
2737 "TestCond_Expression", HFILL }},
2738 { &hf_kpm_v2_testValue,
2739 { "testValue", "kpm-v2.testValue",
2740 FT_UINT32, BASE_DEC, VALS(kpm_v2_TestCond_Value_vals), 0,
2741 "TestCond_Value", HFILL }},
2742 { &hf_kpm_v2_gBR,
2743 { "gBR", "kpm-v2.gBR",
2744 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_gBR_vals), 0,
2745 NULL, HFILL }},
2746 { &hf_kpm_v2_aMBR,
2747 { "aMBR", "kpm-v2.aMBR",
2748 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_aMBR_vals), 0,
2749 NULL, HFILL }},
2750 { &hf_kpm_v2_isStat,
2751 { "isStat", "kpm-v2.isStat",
2752 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_isStat_vals), 0,
2753 NULL, HFILL }},
2754 { &hf_kpm_v2_isCatM,
2755 { "isCatM", "kpm-v2.isCatM",
2756 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_isCatM_vals), 0,
2757 NULL, HFILL }},
2758 { &hf_kpm_v2_rSRP,
2759 { "rSRP", "kpm-v2.rSRP",
2760 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_rSRP_vals), 0,
2761 NULL, HFILL }},
2762 { &hf_kpm_v2_rSRQ,
2763 { "rSRQ", "kpm-v2.rSRQ",
2764 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_rSRQ_vals), 0,
2765 NULL, HFILL }},
2766 { &hf_kpm_v2_ul_rSRP,
2767 { "ul-rSRP", "kpm-v2.ul_rSRP",
2768 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_ul_rSRP_vals), 0,
2769 NULL, HFILL }},
2770 { &hf_kpm_v2_cQI,
2771 { "cQI", "kpm-v2.cQI",
2772 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_cQI_vals), 0,
2773 NULL, HFILL }},
2774 { &hf_kpm_v2_fiveQI_01,
2775 { "fiveQI", "kpm-v2.fiveQI",
2776 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_fiveQI_vals), 0,
2777 NULL, HFILL }},
2778 { &hf_kpm_v2_qCI_01,
2779 { "qCI", "kpm-v2.qCI",
2780 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_qCI_vals), 0,
2781 NULL, HFILL }},
2782 { &hf_kpm_v2_sNSSAI,
2783 { "sNSSAI", "kpm-v2.sNSSAI",
2784 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_sNSSAI_vals), 0,
2785 NULL, HFILL }},
2786 { &hf_kpm_v2_valueInt,
2787 { "valueInt", "kpm-v2.valueInt",
2788 FT_INT32, BASE_DEC, NULL, 0,
2789 "INTEGER", HFILL }},
2790 { &hf_kpm_v2_valueEnum,
2791 { "valueEnum", "kpm-v2.valueEnum",
2792 FT_INT32, BASE_DEC, NULL, 0,
2793 "INTEGER", HFILL }},
2794 { &hf_kpm_v2_valueBool,
2795 { "valueBool", "kpm-v2.valueBool",
2796 FT_BOOLEAN, BASE_NONE, NULL, 0,
2797 "BOOLEAN", HFILL }},
2798 { &hf_kpm_v2_valueBitS,
2799 { "valueBitS", "kpm-v2.valueBitS",
2800 FT_BYTES, BASE_NONE, NULL, 0,
2801 "BIT_STRING", HFILL }},
2802 { &hf_kpm_v2_valueOctS,
2803 { "valueOctS", "kpm-v2.valueOctS",
2804 FT_BYTES, BASE_NONE, NULL, 0,
2805 "OCTET_STRING", HFILL }},
2806 { &hf_kpm_v2_valuePrtS,
2807 { "valuePrtS", "kpm-v2.valuePrtS",
2808 FT_STRING, BASE_NONE, NULL, 0,
2809 "PrintableString", HFILL }},
2810 { &hf_kpm_v2_valueReal,
2811 { "valueReal", "kpm-v2.valueReal",
2812 FT_DOUBLE, BASE_NONE, NULL, 0,
2813 "REAL", HFILL }},
2814 { &hf_kpm_v2_MeasurementInfoList_item,
2815 { "MeasurementInfoItem", "kpm-v2.MeasurementInfoItem_element",
2816 FT_NONE, BASE_NONE, NULL, 0,
2817 NULL, HFILL }},
2818 { &hf_kpm_v2_measType,
2819 { "measType", "kpm-v2.measType",
2820 FT_UINT32, BASE_DEC, VALS(kpm_v2_MeasurementType_vals), 0,
2821 "MeasurementType", HFILL }},
2822 { &hf_kpm_v2_labelInfoList,
2823 { "labelInfoList", "kpm-v2.labelInfoList",
2824 FT_UINT32, BASE_DEC, NULL, 0,
2825 NULL, HFILL }},
2826 { &hf_kpm_v2_LabelInfoList_item,
2827 { "LabelInfoItem", "kpm-v2.LabelInfoItem_element",
2828 FT_NONE, BASE_NONE, NULL, 0,
2829 NULL, HFILL }},
2830 { &hf_kpm_v2_measLabel,
2831 { "measLabel", "kpm-v2.measLabel_element",
2832 FT_NONE, BASE_NONE, NULL, 0,
2833 "MeasurementLabel", HFILL }},
2834 { &hf_kpm_v2_MeasurementData_item,
2835 { "MeasurementDataItem", "kpm-v2.MeasurementDataItem_element",
2836 FT_NONE, BASE_NONE, NULL, 0,
2837 NULL, HFILL }},
2838 { &hf_kpm_v2_measRecord,
2839 { "measRecord", "kpm-v2.measRecord",
2840 FT_UINT32, BASE_DEC, NULL, 0,
2841 "MeasurementRecord", HFILL }},
2842 { &hf_kpm_v2_incompleteFlag,
2843 { "incompleteFlag", "kpm-v2.incompleteFlag",
2844 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_incompleteFlag_vals), 0,
2845 NULL, HFILL }},
2846 { &hf_kpm_v2_MeasurementRecord_item,
2847 { "MeasurementRecordItem", "kpm-v2.MeasurementRecordItem",
2848 FT_UINT32, BASE_DEC, VALS(kpm_v2_MeasurementRecordItem_vals), 0,
2849 NULL, HFILL }},
2850 { &hf_kpm_v2_integer,
2851 { "integer", "kpm-v2.integer",
2852 FT_UINT32, BASE_DEC, NULL, 0,
2853 "INTEGER_0_4294967295", HFILL }},
2854 { &hf_kpm_v2_real,
2855 { "real", "kpm-v2.real",
2856 FT_DOUBLE, BASE_NONE, NULL, 0,
2857 NULL, HFILL }},
2858 { &hf_kpm_v2_noValue,
2859 { "noValue", "kpm-v2.noValue_element",
2860 FT_NONE, BASE_NONE, NULL, 0,
2861 NULL, HFILL }},
2862 { &hf_kpm_v2_MeasurementInfo_Action_List_item,
2863 { "MeasurementInfo-Action-Item", "kpm-v2.MeasurementInfo_Action_Item_element",
2864 FT_NONE, BASE_NONE, NULL, 0,
2865 NULL, HFILL }},
2866 { &hf_kpm_v2_MeasurementCondList_item,
2867 { "MeasurementCondItem", "kpm-v2.MeasurementCondItem_element",
2868 FT_NONE, BASE_NONE, NULL, 0,
2869 NULL, HFILL }},
2870 { &hf_kpm_v2_matchingCond,
2871 { "matchingCond", "kpm-v2.matchingCond",
2872 FT_UINT32, BASE_DEC, NULL, 0,
2873 "MatchingCondList", HFILL }},
2874 { &hf_kpm_v2_MeasurementCondUEidList_item,
2875 { "MeasurementCondUEidItem", "kpm-v2.MeasurementCondUEidItem_element",
2876 FT_NONE, BASE_NONE, NULL, 0,
2877 NULL, HFILL }},
2878 { &hf_kpm_v2_matchingUEidList,
2879 { "matchingUEidList", "kpm-v2.matchingUEidList",
2880 FT_UINT32, BASE_DEC, NULL, 0,
2881 NULL, HFILL }},
2882 { &hf_kpm_v2_MatchingCondList_item,
2883 { "MatchingCondItem", "kpm-v2.MatchingCondItem",
2884 FT_UINT32, BASE_DEC, VALS(kpm_v2_MatchingCondItem_vals), 0,
2885 NULL, HFILL }},
2886 { &hf_kpm_v2_testCondInfo,
2887 { "testCondInfo", "kpm-v2.testCondInfo_element",
2888 FT_NONE, BASE_NONE, NULL, 0,
2889 NULL, HFILL }},
2890 { &hf_kpm_v2_MatchingUEidList_item,
2891 { "MatchingUEidItem", "kpm-v2.MatchingUEidItem_element",
2892 FT_NONE, BASE_NONE, NULL, 0,
2893 NULL, HFILL }},
2894 { &hf_kpm_v2_ueID,
2895 { "ueID", "kpm-v2.ueID",
2896 FT_UINT32, BASE_DEC, VALS(kpm_v2_UEID_vals), 0,
2897 NULL, HFILL }},
2898 { &hf_kpm_v2_MatchingUeCondPerSubList_item,
2899 { "MatchingUeCondPerSubItem", "kpm-v2.MatchingUeCondPerSubItem_element",
2900 FT_NONE, BASE_NONE, NULL, 0,
2901 NULL, HFILL }},
2902 { &hf_kpm_v2_MatchingUEidPerSubList_item,
2903 { "MatchingUEidPerSubItem", "kpm-v2.MatchingUEidPerSubItem_element",
2904 FT_NONE, BASE_NONE, NULL, 0,
2905 NULL, HFILL }},
2906 { &hf_kpm_v2_UEMeasurementReportList_item,
2907 { "UEMeasurementReportItem", "kpm-v2.UEMeasurementReportItem_element",
2908 FT_NONE, BASE_NONE, NULL, 0,
2909 NULL, HFILL }},
2910 { &hf_kpm_v2_measReport,
2911 { "measReport", "kpm-v2.measReport_element",
2912 FT_NONE, BASE_NONE, NULL, 0,
2913 "E2SM_KPM_IndicationMessage_Format1", HFILL }},
2914 { &hf_kpm_v2_eventDefinition_formats,
2915 { "eventDefinition-formats", "kpm-v2.eventDefinition_formats",
2916 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_eventDefinition_formats_vals), 0,
2917 NULL, HFILL }},
2918 { &hf_kpm_v2_eventDefinition_Format1,
2919 { "eventDefinition-Format1", "kpm-v2.eventDefinition_Format1_element",
2920 FT_NONE, BASE_NONE, NULL, 0,
2921 "E2SM_KPM_EventTriggerDefinition_Format1", HFILL }},
2922 { &hf_kpm_v2_reportingPeriod,
2923 { "reportingPeriod", "kpm-v2.reportingPeriod",
2924 FT_UINT32, BASE_DEC, NULL, 0,
2925 "INTEGER_1_4294967295", HFILL }},
2926 { &hf_kpm_v2_ric_Style_Type,
2927 { "ric-Style-Type", "kpm-v2.ric_Style_Type",
2928 FT_INT32, BASE_DEC, NULL, 0,
2929 NULL, HFILL }},
2930 { &hf_kpm_v2_actionDefinition_formats,
2931 { "actionDefinition-formats", "kpm-v2.actionDefinition_formats",
2932 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_actionDefinition_formats_vals), 0,
2933 NULL, HFILL }},
2934 { &hf_kpm_v2_actionDefinition_Format1,
2935 { "actionDefinition-Format1", "kpm-v2.actionDefinition_Format1_element",
2936 FT_NONE, BASE_NONE, NULL, 0,
2937 "E2SM_KPM_ActionDefinition_Format1", HFILL }},
2938 { &hf_kpm_v2_actionDefinition_Format2,
2939 { "actionDefinition-Format2", "kpm-v2.actionDefinition_Format2_element",
2940 FT_NONE, BASE_NONE, NULL, 0,
2941 "E2SM_KPM_ActionDefinition_Format2", HFILL }},
2942 { &hf_kpm_v2_actionDefinition_Format3,
2943 { "actionDefinition-Format3", "kpm-v2.actionDefinition_Format3_element",
2944 FT_NONE, BASE_NONE, NULL, 0,
2945 "E2SM_KPM_ActionDefinition_Format3", HFILL }},
2946 { &hf_kpm_v2_actionDefinition_Format4,
2947 { "actionDefinition-Format4", "kpm-v2.actionDefinition_Format4_element",
2948 FT_NONE, BASE_NONE, NULL, 0,
2949 "E2SM_KPM_ActionDefinition_Format4", HFILL }},
2950 { &hf_kpm_v2_actionDefinition_Format5,
2951 { "actionDefinition-Format5", "kpm-v2.actionDefinition_Format5_element",
2952 FT_NONE, BASE_NONE, NULL, 0,
2953 "E2SM_KPM_ActionDefinition_Format5", HFILL }},
2954 { &hf_kpm_v2_measInfoList,
2955 { "measInfoList", "kpm-v2.measInfoList",
2956 FT_UINT32, BASE_DEC, NULL, 0,
2957 "MeasurementInfoList", HFILL }},
2958 { &hf_kpm_v2_granulPeriod,
2959 { "granulPeriod", "kpm-v2.granulPeriod",
2960 FT_UINT32, BASE_DEC, NULL, 0,
2961 "GranularityPeriod", HFILL }},
2962 { &hf_kpm_v2_cellGlobalID,
2963 { "cellGlobalID", "kpm-v2.cellGlobalID",
2964 FT_UINT32, BASE_DEC, VALS(kpm_v2_CGI_vals), 0,
2965 "CGI", HFILL }},
2966 { &hf_kpm_v2_subscriptInfo,
2967 { "subscriptInfo", "kpm-v2.subscriptInfo_element",
2968 FT_NONE, BASE_NONE, NULL, 0,
2969 "E2SM_KPM_ActionDefinition_Format1", HFILL }},
2970 { &hf_kpm_v2_measCondList,
2971 { "measCondList", "kpm-v2.measCondList",
2972 FT_UINT32, BASE_DEC, NULL, 0,
2973 "MeasurementCondList", HFILL }},
2974 { &hf_kpm_v2_matchingUeCondList,
2975 { "matchingUeCondList", "kpm-v2.matchingUeCondList",
2976 FT_UINT32, BASE_DEC, NULL, 0,
2977 "MatchingUeCondPerSubList", HFILL }},
2978 { &hf_kpm_v2_subscriptionInfo,
2979 { "subscriptionInfo", "kpm-v2.subscriptionInfo_element",
2980 FT_NONE, BASE_NONE, NULL, 0,
2981 "E2SM_KPM_ActionDefinition_Format1", HFILL }},
2982 { &hf_kpm_v2_matchingUEidList_01,
2983 { "matchingUEidList", "kpm-v2.matchingUEidList",
2984 FT_UINT32, BASE_DEC, NULL, 0,
2985 "MatchingUEidPerSubList", HFILL }},
2986 { &hf_kpm_v2_indicationHeader_formats,
2987 { "indicationHeader-formats", "kpm-v2.indicationHeader_formats",
2988 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_indicationHeader_formats_vals), 0,
2989 NULL, HFILL }},
2990 { &hf_kpm_v2_indicationHeader_Format1,
2991 { "indicationHeader-Format1", "kpm-v2.indicationHeader_Format1_element",
2992 FT_NONE, BASE_NONE, NULL, 0,
2993 "E2SM_KPM_IndicationHeader_Format1", HFILL }},
2994 { &hf_kpm_v2_colletStartTime,
2995 { "colletStartTime", "kpm-v2.colletStartTime",
2996 FT_BYTES, BASE_NONE, NULL, 0,
2997 NULL, HFILL }},
2998 { &hf_kpm_v2_fileFormatversion,
2999 { "fileFormatversion", "kpm-v2.fileFormatversion",
3000 FT_STRING, BASE_NONE, NULL, 0,
3001 "PrintableString_SIZE_0_15_", HFILL }},
3002 { &hf_kpm_v2_senderName,
3003 { "senderName", "kpm-v2.senderName",
3004 FT_STRING, BASE_NONE, NULL, 0,
3005 "PrintableString_SIZE_0_400_", HFILL }},
3006 { &hf_kpm_v2_senderType,
3007 { "senderType", "kpm-v2.senderType",
3008 FT_STRING, BASE_NONE, NULL, 0,
3009 "PrintableString_SIZE_0_8_", HFILL }},
3010 { &hf_kpm_v2_vendorName,
3011 { "vendorName", "kpm-v2.vendorName",
3012 FT_STRING, BASE_NONE, NULL, 0,
3013 "PrintableString_SIZE_0_32_", HFILL }},
3014 { &hf_kpm_v2_indicationMessage_formats,
3015 { "indicationMessage-formats", "kpm-v2.indicationMessage_formats",
3016 FT_UINT32, BASE_DEC, VALS(kpm_v2_T_indicationMessage_formats_vals), 0,
3017 NULL, HFILL }},
3018 { &hf_kpm_v2_indicationMessage_Format1,
3019 { "indicationMessage-Format1", "kpm-v2.indicationMessage_Format1_element",
3020 FT_NONE, BASE_NONE, NULL, 0,
3021 "E2SM_KPM_IndicationMessage_Format1", HFILL }},
3022 { &hf_kpm_v2_indicationMessage_Format2,
3023 { "indicationMessage-Format2", "kpm-v2.indicationMessage_Format2_element",
3024 FT_NONE, BASE_NONE, NULL, 0,
3025 "E2SM_KPM_IndicationMessage_Format2", HFILL }},
3026 { &hf_kpm_v2_indicationMessage_Format3,
3027 { "indicationMessage-Format3", "kpm-v2.indicationMessage_Format3_element",
3028 FT_NONE, BASE_NONE, NULL, 0,
3029 "E2SM_KPM_IndicationMessage_Format3", HFILL }},
3030 { &hf_kpm_v2_measData,
3031 { "measData", "kpm-v2.measData",
3032 FT_UINT32, BASE_DEC, NULL, 0,
3033 "MeasurementData", HFILL }},
3034 { &hf_kpm_v2_measCondUEidList,
3035 { "measCondUEidList", "kpm-v2.measCondUEidList",
3036 FT_UINT32, BASE_DEC, NULL, 0,
3037 "MeasurementCondUEidList", HFILL }},
3038 { &hf_kpm_v2_ueMeasReportList,
3039 { "ueMeasReportList", "kpm-v2.ueMeasReportList",
3040 FT_UINT32, BASE_DEC, NULL, 0,
3041 "UEMeasurementReportList", HFILL }},
3042 { &hf_kpm_v2_ranFunction_Name,
3043 { "ranFunction-Name", "kpm-v2.ranFunction_Name_element",
3044 FT_NONE, BASE_NONE, NULL, 0,
3045 NULL, HFILL }},
3046 { &hf_kpm_v2_ric_EventTriggerStyle_List,
3047 { "ric-EventTriggerStyle-List", "kpm-v2.ric_EventTriggerStyle_List",
3048 FT_UINT32, BASE_DEC, NULL, 0,
3049 "SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item", HFILL }},
3050 { &hf_kpm_v2_ric_EventTriggerStyle_List_item,
3051 { "RIC-EventTriggerStyle-Item", "kpm-v2.RIC_EventTriggerStyle_Item_element",
3052 FT_NONE, BASE_NONE, NULL, 0,
3053 NULL, HFILL }},
3054 { &hf_kpm_v2_ric_ReportStyle_List,
3055 { "ric-ReportStyle-List", "kpm-v2.ric_ReportStyle_List",
3056 FT_UINT32, BASE_DEC, NULL, 0,
3057 "SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item", HFILL }},
3058 { &hf_kpm_v2_ric_ReportStyle_List_item,
3059 { "RIC-ReportStyle-Item", "kpm-v2.RIC_ReportStyle_Item_element",
3060 FT_NONE, BASE_NONE, NULL, 0,
3061 NULL, HFILL }},
3062 { &hf_kpm_v2_ric_EventTriggerStyle_Type,
3063 { "ric-EventTriggerStyle-Type", "kpm-v2.ric_EventTriggerStyle_Type",
3064 FT_INT32, BASE_DEC, NULL, 0,
3065 "RIC_Style_Type", HFILL }},
3066 { &hf_kpm_v2_ric_EventTriggerStyle_Name,
3067 { "ric-EventTriggerStyle-Name", "kpm-v2.ric_EventTriggerStyle_Name",
3068 FT_STRING, BASE_NONE, NULL, 0,
3069 "RIC_Style_Name", HFILL }},
3070 { &hf_kpm_v2_ric_EventTriggerFormat_Type,
3071 { "ric-EventTriggerFormat-Type", "kpm-v2.ric_EventTriggerFormat_Type",
3072 FT_INT32, BASE_DEC, NULL, 0,
3073 "RIC_Format_Type", HFILL }},
3074 { &hf_kpm_v2_ric_ReportStyle_Type,
3075 { "ric-ReportStyle-Type", "kpm-v2.ric_ReportStyle_Type",
3076 FT_INT32, BASE_DEC, NULL, 0,
3077 "RIC_Style_Type", HFILL }},
3078 { &hf_kpm_v2_ric_ReportStyle_Name,
3079 { "ric-ReportStyle-Name", "kpm-v2.ric_ReportStyle_Name",
3080 FT_STRING, BASE_NONE, NULL, 0,
3081 "RIC_Style_Name", HFILL }},
3082 { &hf_kpm_v2_ric_ActionFormat_Type,
3083 { "ric-ActionFormat-Type", "kpm-v2.ric_ActionFormat_Type",
3084 FT_INT32, BASE_DEC, NULL, 0,
3085 "RIC_Format_Type", HFILL }},
3086 { &hf_kpm_v2_measInfo_Action_List,
3087 { "measInfo-Action-List", "kpm-v2.measInfo_Action_List",
3088 FT_UINT32, BASE_DEC, NULL, 0,
3089 "MeasurementInfo_Action_List", HFILL }},
3090 { &hf_kpm_v2_ric_IndicationHeaderFormat_Type,
3091 { "ric-IndicationHeaderFormat-Type", "kpm-v2.ric_IndicationHeaderFormat_Type",
3092 FT_INT32, BASE_DEC, NULL, 0,
3093 "RIC_Format_Type", HFILL }},
3094 { &hf_kpm_v2_ric_IndicationMessageFormat_Type,
3095 { "ric-IndicationMessageFormat-Type", "kpm-v2.ric_IndicationMessageFormat_Type",
3096 FT_INT32, BASE_DEC, NULL, 0,
3097 "RIC_Format_Type", HFILL }},
3098 { &hf_kpm_v2_nR_CGI,
3099 { "nR-CGI", "kpm-v2.nR_CGI_element",
3100 FT_NONE, BASE_NONE, NULL, 0,
3101 NULL, HFILL }},
3102 { &hf_kpm_v2_eUTRA_CGI,
3103 { "eUTRA-CGI", "kpm-v2.eUTRA_CGI_element",
3104 FT_NONE, BASE_NONE, NULL, 0,
3105 NULL, HFILL }},
3106 { &hf_kpm_v2_ranFunction_ShortName,
3107 { "ranFunction-ShortName", "kpm-v2.ranFunction_ShortName",
3108 FT_STRING, BASE_NONE, NULL, 0,
3109 NULL, HFILL }},
3110 { &hf_kpm_v2_ranFunction_E2SM_OID,
3111 { "ranFunction-E2SM-OID", "kpm-v2.ranFunction_E2SM_OID",
3112 FT_STRING, BASE_NONE, NULL, 0,
3113 NULL, HFILL }},
3114 { &hf_kpm_v2_ranFunction_Description,
3115 { "ranFunction-Description", "kpm-v2.ranFunction_Description",
3116 FT_STRING, BASE_NONE, NULL, 0,
3117 "PrintableString_SIZE_1_150_", HFILL }},
3118 { &hf_kpm_v2_ranFunction_Instance,
3119 { "ranFunction-Instance", "kpm-v2.ranFunction_Instance",
3120 FT_INT32, BASE_DEC, NULL, 0,
3121 "INTEGER", HFILL }},
3122 { &hf_kpm_v2_gNB_UEID,
3123 { "gNB-UEID", "kpm-v2.gNB_UEID_element",
3124 FT_NONE, BASE_NONE, NULL, 0,
3125 "UEID_GNB", HFILL }},
3126 { &hf_kpm_v2_gNB_DU_UEID,
3127 { "gNB-DU-UEID", "kpm-v2.gNB_DU_UEID_element",
3128 FT_NONE, BASE_NONE, NULL, 0,
3129 "UEID_GNB_DU", HFILL }},
3130 { &hf_kpm_v2_gNB_CU_UP_UEID,
3131 { "gNB-CU-UP-UEID", "kpm-v2.gNB_CU_UP_UEID_element",
3132 FT_NONE, BASE_NONE, NULL, 0,
3133 "UEID_GNB_CU_UP", HFILL }},
3134 { &hf_kpm_v2_ng_eNB_UEID,
3135 { "ng-eNB-UEID", "kpm-v2.ng_eNB_UEID_element",
3136 FT_NONE, BASE_NONE, NULL, 0,
3137 "UEID_NG_ENB", HFILL }},
3138 { &hf_kpm_v2_ng_eNB_DU_UEID,
3139 { "ng-eNB-DU-UEID", "kpm-v2.ng_eNB_DU_UEID_element",
3140 FT_NONE, BASE_NONE, NULL, 0,
3141 "UEID_NG_ENB_DU", HFILL }},
3142 { &hf_kpm_v2_en_gNB_UEID,
3143 { "en-gNB-UEID", "kpm-v2.en_gNB_UEID_element",
3144 FT_NONE, BASE_NONE, NULL, 0,
3145 "UEID_EN_GNB", HFILL }},
3146 { &hf_kpm_v2_eNB_UEID,
3147 { "eNB-UEID", "kpm-v2.eNB_UEID_element",
3148 FT_NONE, BASE_NONE, NULL, 0,
3149 "UEID_ENB", HFILL }},
3150 { &hf_kpm_v2_amf_UE_NGAP_ID,
3151 { "amf-UE-NGAP-ID", "kpm-v2.amf_UE_NGAP_ID",
3152 FT_UINT64, BASE_DEC, NULL, 0,
3153 NULL, HFILL }},
3154 { &hf_kpm_v2_guami,
3155 { "guami", "kpm-v2.guami_element",
3156 FT_NONE, BASE_NONE, NULL, 0,
3157 NULL, HFILL }},
3158 { &hf_kpm_v2_gNB_CU_UE_F1AP_ID_List,
3159 { "gNB-CU-UE-F1AP-ID-List", "kpm-v2.gNB_CU_UE_F1AP_ID_List",
3160 FT_UINT32, BASE_DEC, NULL, 0,
3161 "UEID_GNB_CU_F1AP_ID_List", HFILL }},
3162 { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID_List,
3163 { "gNB-CU-CP-UE-E1AP-ID-List", "kpm-v2.gNB_CU_CP_UE_E1AP_ID_List",
3164 FT_UINT32, BASE_DEC, NULL, 0,
3165 "UEID_GNB_CU_CP_E1AP_ID_List", HFILL }},
3166 { &hf_kpm_v2_ran_UEID,
3167 { "ran-UEID", "kpm-v2.ran_UEID",
3168 FT_BYTES, BASE_NONE, NULL, 0,
3169 "RANUEID", HFILL }},
3170 { &hf_kpm_v2_m_NG_RAN_UE_XnAP_ID,
3171 { "m-NG-RAN-UE-XnAP-ID", "kpm-v2.m_NG_RAN_UE_XnAP_ID",
3172 FT_UINT32, BASE_DEC, NULL, 0,
3173 "NG_RANnodeUEXnAPID", HFILL }},
3174 { &hf_kpm_v2_globalGNB_ID,
3175 { "globalGNB-ID", "kpm-v2.globalGNB_ID_element",
3176 FT_NONE, BASE_NONE, NULL, 0,
3177 NULL, HFILL }},
3178 { &hf_kpm_v2_globalNG_RANNode_ID,
3179 { "globalNG-RANNode-ID", "kpm-v2.globalNG_RANNode_ID",
3180 FT_UINT32, BASE_DEC, VALS(kpm_v2_GlobalNGRANNodeID_vals), 0,
3181 "GlobalNGRANNodeID", HFILL }},
3182 { &hf_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List_item,
3183 { "UEID-GNB-CU-CP-E1AP-ID-Item", "kpm-v2.UEID_GNB_CU_CP_E1AP_ID_Item_element",
3184 FT_NONE, BASE_NONE, NULL, 0,
3185 NULL, HFILL }},
3186 { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID,
3187 { "gNB-CU-CP-UE-E1AP-ID", "kpm-v2.gNB_CU_CP_UE_E1AP_ID",
3188 FT_UINT32, BASE_DEC, NULL, 0,
3189 NULL, HFILL }},
3190 { &hf_kpm_v2_UEID_GNB_CU_F1AP_ID_List_item,
3191 { "UEID-GNB-CU-CP-F1AP-ID-Item", "kpm-v2.UEID_GNB_CU_CP_F1AP_ID_Item_element",
3192 FT_NONE, BASE_NONE, NULL, 0,
3193 NULL, HFILL }},
3194 { &hf_kpm_v2_gNB_CU_UE_F1AP_ID,
3195 { "gNB-CU-UE-F1AP-ID", "kpm-v2.gNB_CU_UE_F1AP_ID",
3196 FT_UINT32, BASE_DEC, NULL, 0,
3197 NULL, HFILL }},
3198 { &hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID,
3199 { "ng-eNB-CU-UE-W1AP-ID", "kpm-v2.ng_eNB_CU_UE_W1AP_ID",
3200 FT_UINT32, BASE_DEC, NULL, 0,
3201 "NGENB_CU_UE_W1AP_ID", HFILL }},
3202 { &hf_kpm_v2_globalNgENB_ID,
3203 { "globalNgENB-ID", "kpm-v2.globalNgENB_ID_element",
3204 FT_NONE, BASE_NONE, NULL, 0,
3205 NULL, HFILL }},
3206 { &hf_kpm_v2_m_eNB_UE_X2AP_ID,
3207 { "m-eNB-UE-X2AP-ID", "kpm-v2.m_eNB_UE_X2AP_ID",
3208 FT_UINT32, BASE_DEC, NULL, 0,
3209 "ENB_UE_X2AP_ID", HFILL }},
3210 { &hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension,
3211 { "m-eNB-UE-X2AP-ID-Extension", "kpm-v2.m_eNB_UE_X2AP_ID_Extension",
3212 FT_UINT32, BASE_DEC, NULL, 0,
3213 "ENB_UE_X2AP_ID_Extension", HFILL }},
3214 { &hf_kpm_v2_globalENB_ID,
3215 { "globalENB-ID", "kpm-v2.globalENB_ID_element",
3216 FT_NONE, BASE_NONE, NULL, 0,
3217 NULL, HFILL }},
3218 { &hf_kpm_v2_mME_UE_S1AP_ID,
3219 { "mME-UE-S1AP-ID", "kpm-v2.mME_UE_S1AP_ID",
3220 FT_UINT32, BASE_DEC, NULL, 0,
3221 NULL, HFILL }},
3222 { &hf_kpm_v2_gUMMEI,
3223 { "gUMMEI", "kpm-v2.gUMMEI_element",
3224 FT_NONE, BASE_NONE, NULL, 0,
3225 NULL, HFILL }},
3226 { &hf_kpm_v2_macro_eNB_ID,
3227 { "macro-eNB-ID", "kpm-v2.macro_eNB_ID",
3228 FT_BYTES, BASE_NONE, NULL, 0,
3229 "BIT_STRING_SIZE_20", HFILL }},
3230 { &hf_kpm_v2_home_eNB_ID,
3231 { "home-eNB-ID", "kpm-v2.home_eNB_ID",
3232 FT_BYTES, BASE_NONE, NULL, 0,
3233 "BIT_STRING_SIZE_28", HFILL }},
3234 { &hf_kpm_v2_short_Macro_eNB_ID,
3235 { "short-Macro-eNB-ID", "kpm-v2.short_Macro_eNB_ID",
3236 FT_BYTES, BASE_NONE, NULL, 0,
3237 "BIT_STRING_SIZE_18", HFILL }},
3238 { &hf_kpm_v2_long_Macro_eNB_ID,
3239 { "long-Macro-eNB-ID", "kpm-v2.long_Macro_eNB_ID",
3240 FT_BYTES, BASE_NONE, NULL, 0,
3241 "BIT_STRING_SIZE_21", HFILL }},
3242 { &hf_kpm_v2_pLMNIdentity,
3243 { "pLMNIdentity", "kpm-v2.pLMNIdentity",
3244 FT_BYTES, BASE_NONE, NULL, 0,
3245 NULL, HFILL }},
3246 { &hf_kpm_v2_eNB_ID,
3247 { "eNB-ID", "kpm-v2.eNB_ID",
3248 FT_UINT32, BASE_DEC, VALS(kpm_v2_ENB_ID_vals), 0,
3249 NULL, HFILL }},
3250 { &hf_kpm_v2_pLMN_Identity,
3251 { "pLMN-Identity", "kpm-v2.pLMN_Identity",
3252 FT_BYTES, BASE_NONE, NULL, 0,
3253 "PLMNIdentity", HFILL }},
3254 { &hf_kpm_v2_mME_Group_ID,
3255 { "mME-Group-ID", "kpm-v2.mME_Group_ID",
3256 FT_BYTES, BASE_NONE, NULL, 0,
3257 NULL, HFILL }},
3258 { &hf_kpm_v2_mME_Code,
3259 { "mME-Code", "kpm-v2.mME_Code",
3260 FT_BYTES, BASE_NONE, NULL, 0,
3261 NULL, HFILL }},
3262 { &hf_kpm_v2_eUTRACellIdentity,
3263 { "eUTRACellIdentity", "kpm-v2.eUTRACellIdentity",
3264 FT_BYTES, BASE_NONE, NULL, 0,
3265 NULL, HFILL }},
3266 { &hf_kpm_v2_gNB_ID,
3267 { "gNB-ID", "kpm-v2.gNB_ID",
3268 FT_UINT32, BASE_DEC, VALS(kpm_v2_GNB_ID_vals), 0,
3269 NULL, HFILL }},
3270 { &hf_kpm_v2_ngENB_ID,
3271 { "ngENB-ID", "kpm-v2.ngENB_ID",
3272 FT_UINT32, BASE_DEC, VALS(kpm_v2_NgENB_ID_vals), 0,
3273 NULL, HFILL }},
3274 { &hf_kpm_v2_gNB_ID_01,
3275 { "gNB-ID", "kpm-v2.gNB_ID",
3276 FT_BYTES, BASE_NONE, NULL, 0,
3277 "BIT_STRING_SIZE_22_32", HFILL }},
3278 { &hf_kpm_v2_aMFRegionID,
3279 { "aMFRegionID", "kpm-v2.aMFRegionID",
3280 FT_BYTES, BASE_NONE, NULL, 0,
3281 NULL, HFILL }},
3282 { &hf_kpm_v2_aMFSetID,
3283 { "aMFSetID", "kpm-v2.aMFSetID",
3284 FT_BYTES, BASE_NONE, NULL, 0,
3285 NULL, HFILL }},
3286 { &hf_kpm_v2_aMFPointer,
3287 { "aMFPointer", "kpm-v2.aMFPointer",
3288 FT_BYTES, BASE_NONE, NULL, 0,
3289 NULL, HFILL }},
3290 { &hf_kpm_v2_macroNgENB_ID,
3291 { "macroNgENB-ID", "kpm-v2.macroNgENB_ID",
3292 FT_BYTES, BASE_NONE, NULL, 0,
3293 "BIT_STRING_SIZE_20", HFILL }},
3294 { &hf_kpm_v2_shortMacroNgENB_ID,
3295 { "shortMacroNgENB-ID", "kpm-v2.shortMacroNgENB_ID",
3296 FT_BYTES, BASE_NONE, NULL, 0,
3297 "BIT_STRING_SIZE_18", HFILL }},
3298 { &hf_kpm_v2_longMacroNgENB_ID,
3299 { "longMacroNgENB-ID", "kpm-v2.longMacroNgENB_ID",
3300 FT_BYTES, BASE_NONE, NULL, 0,
3301 "BIT_STRING_SIZE_21", HFILL }},
3302 { &hf_kpm_v2_nRCellIdentity,
3303 { "nRCellIdentity", "kpm-v2.nRCellIdentity",
3304 FT_BYTES, BASE_NONE, NULL, 0,
3305 NULL, HFILL }},
3306 { &hf_kpm_v2_sST,
3307 { "sST", "kpm-v2.sST",
3308 FT_BYTES, BASE_NONE, NULL, 0,
3309 NULL, HFILL }},
3310 { &hf_kpm_v2_sD,
3311 { "sD", "kpm-v2.sD",
3312 FT_BYTES, BASE_NONE, NULL, 0,
3313 NULL, HFILL }},
3314 { &hf_kpm_v2_gNB,
3315 { "gNB", "kpm-v2.gNB_element",
3316 FT_NONE, BASE_NONE, NULL, 0,
3317 "GlobalGNB_ID", HFILL }},
3318 { &hf_kpm_v2_ng_eNB,
3319 { "ng-eNB", "kpm-v2.ng_eNB_element",
3320 FT_NONE, BASE_NONE, NULL, 0,
3321 "GlobalNgENB_ID", HFILL }},
3322 { &hf_kpm_v2_timestamp_string,
3323 { "Timestamp string", "kpm-v2.timestamp-string",
3324 FT_STRING, BASE_NONE, NULL, 0x0,
3325 NULL, HFILL }},
3328 /* List of subtrees */
3329 static int *ett[] = {
3330 &ett_kpm_v2_MeasurementType,
3331 &ett_kpm_v2_MeasurementLabel,
3332 &ett_kpm_v2_TestCondInfo,
3333 &ett_kpm_v2_TestCond_Type,
3334 &ett_kpm_v2_TestCond_Value,
3335 &ett_kpm_v2_MeasurementInfoList,
3336 &ett_kpm_v2_MeasurementInfoItem,
3337 &ett_kpm_v2_LabelInfoList,
3338 &ett_kpm_v2_LabelInfoItem,
3339 &ett_kpm_v2_MeasurementData,
3340 &ett_kpm_v2_MeasurementDataItem,
3341 &ett_kpm_v2_MeasurementRecord,
3342 &ett_kpm_v2_MeasurementRecordItem,
3343 &ett_kpm_v2_MeasurementInfo_Action_List,
3344 &ett_kpm_v2_MeasurementInfo_Action_Item,
3345 &ett_kpm_v2_MeasurementCondList,
3346 &ett_kpm_v2_MeasurementCondItem,
3347 &ett_kpm_v2_MeasurementCondUEidList,
3348 &ett_kpm_v2_MeasurementCondUEidItem,
3349 &ett_kpm_v2_MatchingCondList,
3350 &ett_kpm_v2_MatchingCondItem,
3351 &ett_kpm_v2_MatchingUEidList,
3352 &ett_kpm_v2_MatchingUEidItem,
3353 &ett_kpm_v2_MatchingUeCondPerSubList,
3354 &ett_kpm_v2_MatchingUeCondPerSubItem,
3355 &ett_kpm_v2_MatchingUEidPerSubList,
3356 &ett_kpm_v2_MatchingUEidPerSubItem,
3357 &ett_kpm_v2_UEMeasurementReportList,
3358 &ett_kpm_v2_UEMeasurementReportItem,
3359 &ett_kpm_v2_E2SM_KPM_EventTriggerDefinition,
3360 &ett_kpm_v2_T_eventDefinition_formats,
3361 &ett_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1,
3362 &ett_kpm_v2_E2SM_KPM_ActionDefinition,
3363 &ett_kpm_v2_T_actionDefinition_formats,
3364 &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format1,
3365 &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format2,
3366 &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format3,
3367 &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format4,
3368 &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format5,
3369 &ett_kpm_v2_E2SM_KPM_IndicationHeader,
3370 &ett_kpm_v2_T_indicationHeader_formats,
3371 &ett_kpm_v2_E2SM_KPM_IndicationHeader_Format1,
3372 &ett_kpm_v2_E2SM_KPM_IndicationMessage,
3373 &ett_kpm_v2_T_indicationMessage_formats,
3374 &ett_kpm_v2_E2SM_KPM_IndicationMessage_Format1,
3375 &ett_kpm_v2_E2SM_KPM_IndicationMessage_Format2,
3376 &ett_kpm_v2_E2SM_KPM_IndicationMessage_Format3,
3377 &ett_kpm_v2_E2SM_KPM_RANfunction_Description,
3378 &ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item,
3379 &ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item,
3380 &ett_kpm_v2_RIC_EventTriggerStyle_Item,
3381 &ett_kpm_v2_RIC_ReportStyle_Item,
3382 &ett_kpm_v2_CGI,
3383 &ett_kpm_v2_RANfunction_Name,
3384 &ett_kpm_v2_UEID,
3385 &ett_kpm_v2_UEID_GNB,
3386 &ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List,
3387 &ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item,
3388 &ett_kpm_v2_UEID_GNB_CU_F1AP_ID_List,
3389 &ett_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item,
3390 &ett_kpm_v2_UEID_GNB_DU,
3391 &ett_kpm_v2_UEID_GNB_CU_UP,
3392 &ett_kpm_v2_UEID_NG_ENB,
3393 &ett_kpm_v2_UEID_NG_ENB_DU,
3394 &ett_kpm_v2_UEID_EN_GNB,
3395 &ett_kpm_v2_UEID_ENB,
3396 &ett_kpm_v2_ENB_ID,
3397 &ett_kpm_v2_GlobalENB_ID,
3398 &ett_kpm_v2_GUMMEI,
3399 &ett_kpm_v2_EUTRA_CGI,
3400 &ett_kpm_v2_GlobalGNB_ID,
3401 &ett_kpm_v2_GlobalNgENB_ID,
3402 &ett_kpm_v2_GNB_ID,
3403 &ett_kpm_v2_GUAMI,
3404 &ett_kpm_v2_NgENB_ID,
3405 &ett_kpm_v2_NR_CGI,
3406 &ett_kpm_v2_S_NSSAI,
3407 &ett_kpm_v2_GlobalNGRANNodeID,
3411 /* Register protocol */
3412 proto_kpm_v2 = proto_register_protocol(PNAME, PSNAME, PFNAME);
3413 /* Register fields and subtrees */
3414 proto_register_field_array(proto_kpm_v2, hf, array_length(hf));
3415 proto_register_subtree_array(ett, array_length(ett));
3419 * Editor modelines
3421 * Local Variables:
3422 * c-basic-offset: 2
3423 * tab-width: 8
3424 * indent-tabs-mode: nil
3425 * End:
3427 * ex: set shiftwidth=2 tabstop=8 expandtab:
3428 * :indentSize=2:tabSize=8:noTabs=true: