summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-kpm-v2.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/packet-kpm-v2.c
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-kpm-v2.c')
-rw-r--r--epan/dissectors/packet-kpm-v2.c3428
1 files changed, 3428 insertions, 0 deletions
diff --git a/epan/dissectors/packet-kpm-v2.c b/epan/dissectors/packet-kpm-v2.c
new file mode 100644
index 00000000..3ba2bc19
--- /dev/null
+++ b/epan/dissectors/packet-kpm-v2.c
@@ -0,0 +1,3428 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-kpm-v2.c */
+/* asn2wrs.py -L -p kpm-v2 -c ./kpm-v2.cnf -s ./packet-kpm-v2-template -D . -O ../.. e2sm-kpm-v2.02.asn e2sm-v3.01.asn */
+
+/* packet-kpm-v2-template.c
+ * Copyright 2021, Martin Mathieson
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * References: ORAN-WG3.E2SM-KPM-v02.02
+ */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/strutil.h>
+#include <epan/asn1.h>
+
+#include "packet-e2ap.h"
+#include "packet-per.h"
+#include "packet-ntp.h"
+
+#define PNAME "KPM V2"
+#define PSNAME "KPMv2"
+#define PFNAME "kpm-v2"
+
+
+void proto_register_kpm_v2(void);
+void proto_reg_handoff_kpm_v2(void);
+
+
+#define maxnoofCells 16384
+#define maxnoofRICStyles 63
+#define maxnoofMeasurementInfo 65535
+#define maxnoofLabelInfo 2147483647
+#define maxnoofMeasurementRecord 65535
+#define maxnoofMeasurementValue 2147483647
+#define maxnoofConditionInfo 32768
+#define maxnoofUEID 65535
+#define maxnoofConditionInfoPerSub 32768
+#define maxnoofUEIDPerSub 65535
+#define maxnoofUEMeasReport 65535
+#define maxE1APid 65535
+#define maxF1APid 4
+#define maxEARFCN 65535
+#define maxNRARFCN 3279165
+#define maxnoofNrCellBands 32
+
+/* Initialize the protocol and registered fields */
+static int proto_kpm_v2 = -1;
+static int hf_kpm_v2_E2SM_KPM_EventTriggerDefinition_PDU = -1; /* E2SM_KPM_EventTriggerDefinition */
+static int hf_kpm_v2_E2SM_KPM_ActionDefinition_PDU = -1; /* E2SM_KPM_ActionDefinition */
+static int hf_kpm_v2_E2SM_KPM_IndicationHeader_PDU = -1; /* E2SM_KPM_IndicationHeader */
+static int hf_kpm_v2_E2SM_KPM_IndicationMessage_PDU = -1; /* E2SM_KPM_IndicationMessage */
+static int hf_kpm_v2_E2SM_KPM_RANfunction_Description_PDU = -1; /* E2SM_KPM_RANfunction_Description */
+static int hf_kpm_v2_measName = -1; /* MeasurementTypeName */
+static int hf_kpm_v2_measID = -1; /* MeasurementTypeID */
+static int hf_kpm_v2_noLabel = -1; /* T_noLabel */
+static int hf_kpm_v2_plmnID = -1; /* PLMNIdentity */
+static int hf_kpm_v2_sliceID = -1; /* S_NSSAI */
+static int hf_kpm_v2_fiveQI = -1; /* FiveQI */
+static int hf_kpm_v2_qFI = -1; /* QosFlowIdentifier */
+static int hf_kpm_v2_qCI = -1; /* QCI */
+static int hf_kpm_v2_qCImax = -1; /* QCI */
+static int hf_kpm_v2_qCImin = -1; /* QCI */
+static int hf_kpm_v2_aRPmax = -1; /* INTEGER_1_15_ */
+static int hf_kpm_v2_aRPmin = -1; /* INTEGER_1_15_ */
+static int hf_kpm_v2_bitrateRange = -1; /* INTEGER_1_65535_ */
+static int hf_kpm_v2_layerMU_MIMO = -1; /* INTEGER_1_65535_ */
+static int hf_kpm_v2_sUM = -1; /* T_sUM */
+static int hf_kpm_v2_distBinX = -1; /* INTEGER_1_65535_ */
+static int hf_kpm_v2_distBinY = -1; /* INTEGER_1_65535_ */
+static int hf_kpm_v2_distBinZ = -1; /* INTEGER_1_65535_ */
+static int hf_kpm_v2_preLabelOverride = -1; /* T_preLabelOverride */
+static int hf_kpm_v2_startEndInd = -1; /* T_startEndInd */
+static int hf_kpm_v2_min = -1; /* T_min */
+static int hf_kpm_v2_max = -1; /* T_max */
+static int hf_kpm_v2_avg = -1; /* T_avg */
+static int hf_kpm_v2_testType = -1; /* TestCond_Type */
+static int hf_kpm_v2_testExpr = -1; /* TestCond_Expression */
+static int hf_kpm_v2_testValue = -1; /* TestCond_Value */
+static int hf_kpm_v2_gBR = -1; /* T_gBR */
+static int hf_kpm_v2_aMBR = -1; /* T_aMBR */
+static int hf_kpm_v2_isStat = -1; /* T_isStat */
+static int hf_kpm_v2_isCatM = -1; /* T_isCatM */
+static int hf_kpm_v2_rSRP = -1; /* T_rSRP */
+static int hf_kpm_v2_rSRQ = -1; /* T_rSRQ */
+static int hf_kpm_v2_ul_rSRP = -1; /* T_ul_rSRP */
+static int hf_kpm_v2_cQI = -1; /* T_cQI */
+static int hf_kpm_v2_fiveQI_01 = -1; /* T_fiveQI */
+static int hf_kpm_v2_qCI_01 = -1; /* T_qCI */
+static int hf_kpm_v2_sNSSAI = -1; /* T_sNSSAI */
+static int hf_kpm_v2_valueInt = -1; /* INTEGER */
+static int hf_kpm_v2_valueEnum = -1; /* INTEGER */
+static int hf_kpm_v2_valueBool = -1; /* BOOLEAN */
+static int hf_kpm_v2_valueBitS = -1; /* BIT_STRING */
+static int hf_kpm_v2_valueOctS = -1; /* OCTET_STRING */
+static int hf_kpm_v2_valuePrtS = -1; /* PrintableString */
+static int hf_kpm_v2_valueReal = -1; /* REAL */
+static int hf_kpm_v2_MeasurementInfoList_item = -1; /* MeasurementInfoItem */
+static int hf_kpm_v2_measType = -1; /* MeasurementType */
+static int hf_kpm_v2_labelInfoList = -1; /* LabelInfoList */
+static int hf_kpm_v2_LabelInfoList_item = -1; /* LabelInfoItem */
+static int hf_kpm_v2_measLabel = -1; /* MeasurementLabel */
+static int hf_kpm_v2_MeasurementData_item = -1; /* MeasurementDataItem */
+static int hf_kpm_v2_measRecord = -1; /* MeasurementRecord */
+static int hf_kpm_v2_incompleteFlag = -1; /* T_incompleteFlag */
+static int hf_kpm_v2_MeasurementRecord_item = -1; /* MeasurementRecordItem */
+static int hf_kpm_v2_integer = -1; /* INTEGER_0_4294967295 */
+static int hf_kpm_v2_real = -1; /* REAL */
+static int hf_kpm_v2_noValue = -1; /* NULL */
+static int hf_kpm_v2_MeasurementInfo_Action_List_item = -1; /* MeasurementInfo_Action_Item */
+static int hf_kpm_v2_MeasurementCondList_item = -1; /* MeasurementCondItem */
+static int hf_kpm_v2_matchingCond = -1; /* MatchingCondList */
+static int hf_kpm_v2_MeasurementCondUEidList_item = -1; /* MeasurementCondUEidItem */
+static int hf_kpm_v2_matchingUEidList = -1; /* MatchingUEidList */
+static int hf_kpm_v2_MatchingCondList_item = -1; /* MatchingCondItem */
+static int hf_kpm_v2_testCondInfo = -1; /* TestCondInfo */
+static int hf_kpm_v2_MatchingUEidList_item = -1; /* MatchingUEidItem */
+static int hf_kpm_v2_ueID = -1; /* UEID */
+static int hf_kpm_v2_MatchingUeCondPerSubList_item = -1; /* MatchingUeCondPerSubItem */
+static int hf_kpm_v2_MatchingUEidPerSubList_item = -1; /* MatchingUEidPerSubItem */
+static int hf_kpm_v2_UEMeasurementReportList_item = -1; /* UEMeasurementReportItem */
+static int hf_kpm_v2_measReport = -1; /* E2SM_KPM_IndicationMessage_Format1 */
+static int hf_kpm_v2_eventDefinition_formats = -1; /* T_eventDefinition_formats */
+static int hf_kpm_v2_eventDefinition_Format1 = -1; /* E2SM_KPM_EventTriggerDefinition_Format1 */
+static int hf_kpm_v2_reportingPeriod = -1; /* INTEGER_1_4294967295 */
+static int hf_kpm_v2_ric_Style_Type = -1; /* RIC_Style_Type */
+static int hf_kpm_v2_actionDefinition_formats = -1; /* T_actionDefinition_formats */
+static int hf_kpm_v2_actionDefinition_Format1 = -1; /* E2SM_KPM_ActionDefinition_Format1 */
+static int hf_kpm_v2_actionDefinition_Format2 = -1; /* E2SM_KPM_ActionDefinition_Format2 */
+static int hf_kpm_v2_actionDefinition_Format3 = -1; /* E2SM_KPM_ActionDefinition_Format3 */
+static int hf_kpm_v2_actionDefinition_Format4 = -1; /* E2SM_KPM_ActionDefinition_Format4 */
+static int hf_kpm_v2_actionDefinition_Format5 = -1; /* E2SM_KPM_ActionDefinition_Format5 */
+static int hf_kpm_v2_measInfoList = -1; /* MeasurementInfoList */
+static int hf_kpm_v2_granulPeriod = -1; /* GranularityPeriod */
+static int hf_kpm_v2_cellGlobalID = -1; /* CGI */
+static int hf_kpm_v2_subscriptInfo = -1; /* E2SM_KPM_ActionDefinition_Format1 */
+static int hf_kpm_v2_measCondList = -1; /* MeasurementCondList */
+static int hf_kpm_v2_matchingUeCondList = -1; /* MatchingUeCondPerSubList */
+static int hf_kpm_v2_subscriptionInfo = -1; /* E2SM_KPM_ActionDefinition_Format1 */
+static int hf_kpm_v2_matchingUEidList_01 = -1; /* MatchingUEidPerSubList */
+static int hf_kpm_v2_indicationHeader_formats = -1; /* T_indicationHeader_formats */
+static int hf_kpm_v2_indicationHeader_Format1 = -1; /* E2SM_KPM_IndicationHeader_Format1 */
+static int hf_kpm_v2_colletStartTime = -1; /* T_colletStartTime */
+static int hf_kpm_v2_fileFormatversion = -1; /* PrintableString_SIZE_0_15_ */
+static int hf_kpm_v2_senderName = -1; /* PrintableString_SIZE_0_400_ */
+static int hf_kpm_v2_senderType = -1; /* PrintableString_SIZE_0_8_ */
+static int hf_kpm_v2_vendorName = -1; /* PrintableString_SIZE_0_32_ */
+static int hf_kpm_v2_indicationMessage_formats = -1; /* T_indicationMessage_formats */
+static int hf_kpm_v2_indicationMessage_Format1 = -1; /* E2SM_KPM_IndicationMessage_Format1 */
+static int hf_kpm_v2_indicationMessage_Format2 = -1; /* E2SM_KPM_IndicationMessage_Format2 */
+static int hf_kpm_v2_indicationMessage_Format3 = -1; /* E2SM_KPM_IndicationMessage_Format3 */
+static int hf_kpm_v2_measData = -1; /* MeasurementData */
+static int hf_kpm_v2_measCondUEidList = -1; /* MeasurementCondUEidList */
+static int hf_kpm_v2_ueMeasReportList = -1; /* UEMeasurementReportList */
+static int hf_kpm_v2_ranFunction_Name = -1; /* RANfunction_Name */
+static int hf_kpm_v2_ric_EventTriggerStyle_List = -1; /* SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item */
+static int hf_kpm_v2_ric_EventTriggerStyle_List_item = -1; /* RIC_EventTriggerStyle_Item */
+static int hf_kpm_v2_ric_ReportStyle_List = -1; /* SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item */
+static int hf_kpm_v2_ric_ReportStyle_List_item = -1; /* RIC_ReportStyle_Item */
+static int hf_kpm_v2_ric_EventTriggerStyle_Type = -1; /* RIC_Style_Type */
+static int hf_kpm_v2_ric_EventTriggerStyle_Name = -1; /* RIC_Style_Name */
+static int hf_kpm_v2_ric_EventTriggerFormat_Type = -1; /* RIC_Format_Type */
+static int hf_kpm_v2_ric_ReportStyle_Type = -1; /* RIC_Style_Type */
+static int hf_kpm_v2_ric_ReportStyle_Name = -1; /* RIC_Style_Name */
+static int hf_kpm_v2_ric_ActionFormat_Type = -1; /* RIC_Format_Type */
+static int hf_kpm_v2_measInfo_Action_List = -1; /* MeasurementInfo_Action_List */
+static int hf_kpm_v2_ric_IndicationHeaderFormat_Type = -1; /* RIC_Format_Type */
+static int hf_kpm_v2_ric_IndicationMessageFormat_Type = -1; /* RIC_Format_Type */
+static int hf_kpm_v2_nR_CGI = -1; /* NR_CGI */
+static int hf_kpm_v2_eUTRA_CGI = -1; /* EUTRA_CGI */
+static int hf_kpm_v2_ranFunction_ShortName = -1; /* T_ranFunction_ShortName */
+static int hf_kpm_v2_ranFunction_E2SM_OID = -1; /* T_ranFunction_E2SM_OID */
+static int hf_kpm_v2_ranFunction_Description = -1; /* PrintableString_SIZE_1_150_ */
+static int hf_kpm_v2_ranFunction_Instance = -1; /* INTEGER */
+static int hf_kpm_v2_gNB_UEID = -1; /* UEID_GNB */
+static int hf_kpm_v2_gNB_DU_UEID = -1; /* UEID_GNB_DU */
+static int hf_kpm_v2_gNB_CU_UP_UEID = -1; /* UEID_GNB_CU_UP */
+static int hf_kpm_v2_ng_eNB_UEID = -1; /* UEID_NG_ENB */
+static int hf_kpm_v2_ng_eNB_DU_UEID = -1; /* UEID_NG_ENB_DU */
+static int hf_kpm_v2_en_gNB_UEID = -1; /* UEID_EN_GNB */
+static int hf_kpm_v2_eNB_UEID = -1; /* UEID_ENB */
+static int hf_kpm_v2_amf_UE_NGAP_ID = -1; /* AMF_UE_NGAP_ID */
+static int hf_kpm_v2_guami = -1; /* GUAMI */
+static int hf_kpm_v2_gNB_CU_UE_F1AP_ID_List = -1; /* UEID_GNB_CU_F1AP_ID_List */
+static int hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID_List = -1; /* UEID_GNB_CU_CP_E1AP_ID_List */
+static int hf_kpm_v2_ran_UEID = -1; /* RANUEID */
+static int hf_kpm_v2_m_NG_RAN_UE_XnAP_ID = -1; /* NG_RANnodeUEXnAPID */
+static int hf_kpm_v2_globalGNB_ID = -1; /* GlobalGNB_ID */
+static int hf_kpm_v2_globalNG_RANNode_ID = -1; /* GlobalNGRANNodeID */
+static int hf_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List_item = -1; /* UEID_GNB_CU_CP_E1AP_ID_Item */
+static int hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID = -1; /* GNB_CU_CP_UE_E1AP_ID */
+static int hf_kpm_v2_UEID_GNB_CU_F1AP_ID_List_item = -1; /* UEID_GNB_CU_CP_F1AP_ID_Item */
+static int hf_kpm_v2_gNB_CU_UE_F1AP_ID = -1; /* GNB_CU_UE_F1AP_ID */
+static int hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID = -1; /* NGENB_CU_UE_W1AP_ID */
+static int hf_kpm_v2_globalNgENB_ID = -1; /* GlobalNgENB_ID */
+static int hf_kpm_v2_m_eNB_UE_X2AP_ID = -1; /* ENB_UE_X2AP_ID */
+static int hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension = -1; /* ENB_UE_X2AP_ID_Extension */
+static int hf_kpm_v2_globalENB_ID = -1; /* GlobalENB_ID */
+static int hf_kpm_v2_mME_UE_S1AP_ID = -1; /* MME_UE_S1AP_ID */
+static int hf_kpm_v2_gUMMEI = -1; /* GUMMEI */
+static int hf_kpm_v2_macro_eNB_ID = -1; /* BIT_STRING_SIZE_20 */
+static int hf_kpm_v2_home_eNB_ID = -1; /* BIT_STRING_SIZE_28 */
+static int hf_kpm_v2_short_Macro_eNB_ID = -1; /* BIT_STRING_SIZE_18 */
+static int hf_kpm_v2_long_Macro_eNB_ID = -1; /* BIT_STRING_SIZE_21 */
+static int hf_kpm_v2_pLMNIdentity = -1; /* PLMNIdentity */
+static int hf_kpm_v2_eNB_ID = -1; /* ENB_ID */
+static int hf_kpm_v2_pLMN_Identity = -1; /* PLMNIdentity */
+static int hf_kpm_v2_mME_Group_ID = -1; /* MME_Group_ID */
+static int hf_kpm_v2_mME_Code = -1; /* MME_Code */
+static int hf_kpm_v2_eUTRACellIdentity = -1; /* EUTRACellIdentity */
+static int hf_kpm_v2_gNB_ID = -1; /* GNB_ID */
+static int hf_kpm_v2_ngENB_ID = -1; /* NgENB_ID */
+static int hf_kpm_v2_gNB_ID_01 = -1; /* BIT_STRING_SIZE_22_32 */
+static int hf_kpm_v2_aMFRegionID = -1; /* AMFRegionID */
+static int hf_kpm_v2_aMFSetID = -1; /* AMFSetID */
+static int hf_kpm_v2_aMFPointer = -1; /* AMFPointer */
+static int hf_kpm_v2_macroNgENB_ID = -1; /* BIT_STRING_SIZE_20 */
+static int hf_kpm_v2_shortMacroNgENB_ID = -1; /* BIT_STRING_SIZE_18 */
+static int hf_kpm_v2_longMacroNgENB_ID = -1; /* BIT_STRING_SIZE_21 */
+static int hf_kpm_v2_nRCellIdentity = -1; /* NRCellIdentity */
+static int hf_kpm_v2_sST = -1; /* SST */
+static int hf_kpm_v2_sD = -1; /* SD */
+static int hf_kpm_v2_gNB = -1; /* GlobalGNB_ID */
+static int hf_kpm_v2_ng_eNB = -1; /* GlobalNgENB_ID */
+
+static int hf_kpm_v2_timestamp_string = -1;
+
+
+static gint ett_kpm_v2_MeasurementType = -1;
+static gint ett_kpm_v2_MeasurementLabel = -1;
+static gint ett_kpm_v2_TestCondInfo = -1;
+static gint ett_kpm_v2_TestCond_Type = -1;
+static gint ett_kpm_v2_TestCond_Value = -1;
+static gint ett_kpm_v2_MeasurementInfoList = -1;
+static gint ett_kpm_v2_MeasurementInfoItem = -1;
+static gint ett_kpm_v2_LabelInfoList = -1;
+static gint ett_kpm_v2_LabelInfoItem = -1;
+static gint ett_kpm_v2_MeasurementData = -1;
+static gint ett_kpm_v2_MeasurementDataItem = -1;
+static gint ett_kpm_v2_MeasurementRecord = -1;
+static gint ett_kpm_v2_MeasurementRecordItem = -1;
+static gint ett_kpm_v2_MeasurementInfo_Action_List = -1;
+static gint ett_kpm_v2_MeasurementInfo_Action_Item = -1;
+static gint ett_kpm_v2_MeasurementCondList = -1;
+static gint ett_kpm_v2_MeasurementCondItem = -1;
+static gint ett_kpm_v2_MeasurementCondUEidList = -1;
+static gint ett_kpm_v2_MeasurementCondUEidItem = -1;
+static gint ett_kpm_v2_MatchingCondList = -1;
+static gint ett_kpm_v2_MatchingCondItem = -1;
+static gint ett_kpm_v2_MatchingUEidList = -1;
+static gint ett_kpm_v2_MatchingUEidItem = -1;
+static gint ett_kpm_v2_MatchingUeCondPerSubList = -1;
+static gint ett_kpm_v2_MatchingUeCondPerSubItem = -1;
+static gint ett_kpm_v2_MatchingUEidPerSubList = -1;
+static gint ett_kpm_v2_MatchingUEidPerSubItem = -1;
+static gint ett_kpm_v2_UEMeasurementReportList = -1;
+static gint ett_kpm_v2_UEMeasurementReportItem = -1;
+static gint ett_kpm_v2_E2SM_KPM_EventTriggerDefinition = -1;
+static gint ett_kpm_v2_T_eventDefinition_formats = -1;
+static gint ett_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1 = -1;
+static gint ett_kpm_v2_E2SM_KPM_ActionDefinition = -1;
+static gint ett_kpm_v2_T_actionDefinition_formats = -1;
+static gint ett_kpm_v2_E2SM_KPM_ActionDefinition_Format1 = -1;
+static gint ett_kpm_v2_E2SM_KPM_ActionDefinition_Format2 = -1;
+static gint ett_kpm_v2_E2SM_KPM_ActionDefinition_Format3 = -1;
+static gint ett_kpm_v2_E2SM_KPM_ActionDefinition_Format4 = -1;
+static gint ett_kpm_v2_E2SM_KPM_ActionDefinition_Format5 = -1;
+static gint ett_kpm_v2_E2SM_KPM_IndicationHeader = -1;
+static gint ett_kpm_v2_T_indicationHeader_formats = -1;
+static gint ett_kpm_v2_E2SM_KPM_IndicationHeader_Format1 = -1;
+static gint ett_kpm_v2_E2SM_KPM_IndicationMessage = -1;
+static gint ett_kpm_v2_T_indicationMessage_formats = -1;
+static gint ett_kpm_v2_E2SM_KPM_IndicationMessage_Format1 = -1;
+static gint ett_kpm_v2_E2SM_KPM_IndicationMessage_Format2 = -1;
+static gint ett_kpm_v2_E2SM_KPM_IndicationMessage_Format3 = -1;
+static gint ett_kpm_v2_E2SM_KPM_RANfunction_Description = -1;
+static gint ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item = -1;
+static gint ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item = -1;
+static gint ett_kpm_v2_RIC_EventTriggerStyle_Item = -1;
+static gint ett_kpm_v2_RIC_ReportStyle_Item = -1;
+static gint ett_kpm_v2_CGI = -1;
+static gint ett_kpm_v2_RANfunction_Name = -1;
+static gint ett_kpm_v2_UEID = -1;
+static gint ett_kpm_v2_UEID_GNB = -1;
+static gint ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List = -1;
+static gint ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item = -1;
+static gint ett_kpm_v2_UEID_GNB_CU_F1AP_ID_List = -1;
+static gint ett_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item = -1;
+static gint ett_kpm_v2_UEID_GNB_DU = -1;
+static gint ett_kpm_v2_UEID_GNB_CU_UP = -1;
+static gint ett_kpm_v2_UEID_NG_ENB = -1;
+static gint ett_kpm_v2_UEID_NG_ENB_DU = -1;
+static gint ett_kpm_v2_UEID_EN_GNB = -1;
+static gint ett_kpm_v2_UEID_ENB = -1;
+static gint ett_kpm_v2_ENB_ID = -1;
+static gint ett_kpm_v2_GlobalENB_ID = -1;
+static gint ett_kpm_v2_GUMMEI = -1;
+static gint ett_kpm_v2_EUTRA_CGI = -1;
+static gint ett_kpm_v2_GlobalGNB_ID = -1;
+static gint ett_kpm_v2_GlobalNgENB_ID = -1;
+static gint ett_kpm_v2_GNB_ID = -1;
+static gint ett_kpm_v2_GUAMI = -1;
+static gint ett_kpm_v2_NgENB_ID = -1;
+static gint ett_kpm_v2_NR_CGI = -1;
+static gint ett_kpm_v2_S_NSSAI = -1;
+static gint ett_kpm_v2_GlobalNGRANNodeID = -1;
+
+
+/* Forward declarations */
+static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
+static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
+static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
+static int dissect_E2SM_KPM_IndicationMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
+static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
+
+
+
+static int
+dissect_kpm_v2_TimeStamp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 4, 4, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_GranularityPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_MeasurementTypeName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 1, 150, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_MeasurementTypeID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 65536U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_MeasurementType_vals[] = {
+ { 0, "measName" },
+ { 1, "measID" },
+ { 0, NULL }
+};
+
+static const per_choice_t MeasurementType_choice[] = {
+ { 0, &hf_kpm_v2_measName , ASN1_EXTENSION_ROOT , dissect_kpm_v2_MeasurementTypeName },
+ { 1, &hf_kpm_v2_measID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_MeasurementTypeID },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementType, MeasurementType_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_noLabel_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_PLMNIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 3, 3, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_SST(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 1, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_SD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 3, 3, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t S_NSSAI_sequence[] = {
+ { &hf_kpm_v2_sST , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_SST },
+ { &hf_kpm_v2_sD , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_SD },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_S_NSSAI, S_NSSAI_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_FiveQI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_QosFlowIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 63U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_QCI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 15U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 65535U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_sUM_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_preLabelOverride_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_startEndInd_vals[] = {
+ { 0, "start" },
+ { 1, "end" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_min_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_max_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_avg_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementLabel_sequence[] = {
+ { &hf_kpm_v2_noLabel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_noLabel },
+ { &hf_kpm_v2_plmnID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_sliceID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_S_NSSAI },
+ { &hf_kpm_v2_fiveQI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_FiveQI },
+ { &hf_kpm_v2_qFI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QosFlowIdentifier },
+ { &hf_kpm_v2_qCI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QCI },
+ { &hf_kpm_v2_qCImax , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QCI },
+ { &hf_kpm_v2_qCImin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_QCI },
+ { &hf_kpm_v2_aRPmax , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_15_ },
+ { &hf_kpm_v2_aRPmin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_15_ },
+ { &hf_kpm_v2_bitrateRange , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
+ { &hf_kpm_v2_layerMU_MIMO , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
+ { &hf_kpm_v2_sUM , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_sUM },
+ { &hf_kpm_v2_distBinX , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
+ { &hf_kpm_v2_distBinY , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
+ { &hf_kpm_v2_distBinZ , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER_1_65535_ },
+ { &hf_kpm_v2_preLabelOverride, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_preLabelOverride },
+ { &hf_kpm_v2_startEndInd , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_startEndInd },
+ { &hf_kpm_v2_min , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_min },
+ { &hf_kpm_v2_max , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_max },
+ { &hf_kpm_v2_avg , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_avg },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementLabel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementLabel, MeasurementLabel_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_gBR_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_aMBR_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_isStat_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_isCatM_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_rSRP_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_rSRQ_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_ul_rSRP_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_cQI_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_fiveQI_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_qCI_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_sNSSAI_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_TestCond_Type_vals[] = {
+ { 0, "gBR" },
+ { 1, "aMBR" },
+ { 2, "isStat" },
+ { 3, "isCatM" },
+ { 4, "rSRP" },
+ { 5, "rSRQ" },
+ { 6, "ul-rSRP" },
+ { 7, "cQI" },
+ { 8, "fiveQI" },
+ { 9, "qCI" },
+ { 10, "sNSSAI" },
+ { 0, NULL }
+};
+
+static const per_choice_t TestCond_Type_choice[] = {
+ { 0, &hf_kpm_v2_gBR , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_gBR },
+ { 1, &hf_kpm_v2_aMBR , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_aMBR },
+ { 2, &hf_kpm_v2_isStat , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_isStat },
+ { 3, &hf_kpm_v2_isCatM , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_isCatM },
+ { 4, &hf_kpm_v2_rSRP , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_rSRP },
+ { 5, &hf_kpm_v2_rSRQ , ASN1_EXTENSION_ROOT , dissect_kpm_v2_T_rSRQ },
+ { 6, &hf_kpm_v2_ul_rSRP , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_ul_rSRP },
+ { 7, &hf_kpm_v2_cQI , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_cQI },
+ { 8, &hf_kpm_v2_fiveQI_01 , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_fiveQI },
+ { 9, &hf_kpm_v2_qCI_01 , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_qCI },
+ { 10, &hf_kpm_v2_sNSSAI , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_T_sNSSAI },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_TestCond_Type, TestCond_Type_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_TestCond_Expression_vals[] = {
+ { 0, "equal" },
+ { 1, "greaterthan" },
+ { 2, "lessthan" },
+ { 3, "contains" },
+ { 4, "present" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 5, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_PrintableString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_REAL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_real(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_TestCond_Value_vals[] = {
+ { 0, "valueInt" },
+ { 1, "valueEnum" },
+ { 2, "valueBool" },
+ { 3, "valueBitS" },
+ { 4, "valueOctS" },
+ { 5, "valuePrtS" },
+ { 6, "valueReal" },
+ { 0, NULL }
+};
+
+static const per_choice_t TestCond_Value_choice[] = {
+ { 0, &hf_kpm_v2_valueInt , ASN1_EXTENSION_ROOT , dissect_kpm_v2_INTEGER },
+ { 1, &hf_kpm_v2_valueEnum , ASN1_EXTENSION_ROOT , dissect_kpm_v2_INTEGER },
+ { 2, &hf_kpm_v2_valueBool , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BOOLEAN },
+ { 3, &hf_kpm_v2_valueBitS , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING },
+ { 4, &hf_kpm_v2_valueOctS , ASN1_EXTENSION_ROOT , dissect_kpm_v2_OCTET_STRING },
+ { 5, &hf_kpm_v2_valuePrtS , ASN1_EXTENSION_ROOT , dissect_kpm_v2_PrintableString },
+ { 6, &hf_kpm_v2_valueReal , ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_REAL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_TestCond_Value, TestCond_Value_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t TestCondInfo_sequence[] = {
+ { &hf_kpm_v2_testType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_TestCond_Type },
+ { &hf_kpm_v2_testExpr , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_TestCond_Expression },
+ { &hf_kpm_v2_testValue , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_TestCond_Value },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_TestCondInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_TestCondInfo, TestCondInfo_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LabelInfoItem_sequence[] = {
+ { &hf_kpm_v2_measLabel , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementLabel },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_LabelInfoItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_LabelInfoItem, LabelInfoItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t LabelInfoList_sequence_of[1] = {
+ { &hf_kpm_v2_LabelInfoList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_LabelInfoItem },
+};
+
+static int
+dissect_kpm_v2_LabelInfoList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_LabelInfoList, LabelInfoList_sequence_of,
+ 1, maxnoofLabelInfo, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementInfoItem_sequence[] = {
+ { &hf_kpm_v2_measType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementType },
+ { &hf_kpm_v2_labelInfoList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_LabelInfoList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementInfoItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementInfoItem, MeasurementInfoItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementInfoList_sequence_of[1] = {
+ { &hf_kpm_v2_MeasurementInfoList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfoItem },
+};
+
+static int
+dissect_kpm_v2_MeasurementInfoList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementInfoList, MeasurementInfoList_sequence_of,
+ 1, maxnoofMeasurementInfo, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_MeasurementRecordItem_vals[] = {
+ { 0, "integer" },
+ { 1, "real" },
+ { 2, "noValue" },
+ { 0, NULL }
+};
+
+static const per_choice_t MeasurementRecordItem_choice[] = {
+ { 0, &hf_kpm_v2_integer , ASN1_EXTENSION_ROOT , dissect_kpm_v2_INTEGER_0_4294967295 },
+ { 1, &hf_kpm_v2_real , ASN1_EXTENSION_ROOT , dissect_kpm_v2_REAL },
+ { 2, &hf_kpm_v2_noValue , ASN1_EXTENSION_ROOT , dissect_kpm_v2_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementRecordItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementRecordItem, MeasurementRecordItem_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementRecord_sequence_of[1] = {
+ { &hf_kpm_v2_MeasurementRecord_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementRecordItem },
+};
+
+static int
+dissect_kpm_v2_MeasurementRecord(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementRecord, MeasurementRecord_sequence_of,
+ 1, maxnoofMeasurementValue, FALSE);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_incompleteFlag_vals[] = {
+ { 0, "true" },
+ { 0, NULL }
+};
+
+
+static int
+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_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementDataItem_sequence[] = {
+ { &hf_kpm_v2_measRecord , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementRecord },
+ { &hf_kpm_v2_incompleteFlag, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_T_incompleteFlag },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementDataItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementDataItem, MeasurementDataItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementData_sequence_of[1] = {
+ { &hf_kpm_v2_MeasurementData_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementDataItem },
+};
+
+static int
+dissect_kpm_v2_MeasurementData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementData, MeasurementData_sequence_of,
+ 1, maxnoofMeasurementRecord, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementInfo_Action_Item_sequence[] = {
+ { &hf_kpm_v2_measName , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementTypeName },
+ { &hf_kpm_v2_measID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_MeasurementTypeID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementInfo_Action_Item, MeasurementInfo_Action_Item_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementInfo_Action_List_sequence_of[1] = {
+ { &hf_kpm_v2_MeasurementInfo_Action_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfo_Action_Item },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementInfo_Action_List, MeasurementInfo_Action_List_sequence_of,
+ 1, maxnoofMeasurementInfo, FALSE);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_MatchingCondItem_vals[] = {
+ { 0, "measLabel" },
+ { 1, "testCondInfo" },
+ { 0, NULL }
+};
+
+static const per_choice_t MatchingCondItem_choice[] = {
+ { 0, &hf_kpm_v2_measLabel , ASN1_EXTENSION_ROOT , dissect_kpm_v2_MeasurementLabel },
+ { 1, &hf_kpm_v2_testCondInfo , ASN1_EXTENSION_ROOT , dissect_kpm_v2_TestCondInfo },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MatchingCondItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingCondItem, MatchingCondItem_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingCondList_sequence_of[1] = {
+ { &hf_kpm_v2_MatchingCondList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingCondItem },
+};
+
+static int
+dissect_kpm_v2_MatchingCondList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingCondList, MatchingCondList_sequence_of,
+ 1, maxnoofConditionInfo, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementCondItem_sequence[] = {
+ { &hf_kpm_v2_measType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementType },
+ { &hf_kpm_v2_matchingCond , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingCondList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementCondItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementCondItem, MeasurementCondItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementCondList_sequence_of[1] = {
+ { &hf_kpm_v2_MeasurementCondList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondItem },
+};
+
+static int
+dissect_kpm_v2_MeasurementCondList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementCondList, MeasurementCondList_sequence_of,
+ 1, maxnoofMeasurementInfo, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index,
+ 0U, G_GUINT64_CONSTANT(1099511627775), NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_AMFRegionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_AMFSetID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 10, 10, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_AMFPointer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 6, 6, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t GUAMI_sequence[] = {
+ { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_aMFRegionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMFRegionID },
+ { &hf_kpm_v2_aMFSetID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMFSetID },
+ { &hf_kpm_v2_aMFPointer , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMFPointer },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_GUAMI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GUAMI, GUAMI_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_CU_CP_F1AP_ID_Item_sequence[] = {
+ { &hf_kpm_v2_gNB_CU_UE_F1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_UE_F1AP_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item, UEID_GNB_CU_CP_F1AP_ID_Item_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_CU_F1AP_ID_List_sequence_of[1] = {
+ { &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 },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB_CU_F1AP_ID_List, UEID_GNB_CU_F1AP_ID_List_sequence_of,
+ 1, maxF1APid, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_CU_CP_E1AP_ID_Item_sequence[] = {
+ { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_CP_UE_E1AP_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item, UEID_GNB_CU_CP_E1AP_ID_Item_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_CU_CP_E1AP_ID_List_sequence_of[1] = {
+ { &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 },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List, UEID_GNB_CU_CP_E1AP_ID_List_sequence_of,
+ 1, maxE1APid, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_RANUEID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 22, 32, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_GNB_ID_vals[] = {
+ { 0, "gNB-ID" },
+ { 0, NULL }
+};
+
+static const per_choice_t GNB_ID_choice[] = {
+ { 0, &hf_kpm_v2_gNB_ID_01 , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_22_32 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GNB_ID, GNB_ID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t GlobalGNB_ID_sequence[] = {
+ { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_gNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GlobalGNB_ID, GlobalGNB_ID_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 20, 20, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 18, 18, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 21, 21, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_NgENB_ID_vals[] = {
+ { 0, "macroNgENB-ID" },
+ { 1, "shortMacroNgENB-ID" },
+ { 2, "longMacroNgENB-ID" },
+ { 0, NULL }
+};
+
+static const per_choice_t NgENB_ID_choice[] = {
+ { 0, &hf_kpm_v2_macroNgENB_ID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_20 },
+ { 1, &hf_kpm_v2_shortMacroNgENB_ID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_18 },
+ { 2, &hf_kpm_v2_longMacroNgENB_ID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_21 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_NgENB_ID, NgENB_ID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t GlobalNgENB_ID_sequence[] = {
+ { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_ngENB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_NgENB_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GlobalNgENB_ID, GlobalNgENB_ID_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_GlobalNGRANNodeID_vals[] = {
+ { 0, "gNB" },
+ { 1, "ng-eNB" },
+ { 0, NULL }
+};
+
+static const per_choice_t GlobalNGRANNodeID_choice[] = {
+ { 0, &hf_kpm_v2_gNB , ASN1_EXTENSION_ROOT , dissect_kpm_v2_GlobalGNB_ID },
+ { 1, &hf_kpm_v2_ng_eNB , ASN1_EXTENSION_ROOT , dissect_kpm_v2_GlobalNgENB_ID },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_GlobalNGRANNodeID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GlobalNGRANNodeID, GlobalNGRANNodeID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_sequence[] = {
+ { &hf_kpm_v2_amf_UE_NGAP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMF_UE_NGAP_ID },
+ { &hf_kpm_v2_guami , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GUAMI },
+ { &hf_kpm_v2_gNB_CU_UE_F1AP_ID_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_UEID_GNB_CU_F1AP_ID_List },
+ { &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 },
+ { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
+ { &hf_kpm_v2_m_NG_RAN_UE_XnAP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_NG_RANnodeUEXnAPID },
+ { &hf_kpm_v2_globalGNB_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GlobalGNB_ID },
+ { &hf_kpm_v2_globalNG_RANNode_ID, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_kpm_v2_GlobalNGRANNodeID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB, UEID_GNB_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_DU_sequence[] = {
+ { &hf_kpm_v2_gNB_CU_UE_F1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_UE_F1AP_ID },
+ { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB_DU, UEID_GNB_DU_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_GNB_CU_UP_sequence[] = {
+ { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GNB_CU_CP_UE_E1AP_ID },
+ { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_GNB_CU_UP, UEID_GNB_CU_UP_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_NG_ENB_sequence[] = {
+ { &hf_kpm_v2_amf_UE_NGAP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_AMF_UE_NGAP_ID },
+ { &hf_kpm_v2_guami , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GUAMI },
+ { &hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_NGENB_CU_UE_W1AP_ID },
+ { &hf_kpm_v2_m_NG_RAN_UE_XnAP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_NG_RANnodeUEXnAPID },
+ { &hf_kpm_v2_globalNgENB_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GlobalNgENB_ID },
+ { &hf_kpm_v2_globalNG_RANNode_ID, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_kpm_v2_GlobalNGRANNodeID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_NG_ENB, UEID_NG_ENB_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_NG_ENB_DU_sequence[] = {
+ { &hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_NGENB_CU_UE_W1AP_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_NG_ENB_DU, UEID_NG_ENB_DU_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4095U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4095U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 28, 28, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_ENB_ID_vals[] = {
+ { 0, "macro-eNB-ID" },
+ { 1, "home-eNB-ID" },
+ { 2, "short-Macro-eNB-ID" },
+ { 3, "long-Macro-eNB-ID" },
+ { 0, NULL }
+};
+
+static const per_choice_t ENB_ID_choice[] = {
+ { 0, &hf_kpm_v2_macro_eNB_ID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_20 },
+ { 1, &hf_kpm_v2_home_eNB_ID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_BIT_STRING_SIZE_28 },
+ { 2, &hf_kpm_v2_short_Macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_BIT_STRING_SIZE_18 },
+ { 3, &hf_kpm_v2_long_Macro_eNB_ID, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_BIT_STRING_SIZE_21 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_ENB_ID, ENB_ID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t GlobalENB_ID_sequence[] = {
+ { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_eNB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_ENB_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GlobalENB_ID, GlobalENB_ID_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_EN_GNB_sequence[] = {
+ { &hf_kpm_v2_m_eNB_UE_X2AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_ENB_UE_X2AP_ID },
+ { &hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_ENB_UE_X2AP_ID_Extension },
+ { &hf_kpm_v2_globalENB_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GlobalENB_ID },
+ { &hf_kpm_v2_gNB_CU_UE_F1AP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GNB_CU_UE_F1AP_ID },
+ { &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 },
+ { &hf_kpm_v2_ran_UEID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_RANUEID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_EN_GNB, UEID_EN_GNB_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 1, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t GUMMEI_sequence[] = {
+ { &hf_kpm_v2_pLMN_Identity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_mME_Group_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MME_Group_ID },
+ { &hf_kpm_v2_mME_Code , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MME_Code },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_GUMMEI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_GUMMEI, GUMMEI_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEID_ENB_sequence[] = {
+ { &hf_kpm_v2_mME_UE_S1AP_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MME_UE_S1AP_ID },
+ { &hf_kpm_v2_gUMMEI , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GUMMEI },
+ { &hf_kpm_v2_m_eNB_UE_X2AP_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_ENB_UE_X2AP_ID },
+ { &hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_ENB_UE_X2AP_ID_Extension },
+ { &hf_kpm_v2_globalENB_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GlobalENB_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID_ENB, UEID_ENB_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_UEID_vals[] = {
+ { 0, "gNB-UEID" },
+ { 1, "gNB-DU-UEID" },
+ { 2, "gNB-CU-UP-UEID" },
+ { 3, "ng-eNB-UEID" },
+ { 4, "ng-eNB-DU-UEID" },
+ { 5, "en-gNB-UEID" },
+ { 6, "eNB-UEID" },
+ { 0, NULL }
+};
+
+static const per_choice_t UEID_choice[] = {
+ { 0, &hf_kpm_v2_gNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_GNB },
+ { 1, &hf_kpm_v2_gNB_DU_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_GNB_DU },
+ { 2, &hf_kpm_v2_gNB_CU_UP_UEID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_GNB_CU_UP },
+ { 3, &hf_kpm_v2_ng_eNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_NG_ENB },
+ { 4, &hf_kpm_v2_ng_eNB_DU_UEID, ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_NG_ENB_DU },
+ { 5, &hf_kpm_v2_en_gNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_EN_GNB },
+ { 6, &hf_kpm_v2_eNB_UEID , ASN1_EXTENSION_ROOT , dissect_kpm_v2_UEID_ENB },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_UEID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEID, UEID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingUEidItem_sequence[] = {
+ { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MatchingUEidItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingUEidItem, MatchingUEidItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingUEidList_sequence_of[1] = {
+ { &hf_kpm_v2_MatchingUEidList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUEidItem },
+};
+
+static int
+dissect_kpm_v2_MatchingUEidList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingUEidList, MatchingUEidList_sequence_of,
+ 1, maxnoofUEID, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementCondUEidItem_sequence[] = {
+ { &hf_kpm_v2_measType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementType },
+ { &hf_kpm_v2_matchingCond , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingCondList },
+ { &hf_kpm_v2_matchingUEidList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_MatchingUEidList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MeasurementCondUEidItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementCondUEidItem, MeasurementCondUEidItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MeasurementCondUEidList_sequence_of[1] = {
+ { &hf_kpm_v2_MeasurementCondUEidList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondUEidItem },
+};
+
+static int
+dissect_kpm_v2_MeasurementCondUEidList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MeasurementCondUEidList, MeasurementCondUEidList_sequence_of,
+ 1, maxnoofMeasurementInfo, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingUeCondPerSubItem_sequence[] = {
+ { &hf_kpm_v2_testCondInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_TestCondInfo },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MatchingUeCondPerSubItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingUeCondPerSubItem, MatchingUeCondPerSubItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingUeCondPerSubList_sequence_of[1] = {
+ { &hf_kpm_v2_MatchingUeCondPerSubList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUeCondPerSubItem },
+};
+
+static int
+dissect_kpm_v2_MatchingUeCondPerSubList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingUeCondPerSubList, MatchingUeCondPerSubList_sequence_of,
+ 1, maxnoofConditionInfoPerSub, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingUEidPerSubItem_sequence[] = {
+ { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_MatchingUEidPerSubItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingUEidPerSubItem, MatchingUEidPerSubItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t MatchingUEidPerSubList_sequence_of[1] = {
+ { &hf_kpm_v2_MatchingUEidPerSubList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUEidPerSubItem },
+};
+
+static int
+dissect_kpm_v2_MatchingUEidPerSubList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_MatchingUEidPerSubList, MatchingUEidPerSubList_sequence_of,
+ 2, maxnoofUEIDPerSub, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_IndicationMessage_Format1_sequence[] = {
+ { &hf_kpm_v2_measData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementData },
+ { &hf_kpm_v2_measInfoList , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_MeasurementInfoList },
+ { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GranularityPeriod },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_IndicationMessage_Format1, E2SM_KPM_IndicationMessage_Format1_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEMeasurementReportItem_sequence[] = {
+ { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
+ { &hf_kpm_v2_measReport , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_UEMeasurementReportItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEMeasurementReportItem, UEMeasurementReportItem_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t UEMeasurementReportList_sequence_of[1] = {
+ { &hf_kpm_v2_UEMeasurementReportList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEMeasurementReportItem },
+};
+
+static int
+dissect_kpm_v2_UEMeasurementReportList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_UEMeasurementReportList, UEMeasurementReportList_sequence_of,
+ 1, maxnoofUEMeasReport, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 4294967295U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_EventTriggerDefinition_Format1_sequence[] = {
+ { &hf_kpm_v2_reportingPeriod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_INTEGER_1_4294967295 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1, E2SM_KPM_EventTriggerDefinition_Format1_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_eventDefinition_formats_vals[] = {
+ { 0, "eventDefinition-Format1" },
+ { 0, NULL }
+};
+
+static const per_choice_t T_eventDefinition_formats_choice[] = {
+ { 0, &hf_kpm_v2_eventDefinition_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_T_eventDefinition_formats, T_eventDefinition_formats_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_EventTriggerDefinition_sequence[] = {
+ { &hf_kpm_v2_eventDefinition_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_eventDefinition_formats },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_EventTriggerDefinition, E2SM_KPM_EventTriggerDefinition_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_NRCellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 36, 36, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t NR_CGI_sequence[] = {
+ { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_nRCellIdentity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_NRCellIdentity },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_NR_CGI, NR_CGI_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_kpm_v2_EUTRACellIdentity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 28, 28, FALSE, NULL, 0, NULL, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t EUTRA_CGI_sequence[] = {
+ { &hf_kpm_v2_pLMNIdentity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PLMNIdentity },
+ { &hf_kpm_v2_eUTRACellIdentity, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_EUTRACellIdentity },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_EUTRA_CGI, EUTRA_CGI_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_CGI_vals[] = {
+ { 0, "nR-CGI" },
+ { 1, "eUTRA-CGI" },
+ { 0, NULL }
+};
+
+static const per_choice_t CGI_choice[] = {
+ { 0, &hf_kpm_v2_nR_CGI , ASN1_EXTENSION_ROOT , dissect_kpm_v2_NR_CGI },
+ { 1, &hf_kpm_v2_eUTRA_CGI , ASN1_EXTENSION_ROOT , dissect_kpm_v2_EUTRA_CGI },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_kpm_v2_CGI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_CGI, CGI_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_ActionDefinition_Format1_sequence[] = {
+ { &hf_kpm_v2_measInfoList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfoList },
+ { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GranularityPeriod },
+ { &hf_kpm_v2_cellGlobalID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_CGI },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_ActionDefinition_Format1, E2SM_KPM_ActionDefinition_Format1_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_ActionDefinition_Format2_sequence[] = {
+ { &hf_kpm_v2_ueID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEID },
+ { &hf_kpm_v2_subscriptInfo, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_ActionDefinition_Format2, E2SM_KPM_ActionDefinition_Format2_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_ActionDefinition_Format3_sequence[] = {
+ { &hf_kpm_v2_measCondList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondList },
+ { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_GranularityPeriod },
+ { &hf_kpm_v2_cellGlobalID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_CGI },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_ActionDefinition_Format3, E2SM_KPM_ActionDefinition_Format3_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_ActionDefinition_Format4_sequence[] = {
+ { &hf_kpm_v2_matchingUeCondList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUeCondPerSubList },
+ { &hf_kpm_v2_subscriptionInfo, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_ActionDefinition_Format4, E2SM_KPM_ActionDefinition_Format4_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_ActionDefinition_Format5_sequence[] = {
+ { &hf_kpm_v2_matchingUEidList_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MatchingUEidPerSubList },
+ { &hf_kpm_v2_subscriptionInfo, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_ActionDefinition_Format5, E2SM_KPM_ActionDefinition_Format5_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_actionDefinition_formats_vals[] = {
+ { 0, "actionDefinition-Format1" },
+ { 1, "actionDefinition-Format2" },
+ { 2, "actionDefinition-Format3" },
+ { 3, "actionDefinition-Format4" },
+ { 4, "actionDefinition-Format5" },
+ { 0, NULL }
+};
+
+static const per_choice_t T_actionDefinition_formats_choice[] = {
+ { 0, &hf_kpm_v2_actionDefinition_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format1 },
+ { 1, &hf_kpm_v2_actionDefinition_Format2, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format2 },
+ { 2, &hf_kpm_v2_actionDefinition_Format3, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format3 },
+ { 3, &hf_kpm_v2_actionDefinition_Format4, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format4 },
+ { 4, &hf_kpm_v2_actionDefinition_Format5, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_E2SM_KPM_ActionDefinition_Format5 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_T_actionDefinition_formats, T_actionDefinition_formats_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_ActionDefinition_sequence[] = {
+ { &hf_kpm_v2_ric_Style_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Type },
+ { &hf_kpm_v2_actionDefinition_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_actionDefinition_formats },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_ActionDefinition, E2SM_KPM_ActionDefinition_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ int ts_offset = offset;
+ offset = dissect_kpm_v2_TimeStamp(tvb, offset, actx, tree, hf_index);
+
+ /* Add as a generated field the timestamp decoded */
+ const char *time_str = tvb_ntp_fmt_ts_sec(tvb, (ts_offset+7)/8);
+ proto_item *ti = proto_tree_add_string(tree, hf_kpm_v2_timestamp_string, tvb, (ts_offset+7)/8, 4, time_str);
+ proto_item_set_generated(ti);
+
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 0, 15, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 0, 400, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 0, 8, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 0, 32, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_IndicationHeader_Format1_sequence[] = {
+ { &hf_kpm_v2_colletStartTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_colletStartTime },
+ { &hf_kpm_v2_fileFormatversion, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_15_ },
+ { &hf_kpm_v2_senderName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_400_ },
+ { &hf_kpm_v2_senderType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_8_ },
+ { &hf_kpm_v2_vendorName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_PrintableString_SIZE_0_32_ },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_IndicationHeader_Format1, E2SM_KPM_IndicationHeader_Format1_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_indicationHeader_formats_vals[] = {
+ { 0, "indicationHeader-Format1" },
+ { 0, NULL }
+};
+
+static const per_choice_t T_indicationHeader_formats_choice[] = {
+ { 0, &hf_kpm_v2_indicationHeader_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_IndicationHeader_Format1 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_T_indicationHeader_formats, T_indicationHeader_formats_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_IndicationHeader_sequence[] = {
+ { &hf_kpm_v2_indicationHeader_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_indicationHeader_formats },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_IndicationHeader, E2SM_KPM_IndicationHeader_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_IndicationMessage_Format2_sequence[] = {
+ { &hf_kpm_v2_measData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementData },
+ { &hf_kpm_v2_measCondUEidList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementCondUEidList },
+ { &hf_kpm_v2_granulPeriod , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_GranularityPeriod },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_IndicationMessage_Format2, E2SM_KPM_IndicationMessage_Format2_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_IndicationMessage_Format3_sequence[] = {
+ { &hf_kpm_v2_ueMeasReportList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_UEMeasurementReportList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_IndicationMessage_Format3, E2SM_KPM_IndicationMessage_Format3_sequence);
+
+ return offset;
+}
+
+
+static const value_string kpm_v2_T_indicationMessage_formats_vals[] = {
+ { 0, "indicationMessage-Format1" },
+ { 1, "indicationMessage-Format2" },
+ { 2, "indicationMessage-Format3" },
+ { 0, NULL }
+};
+
+static const per_choice_t T_indicationMessage_formats_choice[] = {
+ { 0, &hf_kpm_v2_indicationMessage_Format1, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format1 },
+ { 1, &hf_kpm_v2_indicationMessage_Format2, ASN1_EXTENSION_ROOT , dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format2 },
+ { 2, &hf_kpm_v2_indicationMessage_Format3, ASN1_NOT_EXTENSION_ROOT, dissect_kpm_v2_E2SM_KPM_IndicationMessage_Format3 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_T_indicationMessage_formats, T_indicationMessage_formats_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_IndicationMessage_sequence[] = {
+ { &hf_kpm_v2_indicationMessage_formats, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_indicationMessage_formats },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_IndicationMessage, E2SM_KPM_IndicationMessage_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ tvbuff_t *value_tvb;
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 1, 150, TRUE,
+ &value_tvb);
+
+ if (!actx->pinfo->fd->visited) {
+ /* N.B. too early to work out exact dissector, as don't have OID yet */
+ e2ap_store_ran_function_mapping(actx->pinfo, tree, value_tvb,
+ tvb_get_string_enc(wmem_packet_scope(), value_tvb, 0, tvb_captured_length(value_tvb), ENC_ASCII));
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ tvbuff_t *parameter_tvb;
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 1, 1000, TRUE,
+ &parameter_tvb);
+
+ e2ap_update_ran_function_mapping(actx->pinfo, tree, parameter_tvb,
+ tvb_get_string_enc(actx->pinfo->pool, parameter_tvb, 0,
+ tvb_captured_length(parameter_tvb), ENC_ASCII));
+
+
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 1, 150, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t RANfunction_Name_sequence[] = {
+ { &hf_kpm_v2_ranFunction_ShortName, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_ranFunction_ShortName },
+ { &hf_kpm_v2_ranFunction_E2SM_OID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_T_ranFunction_E2SM_OID },
+ { &hf_kpm_v2_ranFunction_Description, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_PrintableString_SIZE_1_150_ },
+ { &hf_kpm_v2_ranFunction_Instance, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_INTEGER },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_RANfunction_Name, RANfunction_Name_sequence);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_PrintableString(tvb, offset, actx, tree, hf_index,
+ 1, 150, TRUE,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+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_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t RIC_EventTriggerStyle_Item_sequence[] = {
+ { &hf_kpm_v2_ric_EventTriggerStyle_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Type },
+ { &hf_kpm_v2_ric_EventTriggerStyle_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Name },
+ { &hf_kpm_v2_ric_EventTriggerFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_RIC_EventTriggerStyle_Item, RIC_EventTriggerStyle_Item_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item_sequence_of[1] = {
+ { &hf_kpm_v2_ric_EventTriggerStyle_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_EventTriggerStyle_Item },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item, SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item_sequence_of,
+ 1, maxnoofRICStyles, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t RIC_ReportStyle_Item_sequence[] = {
+ { &hf_kpm_v2_ric_ReportStyle_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Type },
+ { &hf_kpm_v2_ric_ReportStyle_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Style_Name },
+ { &hf_kpm_v2_ric_ActionFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
+ { &hf_kpm_v2_measInfo_Action_List, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_MeasurementInfo_Action_List },
+ { &hf_kpm_v2_ric_IndicationHeaderFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
+ { &hf_kpm_v2_ric_IndicationMessageFormat_Type, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_Format_Type },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_RIC_ReportStyle_Item, RIC_ReportStyle_Item_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item_sequence_of[1] = {
+ { &hf_kpm_v2_ric_ReportStyle_List_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RIC_ReportStyle_Item },
+};
+
+static int
+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_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item, SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item_sequence_of,
+ 1, maxnoofRICStyles, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t E2SM_KPM_RANfunction_Description_sequence[] = {
+ { &hf_kpm_v2_ranFunction_Name, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_kpm_v2_RANfunction_Name },
+ { &hf_kpm_v2_ric_EventTriggerStyle_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item },
+ { &hf_kpm_v2_ric_ReportStyle_List, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+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_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_kpm_v2_E2SM_KPM_RANfunction_Description, E2SM_KPM_RANfunction_Description_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_E2SM_KPM_EventTriggerDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+ offset = dissect_kpm_v2_E2SM_KPM_EventTriggerDefinition(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_EventTriggerDefinition_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_E2SM_KPM_ActionDefinition_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+ offset = dissect_kpm_v2_E2SM_KPM_ActionDefinition(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_ActionDefinition_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_E2SM_KPM_IndicationHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+ offset = dissect_kpm_v2_E2SM_KPM_IndicationHeader(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_IndicationHeader_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_E2SM_KPM_IndicationMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+ offset = dissect_kpm_v2_E2SM_KPM_IndicationMessage(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_IndicationMessage_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_E2SM_KPM_RANfunction_Description_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
+ offset = dissect_kpm_v2_E2SM_KPM_RANfunction_Description(tvb, offset, &asn1_ctx, tree, hf_kpm_v2_E2SM_KPM_RANfunction_Description_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+
+/*--- proto_reg_handoff_kpm_v2 ---------------------------------------*/
+void
+proto_reg_handoff_kpm_v2(void)
+{
+//#include "packet-kpm-v2-dis-tab.c"
+
+ static ran_function_dissector_t kpm_v2 =
+ { "ORAN-E2SM-KPM", "1.3.6.1.4.1.53148.1.2.2.2", 2, 2,
+ { dissect_E2SM_KPM_RANfunction_Description_PDU,
+
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+
+ dissect_E2SM_KPM_ActionDefinition_PDU,
+ dissect_E2SM_KPM_IndicationMessage_PDU,
+ dissect_E2SM_KPM_IndicationHeader_PDU,
+ NULL, /* no dissect_E2SM_KPM_CallProcessID_PDU */
+ dissect_E2SM_KPM_EventTriggerDefinition_PDU
+ }
+ };
+
+ /* Register dissector with e2ap */
+ register_e2ap_ran_function_dissector(KPM_RANFUNCTIONS, &kpm_v2);
+}
+
+
+
+/*--- proto_register_kpm_v2 -------------------------------------------*/
+void proto_register_kpm_v2(void) {
+
+ /* List of fields */
+
+ static hf_register_info hf[] = {
+ { &hf_kpm_v2_E2SM_KPM_EventTriggerDefinition_PDU,
+ { "E2SM-KPM-EventTriggerDefinition", "kpm-v2.E2SM_KPM_EventTriggerDefinition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_E2SM_KPM_ActionDefinition_PDU,
+ { "E2SM-KPM-ActionDefinition", "kpm-v2.E2SM_KPM_ActionDefinition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_E2SM_KPM_IndicationHeader_PDU,
+ { "E2SM-KPM-IndicationHeader", "kpm-v2.E2SM_KPM_IndicationHeader_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_E2SM_KPM_IndicationMessage_PDU,
+ { "E2SM-KPM-IndicationMessage", "kpm-v2.E2SM_KPM_IndicationMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_E2SM_KPM_RANfunction_Description_PDU,
+ { "E2SM-KPM-RANfunction-Description", "kpm-v2.E2SM_KPM_RANfunction_Description_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_measName,
+ { "measName", "kpm-v2.measName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "MeasurementTypeName", HFILL }},
+ { &hf_kpm_v2_measID,
+ { "measID", "kpm-v2.measID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementTypeID", HFILL }},
+ { &hf_kpm_v2_noLabel,
+ { "noLabel", "kpm-v2.noLabel",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_noLabel_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_plmnID,
+ { "plmnID", "kpm-v2.plmnID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "PLMNIdentity", HFILL }},
+ { &hf_kpm_v2_sliceID,
+ { "sliceID", "kpm-v2.sliceID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "S_NSSAI", HFILL }},
+ { &hf_kpm_v2_fiveQI,
+ { "fiveQI", "kpm-v2.fiveQI",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_qFI,
+ { "qFI", "kpm-v2.qFI",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "QosFlowIdentifier", HFILL }},
+ { &hf_kpm_v2_qCI,
+ { "qCI", "kpm-v2.qCI",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_qCImax,
+ { "qCImax", "kpm-v2.qCImax",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "QCI", HFILL }},
+ { &hf_kpm_v2_qCImin,
+ { "qCImin", "kpm-v2.qCImin",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "QCI", HFILL }},
+ { &hf_kpm_v2_aRPmax,
+ { "aRPmax", "kpm-v2.aRPmax",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_15_", HFILL }},
+ { &hf_kpm_v2_aRPmin,
+ { "aRPmin", "kpm-v2.aRPmin",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_15_", HFILL }},
+ { &hf_kpm_v2_bitrateRange,
+ { "bitrateRange", "kpm-v2.bitrateRange",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_65535_", HFILL }},
+ { &hf_kpm_v2_layerMU_MIMO,
+ { "layerMU-MIMO", "kpm-v2.layerMU_MIMO",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_65535_", HFILL }},
+ { &hf_kpm_v2_sUM,
+ { "sUM", "kpm-v2.sUM",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_sUM_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_distBinX,
+ { "distBinX", "kpm-v2.distBinX",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_65535_", HFILL }},
+ { &hf_kpm_v2_distBinY,
+ { "distBinY", "kpm-v2.distBinY",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_65535_", HFILL }},
+ { &hf_kpm_v2_distBinZ,
+ { "distBinZ", "kpm-v2.distBinZ",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_65535_", HFILL }},
+ { &hf_kpm_v2_preLabelOverride,
+ { "preLabelOverride", "kpm-v2.preLabelOverride",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_preLabelOverride_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_startEndInd,
+ { "startEndInd", "kpm-v2.startEndInd",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_startEndInd_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_min,
+ { "min", "kpm-v2.min",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_min_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_max,
+ { "max", "kpm-v2.max",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_max_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_avg,
+ { "avg", "kpm-v2.avg",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_avg_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_testType,
+ { "testType", "kpm-v2.testType",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_TestCond_Type_vals), 0,
+ "TestCond_Type", HFILL }},
+ { &hf_kpm_v2_testExpr,
+ { "testExpr", "kpm-v2.testExpr",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_TestCond_Expression_vals), 0,
+ "TestCond_Expression", HFILL }},
+ { &hf_kpm_v2_testValue,
+ { "testValue", "kpm-v2.testValue",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_TestCond_Value_vals), 0,
+ "TestCond_Value", HFILL }},
+ { &hf_kpm_v2_gBR,
+ { "gBR", "kpm-v2.gBR",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_gBR_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_aMBR,
+ { "aMBR", "kpm-v2.aMBR",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_aMBR_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_isStat,
+ { "isStat", "kpm-v2.isStat",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_isStat_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_isCatM,
+ { "isCatM", "kpm-v2.isCatM",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_isCatM_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_rSRP,
+ { "rSRP", "kpm-v2.rSRP",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_rSRP_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_rSRQ,
+ { "rSRQ", "kpm-v2.rSRQ",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_rSRQ_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ul_rSRP,
+ { "ul-rSRP", "kpm-v2.ul_rSRP",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_ul_rSRP_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_cQI,
+ { "cQI", "kpm-v2.cQI",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_cQI_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_fiveQI_01,
+ { "fiveQI", "kpm-v2.fiveQI",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_fiveQI_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_qCI_01,
+ { "qCI", "kpm-v2.qCI",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_qCI_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_sNSSAI,
+ { "sNSSAI", "kpm-v2.sNSSAI",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_sNSSAI_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_valueInt,
+ { "valueInt", "kpm-v2.valueInt",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "INTEGER", HFILL }},
+ { &hf_kpm_v2_valueEnum,
+ { "valueEnum", "kpm-v2.valueEnum",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "INTEGER", HFILL }},
+ { &hf_kpm_v2_valueBool,
+ { "valueBool", "kpm-v2.valueBool",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "BOOLEAN", HFILL }},
+ { &hf_kpm_v2_valueBitS,
+ { "valueBitS", "kpm-v2.valueBitS",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING", HFILL }},
+ { &hf_kpm_v2_valueOctS,
+ { "valueOctS", "kpm-v2.valueOctS",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING", HFILL }},
+ { &hf_kpm_v2_valuePrtS,
+ { "valuePrtS", "kpm-v2.valuePrtS",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PrintableString", HFILL }},
+ { &hf_kpm_v2_valueReal,
+ { "valueReal", "kpm-v2.valueReal",
+ FT_DOUBLE, BASE_NONE, NULL, 0,
+ "REAL", HFILL }},
+ { &hf_kpm_v2_MeasurementInfoList_item,
+ { "MeasurementInfoItem", "kpm-v2.MeasurementInfoItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_measType,
+ { "measType", "kpm-v2.measType",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_MeasurementType_vals), 0,
+ "MeasurementType", HFILL }},
+ { &hf_kpm_v2_labelInfoList,
+ { "labelInfoList", "kpm-v2.labelInfoList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_LabelInfoList_item,
+ { "LabelInfoItem", "kpm-v2.LabelInfoItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_measLabel,
+ { "measLabel", "kpm-v2.measLabel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "MeasurementLabel", HFILL }},
+ { &hf_kpm_v2_MeasurementData_item,
+ { "MeasurementDataItem", "kpm-v2.MeasurementDataItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_measRecord,
+ { "measRecord", "kpm-v2.measRecord",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementRecord", HFILL }},
+ { &hf_kpm_v2_incompleteFlag,
+ { "incompleteFlag", "kpm-v2.incompleteFlag",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_incompleteFlag_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MeasurementRecord_item,
+ { "MeasurementRecordItem", "kpm-v2.MeasurementRecordItem",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_MeasurementRecordItem_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_integer,
+ { "integer", "kpm-v2.integer",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_4294967295", HFILL }},
+ { &hf_kpm_v2_real,
+ { "real", "kpm-v2.real",
+ FT_DOUBLE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_noValue,
+ { "noValue", "kpm-v2.noValue_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MeasurementInfo_Action_List_item,
+ { "MeasurementInfo-Action-Item", "kpm-v2.MeasurementInfo_Action_Item_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MeasurementCondList_item,
+ { "MeasurementCondItem", "kpm-v2.MeasurementCondItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_matchingCond,
+ { "matchingCond", "kpm-v2.matchingCond",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MatchingCondList", HFILL }},
+ { &hf_kpm_v2_MeasurementCondUEidList_item,
+ { "MeasurementCondUEidItem", "kpm-v2.MeasurementCondUEidItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_matchingUEidList,
+ { "matchingUEidList", "kpm-v2.matchingUEidList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MatchingCondList_item,
+ { "MatchingCondItem", "kpm-v2.MatchingCondItem",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_MatchingCondItem_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_testCondInfo,
+ { "testCondInfo", "kpm-v2.testCondInfo_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MatchingUEidList_item,
+ { "MatchingUEidItem", "kpm-v2.MatchingUEidItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ueID,
+ { "ueID", "kpm-v2.ueID",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_UEID_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MatchingUeCondPerSubList_item,
+ { "MatchingUeCondPerSubItem", "kpm-v2.MatchingUeCondPerSubItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_MatchingUEidPerSubList_item,
+ { "MatchingUEidPerSubItem", "kpm-v2.MatchingUEidPerSubItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_UEMeasurementReportList_item,
+ { "UEMeasurementReportItem", "kpm-v2.UEMeasurementReportItem_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_measReport,
+ { "measReport", "kpm-v2.measReport_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_IndicationMessage_Format1", HFILL }},
+ { &hf_kpm_v2_eventDefinition_formats,
+ { "eventDefinition-formats", "kpm-v2.eventDefinition_formats",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_eventDefinition_formats_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_eventDefinition_Format1,
+ { "eventDefinition-Format1", "kpm-v2.eventDefinition_Format1_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_EventTriggerDefinition_Format1", HFILL }},
+ { &hf_kpm_v2_reportingPeriod,
+ { "reportingPeriod", "kpm-v2.reportingPeriod",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_4294967295", HFILL }},
+ { &hf_kpm_v2_ric_Style_Type,
+ { "ric-Style-Type", "kpm-v2.ric_Style_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_actionDefinition_formats,
+ { "actionDefinition-formats", "kpm-v2.actionDefinition_formats",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_actionDefinition_formats_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_actionDefinition_Format1,
+ { "actionDefinition-Format1", "kpm-v2.actionDefinition_Format1_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format1", HFILL }},
+ { &hf_kpm_v2_actionDefinition_Format2,
+ { "actionDefinition-Format2", "kpm-v2.actionDefinition_Format2_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format2", HFILL }},
+ { &hf_kpm_v2_actionDefinition_Format3,
+ { "actionDefinition-Format3", "kpm-v2.actionDefinition_Format3_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format3", HFILL }},
+ { &hf_kpm_v2_actionDefinition_Format4,
+ { "actionDefinition-Format4", "kpm-v2.actionDefinition_Format4_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format4", HFILL }},
+ { &hf_kpm_v2_actionDefinition_Format5,
+ { "actionDefinition-Format5", "kpm-v2.actionDefinition_Format5_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format5", HFILL }},
+ { &hf_kpm_v2_measInfoList,
+ { "measInfoList", "kpm-v2.measInfoList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementInfoList", HFILL }},
+ { &hf_kpm_v2_granulPeriod,
+ { "granulPeriod", "kpm-v2.granulPeriod",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "GranularityPeriod", HFILL }},
+ { &hf_kpm_v2_cellGlobalID,
+ { "cellGlobalID", "kpm-v2.cellGlobalID",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_CGI_vals), 0,
+ "CGI", HFILL }},
+ { &hf_kpm_v2_subscriptInfo,
+ { "subscriptInfo", "kpm-v2.subscriptInfo_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format1", HFILL }},
+ { &hf_kpm_v2_measCondList,
+ { "measCondList", "kpm-v2.measCondList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementCondList", HFILL }},
+ { &hf_kpm_v2_matchingUeCondList,
+ { "matchingUeCondList", "kpm-v2.matchingUeCondList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MatchingUeCondPerSubList", HFILL }},
+ { &hf_kpm_v2_subscriptionInfo,
+ { "subscriptionInfo", "kpm-v2.subscriptionInfo_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_ActionDefinition_Format1", HFILL }},
+ { &hf_kpm_v2_matchingUEidList_01,
+ { "matchingUEidList", "kpm-v2.matchingUEidList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MatchingUEidPerSubList", HFILL }},
+ { &hf_kpm_v2_indicationHeader_formats,
+ { "indicationHeader-formats", "kpm-v2.indicationHeader_formats",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_indicationHeader_formats_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_indicationHeader_Format1,
+ { "indicationHeader-Format1", "kpm-v2.indicationHeader_Format1_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_IndicationHeader_Format1", HFILL }},
+ { &hf_kpm_v2_colletStartTime,
+ { "colletStartTime", "kpm-v2.colletStartTime",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_fileFormatversion,
+ { "fileFormatversion", "kpm-v2.fileFormatversion",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PrintableString_SIZE_0_15_", HFILL }},
+ { &hf_kpm_v2_senderName,
+ { "senderName", "kpm-v2.senderName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PrintableString_SIZE_0_400_", HFILL }},
+ { &hf_kpm_v2_senderType,
+ { "senderType", "kpm-v2.senderType",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PrintableString_SIZE_0_8_", HFILL }},
+ { &hf_kpm_v2_vendorName,
+ { "vendorName", "kpm-v2.vendorName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PrintableString_SIZE_0_32_", HFILL }},
+ { &hf_kpm_v2_indicationMessage_formats,
+ { "indicationMessage-formats", "kpm-v2.indicationMessage_formats",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_T_indicationMessage_formats_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_indicationMessage_Format1,
+ { "indicationMessage-Format1", "kpm-v2.indicationMessage_Format1_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_IndicationMessage_Format1", HFILL }},
+ { &hf_kpm_v2_indicationMessage_Format2,
+ { "indicationMessage-Format2", "kpm-v2.indicationMessage_Format2_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_IndicationMessage_Format2", HFILL }},
+ { &hf_kpm_v2_indicationMessage_Format3,
+ { "indicationMessage-Format3", "kpm-v2.indicationMessage_Format3_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "E2SM_KPM_IndicationMessage_Format3", HFILL }},
+ { &hf_kpm_v2_measData,
+ { "measData", "kpm-v2.measData",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementData", HFILL }},
+ { &hf_kpm_v2_measCondUEidList,
+ { "measCondUEidList", "kpm-v2.measCondUEidList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementCondUEidList", HFILL }},
+ { &hf_kpm_v2_ueMeasReportList,
+ { "ueMeasReportList", "kpm-v2.ueMeasReportList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "UEMeasurementReportList", HFILL }},
+ { &hf_kpm_v2_ranFunction_Name,
+ { "ranFunction-Name", "kpm-v2.ranFunction_Name_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ric_EventTriggerStyle_List,
+ { "ric-EventTriggerStyle-List", "kpm-v2.ric_EventTriggerStyle_List",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item", HFILL }},
+ { &hf_kpm_v2_ric_EventTriggerStyle_List_item,
+ { "RIC-EventTriggerStyle-Item", "kpm-v2.RIC_EventTriggerStyle_Item_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ric_ReportStyle_List,
+ { "ric-ReportStyle-List", "kpm-v2.ric_ReportStyle_List",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item", HFILL }},
+ { &hf_kpm_v2_ric_ReportStyle_List_item,
+ { "RIC-ReportStyle-Item", "kpm-v2.RIC_ReportStyle_Item_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ric_EventTriggerStyle_Type,
+ { "ric-EventTriggerStyle-Type", "kpm-v2.ric_EventTriggerStyle_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RIC_Style_Type", HFILL }},
+ { &hf_kpm_v2_ric_EventTriggerStyle_Name,
+ { "ric-EventTriggerStyle-Name", "kpm-v2.ric_EventTriggerStyle_Name",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "RIC_Style_Name", HFILL }},
+ { &hf_kpm_v2_ric_EventTriggerFormat_Type,
+ { "ric-EventTriggerFormat-Type", "kpm-v2.ric_EventTriggerFormat_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RIC_Format_Type", HFILL }},
+ { &hf_kpm_v2_ric_ReportStyle_Type,
+ { "ric-ReportStyle-Type", "kpm-v2.ric_ReportStyle_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RIC_Style_Type", HFILL }},
+ { &hf_kpm_v2_ric_ReportStyle_Name,
+ { "ric-ReportStyle-Name", "kpm-v2.ric_ReportStyle_Name",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "RIC_Style_Name", HFILL }},
+ { &hf_kpm_v2_ric_ActionFormat_Type,
+ { "ric-ActionFormat-Type", "kpm-v2.ric_ActionFormat_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RIC_Format_Type", HFILL }},
+ { &hf_kpm_v2_measInfo_Action_List,
+ { "measInfo-Action-List", "kpm-v2.measInfo_Action_List",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MeasurementInfo_Action_List", HFILL }},
+ { &hf_kpm_v2_ric_IndicationHeaderFormat_Type,
+ { "ric-IndicationHeaderFormat-Type", "kpm-v2.ric_IndicationHeaderFormat_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RIC_Format_Type", HFILL }},
+ { &hf_kpm_v2_ric_IndicationMessageFormat_Type,
+ { "ric-IndicationMessageFormat-Type", "kpm-v2.ric_IndicationMessageFormat_Type",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RIC_Format_Type", HFILL }},
+ { &hf_kpm_v2_nR_CGI,
+ { "nR-CGI", "kpm-v2.nR_CGI_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_eUTRA_CGI,
+ { "eUTRA-CGI", "kpm-v2.eUTRA_CGI_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ranFunction_ShortName,
+ { "ranFunction-ShortName", "kpm-v2.ranFunction_ShortName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ranFunction_E2SM_OID,
+ { "ranFunction-E2SM-OID", "kpm-v2.ranFunction_E2SM_OID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ranFunction_Description,
+ { "ranFunction-Description", "kpm-v2.ranFunction_Description",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PrintableString_SIZE_1_150_", HFILL }},
+ { &hf_kpm_v2_ranFunction_Instance,
+ { "ranFunction-Instance", "kpm-v2.ranFunction_Instance",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "INTEGER", HFILL }},
+ { &hf_kpm_v2_gNB_UEID,
+ { "gNB-UEID", "kpm-v2.gNB_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_GNB", HFILL }},
+ { &hf_kpm_v2_gNB_DU_UEID,
+ { "gNB-DU-UEID", "kpm-v2.gNB_DU_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_GNB_DU", HFILL }},
+ { &hf_kpm_v2_gNB_CU_UP_UEID,
+ { "gNB-CU-UP-UEID", "kpm-v2.gNB_CU_UP_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_GNB_CU_UP", HFILL }},
+ { &hf_kpm_v2_ng_eNB_UEID,
+ { "ng-eNB-UEID", "kpm-v2.ng_eNB_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_NG_ENB", HFILL }},
+ { &hf_kpm_v2_ng_eNB_DU_UEID,
+ { "ng-eNB-DU-UEID", "kpm-v2.ng_eNB_DU_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_NG_ENB_DU", HFILL }},
+ { &hf_kpm_v2_en_gNB_UEID,
+ { "en-gNB-UEID", "kpm-v2.en_gNB_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_EN_GNB", HFILL }},
+ { &hf_kpm_v2_eNB_UEID,
+ { "eNB-UEID", "kpm-v2.eNB_UEID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "UEID_ENB", HFILL }},
+ { &hf_kpm_v2_amf_UE_NGAP_ID,
+ { "amf-UE-NGAP-ID", "kpm-v2.amf_UE_NGAP_ID",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_guami,
+ { "guami", "kpm-v2.guami_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gNB_CU_UE_F1AP_ID_List,
+ { "gNB-CU-UE-F1AP-ID-List", "kpm-v2.gNB_CU_UE_F1AP_ID_List",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "UEID_GNB_CU_F1AP_ID_List", HFILL }},
+ { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID_List,
+ { "gNB-CU-CP-UE-E1AP-ID-List", "kpm-v2.gNB_CU_CP_UE_E1AP_ID_List",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "UEID_GNB_CU_CP_E1AP_ID_List", HFILL }},
+ { &hf_kpm_v2_ran_UEID,
+ { "ran-UEID", "kpm-v2.ran_UEID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "RANUEID", HFILL }},
+ { &hf_kpm_v2_m_NG_RAN_UE_XnAP_ID,
+ { "m-NG-RAN-UE-XnAP-ID", "kpm-v2.m_NG_RAN_UE_XnAP_ID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "NG_RANnodeUEXnAPID", HFILL }},
+ { &hf_kpm_v2_globalGNB_ID,
+ { "globalGNB-ID", "kpm-v2.globalGNB_ID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_globalNG_RANNode_ID,
+ { "globalNG-RANNode-ID", "kpm-v2.globalNG_RANNode_ID",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_GlobalNGRANNodeID_vals), 0,
+ "GlobalNGRANNodeID", HFILL }},
+ { &hf_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List_item,
+ { "UEID-GNB-CU-CP-E1AP-ID-Item", "kpm-v2.UEID_GNB_CU_CP_E1AP_ID_Item_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gNB_CU_CP_UE_E1AP_ID,
+ { "gNB-CU-CP-UE-E1AP-ID", "kpm-v2.gNB_CU_CP_UE_E1AP_ID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_UEID_GNB_CU_F1AP_ID_List_item,
+ { "UEID-GNB-CU-CP-F1AP-ID-Item", "kpm-v2.UEID_GNB_CU_CP_F1AP_ID_Item_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gNB_CU_UE_F1AP_ID,
+ { "gNB-CU-UE-F1AP-ID", "kpm-v2.gNB_CU_UE_F1AP_ID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ng_eNB_CU_UE_W1AP_ID,
+ { "ng-eNB-CU-UE-W1AP-ID", "kpm-v2.ng_eNB_CU_UE_W1AP_ID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "NGENB_CU_UE_W1AP_ID", HFILL }},
+ { &hf_kpm_v2_globalNgENB_ID,
+ { "globalNgENB-ID", "kpm-v2.globalNgENB_ID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_m_eNB_UE_X2AP_ID,
+ { "m-eNB-UE-X2AP-ID", "kpm-v2.m_eNB_UE_X2AP_ID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ENB_UE_X2AP_ID", HFILL }},
+ { &hf_kpm_v2_m_eNB_UE_X2AP_ID_Extension,
+ { "m-eNB-UE-X2AP-ID-Extension", "kpm-v2.m_eNB_UE_X2AP_ID_Extension",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ENB_UE_X2AP_ID_Extension", HFILL }},
+ { &hf_kpm_v2_globalENB_ID,
+ { "globalENB-ID", "kpm-v2.globalENB_ID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_mME_UE_S1AP_ID,
+ { "mME-UE-S1AP-ID", "kpm-v2.mME_UE_S1AP_ID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gUMMEI,
+ { "gUMMEI", "kpm-v2.gUMMEI_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_macro_eNB_ID,
+ { "macro-eNB-ID", "kpm-v2.macro_eNB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_20", HFILL }},
+ { &hf_kpm_v2_home_eNB_ID,
+ { "home-eNB-ID", "kpm-v2.home_eNB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_28", HFILL }},
+ { &hf_kpm_v2_short_Macro_eNB_ID,
+ { "short-Macro-eNB-ID", "kpm-v2.short_Macro_eNB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_18", HFILL }},
+ { &hf_kpm_v2_long_Macro_eNB_ID,
+ { "long-Macro-eNB-ID", "kpm-v2.long_Macro_eNB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_21", HFILL }},
+ { &hf_kpm_v2_pLMNIdentity,
+ { "pLMNIdentity", "kpm-v2.pLMNIdentity",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_eNB_ID,
+ { "eNB-ID", "kpm-v2.eNB_ID",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_ENB_ID_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_pLMN_Identity,
+ { "pLMN-Identity", "kpm-v2.pLMN_Identity",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "PLMNIdentity", HFILL }},
+ { &hf_kpm_v2_mME_Group_ID,
+ { "mME-Group-ID", "kpm-v2.mME_Group_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_mME_Code,
+ { "mME-Code", "kpm-v2.mME_Code",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_eUTRACellIdentity,
+ { "eUTRACellIdentity", "kpm-v2.eUTRACellIdentity",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gNB_ID,
+ { "gNB-ID", "kpm-v2.gNB_ID",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_GNB_ID_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_ngENB_ID,
+ { "ngENB-ID", "kpm-v2.ngENB_ID",
+ FT_UINT32, BASE_DEC, VALS(kpm_v2_NgENB_ID_vals), 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gNB_ID_01,
+ { "gNB-ID", "kpm-v2.gNB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_22_32", HFILL }},
+ { &hf_kpm_v2_aMFRegionID,
+ { "aMFRegionID", "kpm-v2.aMFRegionID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_aMFSetID,
+ { "aMFSetID", "kpm-v2.aMFSetID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_aMFPointer,
+ { "aMFPointer", "kpm-v2.aMFPointer",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_macroNgENB_ID,
+ { "macroNgENB-ID", "kpm-v2.macroNgENB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_20", HFILL }},
+ { &hf_kpm_v2_shortMacroNgENB_ID,
+ { "shortMacroNgENB-ID", "kpm-v2.shortMacroNgENB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_18", HFILL }},
+ { &hf_kpm_v2_longMacroNgENB_ID,
+ { "longMacroNgENB-ID", "kpm-v2.longMacroNgENB_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_21", HFILL }},
+ { &hf_kpm_v2_nRCellIdentity,
+ { "nRCellIdentity", "kpm-v2.nRCellIdentity",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_sST,
+ { "sST", "kpm-v2.sST",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_sD,
+ { "sD", "kpm-v2.sD",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_kpm_v2_gNB,
+ { "gNB", "kpm-v2.gNB_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "GlobalGNB_ID", HFILL }},
+ { &hf_kpm_v2_ng_eNB,
+ { "ng-eNB", "kpm-v2.ng_eNB_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "GlobalNgENB_ID", HFILL }},
+ { &hf_kpm_v2_timestamp_string,
+ { "Timestamp string", "kpm-v2.timestamp-string",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+ &ett_kpm_v2_MeasurementType,
+ &ett_kpm_v2_MeasurementLabel,
+ &ett_kpm_v2_TestCondInfo,
+ &ett_kpm_v2_TestCond_Type,
+ &ett_kpm_v2_TestCond_Value,
+ &ett_kpm_v2_MeasurementInfoList,
+ &ett_kpm_v2_MeasurementInfoItem,
+ &ett_kpm_v2_LabelInfoList,
+ &ett_kpm_v2_LabelInfoItem,
+ &ett_kpm_v2_MeasurementData,
+ &ett_kpm_v2_MeasurementDataItem,
+ &ett_kpm_v2_MeasurementRecord,
+ &ett_kpm_v2_MeasurementRecordItem,
+ &ett_kpm_v2_MeasurementInfo_Action_List,
+ &ett_kpm_v2_MeasurementInfo_Action_Item,
+ &ett_kpm_v2_MeasurementCondList,
+ &ett_kpm_v2_MeasurementCondItem,
+ &ett_kpm_v2_MeasurementCondUEidList,
+ &ett_kpm_v2_MeasurementCondUEidItem,
+ &ett_kpm_v2_MatchingCondList,
+ &ett_kpm_v2_MatchingCondItem,
+ &ett_kpm_v2_MatchingUEidList,
+ &ett_kpm_v2_MatchingUEidItem,
+ &ett_kpm_v2_MatchingUeCondPerSubList,
+ &ett_kpm_v2_MatchingUeCondPerSubItem,
+ &ett_kpm_v2_MatchingUEidPerSubList,
+ &ett_kpm_v2_MatchingUEidPerSubItem,
+ &ett_kpm_v2_UEMeasurementReportList,
+ &ett_kpm_v2_UEMeasurementReportItem,
+ &ett_kpm_v2_E2SM_KPM_EventTriggerDefinition,
+ &ett_kpm_v2_T_eventDefinition_formats,
+ &ett_kpm_v2_E2SM_KPM_EventTriggerDefinition_Format1,
+ &ett_kpm_v2_E2SM_KPM_ActionDefinition,
+ &ett_kpm_v2_T_actionDefinition_formats,
+ &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format1,
+ &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format2,
+ &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format3,
+ &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format4,
+ &ett_kpm_v2_E2SM_KPM_ActionDefinition_Format5,
+ &ett_kpm_v2_E2SM_KPM_IndicationHeader,
+ &ett_kpm_v2_T_indicationHeader_formats,
+ &ett_kpm_v2_E2SM_KPM_IndicationHeader_Format1,
+ &ett_kpm_v2_E2SM_KPM_IndicationMessage,
+ &ett_kpm_v2_T_indicationMessage_formats,
+ &ett_kpm_v2_E2SM_KPM_IndicationMessage_Format1,
+ &ett_kpm_v2_E2SM_KPM_IndicationMessage_Format2,
+ &ett_kpm_v2_E2SM_KPM_IndicationMessage_Format3,
+ &ett_kpm_v2_E2SM_KPM_RANfunction_Description,
+ &ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_EventTriggerStyle_Item,
+ &ett_kpm_v2_SEQUENCE_SIZE_1_maxnoofRICStyles_OF_RIC_ReportStyle_Item,
+ &ett_kpm_v2_RIC_EventTriggerStyle_Item,
+ &ett_kpm_v2_RIC_ReportStyle_Item,
+ &ett_kpm_v2_CGI,
+ &ett_kpm_v2_RANfunction_Name,
+ &ett_kpm_v2_UEID,
+ &ett_kpm_v2_UEID_GNB,
+ &ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_List,
+ &ett_kpm_v2_UEID_GNB_CU_CP_E1AP_ID_Item,
+ &ett_kpm_v2_UEID_GNB_CU_F1AP_ID_List,
+ &ett_kpm_v2_UEID_GNB_CU_CP_F1AP_ID_Item,
+ &ett_kpm_v2_UEID_GNB_DU,
+ &ett_kpm_v2_UEID_GNB_CU_UP,
+ &ett_kpm_v2_UEID_NG_ENB,
+ &ett_kpm_v2_UEID_NG_ENB_DU,
+ &ett_kpm_v2_UEID_EN_GNB,
+ &ett_kpm_v2_UEID_ENB,
+ &ett_kpm_v2_ENB_ID,
+ &ett_kpm_v2_GlobalENB_ID,
+ &ett_kpm_v2_GUMMEI,
+ &ett_kpm_v2_EUTRA_CGI,
+ &ett_kpm_v2_GlobalGNB_ID,
+ &ett_kpm_v2_GlobalNgENB_ID,
+ &ett_kpm_v2_GNB_ID,
+ &ett_kpm_v2_GUAMI,
+ &ett_kpm_v2_NgENB_ID,
+ &ett_kpm_v2_NR_CGI,
+ &ett_kpm_v2_S_NSSAI,
+ &ett_kpm_v2_GlobalNGRANNodeID,
+ };
+
+
+ /* Register protocol */
+ proto_kpm_v2 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_kpm_v2, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+}
+
+/*
+ * Editor modelines
+ *
+ * Local Variables:
+ * c-basic-offset: 2
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * ex: set shiftwidth=2 tabstop=8 expandtab:
+ * :indentSize=2:tabSize=8:noTabs=true:
+ */