/* 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 * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later * * References: ORAN-WG3.E2SM-KPM-v02.02 */ #include "config.h" #include #include #include #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: */