diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/packet-kpm-v2.c | |
parent | Initial commit. (diff) | |
download | wireshark-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.c | 3428 |
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, + ¶meter_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: + */ |