summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mms.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-19 04:14:26 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-19 04:14:26 +0000
commitc4e8a3222648fcf22ca207f1815ebbf7cd144eeb (patch)
tree93d5c6aa93d9987680dd1adad5685e2ad698f223 /epan/dissectors/packet-mms.c
parentAdding upstream version 4.2.6. (diff)
downloadwireshark-upstream.tar.xz
wireshark-upstream.zip
Adding upstream version 4.4.0.upstream/4.4.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-mms.c')
-rw-r--r--epan/dissectors/packet-mms.c3719
1 files changed, 2544 insertions, 1175 deletions
diff --git a/epan/dissectors/packet-mms.c b/epan/dissectors/packet-mms.c
index 81e7aaf3..d7a86b91 100644
--- a/epan/dissectors/packet-mms.c
+++ b/epan/dissectors/packet-mms.c
@@ -1,7 +1,7 @@
/* Do not modify this file. Changes will be overwritten. */
/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
/* packet-mms.c */
-/* asn2wrs.py -b -L -p mms -c ./mms.cnf -s ./packet-mms-template -D . -O ../.. mms.asn */
+/* asn2wrs.py -b -q -L -p mms -c ./mms.cnf -s ./packet-mms-template -D . -O ../.. mms.asn */
/* packet-mms_asn1.c
*
@@ -21,6 +21,8 @@
#include <epan/asn1.h>
#include <epan/expert.h>
#include <epan/proto_data.h>
+#include <epan/conversation.h>
+#include <wsutil/array.h>
#include "packet-ber.h"
#include "packet-acse.h"
@@ -33,915 +35,982 @@
void proto_register_mms(void);
void proto_reg_handoff_mms(void);
+static bool use_iec61850_mapping = true;
+
/* Initialize the protocol and registered fields */
-static int proto_mms = -1;
-
-static int hf_mms_confirmed_RequestPDU = -1; /* Confirmed_RequestPDU */
-static int hf_mms_confirmed_ResponsePDU = -1; /* Confirmed_ResponsePDU */
-static int hf_mms_confirmed_ErrorPDU = -1; /* Confirmed_ErrorPDU */
-static int hf_mms_unconfirmed_PDU = -1; /* Unconfirmed_PDU */
-static int hf_mms_rejectPDU = -1; /* RejectPDU */
-static int hf_mms_cancel_RequestPDU = -1; /* Cancel_RequestPDU */
-static int hf_mms_cancel_ResponsePDU = -1; /* Cancel_ResponsePDU */
-static int hf_mms_cancel_ErrorPDU = -1; /* Cancel_ErrorPDU */
-static int hf_mms_initiate_RequestPDU = -1; /* Initiate_RequestPDU */
-static int hf_mms_initiate_ResponsePDU = -1; /* Initiate_ResponsePDU */
-static int hf_mms_initiate_ErrorPDU = -1; /* Initiate_ErrorPDU */
-static int hf_mms_conclude_RequestPDU = -1; /* Conclude_RequestPDU */
-static int hf_mms_conclude_ResponsePDU = -1; /* Conclude_ResponsePDU */
-static int hf_mms_conclude_ErrorPDU = -1; /* Conclude_ErrorPDU */
-static int hf_mms_invokeID = -1; /* Unsigned32 */
-static int hf_mms_listOfModifier = -1; /* SEQUENCE_OF_Modifier */
-static int hf_mms_listOfModifier_item = -1; /* Modifier */
-static int hf_mms_confirmedServiceRequest = -1; /* ConfirmedServiceRequest */
-static int hf_mms_cs_request_detail = -1; /* CS_Request_Detail */
-static int hf_mms_unconfirmedService = -1; /* UnconfirmedService */
-static int hf_mms_confirmedServiceResponse = -1; /* ConfirmedServiceResponse */
-static int hf_mms_modifierPosition = -1; /* Unsigned32 */
-static int hf_mms_serviceError = -1; /* ServiceError */
-static int hf_mms_informationReport = -1; /* InformationReport */
-static int hf_mms_unsolicitedStatus = -1; /* UnsolicitedStatus */
-static int hf_mms_eventNotification = -1; /* EventNotification */
-static int hf_mms_attach_To_Event_Condition = -1; /* AttachToEventCondition */
-static int hf_mms_attach_To_Semaphore = -1; /* AttachToSemaphore */
-static int hf_mms_status = -1; /* Status_Request */
-static int hf_mms_getNameList = -1; /* GetNameList_Request */
-static int hf_mms_identify = -1; /* Identify_Request */
-static int hf_mms_rename = -1; /* Rename_Request */
-static int hf_mms_read = -1; /* Read_Request */
-static int hf_mms_write = -1; /* Write_Request */
-static int hf_mms_getVariableAccessAttributes = -1; /* GetVariableAccessAttributes_Request */
-static int hf_mms_defineNamedVariable = -1; /* DefineNamedVariable_Request */
-static int hf_mms_defineScatteredAccess = -1; /* DefineScatteredAccess_Request */
-static int hf_mms_getScatteredAccessAttributes = -1; /* GetScatteredAccessAttributes_Request */
-static int hf_mms_deleteVariableAccess = -1; /* DeleteVariableAccess_Request */
-static int hf_mms_defineNamedVariableList = -1; /* DefineNamedVariableList_Request */
-static int hf_mms_getNamedVariableListAttributes = -1; /* GetNamedVariableListAttributes_Request */
-static int hf_mms_deleteNamedVariableList = -1; /* DeleteNamedVariableList_Request */
-static int hf_mms_defineNamedType = -1; /* DefineNamedType_Request */
-static int hf_mms_getNamedTypeAttributes = -1; /* GetNamedTypeAttributes_Request */
-static int hf_mms_deleteNamedType = -1; /* DeleteNamedType_Request */
-static int hf_mms_input = -1; /* Input_Request */
-static int hf_mms_output = -1; /* Output_Request */
-static int hf_mms_takeControl = -1; /* TakeControl_Request */
-static int hf_mms_relinquishControl = -1; /* RelinquishControl_Request */
-static int hf_mms_defineSemaphore = -1; /* DefineSemaphore_Request */
-static int hf_mms_deleteSemaphore = -1; /* DeleteSemaphore_Request */
-static int hf_mms_reportSemaphoreStatus = -1; /* ReportSemaphoreStatus_Request */
-static int hf_mms_reportPoolSemaphoreStatus = -1; /* ReportPoolSemaphoreStatus_Request */
-static int hf_mms_reportSemaphoreEntryStatus = -1; /* ReportSemaphoreEntryStatus_Request */
-static int hf_mms_initiateDownloadSequence = -1; /* InitiateDownloadSequence_Request */
-static int hf_mms_downloadSegment = -1; /* DownloadSegment_Request */
-static int hf_mms_terminateDownloadSequence = -1; /* TerminateDownloadSequence_Request */
-static int hf_mms_initiateUploadSequence = -1; /* InitiateUploadSequence_Request */
-static int hf_mms_uploadSegment = -1; /* UploadSegment_Request */
-static int hf_mms_terminateUploadSequence = -1; /* TerminateUploadSequence_Request */
-static int hf_mms_requestDomainDownload = -1; /* RequestDomainDownload_Request */
-static int hf_mms_requestDomainUpload = -1; /* RequestDomainUpload_Request */
-static int hf_mms_loadDomainContent = -1; /* LoadDomainContent_Request */
-static int hf_mms_storeDomainContent = -1; /* StoreDomainContent_Request */
-static int hf_mms_deleteDomain = -1; /* DeleteDomain_Request */
-static int hf_mms_getDomainAttributes = -1; /* GetDomainAttributes_Request */
-static int hf_mms_createProgramInvocation = -1; /* CreateProgramInvocation_Request */
-static int hf_mms_deleteProgramInvocation = -1; /* DeleteProgramInvocation_Request */
-static int hf_mms_start = -1; /* Start_Request */
-static int hf_mms_stop = -1; /* Stop_Request */
-static int hf_mms_resume = -1; /* Resume_Request */
-static int hf_mms_reset = -1; /* Reset_Request */
-static int hf_mms_kill = -1; /* Kill_Request */
-static int hf_mms_getProgramInvocationAttributes = -1; /* GetProgramInvocationAttributes_Request */
-static int hf_mms_obtainFile = -1; /* ObtainFile_Request */
-static int hf_mms_defineEventCondition = -1; /* DefineEventCondition_Request */
-static int hf_mms_confirmedServiceRequest_deleteEventCondition = -1; /* DeleteEventCondition_Request */
-static int hf_mms_getEventConditionAttributes = -1; /* GetEventConditionAttributes_Request */
-static int hf_mms_reportEventConditionStatus = -1; /* ReportEventConditionStatus_Request */
-static int hf_mms_alterEventConditionMonitoring = -1; /* AlterEventConditionMonitoring_Request */
-static int hf_mms_triggerEvent = -1; /* TriggerEvent_Request */
-static int hf_mms_defineEventAction = -1; /* DefineEventAction_Request */
-static int hf_mms_confirmedServiceRequest_deleteEventAction = -1; /* DeleteEventAction_Request */
-static int hf_mms_getEventActionAttributes = -1; /* GetEventActionAttributes_Request */
-static int hf_mms_reportEventActionStatus = -1; /* ReportEventActionStatus_Request */
-static int hf_mms_defineEventEnrollment = -1; /* DefineEventEnrollment_Request */
-static int hf_mms_confirmedServiceRequest_deleteEventEnrollment = -1; /* DeleteEventEnrollment_Request */
-static int hf_mms_alterEventEnrollment = -1; /* AlterEventEnrollment_Request */
-static int hf_mms_reportEventEnrollmentStatus = -1; /* ReportEventEnrollmentStatus_Request */
-static int hf_mms_getEventEnrollmentAttributes = -1; /* GetEventEnrollmentAttributes_Request */
-static int hf_mms_acknowledgeEventNotification = -1; /* AcknowledgeEventNotification_Request */
-static int hf_mms_getAlarmSummary = -1; /* GetAlarmSummary_Request */
-static int hf_mms_getAlarmEnrollmentSummary = -1; /* GetAlarmEnrollmentSummary_Request */
-static int hf_mms_readJournal = -1; /* ReadJournal_Request */
-static int hf_mms_writeJournal = -1; /* WriteJournal_Request */
-static int hf_mms_initializeJournal = -1; /* InitializeJournal_Request */
-static int hf_mms_reportJournalStatus = -1; /* ReportJournalStatus_Request */
-static int hf_mms_createJournal = -1; /* CreateJournal_Request */
-static int hf_mms_deleteJournal = -1; /* DeleteJournal_Request */
-static int hf_mms_getCapabilityList = -1; /* GetCapabilityList_Request */
-static int hf_mms_fileOpen = -1; /* FileOpen_Request */
-static int hf_mms_fileRead = -1; /* FileRead_Request */
-static int hf_mms_fileClose = -1; /* FileClose_Request */
-static int hf_mms_fileRename = -1; /* FileRename_Request */
-static int hf_mms_fileDelete = -1; /* FileDelete_Request */
-static int hf_mms_fileDirectory = -1; /* FileDirectory_Request */
-static int hf_mms_foo = -1; /* INTEGER */
-static int hf_mms_status_01 = -1; /* Status_Response */
-static int hf_mms_getNameList_01 = -1; /* GetNameList_Response */
-static int hf_mms_identify_01 = -1; /* Identify_Response */
-static int hf_mms_rename_01 = -1; /* Rename_Response */
-static int hf_mms_read_01 = -1; /* Read_Response */
-static int hf_mms_write_01 = -1; /* Write_Response */
-static int hf_mms_getVariableAccessAttributes_01 = -1; /* GetVariableAccessAttributes_Response */
-static int hf_mms_defineNamedVariable_01 = -1; /* DefineNamedVariable_Response */
-static int hf_mms_defineScatteredAccess_01 = -1; /* DefineScatteredAccess_Response */
-static int hf_mms_getScatteredAccessAttributes_01 = -1; /* GetScatteredAccessAttributes_Response */
-static int hf_mms_deleteVariableAccess_01 = -1; /* DeleteVariableAccess_Response */
-static int hf_mms_defineNamedVariableList_01 = -1; /* DefineNamedVariableList_Response */
-static int hf_mms_getNamedVariableListAttributes_01 = -1; /* GetNamedVariableListAttributes_Response */
-static int hf_mms_deleteNamedVariableList_01 = -1; /* DeleteNamedVariableList_Response */
-static int hf_mms_defineNamedType_01 = -1; /* DefineNamedType_Response */
-static int hf_mms_getNamedTypeAttributes_01 = -1; /* GetNamedTypeAttributes_Response */
-static int hf_mms_deleteNamedType_01 = -1; /* DeleteNamedType_Response */
-static int hf_mms_input_01 = -1; /* Input_Response */
-static int hf_mms_output_01 = -1; /* Output_Response */
-static int hf_mms_takeControl_01 = -1; /* TakeControl_Response */
-static int hf_mms_relinquishControl_01 = -1; /* RelinquishControl_Response */
-static int hf_mms_defineSemaphore_01 = -1; /* DefineSemaphore_Response */
-static int hf_mms_deleteSemaphore_01 = -1; /* DeleteSemaphore_Response */
-static int hf_mms_reportSemaphoreStatus_01 = -1; /* ReportSemaphoreStatus_Response */
-static int hf_mms_reportPoolSemaphoreStatus_01 = -1; /* ReportPoolSemaphoreStatus_Response */
-static int hf_mms_reportSemaphoreEntryStatus_01 = -1; /* ReportSemaphoreEntryStatus_Response */
-static int hf_mms_initiateDownloadSequence_01 = -1; /* InitiateDownloadSequence_Response */
-static int hf_mms_downloadSegment_01 = -1; /* DownloadSegment_Response */
-static int hf_mms_terminateDownloadSequence_01 = -1; /* TerminateDownloadSequence_Response */
-static int hf_mms_initiateUploadSequence_01 = -1; /* InitiateUploadSequence_Response */
-static int hf_mms_uploadSegment_01 = -1; /* UploadSegment_Response */
-static int hf_mms_terminateUploadSequence_01 = -1; /* TerminateUploadSequence_Response */
-static int hf_mms_requestDomainDownLoad = -1; /* RequestDomainDownload_Response */
-static int hf_mms_requestDomainUpload_01 = -1; /* RequestDomainUpload_Response */
-static int hf_mms_loadDomainContent_01 = -1; /* LoadDomainContent_Response */
-static int hf_mms_storeDomainContent_01 = -1; /* StoreDomainContent_Response */
-static int hf_mms_deleteDomain_01 = -1; /* DeleteDomain_Response */
-static int hf_mms_getDomainAttributes_01 = -1; /* GetDomainAttributes_Response */
-static int hf_mms_createProgramInvocation_01 = -1; /* CreateProgramInvocation_Response */
-static int hf_mms_deleteProgramInvocation_01 = -1; /* DeleteProgramInvocation_Response */
-static int hf_mms_start_01 = -1; /* Start_Response */
-static int hf_mms_stop_01 = -1; /* Stop_Response */
-static int hf_mms_resume_01 = -1; /* Resume_Response */
-static int hf_mms_reset_01 = -1; /* Reset_Response */
-static int hf_mms_kill_01 = -1; /* Kill_Response */
-static int hf_mms_getProgramInvocationAttributes_01 = -1; /* GetProgramInvocationAttributes_Response */
-static int hf_mms_obtainFile_01 = -1; /* ObtainFile_Response */
-static int hf_mms_fileOpen_01 = -1; /* FileOpen_Response */
-static int hf_mms_defineEventCondition_01 = -1; /* DefineEventCondition_Response */
-static int hf_mms_confirmedServiceResponse_deleteEventCondition = -1; /* DeleteEventCondition_Response */
-static int hf_mms_getEventConditionAttributes_01 = -1; /* GetEventConditionAttributes_Response */
-static int hf_mms_reportEventConditionStatus_01 = -1; /* ReportEventConditionStatus_Response */
-static int hf_mms_alterEventConditionMonitoring_01 = -1; /* AlterEventConditionMonitoring_Response */
-static int hf_mms_triggerEvent_01 = -1; /* TriggerEvent_Response */
-static int hf_mms_defineEventAction_01 = -1; /* DefineEventAction_Response */
-static int hf_mms_deleteEventAction = -1; /* DeleteEventAction_Response */
-static int hf_mms_getEventActionAttributes_01 = -1; /* GetEventActionAttributes_Response */
-static int hf_mms_reportActionStatus = -1; /* ReportEventActionStatus_Response */
-static int hf_mms_defineEventEnrollment_01 = -1; /* DefineEventEnrollment_Response */
-static int hf_mms_confirmedServiceResponse_deleteEventEnrollment = -1; /* DeleteEventEnrollment_Response */
-static int hf_mms_alterEventEnrollment_01 = -1; /* AlterEventEnrollment_Response */
-static int hf_mms_reportEventEnrollmentStatus_01 = -1; /* ReportEventEnrollmentStatus_Response */
-static int hf_mms_getEventEnrollmentAttributes_01 = -1; /* GetEventEnrollmentAttributes_Response */
-static int hf_mms_acknowledgeEventNotification_01 = -1; /* AcknowledgeEventNotification_Response */
-static int hf_mms_getAlarmSummary_01 = -1; /* GetAlarmSummary_Response */
-static int hf_mms_getAlarmEnrollmentSummary_01 = -1; /* GetAlarmEnrollmentSummary_Response */
-static int hf_mms_readJournal_01 = -1; /* ReadJournal_Response */
-static int hf_mms_writeJournal_01 = -1; /* WriteJournal_Response */
-static int hf_mms_initializeJournal_01 = -1; /* InitializeJournal_Response */
-static int hf_mms_reportJournalStatus_01 = -1; /* ReportJournalStatus_Response */
-static int hf_mms_createJournal_01 = -1; /* CreateJournal_Response */
-static int hf_mms_deleteJournal_01 = -1; /* DeleteJournal_Response */
-static int hf_mms_getCapabilityList_01 = -1; /* GetCapabilityList_Response */
-static int hf_mms_fileRead_01 = -1; /* FileRead_Response */
-static int hf_mms_fileClose_01 = -1; /* FileClose_Response */
-static int hf_mms_fileRename_01 = -1; /* FileRename_Response */
-static int hf_mms_fileDelete_01 = -1; /* FileDelete_Response */
-static int hf_mms_fileDirectory_01 = -1; /* FileDirectory_Response */
-static int hf_mms_FileName_item = -1; /* GraphicString */
-static int hf_mms_vmd_specific = -1; /* Identifier */
-static int hf_mms_domain_specific = -1; /* T_domain_specific */
-static int hf_mms_domainId = -1; /* Identifier */
-static int hf_mms_itemId = -1; /* Identifier */
-static int hf_mms_aa_specific = -1; /* Identifier */
-static int hf_mms_ap_title = -1; /* T_ap_title */
-static int hf_mms_ap_invocation_id = -1; /* T_ap_invocation_id */
-static int hf_mms_ae_qualifier = -1; /* T_ae_qualifier */
-static int hf_mms_ae_invocation_id = -1; /* T_ae_invocation_id */
-static int hf_mms_localDetailCalling = -1; /* Integer32 */
-static int hf_mms_proposedMaxServOutstandingCalling = -1; /* Integer16 */
-static int hf_mms_proposedMaxServOutstandingCalled = -1; /* Integer16 */
-static int hf_mms_proposedDataStructureNestingLevel = -1; /* Integer8 */
-static int hf_mms_mmsInitRequestDetail = -1; /* InitRequestDetail */
-static int hf_mms_proposedVersionNumber = -1; /* Integer16 */
-static int hf_mms_proposedParameterCBB = -1; /* ParameterSupportOptions */
-static int hf_mms_servicesSupportedCalling = -1; /* ServiceSupportOptions */
-static int hf_mms_localDetailCalled = -1; /* Integer32 */
-static int hf_mms_negociatedMaxServOutstandingCalling = -1; /* Integer16 */
-static int hf_mms_negociatedMaxServOutstandingCalled = -1; /* Integer16 */
-static int hf_mms_negociatedDataStructureNestingLevel = -1; /* Integer8 */
-static int hf_mms_mmsInitResponseDetail = -1; /* InitResponseDetail */
-static int hf_mms_negociatedVersionNumber = -1; /* Integer16 */
-static int hf_mms_negociatedParameterCBB = -1; /* ParameterSupportOptions */
-static int hf_mms_servicesSupportedCalled = -1; /* ServiceSupportOptions */
-static int hf_mms_originalInvokeID = -1; /* Unsigned32 */
-static int hf_mms_errorClass = -1; /* T_errorClass */
-static int hf_mms_vmd_state = -1; /* T_vmd_state */
-static int hf_mms_application_reference = -1; /* T_application_reference */
-static int hf_mms_definition = -1; /* T_definition */
-static int hf_mms_resource = -1; /* T_resource */
-static int hf_mms_service = -1; /* T_service */
-static int hf_mms_service_preempt = -1; /* T_service_preempt */
-static int hf_mms_time_resolution = -1; /* T_time_resolution */
-static int hf_mms_access = -1; /* T_access */
-static int hf_mms_initiate = -1; /* T_initiate */
-static int hf_mms_conclude = -1; /* T_conclude */
-static int hf_mms_cancel = -1; /* T_cancel */
-static int hf_mms_file = -1; /* T_file */
-static int hf_mms_others = -1; /* INTEGER */
-static int hf_mms_additionalCode = -1; /* INTEGER */
-static int hf_mms_additionalDescription = -1; /* VisibleString */
-static int hf_mms_serviceSpecificInformation = -1; /* T_serviceSpecificInformation */
-static int hf_mms_obtainFile_02 = -1; /* ObtainFile_Error */
-static int hf_mms_start_02 = -1; /* Start_Error */
-static int hf_mms_stop_02 = -1; /* Stop_Error */
-static int hf_mms_resume_02 = -1; /* Resume_Error */
-static int hf_mms_reset_02 = -1; /* Reset_Error */
-static int hf_mms_deleteVariableAccess_02 = -1; /* DeleteVariableAccess_Error */
-static int hf_mms_deleteNamedVariableList_02 = -1; /* DeleteNamedVariableList_Error */
-static int hf_mms_deleteNamedType_02 = -1; /* DeleteNamedType_Error */
-static int hf_mms_defineEventEnrollment_Error = -1; /* DefineEventEnrollment_Error */
-static int hf_mms_fileRename_02 = -1; /* FileRename_Error */
-static int hf_mms_additionalService = -1; /* AdditionalService_Error */
-static int hf_mms_changeAccessControl = -1; /* ChangeAccessControl_Error */
-static int hf_mms_defineEcl = -1; /* DefineEventConditionList_Error */
-static int hf_mms_addECLReference = -1; /* AddEventConditionListReference_Error */
-static int hf_mms_removeECLReference = -1; /* RemoveEventConditionListReference_Error */
-static int hf_mms_initiateUC = -1; /* InitiateUnitControl_Error */
-static int hf_mms_startUC = -1; /* StartUnitControl_Error */
-static int hf_mms_stopUC = -1; /* StopUnitControl_Error */
-static int hf_mms_deleteUC = -1; /* DeleteUnitControl_Error */
-static int hf_mms_loadUCFromFile = -1; /* LoadUnitControlFromFile_Error */
-static int hf_mms_eventCondition = -1; /* ObjectName */
-static int hf_mms_eventConditionList = -1; /* ObjectName */
-static int hf_mms_domain = -1; /* Identifier */
-static int hf_mms_programInvocation = -1; /* Identifier */
-static int hf_mms_programInvocationName = -1; /* Identifier */
-static int hf_mms_programInvocationState = -1; /* ProgramInvocationState */
-static int hf_mms_none = -1; /* NULL */
-static int hf_mms_rejectReason = -1; /* T_rejectReason */
-static int hf_mms_confirmed_requestPDU = -1; /* T_confirmed_requestPDU */
-static int hf_mms_confirmed_responsePDU = -1; /* T_confirmed_responsePDU */
-static int hf_mms_confirmed_errorPDU = -1; /* T_confirmed_errorPDU */
-static int hf_mms_unconfirmedPDU = -1; /* T_unconfirmedPDU */
-static int hf_mms_pdu_error = -1; /* T_pdu_error */
-static int hf_mms_cancel_requestPDU = -1; /* T_cancel_requestPDU */
-static int hf_mms_cancel_responsePDU = -1; /* T_cancel_responsePDU */
-static int hf_mms_cancel_errorPDU = -1; /* T_cancel_errorPDU */
-static int hf_mms_conclude_requestPDU = -1; /* T_conclude_requestPDU */
-static int hf_mms_conclude_responsePDU = -1; /* T_conclude_responsePDU */
-static int hf_mms_conclude_errorPDU = -1; /* T_conclude_errorPDU */
-static int hf_mms_vmdLogicalStatus = -1; /* T_vmdLogicalStatus */
-static int hf_mms_vmdPhysicalStatus = -1; /* T_vmdPhysicalStatus */
-static int hf_mms_localDetail = -1; /* BIT_STRING_SIZE_0_128 */
-static int hf_mms_extendedObjectClass = -1; /* T_extendedObjectClass */
-static int hf_mms_objectClass = -1; /* T_objectClass */
-static int hf_mms_objectScope = -1; /* T_objectScope */
-static int hf_mms_vmdSpecific = -1; /* NULL */
-static int hf_mms_domainSpecific = -1; /* Identifier */
-static int hf_mms_aaSpecific = -1; /* NULL */
-static int hf_mms_getNameList_Request_continueAfter = -1; /* Identifier */
-static int hf_mms_listOfIdentifier = -1; /* SEQUENCE_OF_Identifier */
-static int hf_mms_listOfIdentifier_item = -1; /* Identifier */
-static int hf_mms_moreFollows = -1; /* BOOLEAN */
-static int hf_mms_vendorName = -1; /* VisibleString */
-static int hf_mms_modelName = -1; /* VisibleString */
-static int hf_mms_revision = -1; /* VisibleString */
-static int hf_mms_listOfAbstractSyntaxes = -1; /* T_listOfAbstractSyntaxes */
-static int hf_mms_listOfAbstractSyntaxes_item = -1; /* OBJECT_IDENTIFIER */
-static int hf_mms_extendedObjectClass_01 = -1; /* T_extendedObjectClass_01 */
-static int hf_mms_objectClass_01 = -1; /* T_objectClass_01 */
-static int hf_mms_currentName = -1; /* ObjectName */
-static int hf_mms_newIdentifier = -1; /* Identifier */
-static int hf_mms_getCapabilityList_Request_continueAfter = -1; /* VisibleString */
-static int hf_mms_listOfCapabilities = -1; /* T_listOfCapabilities */
-static int hf_mms_listOfCapabilities_item = -1; /* VisibleString */
-static int hf_mms_domainName = -1; /* Identifier */
-static int hf_mms_listOfCapabilities_01 = -1; /* T_listOfCapabilities_01 */
-static int hf_mms_sharable = -1; /* BOOLEAN */
-static int hf_mms_loadData = -1; /* T_loadData */
-static int hf_mms_non_coded = -1; /* OCTET_STRING */
-static int hf_mms_coded = -1; /* EXTERNALt */
-static int hf_mms_discard = -1; /* ServiceError */
-static int hf_mms_ulsmID = -1; /* Integer32 */
-static int hf_mms_listOfCapabilities_02 = -1; /* T_listOfCapabilities_02 */
-static int hf_mms_loadData_01 = -1; /* T_loadData_01 */
-static int hf_mms_listOfCapabilities_03 = -1; /* T_listOfCapabilities_03 */
-static int hf_mms_fileName = -1; /* FileName */
-static int hf_mms_listOfCapabilities_04 = -1; /* T_listOfCapabilities_04 */
-static int hf_mms_thirdParty = -1; /* ApplicationReference */
-static int hf_mms_filenName = -1; /* FileName */
-static int hf_mms_listOfCapabilities_05 = -1; /* T_listOfCapabilities_05 */
-static int hf_mms_getDomainAttributes_Response_state = -1; /* DomainState */
-static int hf_mms_mmsDeletable = -1; /* BOOLEAN */
-static int hf_mms_listOfProgramInvocations = -1; /* SEQUENCE_OF_Identifier */
-static int hf_mms_listOfProgramInvocations_item = -1; /* Identifier */
-static int hf_mms_uploadInProgress = -1; /* Integer8 */
-static int hf_mms_listOfDomainName = -1; /* SEQUENCE_OF_Identifier */
-static int hf_mms_listOfDomainName_item = -1; /* Identifier */
-static int hf_mms_reusable = -1; /* BOOLEAN */
-static int hf_mms_monitorType = -1; /* BOOLEAN */
-static int hf_mms_executionArgument = -1; /* T_executionArgument */
-static int hf_mms_simpleString = -1; /* VisibleString */
-static int hf_mms_encodedString = -1; /* EXTERNALt */
-static int hf_mms_executionArgument_01 = -1; /* T_executionArgument_01 */
-static int hf_mms_getProgramInvocationAttributes_Response_state = -1; /* ProgramInvocationState */
-static int hf_mms_listOfDomainNames = -1; /* SEQUENCE_OF_Identifier */
-static int hf_mms_listOfDomainNames_item = -1; /* Identifier */
-static int hf_mms_monitor = -1; /* BOOLEAN */
-static int hf_mms_startArgument = -1; /* VisibleString */
-static int hf_mms_executionArgument_02 = -1; /* T_executionArgument_02 */
-static int hf_mms_typeName = -1; /* ObjectName */
-static int hf_mms_array = -1; /* T_array */
-static int hf_mms_packed = -1; /* BOOLEAN */
-static int hf_mms_numberOfElements = -1; /* Unsigned32 */
-static int hf_mms_elementType = -1; /* TypeSpecification */
-static int hf_mms_structure = -1; /* T_structure */
-static int hf_mms_components = -1; /* T_components */
-static int hf_mms_components_item = -1; /* T_components_item */
-static int hf_mms_componentName = -1; /* Identifier */
-static int hf_mms_componentType = -1; /* TypeSpecification */
-static int hf_mms_boolean = -1; /* NULL */
-static int hf_mms_typeSpecification_bit_string = -1; /* Integer32 */
-static int hf_mms_integer = -1; /* Unsigned8 */
-static int hf_mms_unsigned = -1; /* Unsigned8 */
-static int hf_mms_typeSpecification_octet_string = -1; /* Integer32 */
-static int hf_mms_typeSpecification_visible_string = -1; /* Integer32 */
-static int hf_mms_generalized_time = -1; /* NULL */
-static int hf_mms_typeSpecification_binary_time = -1; /* BOOLEAN */
-static int hf_mms_bcd = -1; /* Unsigned8 */
-static int hf_mms_objId = -1; /* NULL */
-static int hf_mms_AlternateAccess_item = -1; /* AlternateAccess_item */
-static int hf_mms_unnamed = -1; /* AlternateAccessSelection */
-static int hf_mms_named = -1; /* T_named */
-static int hf_mms_accesst = -1; /* AlternateAccessSelection */
-static int hf_mms_selectAlternateAccess = -1; /* T_selectAlternateAccess */
-static int hf_mms_accessSelection = -1; /* T_accessSelection */
-static int hf_mms_component = -1; /* Identifier */
-static int hf_mms_index = -1; /* Unsigned32 */
-static int hf_mms_indexRange = -1; /* T_indexRange */
-static int hf_mms_lowIndex = -1; /* Unsigned32 */
-static int hf_mms_allElements = -1; /* NULL */
-static int hf_mms_alternateAccess = -1; /* AlternateAccess */
-static int hf_mms_selectAccess = -1; /* T_selectAccess */
-static int hf_mms_indexRange_01 = -1; /* T_indexRange_01 */
-static int hf_mms_nmberOfElements = -1; /* Unsigned32 */
-static int hf_mms_specificationWithResult = -1; /* BOOLEAN */
-static int hf_mms_variableAccessSpecificatn = -1; /* VariableAccessSpecification */
-static int hf_mms_listOfAccessResult = -1; /* SEQUENCE_OF_AccessResult */
-static int hf_mms_listOfAccessResult_item = -1; /* AccessResult */
-static int hf_mms_listOfData = -1; /* SEQUENCE_OF_Data */
-static int hf_mms_listOfData_item = -1; /* Data */
-static int hf_mms_Write_Response_item = -1; /* Write_Response_item */
-static int hf_mms_failure = -1; /* DataAccessError */
-static int hf_mms_success = -1; /* NULL */
-static int hf_mms_variableAccessSpecification = -1; /* VariableAccessSpecification */
-static int hf_mms_name = -1; /* ObjectName */
-static int hf_mms_address = -1; /* Address */
-static int hf_mms_typeSpecification = -1; /* TypeSpecification */
-static int hf_mms_variableName = -1; /* ObjectName */
-static int hf_mms_scatteredAccessName = -1; /* ObjectName */
-static int hf_mms_scatteredAccessDescription = -1; /* ScatteredAccessDescription */
-static int hf_mms_scopeOfDelete = -1; /* T_scopeOfDelete */
-static int hf_mms_listOfName = -1; /* SEQUENCE_OF_ObjectName */
-static int hf_mms_listOfName_item = -1; /* ObjectName */
-static int hf_mms_numberMatched = -1; /* Unsigned32 */
-static int hf_mms_numberDeleted = -1; /* Unsigned32 */
-static int hf_mms_variableListName = -1; /* ObjectName */
-static int hf_mms_listOfVariable = -1; /* T_listOfVariable */
-static int hf_mms_listOfVariable_item = -1; /* T_listOfVariable_item */
-static int hf_mms_variableSpecification = -1; /* VariableSpecification */
-static int hf_mms_listOfVariable_01 = -1; /* T_listOfVariable_01 */
-static int hf_mms_listOfVariable_item_01 = -1; /* T_listOfVariable_item_01 */
-static int hf_mms_scopeOfDelete_01 = -1; /* T_scopeOfDelete_01 */
-static int hf_mms_listOfVariableListName = -1; /* SEQUENCE_OF_ObjectName */
-static int hf_mms_listOfVariableListName_item = -1; /* ObjectName */
-static int hf_mms_scopeOfDelete_02 = -1; /* T_scopeOfDelete_02 */
-static int hf_mms_listOfTypeName = -1; /* SEQUENCE_OF_ObjectName */
-static int hf_mms_listOfTypeName_item = -1; /* ObjectName */
-static int hf_mms_success_01 = -1; /* Data */
-static int hf_mms_array_01 = -1; /* SEQUENCE_OF_Data */
-static int hf_mms_array_item = -1; /* Data */
-static int hf_mms_structure_01 = -1; /* SEQUENCE_OF_Data */
-static int hf_mms_structure_item = -1; /* Data */
-static int hf_mms_boolean_01 = -1; /* BOOLEAN */
-static int hf_mms_data_bit_string = -1; /* BIT_STRING */
-static int hf_mms_integer_01 = -1; /* INTEGER */
-static int hf_mms_unsigned_01 = -1; /* INTEGER */
-static int hf_mms_floating_point = -1; /* FloatingPoint */
-static int hf_mms_data_octet_string = -1; /* OCTET_STRING */
-static int hf_mms_data_visible_string = -1; /* VisibleString */
-static int hf_mms_data_binary_time = -1; /* TimeOfDay */
-static int hf_mms_bcd_01 = -1; /* INTEGER */
-static int hf_mms_booleanArray = -1; /* BIT_STRING */
-static int hf_mms_objId_01 = -1; /* OBJECT_IDENTIFIER */
-static int hf_mms_mMSString = -1; /* MMSString */
-static int hf_mms_utc_time = -1; /* UtcTime */
-static int hf_mms_listOfVariable_02 = -1; /* T_listOfVariable_02 */
-static int hf_mms_listOfVariable_item_02 = -1; /* T_listOfVariable_item_02 */
-static int hf_mms_ScatteredAccessDescription_item = -1; /* ScatteredAccessDescription_item */
-static int hf_mms_variableDescription = -1; /* T_variableDescription */
-static int hf_mms_invalidated = -1; /* NULL */
-static int hf_mms_numericAddress = -1; /* Unsigned32 */
-static int hf_mms_symbolicAddress = -1; /* VisibleString */
-static int hf_mms_unconstrainedAddress = -1; /* OCTET_STRING */
-static int hf_mms_semaphoreName = -1; /* ObjectName */
-static int hf_mms_namedToken = -1; /* Identifier */
-static int hf_mms_priority = -1; /* Priority */
-static int hf_mms_acceptableDelay = -1; /* Unsigned32 */
-static int hf_mms_controlTimeOut = -1; /* Unsigned32 */
-static int hf_mms_abortOnTimeOut = -1; /* BOOLEAN */
-static int hf_mms_relinquishIfConnectionLost = -1; /* BOOLEAN */
-static int hf_mms_applicationToPreempt = -1; /* ApplicationReference */
-static int hf_mms_noResult = -1; /* NULL */
-static int hf_mms_numbersOfTokens = -1; /* Unsigned16 */
-static int hf_mms_class = -1; /* T_class */
-static int hf_mms_numberOfTokens = -1; /* Unsigned16 */
-static int hf_mms_numberOfOwnedTokens = -1; /* Unsigned16 */
-static int hf_mms_numberOfHungTokens = -1; /* Unsigned16 */
-static int hf_mms_nameToStartAfter = -1; /* Identifier */
-static int hf_mms_listOfNamedTokens = -1; /* T_listOfNamedTokens */
-static int hf_mms_listOfNamedTokens_item = -1; /* T_listOfNamedTokens_item */
-static int hf_mms_freeNamedToken = -1; /* Identifier */
-static int hf_mms_ownedNamedToken = -1; /* Identifier */
-static int hf_mms_hungNamedToken = -1; /* Identifier */
-static int hf_mms_reportSemaphoreEntryStatus_Request_state = -1; /* T_reportSemaphoreEntryStatus_Request_state */
-static int hf_mms_entryIdToStartAfter = -1; /* OCTET_STRING */
-static int hf_mms_listOfSemaphoreEntry = -1; /* SEQUENCE_OF_SemaphoreEntry */
-static int hf_mms_listOfSemaphoreEntry_item = -1; /* SemaphoreEntry */
-static int hf_mms_entryId = -1; /* OCTET_STRING */
-static int hf_mms_entryClass = -1; /* T_entryClass */
-static int hf_mms_applicationReference = -1; /* ApplicationReference */
-static int hf_mms_remainingTimeOut = -1; /* Unsigned32 */
-static int hf_mms_operatorStationName = -1; /* Identifier */
-static int hf_mms_echo = -1; /* BOOLEAN */
-static int hf_mms_listOfPromptData = -1; /* T_listOfPromptData */
-static int hf_mms_listOfPromptData_item = -1; /* VisibleString */
-static int hf_mms_inputTimeOut = -1; /* Unsigned32 */
-static int hf_mms_listOfOutputData = -1; /* T_listOfOutputData */
-static int hf_mms_listOfOutputData_item = -1; /* VisibleString */
-static int hf_mms_eventConditionName = -1; /* ObjectName */
-static int hf_mms_class_01 = -1; /* EC_Class */
-static int hf_mms_prio_rity = -1; /* Priority */
-static int hf_mms_severity = -1; /* Unsigned8 */
-static int hf_mms_alarmSummaryReports = -1; /* BOOLEAN */
-static int hf_mms_monitoredVariable = -1; /* VariableSpecification */
-static int hf_mms_evaluationInterval = -1; /* Unsigned32 */
-static int hf_mms_specific = -1; /* SEQUENCE_OF_ObjectName */
-static int hf_mms_specific_item = -1; /* ObjectName */
-static int hf_mms_aa_specific_01 = -1; /* NULL */
-static int hf_mms_vmd = -1; /* NULL */
-static int hf_mms_monitoredVariable_01 = -1; /* T_monitoredVariable */
-static int hf_mms_variableReference = -1; /* VariableSpecification */
-static int hf_mms_undefined = -1; /* NULL */
-static int hf_mms_currentState = -1; /* EC_State */
-static int hf_mms_numberOfEventEnrollments = -1; /* Unsigned32 */
-static int hf_mms_enabled = -1; /* BOOLEAN */
-static int hf_mms_timeOfLastTransitionToActive = -1; /* EventTime */
-static int hf_mms_timeOfLastTransitionToIdle = -1; /* EventTime */
-static int hf_mms_eventActionName = -1; /* ObjectName */
-static int hf_mms_eventEnrollmentName = -1; /* ObjectName */
-static int hf_mms_eventConditionTransition = -1; /* Transitions */
-static int hf_mms_alarmAcknowledgementRule = -1; /* AlarmAckRule */
-static int hf_mms_clientApplication = -1; /* ApplicationReference */
-static int hf_mms_ec = -1; /* ObjectName */
-static int hf_mms_ea = -1; /* ObjectName */
-static int hf_mms_scopeOfRequest = -1; /* T_scopeOfRequest */
-static int hf_mms_eventEnrollmentNames = -1; /* SEQUENCE_OF_ObjectName */
-static int hf_mms_eventEnrollmentNames_item = -1; /* ObjectName */
-static int hf_mms_getEventEnrollmentAttributes_Request_continueAfter = -1; /* ObjectName */
-static int hf_mms_eventConditionName_01 = -1; /* T_eventConditionName */
-static int hf_mms_eventActionName_01 = -1; /* T_eventActionName */
-static int hf_mms_eventAction = -1; /* ObjectName */
-static int hf_mms_enrollmentClass = -1; /* EE_Class */
-static int hf_mms_duration = -1; /* EE_Duration */
-static int hf_mms_remainingAcceptableDelay = -1; /* Unsigned32 */
-static int hf_mms_listOfEventEnrollment = -1; /* SEQUENCE_OF_EventEnrollment */
-static int hf_mms_listOfEventEnrollment_item = -1; /* EventEnrollment */
-static int hf_mms_eventConditionTransitions = -1; /* Transitions */
-static int hf_mms_notificationLost = -1; /* BOOLEAN */
-static int hf_mms_alarmAcknowledgmentRule = -1; /* AlarmAckRule */
-static int hf_mms_currentState_01 = -1; /* EE_State */
-static int hf_mms_currentState_02 = -1; /* T_currentState */
-static int hf_mms_alterEventEnrollment_Response_currentState_state = -1; /* EE_State */
-static int hf_mms_transitionTime = -1; /* EventTime */
-static int hf_mms_acknowledgedState = -1; /* EC_State */
-static int hf_mms_timeOfAcknowledgedTransition = -1; /* EventTime */
-static int hf_mms_enrollmentsOnly = -1; /* BOOLEAN */
-static int hf_mms_activeAlarmsOnly = -1; /* BOOLEAN */
-static int hf_mms_acknowledgmentFilter = -1; /* T_acknowledgmentFilter */
-static int hf_mms_severityFilter = -1; /* T_severityFilter */
-static int hf_mms_mostSevere = -1; /* Unsigned8 */
-static int hf_mms_leastSevere = -1; /* Unsigned8 */
-static int hf_mms_continueAfter = -1; /* ObjectName */
-static int hf_mms_listOfAlarmSummary = -1; /* SEQUENCE_OF_AlarmSummary */
-static int hf_mms_listOfAlarmSummary_item = -1; /* AlarmSummary */
-static int hf_mms_unacknowledgedState = -1; /* T_unacknowledgedState */
-static int hf_mms_acknowledgmentFilter_01 = -1; /* T_acknowledgmentFilter_01 */
-static int hf_mms_severityFilter_01 = -1; /* T_severityFilter_01 */
-static int hf_mms_getAlarmEnrollmentSummary_Request_continueAfter = -1; /* ObjectName */
-static int hf_mms_listOfAlarmEnrollmentSummary = -1; /* SEQUENCE_OF_AlarmEnrollmentSummary */
-static int hf_mms_listOfAlarmEnrollmentSummary_item = -1; /* AlarmEnrollmentSummary */
-static int hf_mms_enrollementState = -1; /* EE_State */
-static int hf_mms_timeActiveAcknowledged = -1; /* EventTime */
-static int hf_mms_timeIdleAcknowledged = -1; /* EventTime */
-static int hf_mms_eventConditionName_02 = -1; /* T_eventConditionName_01 */
-static int hf_mms_actionResult = -1; /* T_actionResult */
-static int hf_mms_eventActioName = -1; /* ObjectName */
-static int hf_mms_eventActionResult = -1; /* T_eventActionResult */
-static int hf_mms_success_02 = -1; /* ConfirmedServiceResponse */
-static int hf_mms_failure_01 = -1; /* ServiceError */
-static int hf_mms_causingTransitions = -1; /* Transitions */
-static int hf_mms_timeOfDayT = -1; /* TimeOfDay */
-static int hf_mms_timeSequenceIdentifier = -1; /* Unsigned32 */
-static int hf_mms_journalName = -1; /* ObjectName */
-static int hf_mms_rangeStartSpecification = -1; /* T_rangeStartSpecification */
-static int hf_mms_startingTime = -1; /* TimeOfDay */
-static int hf_mms_startingEntry = -1; /* OCTET_STRING */
-static int hf_mms_rangeStopSpecification = -1; /* T_rangeStopSpecification */
-static int hf_mms_endingTime = -1; /* TimeOfDay */
-static int hf_mms_numberOfEntries = -1; /* Integer32 */
-static int hf_mms_listOfVariables = -1; /* T_listOfVariables */
-static int hf_mms_listOfVariables_item = -1; /* VisibleString */
-static int hf_mms_entryToStartAfter = -1; /* T_entryToStartAfter */
-static int hf_mms_timeSpecification = -1; /* TimeOfDay */
-static int hf_mms_entrySpecification = -1; /* OCTET_STRING */
-static int hf_mms_listOfJournalEntry = -1; /* SEQUENCE_OF_JournalEntry */
-static int hf_mms_listOfJournalEntry_item = -1; /* JournalEntry */
-static int hf_mms_entryIdentifier = -1; /* OCTET_STRING */
-static int hf_mms_originatingApplication = -1; /* ApplicationReference */
-static int hf_mms_entryContent = -1; /* EntryContent */
-static int hf_mms_listOfJournalEntry_01 = -1; /* SEQUENCE_OF_EntryContent */
-static int hf_mms_listOfJournalEntry_item_01 = -1; /* EntryContent */
-static int hf_mms_limitSpecification = -1; /* T_limitSpecification */
-static int hf_mms_limitingTime = -1; /* TimeOfDay */
-static int hf_mms_limitingEntry = -1; /* OCTET_STRING */
-static int hf_mms_currentEntries = -1; /* Unsigned32 */
-static int hf_mms_occurenceTime = -1; /* TimeOfDay */
-static int hf_mms_additionalDetail = -1; /* JOU_Additional_Detail */
-static int hf_mms_entryForm = -1; /* T_entryForm */
-static int hf_mms_data = -1; /* T_data */
-static int hf_mms_event = -1; /* T_event */
-static int hf_mms_listOfVariables_01 = -1; /* T_listOfVariables_01 */
-static int hf_mms_listOfVariables_item_01 = -1; /* T_listOfVariables_item */
-static int hf_mms_variableTag = -1; /* VisibleString */
-static int hf_mms_valueSpecification = -1; /* Data */
-static int hf_mms_annotation = -1; /* VisibleString */
-static int hf_mms_sourceFileServer = -1; /* ApplicationReference */
-static int hf_mms_sourceFile = -1; /* FileName */
-static int hf_mms_destinationFile = -1; /* FileName */
-static int hf_mms_initialPosition = -1; /* Unsigned32 */
-static int hf_mms_frsmID = -1; /* Integer32 */
-static int hf_mms_fileAttributes = -1; /* FileAttributes */
-static int hf_mms_fileData = -1; /* OCTET_STRING */
-static int hf_mms_currentFileName = -1; /* FileName */
-static int hf_mms_newFileName = -1; /* FileName */
-static int hf_mms_fileSpecification = -1; /* FileName */
-static int hf_mms_fileDirectory_Request_continueAfter = -1; /* FileName */
-static int hf_mms_listOfDirectoryEntry = -1; /* SEQUENCE_OF_DirectoryEntry */
-static int hf_mms_listOfDirectoryEntry_item = -1; /* DirectoryEntry */
-static int hf_mms_filename = -1; /* FileName */
-static int hf_mms_sizeOfFile = -1; /* Unsigned32 */
-static int hf_mms_lastModified = -1; /* GeneralizedTime */
+static int proto_mms;
+
+/* Conversation */
+static int hf_mms_response_in;
+static int hf_mms_response_to;
+static int hf_mms_response_time;
+
+/* IEC 61850-8-1 filters */
+static int hf_mms_iec61850_rptid;
+static int hf_mms_iec61850_reported_optflds;
+static int hf_mms_iec61850_seqnum;
+static int hf_mms_iec61850_timeofentry;
+static int hf_mms_iec61850_datset;
+static int hf_mms_iec61850_bufovfl;
+static int hf_mms_iec61850_confrev;
+static int hf_mms_iec61850_inclusion_bitstring;
+static int hf_mms_iec61850_ctlModel;
+
+static int hf_mms_iec61850_QualityC0;
+static int hf_mms_iec61850_Quality20;
+static int hf_mms_iec61850_Quality10;
+static int hf_mms_iec61850_Quality8;
+static int hf_mms_iec61850_Quality4;
+static int hf_mms_iec61850_Quality2;
+static int hf_mms_iec61850_Quality1;
+static int hf_mms_iec61850_Quality0080;
+static int hf_mms_iec61850_Quality0040;
+static int hf_mms_iec61850_Quality0020;
+static int hf_mms_iec61850_Quality0010;
+static int hf_mms_iec61850_Quality0008;
+static int hf_mms_iec61850_quality_bitstring;
+static int hf_mms_iec61850_timequality80;
+static int hf_mms_iec61850_timequality40;
+static int hf_mms_iec61850_timequality20;
+static int hf_mms_iec61850_timequality1F;
+static int hf_mms_iec61850_check_bitstring;
+static int hf_mms_iec61850_check_b1;
+static int hf_mms_iec61850_check_b0;
+static int hf_mms_iec61850_orcategory;
+static int hf_mms_iec61850_beh$stval;
+static int hf_mms_iec61850_mod$stval;
+static int hf_mms_iec61850_health$stval;
+static int hf_mms_iec61850_ctlval;
+static int hf_mms_iec61850_origin;
+static int hf_mms_iec61850_origin_orcat;
+static int hf_mms_iec61850_origin_orident;
+static int hf_mms_iec61850_ctlNum;
+static int hf_mms_iec61850_T;
+static int hf_mms_iec61850_test;
+
+static int hf_mms_confirmed_RequestPDU; /* Confirmed_RequestPDU */
+static int hf_mms_confirmed_ResponsePDU; /* Confirmed_ResponsePDU */
+static int hf_mms_confirmed_ErrorPDU; /* Confirmed_ErrorPDU */
+static int hf_mms_unconfirmed_PDU; /* Unconfirmed_PDU */
+static int hf_mms_rejectPDU; /* RejectPDU */
+static int hf_mms_cancel_RequestPDU; /* Cancel_RequestPDU */
+static int hf_mms_cancel_ResponsePDU; /* Cancel_ResponsePDU */
+static int hf_mms_cancel_ErrorPDU; /* Cancel_ErrorPDU */
+static int hf_mms_initiate_RequestPDU; /* Initiate_RequestPDU */
+static int hf_mms_initiate_ResponsePDU; /* Initiate_ResponsePDU */
+static int hf_mms_initiate_ErrorPDU; /* Initiate_ErrorPDU */
+static int hf_mms_conclude_RequestPDU; /* Conclude_RequestPDU */
+static int hf_mms_conclude_ResponsePDU; /* Conclude_ResponsePDU */
+static int hf_mms_conclude_ErrorPDU; /* Conclude_ErrorPDU */
+static int hf_mms_invokeID; /* Unsigned32 */
+static int hf_mms_listOfModifier; /* SEQUENCE_OF_Modifier */
+static int hf_mms_listOfModifier_item; /* Modifier */
+static int hf_mms_confirmedServiceRequest; /* ConfirmedServiceRequest */
+static int hf_mms_cs_request_detail; /* CS_Request_Detail */
+static int hf_mms_unconfirmedService; /* UnconfirmedService */
+static int hf_mms_confirmedServiceResponse; /* ConfirmedServiceResponse */
+static int hf_mms_modifierPosition; /* Unsigned32 */
+static int hf_mms_serviceError; /* ServiceError */
+static int hf_mms_informationReport; /* InformationReport */
+static int hf_mms_unsolicitedStatus; /* UnsolicitedStatus */
+static int hf_mms_eventNotification; /* EventNotification */
+static int hf_mms_attach_To_Event_Condition; /* AttachToEventCondition */
+static int hf_mms_attach_To_Semaphore; /* AttachToSemaphore */
+static int hf_mms_status; /* Status_Request */
+static int hf_mms_getNameList; /* GetNameList_Request */
+static int hf_mms_identify; /* Identify_Request */
+static int hf_mms_rename; /* Rename_Request */
+static int hf_mms_read; /* Read_Request */
+static int hf_mms_write; /* Write_Request */
+static int hf_mms_getVariableAccessAttributes; /* GetVariableAccessAttributes_Request */
+static int hf_mms_defineNamedVariable; /* DefineNamedVariable_Request */
+static int hf_mms_defineScatteredAccess; /* DefineScatteredAccess_Request */
+static int hf_mms_getScatteredAccessAttributes; /* GetScatteredAccessAttributes_Request */
+static int hf_mms_deleteVariableAccess; /* DeleteVariableAccess_Request */
+static int hf_mms_defineNamedVariableList; /* DefineNamedVariableList_Request */
+static int hf_mms_getNamedVariableListAttributes; /* GetNamedVariableListAttributes_Request */
+static int hf_mms_deleteNamedVariableList; /* DeleteNamedVariableList_Request */
+static int hf_mms_defineNamedType; /* DefineNamedType_Request */
+static int hf_mms_getNamedTypeAttributes; /* GetNamedTypeAttributes_Request */
+static int hf_mms_deleteNamedType; /* DeleteNamedType_Request */
+static int hf_mms_input; /* Input_Request */
+static int hf_mms_output; /* Output_Request */
+static int hf_mms_takeControl; /* TakeControl_Request */
+static int hf_mms_relinquishControl; /* RelinquishControl_Request */
+static int hf_mms_defineSemaphore; /* DefineSemaphore_Request */
+static int hf_mms_deleteSemaphore; /* DeleteSemaphore_Request */
+static int hf_mms_reportSemaphoreStatus; /* ReportSemaphoreStatus_Request */
+static int hf_mms_reportPoolSemaphoreStatus; /* ReportPoolSemaphoreStatus_Request */
+static int hf_mms_reportSemaphoreEntryStatus; /* ReportSemaphoreEntryStatus_Request */
+static int hf_mms_initiateDownloadSequence; /* InitiateDownloadSequence_Request */
+static int hf_mms_downloadSegment; /* DownloadSegment_Request */
+static int hf_mms_terminateDownloadSequence; /* TerminateDownloadSequence_Request */
+static int hf_mms_initiateUploadSequence; /* InitiateUploadSequence_Request */
+static int hf_mms_uploadSegment; /* UploadSegment_Request */
+static int hf_mms_terminateUploadSequence; /* TerminateUploadSequence_Request */
+static int hf_mms_requestDomainDownload; /* RequestDomainDownload_Request */
+static int hf_mms_requestDomainUpload; /* RequestDomainUpload_Request */
+static int hf_mms_loadDomainContent; /* LoadDomainContent_Request */
+static int hf_mms_storeDomainContent; /* StoreDomainContent_Request */
+static int hf_mms_deleteDomain; /* DeleteDomain_Request */
+static int hf_mms_getDomainAttributes; /* GetDomainAttributes_Request */
+static int hf_mms_createProgramInvocation; /* CreateProgramInvocation_Request */
+static int hf_mms_deleteProgramInvocation; /* DeleteProgramInvocation_Request */
+static int hf_mms_start; /* Start_Request */
+static int hf_mms_stop; /* Stop_Request */
+static int hf_mms_resume; /* Resume_Request */
+static int hf_mms_reset; /* Reset_Request */
+static int hf_mms_kill; /* Kill_Request */
+static int hf_mms_getProgramInvocationAttributes; /* GetProgramInvocationAttributes_Request */
+static int hf_mms_obtainFile; /* ObtainFile_Request */
+static int hf_mms_defineEventCondition; /* DefineEventCondition_Request */
+static int hf_mms_confirmedServiceRequest_deleteEventCondition; /* DeleteEventCondition_Request */
+static int hf_mms_getEventConditionAttributes; /* GetEventConditionAttributes_Request */
+static int hf_mms_reportEventConditionStatus; /* ReportEventConditionStatus_Request */
+static int hf_mms_alterEventConditionMonitoring; /* AlterEventConditionMonitoring_Request */
+static int hf_mms_triggerEvent; /* TriggerEvent_Request */
+static int hf_mms_defineEventAction; /* DefineEventAction_Request */
+static int hf_mms_confirmedServiceRequest_deleteEventAction; /* DeleteEventAction_Request */
+static int hf_mms_getEventActionAttributes; /* GetEventActionAttributes_Request */
+static int hf_mms_reportEventActionStatus; /* ReportEventActionStatus_Request */
+static int hf_mms_defineEventEnrollment; /* DefineEventEnrollment_Request */
+static int hf_mms_confirmedServiceRequest_deleteEventEnrollment; /* DeleteEventEnrollment_Request */
+static int hf_mms_alterEventEnrollment; /* AlterEventEnrollment_Request */
+static int hf_mms_reportEventEnrollmentStatus; /* ReportEventEnrollmentStatus_Request */
+static int hf_mms_getEventEnrollmentAttributes; /* GetEventEnrollmentAttributes_Request */
+static int hf_mms_acknowledgeEventNotification; /* AcknowledgeEventNotification_Request */
+static int hf_mms_getAlarmSummary; /* GetAlarmSummary_Request */
+static int hf_mms_getAlarmEnrollmentSummary; /* GetAlarmEnrollmentSummary_Request */
+static int hf_mms_readJournal; /* ReadJournal_Request */
+static int hf_mms_writeJournal; /* WriteJournal_Request */
+static int hf_mms_initializeJournal; /* InitializeJournal_Request */
+static int hf_mms_reportJournalStatus; /* ReportJournalStatus_Request */
+static int hf_mms_createJournal; /* CreateJournal_Request */
+static int hf_mms_deleteJournal; /* DeleteJournal_Request */
+static int hf_mms_getCapabilityList; /* GetCapabilityList_Request */
+static int hf_mms_fileOpen; /* FileOpen_Request */
+static int hf_mms_fileRead; /* FileRead_Request */
+static int hf_mms_fileClose; /* FileClose_Request */
+static int hf_mms_fileRename; /* FileRename_Request */
+static int hf_mms_fileDelete; /* FileDelete_Request */
+static int hf_mms_fileDirectory; /* FileDirectory_Request */
+static int hf_mms_foo; /* INTEGER */
+static int hf_mms_status_01; /* Status_Response */
+static int hf_mms_getNameList_01; /* GetNameList_Response */
+static int hf_mms_identify_01; /* Identify_Response */
+static int hf_mms_rename_01; /* Rename_Response */
+static int hf_mms_read_01; /* Read_Response */
+static int hf_mms_write_01; /* Write_Response */
+static int hf_mms_getVariableAccessAttributes_01; /* GetVariableAccessAttributes_Response */
+static int hf_mms_defineNamedVariable_01; /* DefineNamedVariable_Response */
+static int hf_mms_defineScatteredAccess_01; /* DefineScatteredAccess_Response */
+static int hf_mms_getScatteredAccessAttributes_01; /* GetScatteredAccessAttributes_Response */
+static int hf_mms_deleteVariableAccess_01; /* DeleteVariableAccess_Response */
+static int hf_mms_defineNamedVariableList_01; /* DefineNamedVariableList_Response */
+static int hf_mms_getNamedVariableListAttributes_01; /* GetNamedVariableListAttributes_Response */
+static int hf_mms_deleteNamedVariableList_01; /* DeleteNamedVariableList_Response */
+static int hf_mms_defineNamedType_01; /* DefineNamedType_Response */
+static int hf_mms_getNamedTypeAttributes_01; /* GetNamedTypeAttributes_Response */
+static int hf_mms_deleteNamedType_01; /* DeleteNamedType_Response */
+static int hf_mms_input_01; /* Input_Response */
+static int hf_mms_output_01; /* Output_Response */
+static int hf_mms_takeControl_01; /* TakeControl_Response */
+static int hf_mms_relinquishControl_01; /* RelinquishControl_Response */
+static int hf_mms_defineSemaphore_01; /* DefineSemaphore_Response */
+static int hf_mms_deleteSemaphore_01; /* DeleteSemaphore_Response */
+static int hf_mms_reportSemaphoreStatus_01; /* ReportSemaphoreStatus_Response */
+static int hf_mms_reportPoolSemaphoreStatus_01; /* ReportPoolSemaphoreStatus_Response */
+static int hf_mms_reportSemaphoreEntryStatus_01; /* ReportSemaphoreEntryStatus_Response */
+static int hf_mms_initiateDownloadSequence_01; /* InitiateDownloadSequence_Response */
+static int hf_mms_downloadSegment_01; /* DownloadSegment_Response */
+static int hf_mms_terminateDownloadSequence_01; /* TerminateDownloadSequence_Response */
+static int hf_mms_initiateUploadSequence_01; /* InitiateUploadSequence_Response */
+static int hf_mms_uploadSegment_01; /* UploadSegment_Response */
+static int hf_mms_terminateUploadSequence_01; /* TerminateUploadSequence_Response */
+static int hf_mms_requestDomainDownLoad; /* RequestDomainDownload_Response */
+static int hf_mms_requestDomainUpload_01; /* RequestDomainUpload_Response */
+static int hf_mms_loadDomainContent_01; /* LoadDomainContent_Response */
+static int hf_mms_storeDomainContent_01; /* StoreDomainContent_Response */
+static int hf_mms_deleteDomain_01; /* DeleteDomain_Response */
+static int hf_mms_getDomainAttributes_01; /* GetDomainAttributes_Response */
+static int hf_mms_createProgramInvocation_01; /* CreateProgramInvocation_Response */
+static int hf_mms_deleteProgramInvocation_01; /* DeleteProgramInvocation_Response */
+static int hf_mms_start_01; /* Start_Response */
+static int hf_mms_stop_01; /* Stop_Response */
+static int hf_mms_resume_01; /* Resume_Response */
+static int hf_mms_reset_01; /* Reset_Response */
+static int hf_mms_kill_01; /* Kill_Response */
+static int hf_mms_getProgramInvocationAttributes_01; /* GetProgramInvocationAttributes_Response */
+static int hf_mms_obtainFile_01; /* ObtainFile_Response */
+static int hf_mms_fileOpen_01; /* FileOpen_Response */
+static int hf_mms_defineEventCondition_01; /* DefineEventCondition_Response */
+static int hf_mms_confirmedServiceResponse_deleteEventCondition; /* DeleteEventCondition_Response */
+static int hf_mms_getEventConditionAttributes_01; /* GetEventConditionAttributes_Response */
+static int hf_mms_reportEventConditionStatus_01; /* ReportEventConditionStatus_Response */
+static int hf_mms_alterEventConditionMonitoring_01; /* AlterEventConditionMonitoring_Response */
+static int hf_mms_triggerEvent_01; /* TriggerEvent_Response */
+static int hf_mms_defineEventAction_01; /* DefineEventAction_Response */
+static int hf_mms_confirmedServiceRequest_deleteEventAction_01; /* DeleteEventAction_Response */
+static int hf_mms_getEventActionAttributes_01; /* GetEventActionAttributes_Response */
+static int hf_mms_reportActionStatus; /* ReportEventActionStatus_Response */
+static int hf_mms_defineEventEnrollment_01; /* DefineEventEnrollment_Response */
+static int hf_mms_confirmedServiceResponse_deleteEventEnrollment; /* DeleteEventEnrollment_Response */
+static int hf_mms_alterEventEnrollment_01; /* AlterEventEnrollment_Response */
+static int hf_mms_reportEventEnrollmentStatus_01; /* ReportEventEnrollmentStatus_Response */
+static int hf_mms_getEventEnrollmentAttributes_01; /* GetEventEnrollmentAttributes_Response */
+static int hf_mms_acknowledgeEventNotification_01; /* AcknowledgeEventNotification_Response */
+static int hf_mms_getAlarmSummary_01; /* GetAlarmSummary_Response */
+static int hf_mms_getAlarmEnrollmentSummary_01; /* GetAlarmEnrollmentSummary_Response */
+static int hf_mms_readJournal_01; /* ReadJournal_Response */
+static int hf_mms_writeJournal_01; /* WriteJournal_Response */
+static int hf_mms_initializeJournal_01; /* InitializeJournal_Response */
+static int hf_mms_reportJournalStatus_01; /* ReportJournalStatus_Response */
+static int hf_mms_createJournal_01; /* CreateJournal_Response */
+static int hf_mms_deleteJournal_01; /* DeleteJournal_Response */
+static int hf_mms_getCapabilityList_01; /* GetCapabilityList_Response */
+static int hf_mms_fileRead_01; /* FileRead_Response */
+static int hf_mms_fileClose_01; /* FileClose_Response */
+static int hf_mms_fileRename_01; /* FileRename_Response */
+static int hf_mms_fileDelete_01; /* FileDelete_Response */
+static int hf_mms_fileDirectory_01; /* FileDirectory_Response */
+static int hf_mms_FileName_item; /* GraphicString */
+static int hf_mms_vmd_specific; /* Identifier */
+static int hf_mms_domain_specific; /* T_domain_specific */
+static int hf_mms_domainId; /* Identifier */
+static int hf_mms_objectName_domain_specific_itemId; /* ObjectName_domain_specific_itemid */
+static int hf_mms_aa_specific; /* Identifier */
+static int hf_mms_ap_title; /* T_ap_title */
+static int hf_mms_ap_invocation_id; /* T_ap_invocation_id */
+static int hf_mms_ae_qualifier; /* T_ae_qualifier */
+static int hf_mms_ae_invocation_id; /* T_ae_invocation_id */
+static int hf_mms_localDetailCalling; /* Integer32 */
+static int hf_mms_proposedMaxServOutstandingCalling; /* Integer16 */
+static int hf_mms_proposedMaxServOutstandingCalled; /* Integer16 */
+static int hf_mms_proposedDataStructureNestingLevel; /* Integer8 */
+static int hf_mms_mmsInitRequestDetail; /* InitRequestDetail */
+static int hf_mms_proposedVersionNumber; /* Integer16 */
+static int hf_mms_proposedParameterCBB; /* ParameterSupportOptions */
+static int hf_mms_servicesSupportedCalling; /* ServiceSupportOptions */
+static int hf_mms_localDetailCalled; /* Integer32 */
+static int hf_mms_negociatedMaxServOutstandingCalling; /* Integer16 */
+static int hf_mms_negociatedMaxServOutstandingCalled; /* Integer16 */
+static int hf_mms_negociatedDataStructureNestingLevel; /* Integer8 */
+static int hf_mms_mmsInitResponseDetail; /* InitResponseDetail */
+static int hf_mms_negociatedVersionNumber; /* Integer16 */
+static int hf_mms_negociatedParameterCBB; /* ParameterSupportOptions */
+static int hf_mms_servicesSupportedCalled; /* ServiceSupportOptions */
+static int hf_mms_originalInvokeID; /* Unsigned32 */
+static int hf_mms_errorClass; /* T_errorClass */
+static int hf_mms_vmd_state; /* T_vmd_state */
+static int hf_mms_application_reference; /* T_application_reference */
+static int hf_mms_definition; /* T_definition */
+static int hf_mms_resource; /* T_resource */
+static int hf_mms_service; /* T_service */
+static int hf_mms_service_preempt; /* T_service_preempt */
+static int hf_mms_time_resolution; /* T_time_resolution */
+static int hf_mms_access; /* T_access */
+static int hf_mms_initiate; /* T_initiate */
+static int hf_mms_conclude; /* T_conclude */
+static int hf_mms_cancel; /* T_cancel */
+static int hf_mms_file; /* T_file */
+static int hf_mms_others; /* INTEGER */
+static int hf_mms_additionalCode; /* INTEGER */
+static int hf_mms_additionalDescription; /* VisibleString */
+static int hf_mms_serviceSpecificInformation; /* T_serviceSpecificInformation */
+static int hf_mms_obtainFile_02; /* ObtainFile_Error */
+static int hf_mms_start_02; /* Start_Error */
+static int hf_mms_stop_02; /* Stop_Error */
+static int hf_mms_resume_02; /* Resume_Error */
+static int hf_mms_reset_02; /* Reset_Error */
+static int hf_mms_deleteVariableAccess_02; /* DeleteVariableAccess_Error */
+static int hf_mms_deleteNamedVariableList_02; /* DeleteNamedVariableList_Error */
+static int hf_mms_deleteNamedType_02; /* DeleteNamedType_Error */
+static int hf_mms_defineEventEnrollment_Error; /* DefineEventEnrollment_Error */
+static int hf_mms_fileRename_02; /* FileRename_Error */
+static int hf_mms_additionalService; /* AdditionalService_Error */
+static int hf_mms_changeAccessControl; /* ChangeAccessControl_Error */
+static int hf_mms_defineEcl; /* DefineEventConditionList_Error */
+static int hf_mms_addECLReference; /* AddEventConditionListReference_Error */
+static int hf_mms_removeECLReference; /* RemoveEventConditionListReference_Error */
+static int hf_mms_initiateUC; /* InitiateUnitControl_Error */
+static int hf_mms_startUC; /* StartUnitControl_Error */
+static int hf_mms_stopUC; /* StopUnitControl_Error */
+static int hf_mms_deleteUC; /* DeleteUnitControl_Error */
+static int hf_mms_loadUCFromFile; /* LoadUnitControlFromFile_Error */
+static int hf_mms_eventCondition; /* ObjectName */
+static int hf_mms_eventConditionList; /* ObjectName */
+static int hf_mms_domain; /* Identifier */
+static int hf_mms_programInvocation; /* Identifier */
+static int hf_mms_programInvocationName; /* Identifier */
+static int hf_mms_programInvocationState; /* ProgramInvocationState */
+static int hf_mms_none; /* NULL */
+static int hf_mms_rejectReason; /* T_rejectReason */
+static int hf_mms_confirmed_requestPDU; /* T_confirmed_requestPDU */
+static int hf_mms_confirmed_responsePDU; /* T_confirmed_responsePDU */
+static int hf_mms_confirmed_errorPDU; /* T_confirmed_errorPDU */
+static int hf_mms_unconfirmedPDU; /* T_unconfirmedPDU */
+static int hf_mms_pdu_error; /* T_pdu_error */
+static int hf_mms_cancel_requestPDU; /* T_cancel_requestPDU */
+static int hf_mms_cancel_responsePDU; /* T_cancel_responsePDU */
+static int hf_mms_cancel_errorPDU; /* T_cancel_errorPDU */
+static int hf_mms_conclude_requestPDU; /* T_conclude_requestPDU */
+static int hf_mms_conclude_responsePDU; /* T_conclude_responsePDU */
+static int hf_mms_conclude_errorPDU; /* T_conclude_errorPDU */
+static int hf_mms_vmdLogicalStatus; /* T_vmdLogicalStatus */
+static int hf_mms_vmdPhysicalStatus; /* T_vmdPhysicalStatus */
+static int hf_mms_localDetail; /* BIT_STRING_SIZE_0_128 */
+static int hf_mms_vmdSpecific; /* NULL */
+static int hf_mms_domainSpecific; /* Identifier */
+static int hf_mms_aaSpecific; /* NULL */
+static int hf_mms_extendedObjectClass; /* T_extendedObjectClass */
+static int hf_mms_objectClass; /* ObjectClass */
+static int hf_mms_objectScope; /* ObjectScope */
+static int hf_mms_getNameList_Request_continueAfter; /* Identifier */
+static int hf_mms_listOfIdentifier; /* SEQUENCE_OF_Identifier */
+static int hf_mms_listOfIdentifier_item; /* Identifier */
+static int hf_mms_moreFollows; /* BOOLEAN */
+static int hf_mms_vendorName; /* VisibleString */
+static int hf_mms_modelName; /* VisibleString */
+static int hf_mms_revision; /* VisibleString */
+static int hf_mms_listOfAbstractSyntaxes; /* T_listOfAbstractSyntaxes */
+static int hf_mms_listOfAbstractSyntaxes_item; /* OBJECT_IDENTIFIER */
+static int hf_mms_extendedObjectClass_01; /* T_extendedObjectClass_01 */
+static int hf_mms_objectClass_01; /* T_objectClass */
+static int hf_mms_currentName; /* ObjectName */
+static int hf_mms_newIdentifier; /* Identifier */
+static int hf_mms_getCapabilityList_Request_continueAfter; /* VisibleString */
+static int hf_mms_listOfCapabilities; /* T_listOfCapabilities */
+static int hf_mms_listOfCapabilities_item; /* VisibleString */
+static int hf_mms_domainName; /* Identifier */
+static int hf_mms_listOfCapabilities_01; /* T_listOfCapabilities_01 */
+static int hf_mms_sharable; /* BOOLEAN */
+static int hf_mms_loadData; /* T_loadData */
+static int hf_mms_non_coded; /* OCTET_STRING */
+static int hf_mms_coded; /* EXTERNALt */
+static int hf_mms_discard; /* ServiceError */
+static int hf_mms_ulsmID; /* Integer32 */
+static int hf_mms_listOfCapabilities_02; /* T_listOfCapabilities_02 */
+static int hf_mms_loadData_01; /* T_loadData_01 */
+static int hf_mms_listOfCapabilities_03; /* T_listOfCapabilities_03 */
+static int hf_mms_fileName; /* FileName */
+static int hf_mms_listOfCapabilities_04; /* T_listOfCapabilities_04 */
+static int hf_mms_thirdParty; /* ApplicationReference */
+static int hf_mms_filenName; /* FileName */
+static int hf_mms_listOfCapabilities_05; /* T_listOfCapabilities_05 */
+static int hf_mms_getDomainAttributes_Response_state; /* DomainState */
+static int hf_mms_mmsDeletable; /* BOOLEAN */
+static int hf_mms_listOfProgramInvocations; /* SEQUENCE_OF_Identifier */
+static int hf_mms_listOfProgramInvocations_item; /* Identifier */
+static int hf_mms_uploadInProgress; /* Integer8 */
+static int hf_mms_listOfDomainName; /* SEQUENCE_OF_Identifier */
+static int hf_mms_listOfDomainName_item; /* Identifier */
+static int hf_mms_reusable; /* BOOLEAN */
+static int hf_mms_monitorType; /* BOOLEAN */
+static int hf_mms_executionArgument; /* T_executionArgument */
+static int hf_mms_simpleString; /* VisibleString */
+static int hf_mms_encodedString; /* EXTERNALt */
+static int hf_mms_executionArgument_01; /* T_executionArgument_01 */
+static int hf_mms_getProgramInvocationAttributes_Response_state; /* ProgramInvocationState */
+static int hf_mms_listOfDomainNames; /* SEQUENCE_OF_Identifier */
+static int hf_mms_listOfDomainNames_item; /* Identifier */
+static int hf_mms_monitor; /* BOOLEAN */
+static int hf_mms_startArgument; /* VisibleString */
+static int hf_mms_executionArgument_02; /* T_executionArgument_02 */
+static int hf_mms_typeName; /* ObjectName */
+static int hf_mms_array; /* T_array */
+static int hf_mms_packed; /* BOOLEAN */
+static int hf_mms_numberOfElements; /* Unsigned32 */
+static int hf_mms_elementType; /* TypeSpecification */
+static int hf_mms_structure; /* T_structure */
+static int hf_mms_components; /* T_components */
+static int hf_mms_components_item; /* T_components_item */
+static int hf_mms_componentName; /* Identifier */
+static int hf_mms_componentType; /* TypeSpecification */
+static int hf_mms_boolean; /* NULL */
+static int hf_mms_typeSpecification_bit_string; /* Integer32 */
+static int hf_mms_integer; /* Unsigned8 */
+static int hf_mms_unsigned; /* Unsigned8 */
+static int hf_mms_typeSpecification_octet_string; /* Integer32 */
+static int hf_mms_typeSpecification_visible_string; /* Integer32 */
+static int hf_mms_generalized_time; /* NULL */
+static int hf_mms_typeSpecification_binary_time; /* BOOLEAN */
+static int hf_mms_bcd; /* Unsigned8 */
+static int hf_mms_objId; /* NULL */
+static int hf_mms_AlternateAccess_item; /* AlternateAccess_item */
+static int hf_mms_unnamed; /* AlternateAccessSelection */
+static int hf_mms_named; /* T_named */
+static int hf_mms_accesst; /* AlternateAccessSelection */
+static int hf_mms_selectAlternateAccess; /* T_selectAlternateAccess */
+static int hf_mms_accessSelection; /* T_accessSelection */
+static int hf_mms_component; /* Identifier */
+static int hf_mms_index; /* Unsigned32 */
+static int hf_mms_indexRange; /* T_indexRange */
+static int hf_mms_lowIndex; /* Unsigned32 */
+static int hf_mms_allElements; /* NULL */
+static int hf_mms_alternateAccess; /* AlternateAccess */
+static int hf_mms_selectAccess; /* T_selectAccess */
+static int hf_mms_indexRange_01; /* T_indexRange_01 */
+static int hf_mms_nmberOfElements; /* Unsigned32 */
+static int hf_mms_specificationWithResult; /* BOOLEAN */
+static int hf_mms_variableAccessSpecificatn; /* VariableAccessSpecification */
+static int hf_mms_listOfAccessResult; /* SEQUENCE_OF_AccessResult */
+static int hf_mms_listOfAccessResult_item; /* AccessResult */
+static int hf_mms_listOfData; /* T_listOfData */
+static int hf_mms_listOfData_item; /* Data */
+static int hf_mms_Write_Response_item; /* Write_Response_item */
+static int hf_mms_failure; /* DataAccessError */
+static int hf_mms_success; /* NULL */
+static int hf_mms_variableAccessSpecification; /* VariableAccessSpecification */
+static int hf_mms_listOfAccessResult_01; /* T_listOfAccessResult */
+static int hf_mms_name; /* ObjectName */
+static int hf_mms_address; /* Address */
+static int hf_mms_typeSpecification; /* TypeSpecification */
+static int hf_mms_variableName; /* ObjectName */
+static int hf_mms_scatteredAccessName; /* ObjectName */
+static int hf_mms_scatteredAccessDescription; /* ScatteredAccessDescription */
+static int hf_mms_scopeOfDelete; /* T_scopeOfDelete */
+static int hf_mms_listOfName; /* SEQUENCE_OF_ObjectName */
+static int hf_mms_listOfName_item; /* ObjectName */
+static int hf_mms_numberMatched; /* Unsigned32 */
+static int hf_mms_numberDeleted; /* Unsigned32 */
+static int hf_mms_variableListName; /* ObjectName */
+static int hf_mms_listOfVariable; /* T_listOfVariable */
+static int hf_mms_listOfVariable_item; /* T_listOfVariable_item */
+static int hf_mms_variableSpecification; /* VariableSpecification */
+static int hf_mms_listOfVariable_01; /* T_listOfVariable_01 */
+static int hf_mms_listOfVariable_item_01; /* T_listOfVariable_item_01 */
+static int hf_mms_scopeOfDelete_01; /* T_scopeOfDelete_01 */
+static int hf_mms_listOfVariableListName; /* SEQUENCE_OF_ObjectName */
+static int hf_mms_listOfVariableListName_item; /* ObjectName */
+static int hf_mms_scopeOfDelete_02; /* T_scopeOfDelete_02 */
+static int hf_mms_listOfTypeName; /* SEQUENCE_OF_ObjectName */
+static int hf_mms_listOfTypeName_item; /* ObjectName */
+static int hf_mms_success_01; /* Data */
+static int hf_mms_array_01; /* SEQUENCE_OF_Data */
+static int hf_mms_array_item; /* Data */
+static int hf_mms_structure_01; /* T_structure_01 */
+static int hf_mms_structure_item; /* Data */
+static int hf_mms_boolean_01; /* T_boolean */
+static int hf_mms_data_bit_string; /* T_data_bit_string */
+static int hf_mms_integer_01; /* T_integer */
+static int hf_mms_unsigned_01; /* T_unsigned */
+static int hf_mms_floating_point; /* FloatingPoint */
+static int hf_mms_data_octet_string; /* T_data_octet_string */
+static int hf_mms_data_visible_string; /* T_data_visible_string */
+static int hf_mms_data_binary_time; /* T_data_binary_time */
+static int hf_mms_bcd_01; /* INTEGER */
+static int hf_mms_booleanArray; /* BIT_STRING */
+static int hf_mms_objId_01; /* OBJECT_IDENTIFIER */
+static int hf_mms_mMSString; /* MMSString */
+static int hf_mms_utc_time; /* UtcTime */
+static int hf_mms_listOfVariable_02; /* T_listOfVariable_02 */
+static int hf_mms_listOfVariable_item_02; /* T_listOfVariable_item_02 */
+static int hf_mms_ScatteredAccessDescription_item; /* ScatteredAccessDescription_item */
+static int hf_mms_variableDescription; /* T_variableDescription */
+static int hf_mms_invalidated; /* NULL */
+static int hf_mms_numericAddress; /* Unsigned32 */
+static int hf_mms_symbolicAddress; /* VisibleString */
+static int hf_mms_unconstrainedAddress; /* OCTET_STRING */
+static int hf_mms_semaphoreName; /* ObjectName */
+static int hf_mms_namedToken; /* Identifier */
+static int hf_mms_priority; /* Priority */
+static int hf_mms_acceptableDelay; /* Unsigned32 */
+static int hf_mms_controlTimeOut; /* Unsigned32 */
+static int hf_mms_abortOnTimeOut; /* BOOLEAN */
+static int hf_mms_relinquishIfConnectionLost; /* BOOLEAN */
+static int hf_mms_applicationToPreempt; /* ApplicationReference */
+static int hf_mms_noResult; /* NULL */
+static int hf_mms_numbersOfTokens; /* Unsigned16 */
+static int hf_mms_class; /* T_class */
+static int hf_mms_numberOfTokens; /* Unsigned16 */
+static int hf_mms_numberOfOwnedTokens; /* Unsigned16 */
+static int hf_mms_numberOfHungTokens; /* Unsigned16 */
+static int hf_mms_nameToStartAfter; /* Identifier */
+static int hf_mms_listOfNamedTokens; /* T_listOfNamedTokens */
+static int hf_mms_listOfNamedTokens_item; /* T_listOfNamedTokens_item */
+static int hf_mms_freeNamedToken; /* Identifier */
+static int hf_mms_ownedNamedToken; /* Identifier */
+static int hf_mms_hungNamedToken; /* Identifier */
+static int hf_mms_reportSemaphoreEntryStatus_Request_state; /* T_reportSemaphoreEntryStatus_Request_state */
+static int hf_mms_entryIdToStartAfter; /* OCTET_STRING */
+static int hf_mms_listOfSemaphoreEntry; /* SEQUENCE_OF_SemaphoreEntry */
+static int hf_mms_listOfSemaphoreEntry_item; /* SemaphoreEntry */
+static int hf_mms_entryId; /* OCTET_STRING */
+static int hf_mms_entryClass; /* T_entryClass */
+static int hf_mms_applicationReference; /* ApplicationReference */
+static int hf_mms_remainingTimeOut; /* Unsigned32 */
+static int hf_mms_operatorStationName; /* Identifier */
+static int hf_mms_echo; /* BOOLEAN */
+static int hf_mms_listOfPromptData; /* T_listOfPromptData */
+static int hf_mms_listOfPromptData_item; /* VisibleString */
+static int hf_mms_inputTimeOut; /* Unsigned32 */
+static int hf_mms_listOfOutputData; /* T_listOfOutputData */
+static int hf_mms_listOfOutputData_item; /* VisibleString */
+static int hf_mms_eventConditionName; /* ObjectName */
+static int hf_mms_class_01; /* EC_Class */
+static int hf_mms_prio_rity; /* Priority */
+static int hf_mms_severity; /* Unsigned8 */
+static int hf_mms_alarmSummaryReports; /* BOOLEAN */
+static int hf_mms_monitoredVariable; /* VariableSpecification */
+static int hf_mms_evaluationInterval; /* Unsigned32 */
+static int hf_mms_specific; /* SEQUENCE_OF_ObjectName */
+static int hf_mms_specific_item; /* ObjectName */
+static int hf_mms_aa_specific_01; /* NULL */
+static int hf_mms_vmd; /* NULL */
+static int hf_mms_monitoredVariable_01; /* T_monitoredVariable */
+static int hf_mms_variableReference; /* VariableSpecification */
+static int hf_mms_undefined; /* NULL */
+static int hf_mms_currentState; /* EC_State */
+static int hf_mms_numberOfEventEnrollments; /* Unsigned32 */
+static int hf_mms_enabled; /* BOOLEAN */
+static int hf_mms_timeOfLastTransitionToActive; /* EventTime */
+static int hf_mms_timeOfLastTransitionToIdle; /* EventTime */
+static int hf_mms_eventActionName; /* ObjectName */
+static int hf_mms_eventEnrollmentName; /* ObjectName */
+static int hf_mms_eventConditionTransition; /* Transitions */
+static int hf_mms_alarmAcknowledgementRule; /* AlarmAckRule */
+static int hf_mms_clientApplication; /* ApplicationReference */
+static int hf_mms_ec; /* ObjectName */
+static int hf_mms_ea; /* ObjectName */
+static int hf_mms_scopeOfRequest; /* T_scopeOfRequest */
+static int hf_mms_eventEnrollmentNames; /* SEQUENCE_OF_ObjectName */
+static int hf_mms_eventEnrollmentNames_item; /* ObjectName */
+static int hf_mms_getEventEnrollmentAttributes_Request_continueAfter; /* ObjectName */
+static int hf_mms_eventConditionName_01; /* T_eventConditionName */
+static int hf_mms_eventActionName_01; /* T_eventActionName */
+static int hf_mms_eventAction; /* ObjectName */
+static int hf_mms_enrollmentClass; /* EE_Class */
+static int hf_mms_duration; /* EE_Duration */
+static int hf_mms_remainingAcceptableDelay; /* Unsigned32 */
+static int hf_mms_listOfEventEnrollment; /* SEQUENCE_OF_EventEnrollment */
+static int hf_mms_listOfEventEnrollment_item; /* EventEnrollment */
+static int hf_mms_eventConditionTransitions; /* Transitions */
+static int hf_mms_notificationLost; /* BOOLEAN */
+static int hf_mms_alarmAcknowledgmentRule; /* AlarmAckRule */
+static int hf_mms_currentState_01; /* EE_State */
+static int hf_mms_currentState_02; /* T_currentState */
+static int hf_mms_alterEventEnrollment_Response_currentState_state; /* EE_State */
+static int hf_mms_transitionTime; /* EventTime */
+static int hf_mms_acknowledgedState; /* EC_State */
+static int hf_mms_timeOfAcknowledgedTransition; /* EventTime */
+static int hf_mms_enrollmentsOnly; /* BOOLEAN */
+static int hf_mms_activeAlarmsOnly; /* BOOLEAN */
+static int hf_mms_acknowledgmentFilter; /* T_acknowledgmentFilter */
+static int hf_mms_severityFilter; /* T_severityFilter */
+static int hf_mms_mostSevere; /* Unsigned8 */
+static int hf_mms_leastSevere; /* Unsigned8 */
+static int hf_mms_continueAfter; /* ObjectName */
+static int hf_mms_listOfAlarmSummary; /* SEQUENCE_OF_AlarmSummary */
+static int hf_mms_listOfAlarmSummary_item; /* AlarmSummary */
+static int hf_mms_unacknowledgedState; /* T_unacknowledgedState */
+static int hf_mms_acknowledgmentFilter_01; /* T_acknowledgmentFilter_01 */
+static int hf_mms_severityFilter_01; /* T_severityFilter_01 */
+static int hf_mms_getAlarmEnrollmentSummary_Request_continueAfter; /* ObjectName */
+static int hf_mms_listOfAlarmEnrollmentSummary; /* SEQUENCE_OF_AlarmEnrollmentSummary */
+static int hf_mms_listOfAlarmEnrollmentSummary_item; /* AlarmEnrollmentSummary */
+static int hf_mms_enrollementState; /* EE_State */
+static int hf_mms_timeActiveAcknowledged; /* EventTime */
+static int hf_mms_timeIdleAcknowledged; /* EventTime */
+static int hf_mms_eventConditionName_02; /* T_eventConditionName_01 */
+static int hf_mms_actionResult; /* T_actionResult */
+static int hf_mms_eventActioName; /* ObjectName */
+static int hf_mms_eventActionResult; /* T_eventActionResult */
+static int hf_mms_success_02; /* ConfirmedServiceResponse */
+static int hf_mms_failure_01; /* ServiceError */
+static int hf_mms_causingTransitions; /* Transitions */
+static int hf_mms_timeOfDayT; /* TimeOfDay */
+static int hf_mms_timeSequenceIdentifier; /* Unsigned32 */
+static int hf_mms_journalName; /* ObjectName */
+static int hf_mms_rangeStartSpecification; /* T_rangeStartSpecification */
+static int hf_mms_startingTime; /* TimeOfDay */
+static int hf_mms_startingEntry; /* OCTET_STRING */
+static int hf_mms_rangeStopSpecification; /* T_rangeStopSpecification */
+static int hf_mms_endingTime; /* TimeOfDay */
+static int hf_mms_numberOfEntries; /* Integer32 */
+static int hf_mms_listOfVariables; /* T_listOfVariables */
+static int hf_mms_listOfVariables_item; /* VisibleString */
+static int hf_mms_entryToStartAfter; /* T_entryToStartAfter */
+static int hf_mms_timeSpecification; /* TimeOfDay */
+static int hf_mms_entrySpecification; /* OCTET_STRING */
+static int hf_mms_listOfJournalEntry; /* SEQUENCE_OF_JournalEntry */
+static int hf_mms_listOfJournalEntry_item; /* JournalEntry */
+static int hf_mms_entryIdentifier; /* OCTET_STRING */
+static int hf_mms_originatingApplication; /* ApplicationReference */
+static int hf_mms_entryContent; /* EntryContent */
+static int hf_mms_listOfJournalEntry_01; /* SEQUENCE_OF_EntryContent */
+static int hf_mms_listOfJournalEntry_item_01; /* EntryContent */
+static int hf_mms_limitSpecification; /* T_limitSpecification */
+static int hf_mms_limitingTime; /* TimeOfDay */
+static int hf_mms_limitingEntry; /* OCTET_STRING */
+static int hf_mms_currentEntries; /* Unsigned32 */
+static int hf_mms_occurenceTime; /* TimeOfDay */
+static int hf_mms_additionalDetail; /* JOU_Additional_Detail */
+static int hf_mms_entryForm; /* T_entryForm */
+static int hf_mms_data; /* T_data */
+static int hf_mms_event; /* T_event */
+static int hf_mms_listOfVariables_01; /* T_listOfVariables_01 */
+static int hf_mms_listOfVariables_item_01; /* T_listOfVariables_item */
+static int hf_mms_variableTag; /* VisibleString */
+static int hf_mms_valueSpecification; /* Data */
+static int hf_mms_annotation; /* VisibleString */
+static int hf_mms_sourceFileServer; /* ApplicationReference */
+static int hf_mms_sourceFile; /* FileName */
+static int hf_mms_destinationFile; /* FileName */
+static int hf_mms_initialPosition; /* Unsigned32 */
+static int hf_mms_frsmID; /* Integer32 */
+static int hf_mms_fileAttributes; /* FileAttributes */
+static int hf_mms_fileData; /* OCTET_STRING */
+static int hf_mms_currentFileName; /* FileName */
+static int hf_mms_newFileName; /* FileName */
+static int hf_mms_fileSpecification; /* FileName */
+static int hf_mms_fileDirectory_Request_continueAfter; /* FileName */
+static int hf_mms_listOfDirectoryEntry; /* SEQUENCE_OF_DirectoryEntry */
+static int hf_mms_listOfDirectoryEntry_item; /* DirectoryEntry */
+static int hf_mms_filename; /* FileName */
+static int hf_mms_sizeOfFile; /* Unsigned32 */
+static int hf_mms_lastModified; /* GeneralizedTime */
/* named bits */
-static int hf_mms_ParameterSupportOptions_str1 = -1;
-static int hf_mms_ParameterSupportOptions_str2 = -1;
-static int hf_mms_ParameterSupportOptions_vnam = -1;
-static int hf_mms_ParameterSupportOptions_valt = -1;
-static int hf_mms_ParameterSupportOptions_vadr = -1;
-static int hf_mms_ParameterSupportOptions_vsca = -1;
-static int hf_mms_ParameterSupportOptions_tpy = -1;
-static int hf_mms_ParameterSupportOptions_vlis = -1;
-static int hf_mms_ParameterSupportOptions_real = -1;
-static int hf_mms_ParameterSupportOptions_spare_bit9 = -1;
-static int hf_mms_ParameterSupportOptions_cei = -1;
-static int hf_mms_ServiceSupportOptions_status = -1;
-static int hf_mms_ServiceSupportOptions_getNameList = -1;
-static int hf_mms_ServiceSupportOptions_identify = -1;
-static int hf_mms_ServiceSupportOptions_rename = -1;
-static int hf_mms_ServiceSupportOptions_read = -1;
-static int hf_mms_ServiceSupportOptions_write = -1;
-static int hf_mms_ServiceSupportOptions_getVariableAccessAttributes = -1;
-static int hf_mms_ServiceSupportOptions_defineNamedVariable = -1;
-static int hf_mms_ServiceSupportOptions_defineScatteredAccess = -1;
-static int hf_mms_ServiceSupportOptions_getScatteredAccessAttributes = -1;
-static int hf_mms_ServiceSupportOptions_deleteVariableAccess = -1;
-static int hf_mms_ServiceSupportOptions_defineNamedVariableList = -1;
-static int hf_mms_ServiceSupportOptions_getNamedVariableListAttributes = -1;
-static int hf_mms_ServiceSupportOptions_deleteNamedVariableList = -1;
-static int hf_mms_ServiceSupportOptions_defineNamedType = -1;
-static int hf_mms_ServiceSupportOptions_getNamedTypeAttributes = -1;
-static int hf_mms_ServiceSupportOptions_deleteNamedType = -1;
-static int hf_mms_ServiceSupportOptions_input = -1;
-static int hf_mms_ServiceSupportOptions_output = -1;
-static int hf_mms_ServiceSupportOptions_takeControl = -1;
-static int hf_mms_ServiceSupportOptions_relinquishControl = -1;
-static int hf_mms_ServiceSupportOptions_defineSemaphore = -1;
-static int hf_mms_ServiceSupportOptions_deleteSemaphore = -1;
-static int hf_mms_ServiceSupportOptions_reportSemaphoreStatus = -1;
-static int hf_mms_ServiceSupportOptions_reportPoolSemaphoreStatus = -1;
-static int hf_mms_ServiceSupportOptions_reportSemaphoreEntryStatus = -1;
-static int hf_mms_ServiceSupportOptions_initiateDownloadSequence = -1;
-static int hf_mms_ServiceSupportOptions_downloadSegment = -1;
-static int hf_mms_ServiceSupportOptions_terminateDownloadSequence = -1;
-static int hf_mms_ServiceSupportOptions_initiateUploadSequence = -1;
-static int hf_mms_ServiceSupportOptions_uploadSegment = -1;
-static int hf_mms_ServiceSupportOptions_terminateUploadSequence = -1;
-static int hf_mms_ServiceSupportOptions_requestDomainDownload = -1;
-static int hf_mms_ServiceSupportOptions_requestDomainUpload = -1;
-static int hf_mms_ServiceSupportOptions_loadDomainContent = -1;
-static int hf_mms_ServiceSupportOptions_storeDomainContent = -1;
-static int hf_mms_ServiceSupportOptions_deleteDomain = -1;
-static int hf_mms_ServiceSupportOptions_getDomainAttributes = -1;
-static int hf_mms_ServiceSupportOptions_createProgramInvocation = -1;
-static int hf_mms_ServiceSupportOptions_deleteProgramInvocation = -1;
-static int hf_mms_ServiceSupportOptions_start = -1;
-static int hf_mms_ServiceSupportOptions_stop = -1;
-static int hf_mms_ServiceSupportOptions_resume = -1;
-static int hf_mms_ServiceSupportOptions_reset = -1;
-static int hf_mms_ServiceSupportOptions_kill = -1;
-static int hf_mms_ServiceSupportOptions_getProgramInvocationAttributes = -1;
-static int hf_mms_ServiceSupportOptions_obtainFile = -1;
-static int hf_mms_ServiceSupportOptions_defineEventCondition = -1;
-static int hf_mms_ServiceSupportOptions_deleteEventCondition = -1;
-static int hf_mms_ServiceSupportOptions_getEventConditionAttributes = -1;
-static int hf_mms_ServiceSupportOptions_reportEventConditionStatus = -1;
-static int hf_mms_ServiceSupportOptions_alterEventConditionMonitoring = -1;
-static int hf_mms_ServiceSupportOptions_triggerEvent = -1;
-static int hf_mms_ServiceSupportOptions_defineEventAction = -1;
-static int hf_mms_ServiceSupportOptions_deleteEventAction = -1;
-static int hf_mms_ServiceSupportOptions_getEventActionAttributes = -1;
-static int hf_mms_ServiceSupportOptions_reportActionStatus = -1;
-static int hf_mms_ServiceSupportOptions_defineEventEnrollment = -1;
-static int hf_mms_ServiceSupportOptions_deleteEventEnrollment = -1;
-static int hf_mms_ServiceSupportOptions_alterEventEnrollment = -1;
-static int hf_mms_ServiceSupportOptions_reportEventEnrollmentStatus = -1;
-static int hf_mms_ServiceSupportOptions_getEventEnrollmentAttributes = -1;
-static int hf_mms_ServiceSupportOptions_acknowledgeEventNotification = -1;
-static int hf_mms_ServiceSupportOptions_getAlarmSummary = -1;
-static int hf_mms_ServiceSupportOptions_getAlarmEnrollmentSummary = -1;
-static int hf_mms_ServiceSupportOptions_readJournal = -1;
-static int hf_mms_ServiceSupportOptions_writeJournal = -1;
-static int hf_mms_ServiceSupportOptions_initializeJournal = -1;
-static int hf_mms_ServiceSupportOptions_reportJournalStatus = -1;
-static int hf_mms_ServiceSupportOptions_createJournal = -1;
-static int hf_mms_ServiceSupportOptions_deleteJournal = -1;
-static int hf_mms_ServiceSupportOptions_getCapabilityList = -1;
-static int hf_mms_ServiceSupportOptions_fileOpen = -1;
-static int hf_mms_ServiceSupportOptions_fileRead = -1;
-static int hf_mms_ServiceSupportOptions_fileClose = -1;
-static int hf_mms_ServiceSupportOptions_fileRename = -1;
-static int hf_mms_ServiceSupportOptions_fileDelete = -1;
-static int hf_mms_ServiceSupportOptions_fileDirectory = -1;
-static int hf_mms_ServiceSupportOptions_unsolicitedStatus = -1;
-static int hf_mms_ServiceSupportOptions_informationReport = -1;
-static int hf_mms_ServiceSupportOptions_eventNotification = -1;
-static int hf_mms_ServiceSupportOptions_attachToEventCondition = -1;
-static int hf_mms_ServiceSupportOptions_attachToSemaphore = -1;
-static int hf_mms_ServiceSupportOptions_conclude = -1;
-static int hf_mms_ServiceSupportOptions_cancel = -1;
-static int hf_mms_Transitions_idle_to_disabled = -1;
-static int hf_mms_Transitions_active_to_disabled = -1;
-static int hf_mms_Transitions_disabled_to_idle = -1;
-static int hf_mms_Transitions_active_to_idle = -1;
-static int hf_mms_Transitions_disabled_to_active = -1;
-static int hf_mms_Transitions_idle_to_active = -1;
-static int hf_mms_Transitions_any_to_deleted = -1;
+static int hf_mms_ReportedOptFlds_reserved;
+static int hf_mms_ReportedOptFlds_sequence_number;
+static int hf_mms_ReportedOptFlds_report_time_stamp;
+static int hf_mms_ReportedOptFlds_reason_for_inclusion;
+static int hf_mms_ReportedOptFlds_data_set_name;
+static int hf_mms_ReportedOptFlds_data_reference;
+static int hf_mms_ReportedOptFlds_buffer_overflow;
+static int hf_mms_ReportedOptFlds_entryID;
+static int hf_mms_ReportedOptFlds_conf_revision;
+static int hf_mms_ReportedOptFlds_segmentation;
+static int hf_mms_ParameterSupportOptions_str1;
+static int hf_mms_ParameterSupportOptions_str2;
+static int hf_mms_ParameterSupportOptions_vnam;
+static int hf_mms_ParameterSupportOptions_valt;
+static int hf_mms_ParameterSupportOptions_vadr;
+static int hf_mms_ParameterSupportOptions_vsca;
+static int hf_mms_ParameterSupportOptions_tpy;
+static int hf_mms_ParameterSupportOptions_vlis;
+static int hf_mms_ParameterSupportOptions_real;
+static int hf_mms_ParameterSupportOptions_spare_bit9;
+static int hf_mms_ParameterSupportOptions_cei;
+static int hf_mms_ServiceSupportOptions_status;
+static int hf_mms_ServiceSupportOptions_getNameList;
+static int hf_mms_ServiceSupportOptions_identify;
+static int hf_mms_ServiceSupportOptions_rename;
+static int hf_mms_ServiceSupportOptions_read;
+static int hf_mms_ServiceSupportOptions_write;
+static int hf_mms_ServiceSupportOptions_getVariableAccessAttributes;
+static int hf_mms_ServiceSupportOptions_defineNamedVariable;
+static int hf_mms_ServiceSupportOptions_defineScatteredAccess;
+static int hf_mms_ServiceSupportOptions_getScatteredAccessAttributes;
+static int hf_mms_ServiceSupportOptions_deleteVariableAccess;
+static int hf_mms_ServiceSupportOptions_defineNamedVariableList;
+static int hf_mms_ServiceSupportOptions_getNamedVariableListAttributes;
+static int hf_mms_ServiceSupportOptions_deleteNamedVariableList;
+static int hf_mms_ServiceSupportOptions_defineNamedType;
+static int hf_mms_ServiceSupportOptions_getNamedTypeAttributes;
+static int hf_mms_ServiceSupportOptions_deleteNamedType;
+static int hf_mms_ServiceSupportOptions_input;
+static int hf_mms_ServiceSupportOptions_output;
+static int hf_mms_ServiceSupportOptions_takeControl;
+static int hf_mms_ServiceSupportOptions_relinquishControl;
+static int hf_mms_ServiceSupportOptions_defineSemaphore;
+static int hf_mms_ServiceSupportOptions_deleteSemaphore;
+static int hf_mms_ServiceSupportOptions_reportSemaphoreStatus;
+static int hf_mms_ServiceSupportOptions_reportPoolSemaphoreStatus;
+static int hf_mms_ServiceSupportOptions_reportSemaphoreEntryStatus;
+static int hf_mms_ServiceSupportOptions_initiateDownloadSequence;
+static int hf_mms_ServiceSupportOptions_downloadSegment;
+static int hf_mms_ServiceSupportOptions_terminateDownloadSequence;
+static int hf_mms_ServiceSupportOptions_initiateUploadSequence;
+static int hf_mms_ServiceSupportOptions_uploadSegment;
+static int hf_mms_ServiceSupportOptions_terminateUploadSequence;
+static int hf_mms_ServiceSupportOptions_requestDomainDownload;
+static int hf_mms_ServiceSupportOptions_requestDomainUpload;
+static int hf_mms_ServiceSupportOptions_loadDomainContent;
+static int hf_mms_ServiceSupportOptions_storeDomainContent;
+static int hf_mms_ServiceSupportOptions_deleteDomain;
+static int hf_mms_ServiceSupportOptions_getDomainAttributes;
+static int hf_mms_ServiceSupportOptions_createProgramInvocation;
+static int hf_mms_ServiceSupportOptions_deleteProgramInvocation;
+static int hf_mms_ServiceSupportOptions_start;
+static int hf_mms_ServiceSupportOptions_stop;
+static int hf_mms_ServiceSupportOptions_resume;
+static int hf_mms_ServiceSupportOptions_reset;
+static int hf_mms_ServiceSupportOptions_kill;
+static int hf_mms_ServiceSupportOptions_getProgramInvocationAttributes;
+static int hf_mms_ServiceSupportOptions_obtainFile;
+static int hf_mms_ServiceSupportOptions_defineEventCondition;
+static int hf_mms_ServiceSupportOptions_deleteEventCondition;
+static int hf_mms_ServiceSupportOptions_getEventConditionAttributes;
+static int hf_mms_ServiceSupportOptions_reportEventConditionStatus;
+static int hf_mms_ServiceSupportOptions_alterEventConditionMonitoring;
+static int hf_mms_ServiceSupportOptions_triggerEvent;
+static int hf_mms_ServiceSupportOptions_defineEventAction;
+static int hf_mms_ServiceSupportOptions_deleteEventAction;
+static int hf_mms_ServiceSupportOptions_getEventActionAttributes;
+static int hf_mms_ServiceSupportOptions_reportActionStatus;
+static int hf_mms_ServiceSupportOptions_defineEventEnrollment;
+static int hf_mms_ServiceSupportOptions_deleteEventEnrollment;
+static int hf_mms_ServiceSupportOptions_alterEventEnrollment;
+static int hf_mms_ServiceSupportOptions_reportEventEnrollmentStatus;
+static int hf_mms_ServiceSupportOptions_getEventEnrollmentAttributes;
+static int hf_mms_ServiceSupportOptions_acknowledgeEventNotification;
+static int hf_mms_ServiceSupportOptions_getAlarmSummary;
+static int hf_mms_ServiceSupportOptions_getAlarmEnrollmentSummary;
+static int hf_mms_ServiceSupportOptions_readJournal;
+static int hf_mms_ServiceSupportOptions_writeJournal;
+static int hf_mms_ServiceSupportOptions_initializeJournal;
+static int hf_mms_ServiceSupportOptions_reportJournalStatus;
+static int hf_mms_ServiceSupportOptions_createJournal;
+static int hf_mms_ServiceSupportOptions_deleteJournal;
+static int hf_mms_ServiceSupportOptions_getCapabilityList;
+static int hf_mms_ServiceSupportOptions_fileOpen;
+static int hf_mms_ServiceSupportOptions_fileRead;
+static int hf_mms_ServiceSupportOptions_fileClose;
+static int hf_mms_ServiceSupportOptions_fileRename;
+static int hf_mms_ServiceSupportOptions_fileDelete;
+static int hf_mms_ServiceSupportOptions_fileDirectory;
+static int hf_mms_ServiceSupportOptions_unsolicitedStatus;
+static int hf_mms_ServiceSupportOptions_informationReport;
+static int hf_mms_ServiceSupportOptions_eventNotification;
+static int hf_mms_ServiceSupportOptions_attachToEventCondition;
+static int hf_mms_ServiceSupportOptions_attachToSemaphore;
+static int hf_mms_ServiceSupportOptions_conclude;
+static int hf_mms_ServiceSupportOptions_cancel;
+static int hf_mms_Transitions_idle_to_disabled;
+static int hf_mms_Transitions_active_to_disabled;
+static int hf_mms_Transitions_disabled_to_idle;
+static int hf_mms_Transitions_active_to_idle;
+static int hf_mms_Transitions_disabled_to_active;
+static int hf_mms_Transitions_idle_to_active;
+static int hf_mms_Transitions_any_to_deleted;
/* Initialize the subtree pointers */
-static gint ett_mms = -1;
-static gint ett_mms_MMSpdu = -1;
-static gint ett_mms_Confirmed_RequestPDU = -1;
-static gint ett_mms_SEQUENCE_OF_Modifier = -1;
-static gint ett_mms_Unconfirmed_PDU = -1;
-static gint ett_mms_Confirmed_ResponsePDU = -1;
-static gint ett_mms_Confirmed_ErrorPDU = -1;
-static gint ett_mms_UnconfirmedService = -1;
-static gint ett_mms_Modifier = -1;
-static gint ett_mms_ConfirmedServiceRequest = -1;
-static gint ett_mms_CS_Request_Detail = -1;
-static gint ett_mms_ConfirmedServiceResponse = -1;
-static gint ett_mms_FileName = -1;
-static gint ett_mms_ObjectName = -1;
-static gint ett_mms_T_domain_specific = -1;
-static gint ett_mms_ApplicationReference = -1;
-static gint ett_mms_Initiate_RequestPDU = -1;
-static gint ett_mms_InitRequestDetail = -1;
-static gint ett_mms_Initiate_ResponsePDU = -1;
-static gint ett_mms_InitResponseDetail = -1;
-static gint ett_mms_ParameterSupportOptions = -1;
-static gint ett_mms_ServiceSupportOptions = -1;
-static gint ett_mms_Cancel_ErrorPDU = -1;
-static gint ett_mms_ServiceError = -1;
-static gint ett_mms_T_errorClass = -1;
-static gint ett_mms_T_serviceSpecificInformation = -1;
-static gint ett_mms_AdditionalService_Error = -1;
-static gint ett_mms_RemoveEventConditionListReference_Error = -1;
-static gint ett_mms_InitiateUnitControl_Error = -1;
-static gint ett_mms_StartUnitControl_Error = -1;
-static gint ett_mms_StopUnitControl_Error = -1;
-static gint ett_mms_DeleteUnitControl_Error = -1;
-static gint ett_mms_LoadUnitControlFromFile_Error = -1;
-static gint ett_mms_RejectPDU = -1;
-static gint ett_mms_T_rejectReason = -1;
-static gint ett_mms_Status_Response = -1;
-static gint ett_mms_GetNameList_Request = -1;
-static gint ett_mms_T_extendedObjectClass = -1;
-static gint ett_mms_T_objectScope = -1;
-static gint ett_mms_GetNameList_Response = -1;
-static gint ett_mms_SEQUENCE_OF_Identifier = -1;
-static gint ett_mms_Identify_Response = -1;
-static gint ett_mms_T_listOfAbstractSyntaxes = -1;
-static gint ett_mms_Rename_Request = -1;
-static gint ett_mms_T_extendedObjectClass_01 = -1;
-static gint ett_mms_GetCapabilityList_Request = -1;
-static gint ett_mms_GetCapabilityList_Response = -1;
-static gint ett_mms_T_listOfCapabilities = -1;
-static gint ett_mms_InitiateDownloadSequence_Request = -1;
-static gint ett_mms_T_listOfCapabilities_01 = -1;
-static gint ett_mms_DownloadSegment_Response = -1;
-static gint ett_mms_T_loadData = -1;
-static gint ett_mms_TerminateDownloadSequence_Request = -1;
-static gint ett_mms_InitiateUploadSequence_Response = -1;
-static gint ett_mms_T_listOfCapabilities_02 = -1;
-static gint ett_mms_UploadSegment_Response = -1;
-static gint ett_mms_T_loadData_01 = -1;
-static gint ett_mms_RequestDomainDownload_Request = -1;
-static gint ett_mms_T_listOfCapabilities_03 = -1;
-static gint ett_mms_RequestDomainUpload_Request = -1;
-static gint ett_mms_LoadDomainContent_Request = -1;
-static gint ett_mms_T_listOfCapabilities_04 = -1;
-static gint ett_mms_StoreDomainContent_Request = -1;
-static gint ett_mms_GetDomainAttributes_Response = -1;
-static gint ett_mms_T_listOfCapabilities_05 = -1;
-static gint ett_mms_CreateProgramInvocation_Request = -1;
-static gint ett_mms_Start_Request = -1;
-static gint ett_mms_T_executionArgument = -1;
-static gint ett_mms_Stop_Request = -1;
-static gint ett_mms_Resume_Request = -1;
-static gint ett_mms_T_executionArgument_01 = -1;
-static gint ett_mms_Reset_Request = -1;
-static gint ett_mms_Kill_Request = -1;
-static gint ett_mms_GetProgramInvocationAttributes_Response = -1;
-static gint ett_mms_T_executionArgument_02 = -1;
-static gint ett_mms_TypeSpecification = -1;
-static gint ett_mms_T_array = -1;
-static gint ett_mms_T_structure = -1;
-static gint ett_mms_T_components = -1;
-static gint ett_mms_T_components_item = -1;
-static gint ett_mms_AlternateAccess = -1;
-static gint ett_mms_AlternateAccess_item = -1;
-static gint ett_mms_T_named = -1;
-static gint ett_mms_AlternateAccessSelection = -1;
-static gint ett_mms_T_selectAlternateAccess = -1;
-static gint ett_mms_T_accessSelection = -1;
-static gint ett_mms_T_indexRange = -1;
-static gint ett_mms_T_selectAccess = -1;
-static gint ett_mms_T_indexRange_01 = -1;
-static gint ett_mms_Read_Request = -1;
-static gint ett_mms_Read_Response = -1;
-static gint ett_mms_SEQUENCE_OF_AccessResult = -1;
-static gint ett_mms_Write_Request = -1;
-static gint ett_mms_SEQUENCE_OF_Data = -1;
-static gint ett_mms_Write_Response = -1;
-static gint ett_mms_Write_Response_item = -1;
-static gint ett_mms_InformationReport = -1;
-static gint ett_mms_GetVariableAccessAttributes_Request = -1;
-static gint ett_mms_GetVariableAccessAttributes_Response = -1;
-static gint ett_mms_DefineNamedVariable_Request = -1;
-static gint ett_mms_DefineScatteredAccess_Request = -1;
-static gint ett_mms_GetScatteredAccessAttributes_Response = -1;
-static gint ett_mms_DeleteVariableAccess_Request = -1;
-static gint ett_mms_SEQUENCE_OF_ObjectName = -1;
-static gint ett_mms_DeleteVariableAccess_Response = -1;
-static gint ett_mms_DefineNamedVariableList_Request = -1;
-static gint ett_mms_T_listOfVariable = -1;
-static gint ett_mms_T_listOfVariable_item = -1;
-static gint ett_mms_GetNamedVariableListAttributes_Response = -1;
-static gint ett_mms_T_listOfVariable_01 = -1;
-static gint ett_mms_T_listOfVariable_item_01 = -1;
-static gint ett_mms_DeleteNamedVariableList_Request = -1;
-static gint ett_mms_DeleteNamedVariableList_Response = -1;
-static gint ett_mms_DefineNamedType_Request = -1;
-static gint ett_mms_GetNamedTypeAttributes_Response = -1;
-static gint ett_mms_DeleteNamedType_Request = -1;
-static gint ett_mms_DeleteNamedType_Response = -1;
-static gint ett_mms_AccessResult = -1;
-static gint ett_mms_Data = -1;
-static gint ett_mms_VariableAccessSpecification = -1;
-static gint ett_mms_T_listOfVariable_02 = -1;
-static gint ett_mms_T_listOfVariable_item_02 = -1;
-static gint ett_mms_ScatteredAccessDescription = -1;
-static gint ett_mms_ScatteredAccessDescription_item = -1;
-static gint ett_mms_VariableSpecification = -1;
-static gint ett_mms_T_variableDescription = -1;
-static gint ett_mms_Address = -1;
-static gint ett_mms_TakeControl_Request = -1;
-static gint ett_mms_TakeControl_Response = -1;
-static gint ett_mms_RelinquishControl_Request = -1;
-static gint ett_mms_DefineSemaphore_Request = -1;
-static gint ett_mms_ReportSemaphoreStatus_Response = -1;
-static gint ett_mms_ReportPoolSemaphoreStatus_Request = -1;
-static gint ett_mms_ReportPoolSemaphoreStatus_Response = -1;
-static gint ett_mms_T_listOfNamedTokens = -1;
-static gint ett_mms_T_listOfNamedTokens_item = -1;
-static gint ett_mms_ReportSemaphoreEntryStatus_Request = -1;
-static gint ett_mms_ReportSemaphoreEntryStatus_Response = -1;
-static gint ett_mms_SEQUENCE_OF_SemaphoreEntry = -1;
-static gint ett_mms_AttachToSemaphore = -1;
-static gint ett_mms_SemaphoreEntry = -1;
-static gint ett_mms_Input_Request = -1;
-static gint ett_mms_T_listOfPromptData = -1;
-static gint ett_mms_Output_Request = -1;
-static gint ett_mms_T_listOfOutputData = -1;
-static gint ett_mms_DefineEventCondition_Request = -1;
-static gint ett_mms_DeleteEventCondition_Request = -1;
-static gint ett_mms_GetEventConditionAttributes_Response = -1;
-static gint ett_mms_T_monitoredVariable = -1;
-static gint ett_mms_ReportEventConditionStatus_Response = -1;
-static gint ett_mms_AlterEventConditionMonitoring_Request = -1;
-static gint ett_mms_TriggerEvent_Request = -1;
-static gint ett_mms_DefineEventAction_Request = -1;
-static gint ett_mms_DeleteEventAction_Request = -1;
-static gint ett_mms_GetEventActionAttributes_Response = -1;
-static gint ett_mms_DefineEventEnrollment_Request = -1;
-static gint ett_mms_DeleteEventEnrollment_Request = -1;
-static gint ett_mms_GetEventEnrollmentAttributes_Request = -1;
-static gint ett_mms_EventEnrollment = -1;
-static gint ett_mms_T_eventConditionName = -1;
-static gint ett_mms_T_eventActionName = -1;
-static gint ett_mms_GetEventEnrollmentAttributes_Response = -1;
-static gint ett_mms_SEQUENCE_OF_EventEnrollment = -1;
-static gint ett_mms_ReportEventEnrollmentStatus_Response = -1;
-static gint ett_mms_AlterEventEnrollment_Request = -1;
-static gint ett_mms_AlterEventEnrollment_Response = -1;
-static gint ett_mms_T_currentState = -1;
-static gint ett_mms_AcknowledgeEventNotification_Request = -1;
-static gint ett_mms_GetAlarmSummary_Request = -1;
-static gint ett_mms_T_severityFilter = -1;
-static gint ett_mms_GetAlarmSummary_Response = -1;
-static gint ett_mms_SEQUENCE_OF_AlarmSummary = -1;
-static gint ett_mms_AlarmSummary = -1;
-static gint ett_mms_GetAlarmEnrollmentSummary_Request = -1;
-static gint ett_mms_T_severityFilter_01 = -1;
-static gint ett_mms_GetAlarmEnrollmentSummary_Response = -1;
-static gint ett_mms_SEQUENCE_OF_AlarmEnrollmentSummary = -1;
-static gint ett_mms_AlarmEnrollmentSummary = -1;
-static gint ett_mms_EventNotification = -1;
-static gint ett_mms_T_eventConditionName_01 = -1;
-static gint ett_mms_T_actionResult = -1;
-static gint ett_mms_T_eventActionResult = -1;
-static gint ett_mms_AttachToEventCondition = -1;
-static gint ett_mms_EventTime = -1;
-static gint ett_mms_Transitions = -1;
-static gint ett_mms_ReadJournal_Request = -1;
-static gint ett_mms_T_rangeStartSpecification = -1;
-static gint ett_mms_T_rangeStopSpecification = -1;
-static gint ett_mms_T_listOfVariables = -1;
-static gint ett_mms_T_entryToStartAfter = -1;
-static gint ett_mms_ReadJournal_Response = -1;
-static gint ett_mms_SEQUENCE_OF_JournalEntry = -1;
-static gint ett_mms_JournalEntry = -1;
-static gint ett_mms_WriteJournal_Request = -1;
-static gint ett_mms_SEQUENCE_OF_EntryContent = -1;
-static gint ett_mms_InitializeJournal_Request = -1;
-static gint ett_mms_T_limitSpecification = -1;
-static gint ett_mms_ReportJournalStatus_Response = -1;
-static gint ett_mms_CreateJournal_Request = -1;
-static gint ett_mms_DeleteJournal_Request = -1;
-static gint ett_mms_EntryContent = -1;
-static gint ett_mms_T_entryForm = -1;
-static gint ett_mms_T_data = -1;
-static gint ett_mms_T_event = -1;
-static gint ett_mms_T_listOfVariables_01 = -1;
-static gint ett_mms_T_listOfVariables_item = -1;
-static gint ett_mms_ObtainFile_Request = -1;
-static gint ett_mms_FileOpen_Request = -1;
-static gint ett_mms_FileOpen_Response = -1;
-static gint ett_mms_FileRead_Response = -1;
-static gint ett_mms_FileRename_Request = -1;
-static gint ett_mms_FileDirectory_Request = -1;
-static gint ett_mms_FileDirectory_Response = -1;
-static gint ett_mms_SEQUENCE_OF_DirectoryEntry = -1;
-static gint ett_mms_DirectoryEntry = -1;
-static gint ett_mms_FileAttributes = -1;
-
-static expert_field ei_mms_mal_timeofday_encoding = EI_INIT;
-static expert_field ei_mms_mal_utctime_encoding = EI_INIT;
-static expert_field ei_mms_zero_pdu = EI_INIT;
+static int ett_mms;
+static int ett_mms_iec61850_quality_bitstring;
+static int ett_mms_iec61850_check_bitstring;
+static int ett_mms_ReportedOptFlds;
+static int ett_mms_MMSpdu;
+static int ett_mms_Confirmed_RequestPDU;
+static int ett_mms_SEQUENCE_OF_Modifier;
+static int ett_mms_Unconfirmed_PDU;
+static int ett_mms_Confirmed_ResponsePDU;
+static int ett_mms_Confirmed_ErrorPDU;
+static int ett_mms_UnconfirmedService;
+static int ett_mms_Modifier;
+static int ett_mms_ConfirmedServiceRequest;
+static int ett_mms_CS_Request_Detail;
+static int ett_mms_ConfirmedServiceResponse;
+static int ett_mms_FileName;
+static int ett_mms_ObjectName;
+static int ett_mms_T_domain_specific;
+static int ett_mms_ApplicationReference;
+static int ett_mms_Initiate_RequestPDU;
+static int ett_mms_InitRequestDetail;
+static int ett_mms_Initiate_ResponsePDU;
+static int ett_mms_InitResponseDetail;
+static int ett_mms_ParameterSupportOptions;
+static int ett_mms_ServiceSupportOptions;
+static int ett_mms_Cancel_ErrorPDU;
+static int ett_mms_ServiceError;
+static int ett_mms_T_errorClass;
+static int ett_mms_T_serviceSpecificInformation;
+static int ett_mms_AdditionalService_Error;
+static int ett_mms_RemoveEventConditionListReference_Error;
+static int ett_mms_InitiateUnitControl_Error;
+static int ett_mms_StartUnitControl_Error;
+static int ett_mms_StopUnitControl_Error;
+static int ett_mms_DeleteUnitControl_Error;
+static int ett_mms_LoadUnitControlFromFile_Error;
+static int ett_mms_RejectPDU;
+static int ett_mms_T_rejectReason;
+static int ett_mms_Status_Response;
+static int ett_mms_ObjectScope;
+static int ett_mms_GetNameList_Request;
+static int ett_mms_T_extendedObjectClass;
+static int ett_mms_GetNameList_Response;
+static int ett_mms_SEQUENCE_OF_Identifier;
+static int ett_mms_Identify_Response;
+static int ett_mms_T_listOfAbstractSyntaxes;
+static int ett_mms_Rename_Request;
+static int ett_mms_T_extendedObjectClass_01;
+static int ett_mms_GetCapabilityList_Request;
+static int ett_mms_GetCapabilityList_Response;
+static int ett_mms_T_listOfCapabilities;
+static int ett_mms_InitiateDownloadSequence_Request;
+static int ett_mms_T_listOfCapabilities_01;
+static int ett_mms_DownloadSegment_Response;
+static int ett_mms_T_loadData;
+static int ett_mms_TerminateDownloadSequence_Request;
+static int ett_mms_InitiateUploadSequence_Response;
+static int ett_mms_T_listOfCapabilities_02;
+static int ett_mms_UploadSegment_Response;
+static int ett_mms_T_loadData_01;
+static int ett_mms_RequestDomainDownload_Request;
+static int ett_mms_T_listOfCapabilities_03;
+static int ett_mms_RequestDomainUpload_Request;
+static int ett_mms_LoadDomainContent_Request;
+static int ett_mms_T_listOfCapabilities_04;
+static int ett_mms_StoreDomainContent_Request;
+static int ett_mms_GetDomainAttributes_Response;
+static int ett_mms_T_listOfCapabilities_05;
+static int ett_mms_CreateProgramInvocation_Request;
+static int ett_mms_Start_Request;
+static int ett_mms_T_executionArgument;
+static int ett_mms_Stop_Request;
+static int ett_mms_Resume_Request;
+static int ett_mms_T_executionArgument_01;
+static int ett_mms_Reset_Request;
+static int ett_mms_Kill_Request;
+static int ett_mms_GetProgramInvocationAttributes_Response;
+static int ett_mms_T_executionArgument_02;
+static int ett_mms_TypeSpecification;
+static int ett_mms_T_array;
+static int ett_mms_T_structure;
+static int ett_mms_T_components;
+static int ett_mms_T_components_item;
+static int ett_mms_AlternateAccess;
+static int ett_mms_AlternateAccess_item;
+static int ett_mms_T_named;
+static int ett_mms_AlternateAccessSelection;
+static int ett_mms_T_selectAlternateAccess;
+static int ett_mms_T_accessSelection;
+static int ett_mms_T_indexRange;
+static int ett_mms_T_selectAccess;
+static int ett_mms_T_indexRange_01;
+static int ett_mms_Read_Request;
+static int ett_mms_Read_Response;
+static int ett_mms_SEQUENCE_OF_AccessResult;
+static int ett_mms_Write_Request;
+static int ett_mms_T_listOfData;
+static int ett_mms_Write_Response;
+static int ett_mms_Write_Response_item;
+static int ett_mms_InformationReport;
+static int ett_mms_T_listOfAccessResult;
+static int ett_mms_GetVariableAccessAttributes_Request;
+static int ett_mms_GetVariableAccessAttributes_Response;
+static int ett_mms_DefineNamedVariable_Request;
+static int ett_mms_DefineScatteredAccess_Request;
+static int ett_mms_GetScatteredAccessAttributes_Response;
+static int ett_mms_DeleteVariableAccess_Request;
+static int ett_mms_SEQUENCE_OF_ObjectName;
+static int ett_mms_DeleteVariableAccess_Response;
+static int ett_mms_DefineNamedVariableList_Request;
+static int ett_mms_T_listOfVariable;
+static int ett_mms_T_listOfVariable_item;
+static int ett_mms_GetNamedVariableListAttributes_Response;
+static int ett_mms_T_listOfVariable_01;
+static int ett_mms_T_listOfVariable_item_01;
+static int ett_mms_DeleteNamedVariableList_Request;
+static int ett_mms_DeleteNamedVariableList_Response;
+static int ett_mms_DefineNamedType_Request;
+static int ett_mms_GetNamedTypeAttributes_Response;
+static int ett_mms_DeleteNamedType_Request;
+static int ett_mms_DeleteNamedType_Response;
+static int ett_mms_AccessResult;
+static int ett_mms_Data;
+static int ett_mms_SEQUENCE_OF_Data;
+static int ett_mms_T_structure_01;
+static int ett_mms_VariableAccessSpecification;
+static int ett_mms_T_listOfVariable_02;
+static int ett_mms_T_listOfVariable_item_02;
+static int ett_mms_ScatteredAccessDescription;
+static int ett_mms_ScatteredAccessDescription_item;
+static int ett_mms_VariableSpecification;
+static int ett_mms_T_variableDescription;
+static int ett_mms_Address;
+static int ett_mms_TakeControl_Request;
+static int ett_mms_TakeControl_Response;
+static int ett_mms_RelinquishControl_Request;
+static int ett_mms_DefineSemaphore_Request;
+static int ett_mms_ReportSemaphoreStatus_Response;
+static int ett_mms_ReportPoolSemaphoreStatus_Request;
+static int ett_mms_ReportPoolSemaphoreStatus_Response;
+static int ett_mms_T_listOfNamedTokens;
+static int ett_mms_T_listOfNamedTokens_item;
+static int ett_mms_ReportSemaphoreEntryStatus_Request;
+static int ett_mms_ReportSemaphoreEntryStatus_Response;
+static int ett_mms_SEQUENCE_OF_SemaphoreEntry;
+static int ett_mms_AttachToSemaphore;
+static int ett_mms_SemaphoreEntry;
+static int ett_mms_Input_Request;
+static int ett_mms_T_listOfPromptData;
+static int ett_mms_Output_Request;
+static int ett_mms_T_listOfOutputData;
+static int ett_mms_DefineEventCondition_Request;
+static int ett_mms_DeleteEventCondition_Request;
+static int ett_mms_GetEventConditionAttributes_Response;
+static int ett_mms_T_monitoredVariable;
+static int ett_mms_ReportEventConditionStatus_Response;
+static int ett_mms_AlterEventConditionMonitoring_Request;
+static int ett_mms_TriggerEvent_Request;
+static int ett_mms_DefineEventAction_Request;
+static int ett_mms_DeleteEventAction_Request;
+static int ett_mms_GetEventActionAttributes_Response;
+static int ett_mms_DefineEventEnrollment_Request;
+static int ett_mms_DeleteEventEnrollment_Request;
+static int ett_mms_GetEventEnrollmentAttributes_Request;
+static int ett_mms_EventEnrollment;
+static int ett_mms_T_eventConditionName;
+static int ett_mms_T_eventActionName;
+static int ett_mms_GetEventEnrollmentAttributes_Response;
+static int ett_mms_SEQUENCE_OF_EventEnrollment;
+static int ett_mms_ReportEventEnrollmentStatus_Response;
+static int ett_mms_AlterEventEnrollment_Request;
+static int ett_mms_AlterEventEnrollment_Response;
+static int ett_mms_T_currentState;
+static int ett_mms_AcknowledgeEventNotification_Request;
+static int ett_mms_GetAlarmSummary_Request;
+static int ett_mms_T_severityFilter;
+static int ett_mms_GetAlarmSummary_Response;
+static int ett_mms_SEQUENCE_OF_AlarmSummary;
+static int ett_mms_AlarmSummary;
+static int ett_mms_GetAlarmEnrollmentSummary_Request;
+static int ett_mms_T_severityFilter_01;
+static int ett_mms_GetAlarmEnrollmentSummary_Response;
+static int ett_mms_SEQUENCE_OF_AlarmEnrollmentSummary;
+static int ett_mms_AlarmEnrollmentSummary;
+static int ett_mms_EventNotification;
+static int ett_mms_T_eventConditionName_01;
+static int ett_mms_T_actionResult;
+static int ett_mms_T_eventActionResult;
+static int ett_mms_AttachToEventCondition;
+static int ett_mms_EventTime;
+static int ett_mms_Transitions;
+static int ett_mms_ReadJournal_Request;
+static int ett_mms_T_rangeStartSpecification;
+static int ett_mms_T_rangeStopSpecification;
+static int ett_mms_T_listOfVariables;
+static int ett_mms_T_entryToStartAfter;
+static int ett_mms_ReadJournal_Response;
+static int ett_mms_SEQUENCE_OF_JournalEntry;
+static int ett_mms_JournalEntry;
+static int ett_mms_WriteJournal_Request;
+static int ett_mms_SEQUENCE_OF_EntryContent;
+static int ett_mms_InitializeJournal_Request;
+static int ett_mms_T_limitSpecification;
+static int ett_mms_ReportJournalStatus_Response;
+static int ett_mms_CreateJournal_Request;
+static int ett_mms_DeleteJournal_Request;
+static int ett_mms_EntryContent;
+static int ett_mms_T_entryForm;
+static int ett_mms_T_data;
+static int ett_mms_T_event;
+static int ett_mms_T_listOfVariables_01;
+static int ett_mms_T_listOfVariables_item;
+static int ett_mms_ObtainFile_Request;
+static int ett_mms_FileOpen_Request;
+static int ett_mms_FileOpen_Response;
+static int ett_mms_FileRead_Response;
+static int ett_mms_FileRename_Request;
+static int ett_mms_FileDirectory_Request;
+static int ett_mms_FileDirectory_Response;
+static int ett_mms_SEQUENCE_OF_DirectoryEntry;
+static int ett_mms_DirectoryEntry;
+static int ett_mms_FileAttributes;
+
+static expert_field ei_mms_mal_timeofday_encoding;
+static expert_field ei_mms_mal_utctime_encoding;
+static expert_field ei_mms_zero_pdu;
/*****************************************************************************/
/* Packet private data */
@@ -952,72 +1021,321 @@ static expert_field ei_mms_zero_pdu = EI_INIT;
#define BUFFER_SIZE_PRE 10
#define BUFFER_SIZE_MORE 1024
+typedef enum _iec61850_8_1_vmd_specific {
+ IEC61850_8_1_NOT_SET = 0,
+ IEC61850_8_1_RPT
+} iec61850_8_1_vmd_specific;
+
+typedef enum _itemid_type {
+ IEC61850_ITEM_ID_NOT_SET = 0,
+ IEC61850_ITEM_ID_CTLMODEL,
+ IEC61850_ITEM_ID_Q,
+ IEC61850_ITEM_ID_OPER,
+ IEC61850_ITEM_ID_CHECK,
+ IEC61850_ITEM_ID_OR_CAT,
+ IEC61850_ITEM_ID_BEH$STVAL,
+ IEC61850_ITEM_ID_MOD$STVAL,
+ IEC61850_ITEM_ID_HEALTH$STVAL,
+ IEC61850_ITEM_ID_$BR$_OR_$RP$,
+ IEC61850_ITEM_ID_$SBOW
+} itemid_type;
+
+typedef struct _mms_transaction_t {
+ uint32_t req_frame;
+ uint32_t rep_frame;
+ nstime_t req_time;
+ /* Request info*/
+ itemid_type itemid; /* Numeric representation of ItemId substring */
+ int conf_serv_pdu_type_req;
+} mms_transaction_t;
+
+typedef struct _mms_conv_info_t {
+ wmem_map_t* pdus;
+} mms_conv_info_t;
+
typedef struct mms_private_data_t
{
- char preCinfo[BUFFER_SIZE_PRE];
- char moreCinfo[BUFFER_SIZE_MORE];
+ char preCinfo[BUFFER_SIZE_PRE];
+ char moreCinfo[BUFFER_SIZE_MORE];
} mms_private_data_t;
+#define MMS_CONFIRMED_REQUEST_PDU 0
+#define MMS_CONFIRMED_RESPONSE_PDU 1
+#define MMS_CONFIRMED_ERROR_PDU 2
+#define MMS_UNCONFIRMED_PDU 3
+#define MMS_REJECT_PDU 4
+#define MMS_CANCEL_REQUEST_PDU 5
+#define MMS_CANCEL_RESPONSE_PDU 6
+#define MMS_CANCEL_ERROR_PDU 7
+#define MMS_INITIATE_REQUEST_PDU 8
+#define MMS_INITIATE_RESPONSE_PDU 9
+#define MMS_INITIATE_ERROR_PDU 10
+#define MMS_CONCLUDE_REQUEST_PDU 11
+#define MMS_CONCLUDE_RESPONSE_PDU 12
+#define MMS_CONCLUDE_ERROR_PDU 13
+
+#define MMS_CONFIRMEDSERVICE_STATUS 0
+#define MMS_CONFIRMEDSERVICE_GETNAMELIST 1
+#define MMS_CONFIRMEDSERVICE_IDENTIFY 2
+#define MMS_CONFIRMEDSERVICE_RENAME 3
+#define MMS_CONFIRMEDSERVICE_READ 4
+#define MMS_CONFIRMEDSERVICE_WRITE 5
+#define MMS_CONFIRMEDSERVICE_GETVARIABLEACCESSATTRIBUTES 6
+#define MMS_CONFIRMEDSERVICE_DEFINENAMEDVARIABLE 7
+#define MMS_CONFIRMEDSERVICE_DEFINESCATTEREDACCESS 8
+#define MMS_CONFIRMEDSERVICE_GETSCATTEREDACCESSATTRIBUTES 9
+#define MMS_CONFIRMEDSERVICE_DELETEVARIABLEACCESS 10
+#define MMS_CONFIRMEDSERVICE_DEFINENAMEDVARIABLELIST 11
+#define MMS_CONFIRMEDSERVICE_GETNAMEDVARIABLELISTATTRIBUTES 12
+#define MMS_CONFIRMEDSERVICE_DELETENAMEDVARIABLELIST 13
+#define MMS_CONFIRMEDSERVICE_DEFINENAMEDTYPE 14
+#define MMS_CONFIRMEDSERVICE_GETNAMEDTYPEATTRIBUTES 15
+#define MMS_CONFIRMEDSERVICE_DELETENAMEDTYPE 16
+#define MMS_CONFIRMEDSERVICE_INPUT 17
+#define MMS_CONFIRMEDSERVICE_OUTPUT 18
+#define MMS_CONFIRMEDSERVICE_TAKECONTROL 19
+#define MMS_CONFIRMEDSERVICE_RELINQUISHCONTROL 20
+#define MMS_CONFIRMEDSERVICE_DEFINESEMAPHORE 21
+#define MMS_CONFIRMEDSERVICE_DELETESEMAPHORE 22
+#define MMS_CONFIRMEDSERVICE_REPORTSEMAPHORESTATUS 23
+#define MMS_CONFIRMEDSERVICE_REPORTPOOLSEMAPHORESTATUS 24
+#define MMS_CONFIRMEDSERVICE_REPORTSEMAPHOREENTRYSTATUS 25
+#define MMS_CONFIRMEDSERVICE_INITIATEDOWNLOADSEQUENCE 26
+#define MMS_CONFIRMEDSERVICE_DOWNLOADSEGMENT 27
+#define MMS_CONFIRMEDSERVICE_TERMINATEDOWNLOADSEQUENCE 28
+#define MMS_CONFIRMEDSERVICE_INITIATEUPLOADSEQUENCE 29
+#define MMS_CONFIRMEDSERVICE_UPLOADSEGMENT 30
+#define MMS_CONFIRMEDSERVICE_TERMINATEUPLOADSEQUENCE 31
+#define MMS_CONFIRMEDSERVICE_REQUESTDOMAINDOWNLOAD 32
+#define MMS_CONFIRMEDSERVICE_REQUESTDOMAINUPLOAD 33
+#define MMS_CONFIRMEDSERVICE_LOADDOMAINCONTENT 34
+#define MMS_CONFIRMEDSERVICE_STOREDOMAINCONTENT 35
+#define MMS_CONFIRMEDSERVICE_DELETEDOMAIN 36
+#define MMS_CONFIRMEDSERVICE_GETDOMAINATTRIBUTES 37
+#define MMS_CONFIRMEDSERVICE_CREATEPROGRAMINVOCATION 38
+#define MMS_CONFIRMEDSERVICE_DELETEPROGRAMINVOCATION 39
+#define MMS_CONFIRMEDSERVICE_START 40
+#define MMS_CONFIRMEDSERVICE_STOP 41
+#define MMS_CONFIRMEDSERVICE_RESUME 42
+#define MMS_CONFIRMEDSERVICE_RESET 43
+#define MMS_CONFIRMEDSERVICE_KILL 44
+#define MMS_CONFIRMEDSERVICE_GETPROGRAMINVOCATIONATTRIBUTES 45
+#define MMS_CONFIRMEDSERVICE_OBTAINFILE 46
+#define MMS_CONFIRMEDSERVICE_DEFINEEVENTCONDITION 47
+#define MMS_CONFIRMEDSERVICE_DELETEEVENTCONDITION 48
+#define MMS_CONFIRMEDSERVICE_GETEVENTCONDITIONATTRIBUTES 49
+#define MMS_CONFIRMEDSERVICE_REPORTEVENTCONDITIONSTATUS 50
+#define MMS_CONFIRMEDSERVICE_ALTEREVENTCONDITIONMONITORING 51
+#define MMS_CONFIRMEDSERVICE_TRIGGEREVENT 52
+#define MMS_CONFIRMEDSERVICE_DEFINEEVENTACTION 53
+#define MMS_CONFIRMEDSERVICE_DELETEEVENTACTION 54
+#define MMS_CONFIRMEDSERVICE_GETEVENTACTIONATTRIBUTES 55
+#define MMS_CONFIRMEDSERVICE_REPORTEVENTACTIONSTATUS 56
+#define MMS_CONFIRMEDSERVICE_DEFINEEVENTENROLLMENT 57
+#define MMS_CONFIRMEDSERVICE_DELETEEVENTENROLLMENT 58
+#define MMS_CONFIRMEDSERVICE_ALTEREVENTENROLLMENT 59
+#define MMS_CONFIRMEDSERVICE_REPORTEVENTENROLLMENTSTATUS 60
+#define MMS_CONFIRMEDSERVICE_GETEVENTENROLLMENTATTRIBUTES 61
+#define MMS_CONFIRMEDSERVICE_ACKNOWLEDGEEVENTNOTIFICATION 62
+#define MMS_CONFIRMEDSERVICE_GETALARMSUMMARY 63
+#define MMS_CONFIRMEDSERVICE_GETALARMENROLLMENTSUMMARY 64
+#define MMS_CONFIRMEDSERVICE_READJOURNAL 65
+#define MMS_CONFIRMEDSERVICE_WRITEJOURNAL 66
+#define MMS_CONFIRMEDSERVICE_INITIALIZEJOURNAL 67
+#define MMS_CONFIRMEDSERVICE_REPORTJOURNALSTATUS 68
+#define MMS_CONFIRMEDSERVICE_CREATEJOURNAL 69
+#define MMS_CONFIRMEDSERVICE_DELETEJOURNAL 70
+#define MMS_CONFIRMEDSERVICE_GETCAPABILITYLIST 71
+#define MMS_CONFIRMEDSERVICE_FILEOPEN 72
+#define MMS_FILEREAD 73
+#define MMS_FILECLOSE 74
+#define MMS_FILERENAME 75
+#define MMS_FILEDELETE 76
+#define MMS_FILEDIRECTORY 77
+
+#define MMS_OBJECTCLASS_NAMMEDVARIABLE 0
+#define MMS_OBJECTCLASS_NAMEDVARIABLELIST 2
+#define MMS_OBJECTCLASS_DOMAIN 9
+
+#define MMS_OBJECTSCOPE_VMDSPECIFIC 0
+#define MMS_OBJECTSCOPE_DOMAINSPECIFIC 1
+
+#define MMS_IEC_61850_CONF_SERV_PDU_NOT_SET 0
+#define MMS_IEC_61850_CONF_SERV_PDU_GET_SERV_DIR 1
+#define MMS_IEC_61850_CONF_SERV_PDU_GETLOGICALDEVICEDIRECTORY 2
+#define MMS_IEC_61850_CONF_SERV_PDU_GETDATASETDIRECTORY 3
+#define MMS_IEC_61850_CONF_SERV_PDU_GETDATADIRECTORY 4
+#define MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE 5
+#define MMS_IEC_61850_CONF_SERV_PDU_READ 6
+#define MMS_IEC_61850_CONF_SERV_PDU_WRITE 7
+
+typedef struct mms_actx_private_data_t
+{
+ int mms_pdu_type; /* MMSpdu type taken from MMSpdu CHOICE branch_taken */
+ int invokeid;
+ iec61850_8_1_vmd_specific vmd_specific; /* Numeric representation of decode vmd_specific strings */
+ int listOfAccessResult_cnt; /* Position in the list, 1 count */
+ int data_cnt; /* Number of times data occurred(depth)*/
+ uint16_t reported_optflds; /* Bitmap over included fields */
+ proto_item* pdu_item; /* The item to append PDU info to */
+ int confirmedservice_type; /* Requested service */
+ int objectclass;
+ int objectscope;
+ mms_transaction_t* mms_trans_p; /* Pointer to the transaction record */
+ char* itemid_str;
+ int success; /* If variable access succeeded or not */
+} mms_actx_private_data_t;
+
+
+static const value_string mms_iec6150_cntmodel_vals[] = {
+ {0, "status-only"},
+ {1, "direct-with-normal-security"},
+ {2, "sbo-with-normal-security"},
+ {3, "direct-with-enhanced-security"},
+ {4, "sbo-with-enhanced-security"},
+ {0, NULL}
+};
+
+static const value_string mms_iec6150_validity_vals[] = {
+ {0, "Good"},
+ {1, "Invalid"},
+ {2, "Reserved"},
+ {3, "Questionable"},
+ {0, NULL}
+};
+
+static const value_string mms_iec6150_source_vals[] = {
+ {0, "Process"},
+ {1, "Substituted"},
+ {0, NULL}
+};
+
+static const value_string mms_iec6150_timeaccuracy_vals[] = {
+ {0, "0 bits accuracy"},
+ {1, "1 bits accuracy"},
+ {2, "2 bits accuracy"},
+ {3, "3 bits accuracy"},
+ {4, "4 bits accuracy"},
+ {5, "5 bits accuracy"},
+ {6, "6 bits accuracy"},
+ {7, "7 bits accuracy"},
+ {8, "8 bits accuracy"},
+ {9, "9 bits accuracy"},
+ {10, "10 bits accuracy"},
+ {11, "11 bits accuracy"},
+ {12, "12 bits accuracy"},
+ {13, "13 bits accuracy"},
+ {14, "14 bits accuracy"},
+ {15, "15 bits accuracy"},
+ {16, "16 bits accuracy"},
+ {17, "17 bits accuracy"},
+ {18, "18 bits accuracy"},
+ {19, "19 bits accuracy"},
+ {20, "20 bits accuracy"},
+ {21, "21 bits accuracy"},
+ {22, "22 bits accuracy"},
+ {23, "23 bits accuracy"},
+ {24, "24 bits accuracy"},
+ {25, "25 bits accuracy"},
+ {26, "26 bits accuracy"},
+ {27, "27 bits accuracy"},
+ {28, "28 bits accuracy"},
+ {29, "29 bits accuracy"},
+ {30, "Invalid"},
+ {31, "Unspecified"},
+ {0, NULL}
+};
+
+static const value_string mms_iec6150_orcategory_vals[] = {
+ {0, "not-supported"},
+ {1, "bay-control"},
+ {2, "station-control"},
+ {3, "remote-control"},
+ {4, "automatic-bay"},
+ {5, "automatic-station"},
+ {6, "automatic-station"},
+ {7, "maintenance"},
+ {8, "process"},
+ {0, NULL}
+};
+
+static const value_string mms_iec6150_beh_vals[] = {
+ {0,"Uninitialised"},
+ {1, "on"},
+ {2, "blocked"},
+ {3, "test"},
+ {4, "test/blocked"},
+ {5, "off"},
+ {0, NULL}
+};
+
+static const value_string mms_iec6150_health_vals[] = {
+ {0,"Uninitialised"},
+ {1,"Ok"},
+ {2,"Warning"},
+ {3,"Alarm"},
+ {0, NULL}
+};
/* Helper function to get or create the private data struct */
static
-mms_private_data_t* mms_get_private_data(asn1_ctx_t *actx)
+mms_private_data_t* mms_get_private_data(asn1_ctx_t* actx)
{
- packet_info *pinfo = actx->pinfo;
- mms_private_data_t *private_data = (mms_private_data_t *)p_get_proto_data(pinfo->pool, pinfo, proto_mms, pinfo->curr_layer_num);
- if(private_data != NULL )
- return private_data;
- else {
- private_data = wmem_new0(pinfo->pool, mms_private_data_t);
- p_add_proto_data(pinfo->pool, pinfo, proto_mms, pinfo->curr_layer_num, private_data);
- return private_data;
- }
+ packet_info* pinfo = actx->pinfo;
+ mms_private_data_t* private_data = (mms_private_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_mms, pinfo->curr_layer_num);
+ if (private_data != NULL) {
+ return private_data;
+ } else {
+ private_data = wmem_new0(pinfo->pool, mms_private_data_t);
+ p_add_proto_data(pinfo->pool, pinfo, proto_mms, pinfo->curr_layer_num, private_data);
+ return private_data;
+ }
}
/* Helper function to test presence of private data struct */
-static gboolean
-mms_has_private_data(asn1_ctx_t *actx)
+static bool
+mms_has_private_data(asn1_ctx_t* actx)
{
- packet_info *pinfo = actx->pinfo;
- return (p_get_proto_data(pinfo->pool, pinfo, proto_mms, pinfo->curr_layer_num) != NULL);
+ packet_info* pinfo = actx->pinfo;
+ return (p_get_proto_data(pinfo->pool, pinfo, proto_mms, pinfo->curr_layer_num) != NULL);
}
static void
-private_data_add_preCinfo(asn1_ctx_t *actx, guint32 val)
+private_data_add_preCinfo(asn1_ctx_t* actx, uint32_t val)
{
- mms_private_data_t *private_data = (mms_private_data_t*)mms_get_private_data(actx);
- snprintf(private_data->preCinfo, BUFFER_SIZE_PRE, "%02d ", val);
+ mms_private_data_t* private_data = (mms_private_data_t*)mms_get_private_data(actx);
+ snprintf(private_data->preCinfo, BUFFER_SIZE_PRE, "%02d ", val);
}
static char*
-private_data_get_preCinfo(asn1_ctx_t *actx)
+private_data_get_preCinfo(asn1_ctx_t* actx)
{
- mms_private_data_t *private_data = (mms_private_data_t*)mms_get_private_data(actx);
- return private_data->preCinfo;
+ mms_private_data_t* private_data = (mms_private_data_t*)mms_get_private_data(actx);
+ return private_data->preCinfo;
}
static void
-private_data_add_moreCinfo_id(asn1_ctx_t *actx, tvbuff_t *tvb)
+private_data_add_moreCinfo_id(asn1_ctx_t* actx, tvbuff_t* tvb)
{
- mms_private_data_t *private_data = (mms_private_data_t*)mms_get_private_data(actx);
- (void) g_strlcat(private_data->moreCinfo, " ", BUFFER_SIZE_MORE);
- (void) g_strlcat(private_data->moreCinfo, tvb_get_string_enc(actx->pinfo->pool,
- tvb, 2, tvb_get_guint8(tvb, 1), ENC_STRING), BUFFER_SIZE_MORE);
+ mms_private_data_t* private_data = (mms_private_data_t*)mms_get_private_data(actx);
+ (void)g_strlcat(private_data->moreCinfo, " ", BUFFER_SIZE_MORE);
+ (void)g_strlcat(private_data->moreCinfo, tvb_get_string_enc(actx->pinfo->pool, tvb,
+ 0, tvb_reported_length(tvb), ENC_ASCII | ENC_NA), BUFFER_SIZE_MORE);
}
static void
-private_data_add_moreCinfo_float(asn1_ctx_t *actx, tvbuff_t *tvb)
+private_data_add_moreCinfo_float(asn1_ctx_t* actx, tvbuff_t* tvb)
{
- mms_private_data_t *private_data = (mms_private_data_t*)mms_get_private_data(actx);
- snprintf(private_data->moreCinfo, BUFFER_SIZE_MORE,
- " %f", tvb_get_ieee_float(tvb, 1, ENC_BIG_ENDIAN));
+ mms_private_data_t* private_data = (mms_private_data_t*)mms_get_private_data(actx);
+ snprintf(private_data->moreCinfo, BUFFER_SIZE_MORE,
+ " %f", tvb_get_ieee_float(tvb, 1, ENC_BIG_ENDIAN));
}
static char*
-private_data_get_moreCinfo(asn1_ctx_t *actx)
+private_data_get_moreCinfo(asn1_ctx_t* actx)
{
- mms_private_data_t *private_data = (mms_private_data_t*)mms_get_private_data(actx);
- return private_data->moreCinfo;
+ mms_private_data_t* private_data = (mms_private_data_t*)mms_get_private_data(actx);
+ return private_data->moreCinfo;
}
/*****************************************************************************/
@@ -1036,19 +1354,142 @@ static int dissect_mms_VariableSpecification(bool implicit_tag _U_, tvbuff_t *tv
static int dissect_mms_AlternateAccess(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
/* Data -> Data/array -> Data */
+/* Data -> Data/structure -> Data */
static int dissect_mms_Data(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
+static int * const ReportedOptFlds_bits[] = {
+ &hf_mms_ReportedOptFlds_reserved,
+ &hf_mms_ReportedOptFlds_sequence_number,
+ &hf_mms_ReportedOptFlds_report_time_stamp,
+ &hf_mms_ReportedOptFlds_reason_for_inclusion,
+ &hf_mms_ReportedOptFlds_data_set_name,
+ &hf_mms_ReportedOptFlds_data_reference,
+ &hf_mms_ReportedOptFlds_buffer_overflow,
+ &hf_mms_ReportedOptFlds_entryID,
+ &hf_mms_ReportedOptFlds_conf_revision,
+ &hf_mms_ReportedOptFlds_segmentation,
+ NULL
+};
+
+static int
+dissect_mms_ReportedOptFlds(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
+ ReportedOptFlds_bits, 10, hf_index, ett_mms_ReportedOptFlds,
+ &parameter_tvb);
+
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv && parameter_tvb){
+ mms_priv->reported_optflds = tvb_get_ntohs(parameter_tvb,0);
+ }
+
+
+ return offset;
+}
+
+
static int
dissect_mms_Unsigned32(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- guint32 val;
+ uint32_t val;
+ conversation_t *conversation;
+ mms_conv_info_t *mms_info;
+ mms_transaction_t *mms_trans;
+
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
&val);
- if (hf_index == hf_mms_invokeID)
- private_data_add_preCinfo(actx, val);
+ if (hf_index == hf_mms_invokeID){
+ mms_actx_private_data_t* mms_priv = (mms_actx_private_data_t*)actx->private_data;
+ if(mms_priv){
+ mms_priv->invokeid=val;
+ private_data_add_preCinfo(actx, val);
+ conversation = find_or_create_conversation(actx->pinfo);
+
+ mms_info = (mms_conv_info_t *)conversation_get_proto_data(conversation, proto_mms);
+ if (!mms_info) {
+ /*
+ * No. Attach that information to the conversation, and add
+ * it to the list of information structures.
+ */
+ mms_info = wmem_new(wmem_file_scope(), mms_conv_info_t);
+ mms_info->pdus=wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal);
+
+ conversation_add_proto_data(conversation, proto_mms, mms_info);
+ }
+ /* Request or response? */
+ bool is_request;
+
+ switch(mms_priv->mms_pdu_type){
+ case 0:
+ /* Confirmed-RequestPDU */
+ is_request = true;
+ break;
+ case 1:
+ /* confirmed-ResponsePDU */
+ is_request = false;
+ break;
+ case 2:
+ /* Confirmed-ErrorPDU */
+ is_request = false;
+ break;
+ default:
+ is_request = false;
+ break;
+ }
+
+ if (!PINFO_FD_VISITED(actx->pinfo)) {
+ if (is_request==true) {
+ /* This is a request */
+ mms_trans=wmem_new0(wmem_file_scope(), mms_transaction_t);
+ mms_trans->req_frame = actx->pinfo->num;
+ mms_trans->req_time = actx->pinfo->fd->abs_ts;
+ wmem_map_insert(mms_info->pdus, GUINT_TO_POINTER(mms_priv->invokeid), (void *)mms_trans);
+ } else {
+ mms_trans=(mms_transaction_t *)wmem_map_lookup(mms_info->pdus, GUINT_TO_POINTER(mms_priv->invokeid));
+ if (mms_trans) {
+ mms_trans->rep_frame = actx->pinfo->num;
+ }
+ }
+ } else {
+ mms_trans=(mms_transaction_t *)wmem_map_lookup(mms_info->pdus, GUINT_TO_POINTER(mms_priv->invokeid));
+ }
+ if (!mms_trans) {
+ /* create a "fake" mms_trans structure */
+ mms_trans=wmem_new0(actx->pinfo->pool, mms_transaction_t);
+ mms_trans->req_frame = 0;
+ mms_trans->rep_frame = 0;
+ mms_trans->req_time = actx->pinfo->fd->abs_ts;
+ }
+ mms_priv->mms_trans_p = mms_trans;
+
+ /* print state tracking in the tree */
+ if (is_request) {
+ /* This is a request */
+ if (mms_trans->rep_frame) {
+ proto_item *it;
+
+ it = proto_tree_add_uint(actx->subtree.top_tree, hf_mms_response_in, tvb, 0, 0, mms_trans->rep_frame);
+ proto_item_set_generated(it);
+ }
+ } else {
+ /* This is a reply */
+ if (mms_trans->req_frame) {
+ proto_item *it;
+ nstime_t ns;
+
+ it = proto_tree_add_uint(actx->subtree.top_tree, hf_mms_response_to, tvb, 0, 0, mms_trans->req_frame);
+ proto_item_set_generated(it);
+
+ nstime_delta(&ns, &actx->pinfo->fd->abs_ts, &mms_trans->req_time);
+ it = proto_tree_add_time(actx->subtree.top_tree, hf_mms_response_time, tvb, 0, 0, &ns);
+ proto_item_set_generated(it);
+ }
+ }
+ }
+ }
return offset;
@@ -1058,15 +1499,64 @@ dissect_mms_Unsigned32(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static int
dissect_mms_Identifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- int offset_id = offset;
+ tvbuff_t *parameter_tvb = NULL;
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_VisibleString,
actx, tree, tvb, offset, hf_index,
- NULL);
-
- if ((hf_index == hf_mms_domainId) || (hf_index == hf_mms_itemId)) {
- if (tvb_get_guint8(tvb, offset_id) == 0x1a)
- private_data_add_moreCinfo_id(actx,tvb);
- }
+ &parameter_tvb);
+
+ if (parameter_tvb) {
+ if (hf_index == hf_mms_domainId) {
+ private_data_add_moreCinfo_id(actx,parameter_tvb);
+ }
+ if ((mms_priv) && ((hf_index == hf_mms_objectName_domain_specific_itemId)||
+ (hf_index ==hf_mms_listOfIdentifier_item))) {
+ private_data_add_moreCinfo_id(actx,parameter_tvb);
+ if((mms_priv->mms_trans_p)&&(parameter_tvb)){
+ mms_priv->itemid_str = tvb_get_string_enc(actx->pinfo->pool, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_ASCII|ENC_NA);
+ if(g_str_has_suffix(mms_priv->itemid_str,"$ctlModel")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_CTLMODEL;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"$q")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_Q;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"$Oper")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_OPER;
+ }else if((g_str_has_suffix(mms_priv->itemid_str,"$Oper$Check")) || (g_str_has_suffix(mms_priv->itemid_str,"$SBOw$Check"))){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_CHECK;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"$orCat")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_OR_CAT;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"Beh$stVal")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_BEH$STVAL;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"Mod$stVal")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_MOD$STVAL;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"Health$stVal")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_HEALTH$STVAL;
+ }else if((g_strrstr(mms_priv->itemid_str,"$BR$") || g_strrstr(mms_priv->itemid_str,"$RP$"))){ //GetBRCBValues,GetURCBValues,)
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_$BR$_OR_$RP$;
+ }else if(g_str_has_suffix(mms_priv->itemid_str,"$SBOw")){
+ mms_priv->mms_trans_p->itemid = IEC61850_ITEM_ID_$SBOW;
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE;
+ }
+ }
+ }
+
+ if ((mms_priv) && (hf_index == hf_mms_vmd_specific)){
+ const char *vmd_specific_str = tvb_get_string_enc(actx->pinfo->pool, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_ASCII|ENC_NA);
+ if (strcmp(vmd_specific_str, "RPT") == 0) {
+ mms_priv->vmd_specific = IEC61850_8_1_RPT;
+ }
+ }
+ }
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_ObjectName_domain_specific_itemid(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_mms_Identifier(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
@@ -1074,7 +1564,7 @@ dissect_mms_Identifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static const ber_sequence_t T_domain_specific_sequence[] = {
{ &hf_mms_domainId , BER_CLASS_UNI, BER_UNI_TAG_VisibleString, BER_FLAGS_NOOWNTAG, dissect_mms_Identifier },
- { &hf_mms_itemId , BER_CLASS_UNI, BER_UNI_TAG_VisibleString, BER_FLAGS_NOOWNTAG, dissect_mms_Identifier },
+ { &hf_mms_objectName_domain_specific_itemId, BER_CLASS_UNI, BER_UNI_TAG_VisibleString, BER_FLAGS_NOOWNTAG, dissect_mms_ObjectName_domain_specific_itemid },
{ NULL, 0, 0, 0, NULL }
};
@@ -1241,7 +1731,7 @@ dissect_mms_Status_Request(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset
}
-static const value_string mms_T_objectClass_vals[] = {
+static const value_string mms_ObjectClass_vals[] = {
{ 0, "nammedVariable" },
{ 1, "scatteredAccess" },
{ 2, "namedVariableList" },
@@ -1259,9 +1749,17 @@ static const value_string mms_T_objectClass_vals[] = {
static int
-dissect_mms_T_objectClass(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_mms_ObjectClass(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ uint32_t val;
+
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
- NULL);
+ &val);
+
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->objectclass = val;
+ }
+
return offset;
}
@@ -1273,7 +1771,7 @@ static const value_string mms_T_extendedObjectClass_vals[] = {
};
static const ber_choice_t T_extendedObjectClass_choice[] = {
- { 0, &hf_mms_objectClass , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_T_objectClass },
+ { 0, &hf_mms_objectClass , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_ObjectClass },
{ 0, NULL, 0, 0, 0, NULL }
};
@@ -1296,14 +1794,14 @@ dissect_mms_NULL(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_
}
-static const value_string mms_T_objectScope_vals[] = {
+static const value_string mms_ObjectScope_vals[] = {
{ 0, "vmdSpecific" },
{ 1, "domainSpecific" },
{ 2, "aaSpecific" },
{ 0, NULL }
};
-static const ber_choice_t T_objectScope_choice[] = {
+static const ber_choice_t ObjectScope_choice[] = {
{ 0, &hf_mms_vmdSpecific , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_NULL },
{ 1, &hf_mms_domainSpecific , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_mms_Identifier },
{ 2, &hf_mms_aaSpecific , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_mms_NULL },
@@ -1311,10 +1809,18 @@ static const ber_choice_t T_objectScope_choice[] = {
};
static int
-dissect_mms_T_objectScope(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_mms_ObjectScope(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ int val;
+
offset = dissect_ber_choice(actx, tree, tvb, offset,
- T_objectScope_choice, hf_index, ett_mms_T_objectScope,
- NULL);
+ ObjectScope_choice, hf_index, ett_mms_ObjectScope,
+ &val);
+
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->objectscope = val;
+ }
+
return offset;
}
@@ -1322,7 +1828,7 @@ dissect_mms_T_objectScope(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _
static const ber_sequence_t GetNameList_Request_sequence[] = {
{ &hf_mms_extendedObjectClass, BER_CLASS_CON, 0, 0, dissect_mms_T_extendedObjectClass },
- { &hf_mms_objectScope , BER_CLASS_CON, 1, 0, dissect_mms_T_objectScope },
+ { &hf_mms_objectScope , BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_mms_ObjectScope },
{ &hf_mms_getNameList_Request_continueAfter, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mms_Identifier },
{ NULL, 0, 0, 0, NULL }
};
@@ -1345,7 +1851,7 @@ dissect_mms_Identify_Request(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offse
}
-static const value_string mms_T_objectClass_01_vals[] = {
+static const value_string mms_T_objectClass_vals[] = {
{ 0, "namedVariable" },
{ 1, "scatteredAccess" },
{ 2, "namedVariableList" },
@@ -1363,7 +1869,7 @@ static const value_string mms_T_objectClass_01_vals[] = {
static int
-dissect_mms_T_objectClass_01(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_mms_T_objectClass(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
@@ -1377,7 +1883,7 @@ static const value_string mms_T_extendedObjectClass_01_vals[] = {
};
static const ber_choice_t T_extendedObjectClass_01_choice[] = {
- { 0, &hf_mms_objectClass_01 , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_T_objectClass_01 },
+ { 0, &hf_mms_objectClass_01 , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_T_objectClass },
{ 0, NULL, 0, 0, 0, NULL }
};
@@ -1557,7 +2063,7 @@ static const ber_choice_t TypeSpecification_choice[] = {
static int
dissect_mms_TypeSpecification(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- // TypeSpecification → TypeSpecification/array → TypeSpecification
+ // TypeSpecification -> TypeSpecification/array -> TypeSpecification
actx->pinfo->dissection_depth += 2;
increment_dissection_depth(actx->pinfo);
offset = dissect_ber_choice(actx, tree, tvb, offset,
@@ -1747,7 +2253,7 @@ static const ber_sequence_t AlternateAccess_sequence_of[1] = {
static int
dissect_mms_AlternateAccess(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- // AlternateAccess → AlternateAccess/_item → AlternateAccessSelection → AlternateAccessSelection/selectAlternateAccess → AlternateAccess
+ // AlternateAccess -> AlternateAccess/_item -> AlternateAccessSelection -> AlternateAccessSelection/selectAlternateAccess -> AlternateAccess
actx->pinfo->dissection_depth += 4;
increment_dissection_depth(actx->pinfo);
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
@@ -1808,7 +2314,7 @@ static const ber_choice_t VariableSpecification_choice[] = {
static int
dissect_mms_VariableSpecification(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- // VariableSpecification → ScatteredAccessDescription → ScatteredAccessDescription/_item → VariableSpecification
+ // VariableSpecification -> ScatteredAccessDescription -> ScatteredAccessDescription/_item -> VariableSpecification
actx->pinfo->dissection_depth += 3;
increment_dissection_depth(actx->pinfo);
offset = dissect_ber_choice(actx, tree, tvb, offset,
@@ -1887,7 +2393,7 @@ dissect_mms_Read_Request(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U
static const ber_sequence_t SEQUENCE_OF_Data_sequence_of[1] = {
- { &hf_mms_listOfData_item , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_Data },
+ { &hf_mms_array_item , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_Data },
};
static int
@@ -1899,12 +2405,137 @@ dissect_mms_SEQUENCE_OF_Data(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offse
}
+static const ber_sequence_t T_structure_01_sequence_of[1] = {
+ { &hf_mms_structure_item , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_Data },
+};
static int
-dissect_mms_BIT_STRING(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_mms_T_structure_01(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if((mms_priv)&& (mms_priv->mms_trans_p)){
+ if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 3){
+ /* IEC 61850-8-1 origin, if we hgave a struct here Tm was not there */
+ hf_index = hf_mms_iec61850_origin;
+ mms_priv->data_cnt++;
+ }else if(mms_priv->data_cnt == 4){
+ /* IEC 61850-8-1 origin, if we hgave a struct here Tm was not there */
+ hf_index = hf_mms_iec61850_origin;
+ }
+ }
+ }
+ offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+ T_structure_01_sequence_of, hf_index, ett_mms_T_structure_01);
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_T_boolean(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if((mms_priv) && (mms_priv->mms_trans_p)){
+ if(mms_priv->vmd_specific == IEC61850_8_1_RPT ){
+ if(mms_priv->listOfAccessResult_cnt == 6){
+ /* IEC 61850-8-1 BufOvfl */
+ hf_index = hf_mms_iec61850_bufovfl;
+ }
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 2){
+ /* IEC 61850-8-1 ctlVal */
+ hf_index = hf_mms_iec61850_ctlval;
+ }else if(mms_priv->data_cnt == 9){
+ /* IEC 61850-8-1 Test */
+ hf_index = hf_mms_iec61850_test;
+ }
+ }
+ }
+ offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_T_data_bit_string(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+static int* const quality_field_bits_oct1[] = {
+ &hf_mms_iec61850_QualityC0,
+ &hf_mms_iec61850_Quality20,
+ &hf_mms_iec61850_Quality10,
+ &hf_mms_iec61850_Quality8,
+ &hf_mms_iec61850_Quality4,
+ &hf_mms_iec61850_Quality2,
+ &hf_mms_iec61850_Quality1,
+ NULL
+};
+
+static int* const quality_field_bits_oct2[] = {
+ &hf_mms_iec61850_Quality0080,
+ &hf_mms_iec61850_Quality0040,
+ &hf_mms_iec61850_Quality0020,
+ &hf_mms_iec61850_Quality0010,
+ &hf_mms_iec61850_Quality0008,
+ NULL
+};
+
+static int * const mms_iec61850_chec_bits[] = {
+ &hf_mms_iec61850_check_b1,
+ &hf_mms_iec61850_check_b0,
+ NULL
+};
+ tvbuff_t *parameter_tvb = NULL;
+ proto_tree *sub_tree;
+
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if((mms_priv)&&(mms_priv->mms_trans_p)){
+ if(mms_priv->vmd_specific == IEC61850_8_1_RPT ){
+ if(mms_priv->listOfAccessResult_cnt == 2){
+ /* IEC 61850-8-1 Reported OptFlds */
+ return dissect_mms_ReportedOptFlds(implicit_tag, tvb, offset, actx, tree, hf_mms_iec61850_reported_optflds);
+ }else{
+ if(mms_priv->listOfAccessResult_cnt == 11){
+ hf_index = hf_mms_iec61850_inclusion_bitstring;
+ }
+ }
+ }else if (mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_Q){
+ hf_index = hf_mms_iec61850_quality_bitstring;
+ }else if (mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_CHECK){
+ hf_index = hf_mms_iec61850_check_bitstring;
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 10){
+ hf_index = hf_mms_iec61850_check_bitstring;
+ }
+ }
+ }
+
offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
NULL, 0, hf_index, -1,
- NULL);
+ &parameter_tvb);
+
+
+ if((mms_priv)&&(parameter_tvb) && (mms_priv->mms_trans_p)){
+ if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_Q){
+ sub_tree = proto_item_add_subtree(actx->created_item, ett_mms_iec61850_quality_bitstring);
+ proto_tree_add_bitmask_list(sub_tree, parameter_tvb, 0, 1, quality_field_bits_oct1, ENC_NA);
+ proto_tree_add_bitmask_list(sub_tree, parameter_tvb, 1, 1, quality_field_bits_oct2, ENC_NA);
+ }else if (mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_CHECK){
+ sub_tree = proto_item_add_subtree(actx->created_item, ett_mms_iec61850_check_bitstring);
+ proto_tree_add_bitmask_list(sub_tree, parameter_tvb, 0, 1, mms_iec61850_chec_bits, ENC_NA);
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 10){
+ sub_tree = proto_item_add_subtree(actx->created_item, ett_mms_iec61850_check_bitstring);
+ proto_tree_add_bitmask_list(sub_tree, parameter_tvb, 0, 1, mms_iec61850_chec_bits, ENC_NA);
+ }
+ }
+ }
+
return offset;
}
@@ -1912,10 +2543,61 @@ dissect_mms_BIT_STRING(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static int
-dissect_mms_INTEGER(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_mms_T_integer(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if((mms_priv) && (mms_priv->mms_trans_p)){
+ if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_CTLMODEL){
+ hf_index = hf_mms_iec61850_ctlModel;
+ }else if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_OR_CAT){
+ hf_index = hf_mms_iec61850_orcategory;
+ }else if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_BEH$STVAL){
+ hf_index = hf_mms_iec61850_beh$stval;
+ }else if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_MOD$STVAL){
+ hf_index = hf_mms_iec61850_beh$stval;
+ }else if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_HEALTH$STVAL){
+ hf_index = hf_mms_iec61850_health$stval;
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 5){
+ /* IEC 61850-8-1 Origin Catagory */
+ hf_index = hf_mms_iec61850_origin_orcat;
+ }
+ }
+ }
+
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_T_unsigned(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if((mms_priv) && (mms_priv->mms_trans_p)){
+ if(mms_priv->vmd_specific == IEC61850_8_1_RPT ){
+ if(mms_priv->listOfAccessResult_cnt == 3){
+ /* IEC 61850-8-1 SeqNum */
+ hf_index = hf_mms_iec61850_seqnum;
+ }else if(mms_priv->listOfAccessResult_cnt == 8){
+ /* IEC 61850-8-1 ConfRev */
+ hf_index = hf_mms_iec61850_confrev;
+ }
+ }
+ if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 7){
+ hf_index = hf_mms_iec61850_ctlNum;
+ }
+ }
+ }
+ offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+ NULL);
+
+
+
return offset;
}
@@ -1926,7 +2608,53 @@ dissect_mms_FloatingPoint(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
- private_data_add_moreCinfo_float(actx, tvb);
+ private_data_add_moreCinfo_float(actx, tvb);
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_T_data_octet_string(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if((mms_priv)&& (mms_priv->mms_trans_p)){
+ if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 6){
+ hf_index = hf_mms_iec61850_origin_orident;
+ }
+ }
+ }
+ offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
+ NULL);
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_T_data_visible_string(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ if(mms_priv->vmd_specific == IEC61850_8_1_RPT ){
+ if(mms_priv->listOfAccessResult_cnt == 1){
+ /* IEC 61850-8-1 RptID */
+ hf_index = hf_mms_iec61850_rptid;
+ }else if(mms_priv->listOfAccessResult_cnt == 5){
+ /* IEC 61850-8-1 DatSet */
+ hf_index = hf_mms_iec61850_datset;
+ }
+ }
+ }
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_VisibleString,
+ actx, tree, tvb, offset, hf_index,
+ NULL);
+
return offset;
@@ -1937,53 +2665,94 @@ dissect_mms_FloatingPoint(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _
static int
dissect_mms_TimeOfDay(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- guint32 len;
- guint32 milliseconds;
- guint16 days;
- gchar * ptime;
- nstime_t ts;
+ uint32_t len;
+ uint32_t milliseconds;
+ uint16_t days;
+ char * ptime;
+ nstime_t ts;
+
+ len = tvb_reported_length_remaining(tvb, offset);
+
+ if(len == 4)
+ {
+ milliseconds = tvb_get_ntohl(tvb, offset);
+ ptime = signed_time_msecs_to_str(actx->pinfo->pool, milliseconds);
+
+ if(hf_index > 0)
+ {
+ proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime);
+ }
+ return offset;
+ }
+
+ if(len == 6)
+ {
+ milliseconds = tvb_get_ntohl(tvb, offset);
+ days = tvb_get_ntohs(tvb, offset+4);
+
+ /* 5113 days between 01-01-1970 and 01-01-1984 */
+ /* 86400 seconds in one day */
+
+ ts.secs = (days + 5113) * 86400 + milliseconds / 1000;
+ ts.nsecs = (milliseconds % 1000) * 1000000U;
+
+ ptime = abs_time_to_str(actx->pinfo->pool, &ts, ABSOLUTE_TIME_UTC, true);
+ if(hf_index > 0)
+ {
+ proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime);
+ }
- len = tvb_reported_length_remaining(tvb, offset);
+ return offset;
+ }
- if(len == 4)
- {
- milliseconds = tvb_get_ntohl(tvb, offset);
- ptime = signed_time_msecs_to_str(actx->pinfo->pool, milliseconds);
+ proto_tree_add_expert_format(tree, actx->pinfo, &ei_mms_mal_timeofday_encoding,
+ tvb, offset, len, "BER Error: malformed TimeOfDay encoding, length must be 4 or 6 bytes");
+ if(hf_index > 0)
+ {
+ proto_tree_add_string(tree, hf_index, tvb, offset, len, "????");
+ }
+
+
+ return offset;
+}
- if(hf_index >= 0)
- {
- proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime);
- }
- return offset;
- }
- if(len == 6)
- {
- milliseconds = tvb_get_ntohl(tvb, offset);
- days = tvb_get_ntohs(tvb, offset+4);
- /* 5113 days between 01-01-1970 and 01-01-1984 */
- /* 86400 seconds in one day */
+static int
+dissect_mms_T_data_binary_time(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ if(mms_priv->vmd_specific == IEC61850_8_1_RPT ){
+ if(mms_priv->listOfAccessResult_cnt == 4){
+ /* IEC 61850-8-1 TimeOfEntry */
+ hf_index = hf_mms_iec61850_timeofentry;
+ }
+ }
+ }
+ offset = dissect_mms_TimeOfDay(implicit_tag, tvb, offset, actx, tree, hf_index);
+
- ts.secs = (days + 5113) * 86400 + milliseconds / 1000;
- ts.nsecs = (milliseconds % 1000) * 1000000U;
- ptime = abs_time_to_str(actx->pinfo->pool, &ts, ABSOLUTE_TIME_UTC, TRUE);
- if(hf_index >= 0)
- {
- proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime);
- }
+ return offset;
+}
- return offset;
- }
- proto_tree_add_expert_format(tree, actx->pinfo, &ei_mms_mal_timeofday_encoding,
- tvb, offset, len, "BER Error: malformed TimeOfDay encoding, length must be 4 or 6 bytes");
- if(hf_index >= 0)
- {
- proto_tree_add_string(tree, hf_index, tvb, offset, len, "????");
- }
+static int
+dissect_mms_INTEGER(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_mms_BIT_STRING(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
+ NULL, 0, hf_index, -1,
+ NULL);
return offset;
}
@@ -2013,39 +2782,60 @@ dissect_mms_MMSString(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static int
dissect_mms_UtcTime(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- guint32 len;
- guint32 seconds;
- guint32 fraction;
- guint32 nanoseconds;
- nstime_t ts;
- gchar * ptime;
+ uint32_t len;
+ uint32_t seconds;
+ uint32_t fraction;
+ uint32_t nanoseconds;
+ nstime_t ts;
+ char * ptime;
- len = tvb_reported_length_remaining(tvb, offset);
+ static int * const TimeQuality_bits[] = {
+ &hf_mms_iec61850_timequality80,
+ &hf_mms_iec61850_timequality40,
+ &hf_mms_iec61850_timequality20,
+ &hf_mms_iec61850_timequality1F,
+ NULL
+ };
+ len = tvb_reported_length_remaining(tvb, offset);
- if(len != 8)
- {
- proto_tree_add_expert_format(tree, actx->pinfo, &ei_mms_mal_utctime_encoding,
- tvb, offset, len, "BER Error: malformed IEC61850 UTCTime encoding, length must be 8 bytes");
- if(hf_index >= 0)
- {
- proto_tree_add_string(tree, hf_index, tvb, offset, len, "????");
- }
- return offset;
- }
+ if(len != 8)
+ {
+ /* The octet format shall be (using ASN.1 bstring notation):
+ * ‘ssssssssssssssssssssssssssssssssffffffffffffffffffffffffqqqqqqqq’B
+ * q stands for TimeQuality, i.e. reserved to represent TimeQuality based upon the referencing standard.
+ */
+ proto_tree_add_expert_format(tree, actx->pinfo, &ei_mms_mal_utctime_encoding,
+ tvb, offset, len, "BER Error: malformed IEC61850 UTCTime encoding, length must be 8 bytes");
+ if(hf_index > 0)
+ {
+ proto_tree_add_string(tree, hf_index, tvb, offset, len, "????");
+ }
+ return offset;
+ }
- seconds = tvb_get_ntohl(tvb, offset);
- fraction = tvb_get_ntoh24(tvb, offset+4) * 0x100; /* Only 3 bytes are recommended */
- nanoseconds = (guint32)( ((guint64)fraction * G_GUINT64_CONSTANT(1000000000)) / G_GUINT64_CONSTANT(0x100000000) ) ;
+ seconds = tvb_get_ntohl(tvb, offset);
+ fraction = tvb_get_ntoh24(tvb, offset+4) * 0x100; /* Only 3 bytes are recommended */
+ nanoseconds = (uint32_t )( ((uint64_t)fraction * UINT64_C(1000000000)) / UINT64_C(0x100000000) ) ;
- ts.secs = seconds;
- ts.nsecs = nanoseconds;
+ ts.secs = seconds;
+ ts.nsecs = nanoseconds;
- ptime = abs_time_to_str(actx->pinfo->pool, &ts, ABSOLUTE_TIME_UTC, TRUE);
+ ptime = abs_time_to_str(actx->pinfo->pool, &ts, ABSOLUTE_TIME_UTC, true);
+
+ if(hf_index > 0)
+ {
+ mms_actx_private_data_t* mms_priv = (mms_actx_private_data_t*)actx->private_data;
+ if((mms_priv)&& (mms_priv->mms_trans_p)){
+ if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ if(mms_priv->data_cnt == 8){
+ hf_index = hf_mms_iec61850_T;
+ }
+ }
+ }
+ proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime);
+ proto_tree_add_bitmask_list(tree, tvb, offset+7, 1, TimeQuality_bits, ENC_BIG_ENDIAN);
+ }
- if(hf_index >= 0)
- {
- proto_tree_add_string(tree, hf_index, tvb, offset, len, ptime);
- }
@@ -2074,15 +2864,15 @@ static const value_string mms_Data_vals[] = {
static const ber_choice_t Data_choice[] = {
{ 1, &hf_mms_array_01 , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_mms_SEQUENCE_OF_Data },
- { 2, &hf_mms_structure_01 , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_mms_SEQUENCE_OF_Data },
- { 3, &hf_mms_boolean_01 , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_mms_BOOLEAN },
- { 4, &hf_mms_data_bit_string , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_mms_BIT_STRING },
- { 5, &hf_mms_integer_01 , BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_mms_INTEGER },
- { 6, &hf_mms_unsigned_01 , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_mms_INTEGER },
+ { 2, &hf_mms_structure_01 , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_mms_T_structure_01 },
+ { 3, &hf_mms_boolean_01 , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_mms_T_boolean },
+ { 4, &hf_mms_data_bit_string , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_mms_T_data_bit_string },
+ { 5, &hf_mms_integer_01 , BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_mms_T_integer },
+ { 6, &hf_mms_unsigned_01 , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_mms_T_unsigned },
{ 7, &hf_mms_floating_point , BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_mms_FloatingPoint },
- { 9, &hf_mms_data_octet_string, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_mms_OCTET_STRING },
- { 10, &hf_mms_data_visible_string, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_mms_VisibleString },
- { 12, &hf_mms_data_binary_time, BER_CLASS_CON, 12, BER_FLAGS_IMPLTAG, dissect_mms_TimeOfDay },
+ { 9, &hf_mms_data_octet_string, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_mms_T_data_octet_string },
+ { 10, &hf_mms_data_visible_string, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_mms_T_data_visible_string },
+ { 12, &hf_mms_data_binary_time, BER_CLASS_CON, 12, BER_FLAGS_IMPLTAG, dissect_mms_T_data_binary_time },
{ 13, &hf_mms_bcd_01 , BER_CLASS_CON, 13, BER_FLAGS_IMPLTAG, dissect_mms_INTEGER },
{ 14, &hf_mms_booleanArray , BER_CLASS_CON, 14, BER_FLAGS_IMPLTAG, dissect_mms_BIT_STRING },
{ 15, &hf_mms_objId_01 , BER_CLASS_CON, 15, BER_FLAGS_IMPLTAG, dissect_mms_OBJECT_IDENTIFIER },
@@ -2093,22 +2883,51 @@ static const ber_choice_t Data_choice[] = {
static int
dissect_mms_Data(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- // Data → Data/array → Data
+ // Data -> Data/array -> Data
actx->pinfo->dissection_depth += 2;
increment_dissection_depth(actx->pinfo);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->data_cnt += 1;
+ }
+
offset = dissect_ber_choice(actx, tree, tvb, offset,
Data_choice, hf_index, ett_mms_Data,
NULL);
+
+
actx->pinfo->dissection_depth -= 2;
decrement_dissection_depth(actx->pinfo);
return offset;
}
+static const ber_sequence_t T_listOfData_sequence_of[1] = {
+ { &hf_mms_listOfData_item , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_Data },
+};
+
+static int
+dissect_mms_T_listOfData(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->data_cnt = 0;
+ }
+ offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+ T_listOfData_sequence_of, hf_index, ett_mms_T_listOfData);
+
+ if(mms_priv){
+ mms_priv->data_cnt = 0;
+ }
+
+
+ return offset;
+}
+
+
static const ber_sequence_t Write_Request_sequence[] = {
{ &hf_mms_variableAccessSpecificatn, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_VariableAccessSpecification },
- { &hf_mms_listOfData , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_SEQUENCE_OF_Data },
+ { &hf_mms_listOfData , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_T_listOfData },
{ NULL, 0, 0, 0, NULL }
};
@@ -2435,7 +3254,7 @@ dissect_mms_Output_Request(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset
static int
dissect_mms_T_ap_title(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- offset=dissect_acse_AP_title(FALSE, tvb, offset, actx, tree, hf_mms_ap_title);
+ offset=dissect_acse_AP_title(false, tvb, offset, actx, tree, hf_mms_ap_title);
return offset;
@@ -2445,7 +3264,7 @@ dissect_mms_T_ap_title(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
static int
dissect_mms_T_ap_invocation_id(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- offset=dissect_acse_AP_invocation_identifier(FALSE, tvb, offset, actx, tree, hf_mms_ap_invocation_id);
+ offset=dissect_acse_AP_invocation_identifier(false, tvb, offset, actx, tree, hf_mms_ap_invocation_id);
return offset;
@@ -2455,7 +3274,7 @@ dissect_mms_T_ap_invocation_id(bool implicit_tag _U_, tvbuff_t *tvb _U_, int off
static int
dissect_mms_T_ae_qualifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- offset=dissect_acse_AE_qualifier(FALSE, tvb, offset, actx, tree, hf_mms_ae_qualifier);
+ offset=dissect_acse_AE_qualifier(false, tvb, offset, actx, tree, hf_mms_ae_qualifier);
return offset;
@@ -2465,7 +3284,7 @@ dissect_mms_T_ae_qualifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset
static int
dissect_mms_T_ae_invocation_id(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- offset=dissect_acse_AE_invocation_identifier(FALSE, tvb, offset, actx, tree, hf_mms_ae_invocation_id);
+ offset=dissect_acse_AE_invocation_identifier(false, tvb, offset, actx, tree, hf_mms_ae_invocation_id);
return offset;
@@ -4644,10 +5463,45 @@ static const ber_choice_t ConfirmedServiceRequest_choice[] = {
static int
dissect_mms_ConfirmedServiceRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ int8_t ber_class;
+ bool pc;
+ int32_t tag;
+
+ get_ber_identifier(tvb, offset, &ber_class, &pc, &tag);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->confirmedservice_type = tag;
+ }
+
offset = dissect_ber_choice(actx, tree, tvb, offset,
ConfirmedServiceRequest_choice, hf_index, ett_mms_ConfirmedServiceRequest,
NULL);
+
+ if(mms_priv && mms_priv->mms_trans_p){
+ if(mms_priv->confirmedservice_type == MMS_CONFIRMEDSERVICE_GETNAMELIST){
+ if(mms_priv->objectclass == MMS_OBJECTCLASS_DOMAIN){
+ if(mms_priv->objectscope == MMS_OBJECTSCOPE_VMDSPECIFIC){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_GET_SERV_DIR;
+ }
+ }else if(mms_priv->objectclass == MMS_OBJECTCLASS_NAMMEDVARIABLE){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_GETLOGICALDEVICEDIRECTORY;
+ }else if(mms_priv->objectclass == MMS_OBJECTCLASS_NAMEDVARIABLELIST){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_GETDATASETDIRECTORY;
+ }
+ }else if(mms_priv->confirmedservice_type == MMS_CONFIRMEDSERVICE_GETNAMEDVARIABLELISTATTRIBUTES){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_GETDATASETDIRECTORY;
+ }else if(mms_priv->confirmedservice_type == MMS_CONFIRMEDSERVICE_READ){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_READ;
+ }else if(mms_priv->confirmedservice_type == MMS_CONFIRMEDSERVICE_WRITE){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_WRITE;
+ }else if(mms_priv->confirmedservice_type == MMS_CONFIRMEDSERVICE_GETVARIABLEACCESSATTRIBUTES){
+ mms_priv->mms_trans_p->conf_serv_pdu_type_req = MMS_IEC_61850_CONF_SERV_PDU_GETDATADIRECTORY;
+ }
+ }
+
+
+
return offset;
}
@@ -4682,9 +5536,16 @@ static const ber_sequence_t Confirmed_RequestPDU_sequence[] = {
static int
dissect_mms_Confirmed_RequestPDU(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Confirmed_RequestPDU_sequence, hf_index, ett_mms_Confirmed_RequestPDU);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(tree){
+ mms_priv->pdu_item = (proto_item*)tree->last_child;
+ }
+
+
return offset;
}
@@ -4846,9 +5707,89 @@ static const ber_choice_t AccessResult_choice[] = {
static int
dissect_mms_AccessResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ int branch_taken;
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ /* If listOfAccessResult_cnt > 2 we are into the optional data.
+ * if data is not present increase count.
+ */
+ bool present;
+ do {
+ mms_priv->listOfAccessResult_cnt+=1;
+ present = true;
+ switch(mms_priv->listOfAccessResult_cnt){
+ case 1: /*RptID*/
+ break;
+ case 2: /* Reported OptFlds */
+ break;
+ case 3: /* SeqNum Shall be present if OptFlds.sequence-number is true */
+ if((mms_priv->reported_optflds & 0x4000) != 0x4000){
+ present = false;
+ }
+ break;
+ case 4: /*TimeOfEntry Shall be present if OptFlds.report-time-stamp is true */
+ if((mms_priv->reported_optflds & 0x2000) != 0x2000){
+ present = false;
+ }
+ break;
+ case 5: /*DatSet Shall be present if OptFlds.data-set-name is true */
+ if((mms_priv->reported_optflds & 0x0800) !=0x0800){
+ present = false;
+ }
+ break;
+ case 6: /*BufOvfl Shall be present if OptFlds.buffer-overflow is true */
+ if((mms_priv->reported_optflds & 0x0200) !=0x0200){
+ present = false;
+ }
+ break;
+ case 7: /*EntryID Shall be present if OptFlds.entryID is true */
+ if((mms_priv->reported_optflds & 0x0100) !=0x0100){
+ present = false;
+ }
+ break;
+ case 8: /*ConfRev Shall be present if OptFlds.conf-rev is true */
+ if((mms_priv->reported_optflds & 0x0080) !=0x0080){
+ present = false;
+ }
+ break;
+ case 9: /*SubSeqNum Shall be present if OptFlds.segmentation is true */
+ if((mms_priv->reported_optflds & 0x0040) !=0x0040){
+ present = false;
+ }
+ break;
+ case 10: /*MoreSegmentsFollow Shall be present if OptFlds.segmentation is true */
+ if((mms_priv->reported_optflds & 0x0040) !=0x0040){
+ present = false;
+ }
+ break;
+ case 11: /*Inclusion-bitstring Shall be present */
+ break;
+ case 12: /*data-reference(s) Shall be present if OptFlds.data-reference is true */
+ if((mms_priv->reported_optflds & 0x0400) !=0x0400){
+ present = false;
+ }
+ break;
+ case 13: /*value(s) See AccessResult for value(s) */
+ break;
+ case 14: /*ReasonCode(s) Shall be present if OptFlds OptFlds.reason-for-inclusion is true */
+ if((mms_priv->reported_optflds & 0x1000) !=0x1000){
+ present = false;
+ }
+ break;
+ default:
+ break;
+ }
+ } while(!present);
+ }
+
offset = dissect_ber_choice(actx, tree, tvb, offset,
AccessResult_choice, hf_index, ett_mms_AccessResult,
- NULL);
+ &branch_taken);
+
+ if(mms_priv){
+ mms_priv->success = branch_taken;
+ }
+
return offset;
}
@@ -6536,7 +7477,7 @@ static const ber_choice_t ConfirmedServiceResponse_choice[] = {
{ 51, &hf_mms_alterEventConditionMonitoring_01, BER_CLASS_CON, 51, BER_FLAGS_IMPLTAG, dissect_mms_AlterEventConditionMonitoring_Response },
{ 52, &hf_mms_triggerEvent_01 , BER_CLASS_CON, 52, BER_FLAGS_IMPLTAG, dissect_mms_TriggerEvent_Response },
{ 53, &hf_mms_defineEventAction_01, BER_CLASS_CON, 53, BER_FLAGS_IMPLTAG, dissect_mms_DefineEventAction_Response },
- { 54, &hf_mms_deleteEventAction, BER_CLASS_CON, 54, BER_FLAGS_IMPLTAG, dissect_mms_DeleteEventAction_Response },
+ { 54, &hf_mms_confirmedServiceRequest_deleteEventAction_01, BER_CLASS_CON, 54, BER_FLAGS_IMPLTAG, dissect_mms_DeleteEventAction_Response },
{ 55, &hf_mms_getEventActionAttributes_01, BER_CLASS_CON, 55, BER_FLAGS_IMPLTAG, dissect_mms_GetEventActionAttributes_Response },
{ 56, &hf_mms_reportActionStatus, BER_CLASS_CON, 56, BER_FLAGS_IMPLTAG, dissect_mms_ReportEventActionStatus_Response },
{ 57, &hf_mms_defineEventEnrollment_01, BER_CLASS_CON, 57, BER_FLAGS_IMPLTAG, dissect_mms_DefineEventEnrollment_Response },
@@ -6564,10 +7505,22 @@ static const ber_choice_t ConfirmedServiceResponse_choice[] = {
static int
dissect_mms_ConfirmedServiceResponse(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ int8_t ber_class;
+ bool pc;
+ int32_t tag;
+
+ get_ber_identifier(tvb, offset, &ber_class, &pc, &tag);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->confirmedservice_type = tag;
+ }
+
offset = dissect_ber_choice(actx, tree, tvb, offset,
ConfirmedServiceResponse_choice, hf_index, ett_mms_ConfirmedServiceResponse,
NULL);
+
+
return offset;
}
@@ -6581,9 +7534,16 @@ static const ber_sequence_t Confirmed_ResponsePDU_sequence[] = {
static int
dissect_mms_Confirmed_ResponsePDU(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Confirmed_ResponsePDU_sequence, hf_index, ett_mms_Confirmed_ResponsePDU);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(tree){
+ mms_priv->pdu_item = (proto_item*)tree->last_child;
+ }
+
+
return offset;
}
@@ -6604,9 +7564,30 @@ dissect_mms_Confirmed_ErrorPDU(bool implicit_tag _U_, tvbuff_t *tvb _U_, int off
}
+static const ber_sequence_t T_listOfAccessResult_sequence_of[1] = {
+ { &hf_mms_listOfAccessResult_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_AccessResult },
+};
+
+static int
+dissect_mms_T_listOfAccessResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->listOfAccessResult_cnt = 0;
+ }
+
+ offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+ T_listOfAccessResult_sequence_of, hf_index, ett_mms_T_listOfAccessResult);
+
+
+
+ return offset;
+}
+
+
static const ber_sequence_t InformationReport_sequence[] = {
{ &hf_mms_variableAccessSpecification, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mms_VariableAccessSpecification },
- { &hf_mms_listOfAccessResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_SEQUENCE_OF_AccessResult },
+ { &hf_mms_listOfAccessResult_01, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mms_T_listOfAccessResult },
{ NULL, 0, 0, 0, NULL }
};
@@ -6740,9 +7721,21 @@ static const ber_sequence_t Unconfirmed_PDU_sequence[] = {
static int
dissect_mms_Unconfirmed_PDU(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if (!mms_priv->mms_trans_p) {
+ /* create a "fake" mms_trans structure */
+ mms_priv->mms_trans_p=wmem_new0(actx->pinfo->pool, mms_transaction_t);
+ mms_priv->mms_trans_p->req_time = actx->pinfo->fd->abs_ts;
+
+ }
+
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Unconfirmed_PDU_sequence, hf_index, ett_mms_Unconfirmed_PDU);
+ if(tree){
+ mms_priv->pdu_item = (proto_item*)tree->last_child;
+ }
+
return offset;
}
@@ -7193,9 +8186,17 @@ static const ber_sequence_t Initiate_RequestPDU_sequence[] = {
static int
dissect_mms_Initiate_RequestPDU(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Initiate_RequestPDU_sequence, hf_index, ett_mms_Initiate_RequestPDU);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(tree){
+ mms_priv->pdu_item = (proto_item*)tree->last_child;
+ }
+
+
+
return offset;
}
@@ -7227,9 +8228,15 @@ static const ber_sequence_t Initiate_ResponsePDU_sequence[] = {
static int
dissect_mms_Initiate_ResponsePDU(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Initiate_ResponsePDU_sequence, hf_index, ett_mms_Initiate_ResponsePDU);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(tree){
+ mms_priv->pdu_item = (proto_item*)tree->last_child;
+ }
+
return offset;
}
@@ -7308,21 +8315,139 @@ static const ber_choice_t MMSpdu_choice[] = {
int
dissect_mms_MMSpdu(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
- gint branch_taken;
+ int branch_taken;
+ int8_t ber_class;
+ bool pc;
+ int32_t tag;
+
+ get_ber_identifier(tvb, offset, &ber_class, &pc, &tag);
+ mms_actx_private_data_t *mms_priv = (mms_actx_private_data_t *)actx->private_data;
+ if(mms_priv){
+ mms_priv->mms_pdu_type = tag;
+ }
+
offset = dissect_ber_choice(actx, tree, tvb, offset,
MMSpdu_choice, hf_index, ett_mms_MMSpdu,
&branch_taken);
- if( (branch_taken!=-1) && mms_MMSpdu_vals[branch_taken].strptr ){
- if (mms_has_private_data(actx))
- col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s%s%s",
- private_data_get_preCinfo(actx), mms_MMSpdu_vals[branch_taken].strptr, private_data_get_moreCinfo(actx));
- else
- col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s",
- mms_MMSpdu_vals[branch_taken].strptr);
- }
+ if( (branch_taken!=-1) && mms_MMSpdu_vals[branch_taken].strptr ){
+ if(mms_priv){
+ switch(mms_priv->mms_pdu_type){
+ case MMS_UNCONFIRMED_PDU:
+ if(mms_priv->vmd_specific==IEC61850_8_1_RPT){
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "Unconfirmed <RPT>");
+ proto_item_append_text(mms_priv->pdu_item, " [RPT]");
+ }else if((mms_priv->mms_trans_p)&&(mms_priv->mms_trans_p->itemid==IEC61850_ITEM_ID_OPER)){
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "Unconfirmed-CommandTermination");
+ proto_item_append_text(mms_priv->pdu_item, " [Unconfirmed-CommandTermination]");
+ }
+ break;
+ case MMS_INITIATE_REQUEST_PDU:
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "Associate Request");
+ proto_item_append_text(mms_priv->pdu_item, " [Associate Request]");
+ break;
+ case MMS_INITIATE_RESPONSE_PDU:
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "Associate Response");
+ proto_item_append_text(mms_priv->pdu_item, " [Associate Response]");
+ break;
+ case MMS_CONFIRMED_REQUEST_PDU:
+ if(mms_priv->mms_trans_p){
+ if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GET_SERV_DIR){
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "GetServerDirectoryRequest");
+ proto_item_append_text(mms_priv->pdu_item, " [GetServerDirectoryRequest]");
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GETLOGICALDEVICEDIRECTORY){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetLogicalDeviceDirectoryRequest %s", mms_priv->itemid_str);
+ proto_item_append_text(mms_priv->pdu_item, " [GetLogicalDeviceDirectoryRequest ]");
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GETDATASETDIRECTORY){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetDataSetDirectoryRequest %s", mms_priv->itemid_str);
+ proto_item_append_text(mms_priv->pdu_item, " [GetDataSetDirectoryRequest]");
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GETDATADIRECTORY){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetDataDirectoryRequest%s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [GetDataDirectoryRequest]");
+ } else if (mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_READ){
+ if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_$BR$_OR_$RP$){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetRCBValuesRequest %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [GetRCBValuesRequest]");
+ }else{
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetDataValueRequest %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [GetDataValueRequest]");
+ }
+ } else if (mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_WRITE){
+ if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_$BR$_OR_$RP$){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "SetRCBValuesRequest %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [SetRCBValuesRequest]");
+ }else{
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "SetDataValueRequest %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [SetDataValueRequest]");
+ }
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "SelectWithValueRequest %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [SelectWithValueRequest]");
+ }
+ }else if (mms_has_private_data(actx)){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s%s%s",
+ private_data_get_preCinfo(actx), mms_MMSpdu_vals[branch_taken].strptr, private_data_get_moreCinfo(actx));
+ }
+ break;
+ case MMS_CONFIRMED_RESPONSE_PDU:
+ if(mms_priv->mms_trans_p){
+ if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GET_SERV_DIR){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetServerDirectoryResponse %s", mms_priv->itemid_str);
+ proto_item_append_text(mms_priv->pdu_item, " [GetServerDirectoryResponse ]");
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GETLOGICALDEVICEDIRECTORY){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetLogicalDeviceDirectoryResponse%s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [GetLogicalDeviceDirectoryResponse ]");
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GETDATASETDIRECTORY){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetDataSetDirectoryResponse%s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [GetDataSetDirectoryResponse ]");
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_GETDATADIRECTORY){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "GetDataDirectoryResponse%s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [GetDataDirectoryResponse ]");
+ }else if (mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_READ){
+ if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_$BR$_OR_$RP$){
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "GetRCBValuesResponse");
+ proto_item_append_text(mms_priv->pdu_item, " [GetRCBValuesResponse]");
+ }else{
+ col_append_str(actx->pinfo->cinfo, COL_INFO, "GetDataValueResponse");
+ proto_item_append_text(mms_priv->pdu_item, " [GetDataValueResponse ]");
+ }
+ if(mms_priv->success == 1){
+ col_append_str(actx->pinfo->cinfo, COL_INFO, " success");
+ }else{
+ col_append_str(actx->pinfo->cinfo, COL_INFO, " failure");
+ }
+ } else if (mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_WRITE){
+ if(mms_priv->mms_trans_p->itemid == IEC61850_ITEM_ID_$BR$_OR_$RP$){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "SetRCBValuesResponse %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [SetRCBValuesResponse]");
+ }else{
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "SetDataValueResponse %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [SetDataValueResponse]");
+ }
+ }else if(mms_priv->mms_trans_p->conf_serv_pdu_type_req == MMS_IEC_61850_CONF_SERV_PDU_SELECTWITHVALUE){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "SelectWithValueResponse %s", private_data_get_moreCinfo(actx));
+ proto_item_append_text(mms_priv->pdu_item, " [SelectWithValueResponse]");
+ }
+ }else if(mms_has_private_data(actx)){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s%s%s",
+ private_data_get_preCinfo(actx), mms_MMSpdu_vals[branch_taken].strptr, private_data_get_moreCinfo(actx));
+ }
+ break;
+ default:
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s%s%s",
+ private_data_get_preCinfo(actx), mms_MMSpdu_vals[branch_taken].strptr, private_data_get_moreCinfo(actx));
+ break;
+ }
+ }else if (mms_has_private_data(actx)){
+ col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%s%s%s",
+ private_data_get_preCinfo(actx), mms_MMSpdu_vals[branch_taken].strptr, private_data_get_moreCinfo(actx));
+ }else{
+ col_append_str(actx->pinfo->cinfo, COL_INFO,
+ mms_MMSpdu_vals[branch_taken].strptr);
+ }
+ }
return offset;
@@ -7333,40 +8458,227 @@ dissect_mms_MMSpdu(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn
* Dissect MMS PDUs inside a PPDU.
*/
static int
-dissect_mms(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data _U_)
+dissect_mms(tvbuff_t* tvb, packet_info* pinfo, proto_tree* parent_tree, void* data _U_)
{
- int offset = 0;
- int old_offset;
- proto_item *item=NULL;
- proto_tree *tree=NULL;
- asn1_ctx_t asn1_ctx;
- asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-
- if(parent_tree){
- item = proto_tree_add_item(parent_tree, proto_mms, tvb, 0, -1, ENC_NA);
- tree = proto_item_add_subtree(item, ett_mms);
- }
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "MMS");
- col_clear(pinfo->cinfo, COL_INFO);
-
- while (tvb_reported_length_remaining(tvb, offset) > 0){
- old_offset=offset;
- offset=dissect_mms_MMSpdu(FALSE, tvb, offset, &asn1_ctx , tree, -1);
- if(offset == old_offset){
- proto_tree_add_expert(tree, pinfo, &ei_mms_zero_pdu, tvb, offset, -1);
- break;
- }
- }
- return tvb_captured_length(tvb);
+ int offset = 0;
+ int old_offset;
+ proto_item* item = NULL;
+ proto_tree* tree = NULL;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
+
+ if (parent_tree) {
+ item = proto_tree_add_item(parent_tree, proto_mms, tvb, 0, -1, ENC_NA);
+ tree = proto_item_add_subtree(item, ett_mms);
+ asn1_ctx.subtree.top_tree = parent_tree;
+ }
+ if (use_iec61850_mapping) {
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "MMS/IEC61850");
+ }
+ else {
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "MMS");
+ }
+ col_clear(pinfo->cinfo, COL_INFO);
+
+ while (tvb_reported_length_remaining(tvb, offset) > 0) {
+ old_offset = offset;
+ if (use_iec61850_mapping) {
+ asn1_ctx.private_data = (void*)wmem_new0(pinfo->pool, mms_actx_private_data_t);
+ }
+ offset = dissect_mms_MMSpdu(false, tvb, offset, &asn1_ctx, tree, -1);
+ if (asn1_ctx.private_data) {
+ wmem_free(pinfo->pool, asn1_ctx.private_data);
+ }
+ if (offset == old_offset) {
+ proto_tree_add_expert(tree, pinfo, &ei_mms_zero_pdu, tvb, offset, -1);
+ break;
+ }
+ }
+ return tvb_captured_length(tvb);
}
/*--- proto_register_mms -------------------------------------------*/
void proto_register_mms(void) {
- /* List of fields */
- static hf_register_info hf[] =
- {
+ /* List of fields */
+ static hf_register_info hf[] =
+ {
+ { &hf_mms_response_in,
+ { "Response In", "mms.response_in",
+ FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
+ "The response to this mms request is in this frame", HFILL }
+ },
+ { &hf_mms_response_to,
+ { "Request In", "mms.response_to",
+ FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST), 0x0,
+ "This is a response to the mms request in this frame", HFILL }
+ },
+ { &hf_mms_response_time,
+ { "Response Time", "mms.response_time",
+ FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
+ "The time between the Call and the Reply", HFILL }
+ },
+ { &hf_mms_iec61850_rptid,
+ { "RptID", "mms.iec61850.rptid",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_reported_optflds,
+ { "Reported OptFlds", "mms.iec61850.reported_optfld",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_seqnum,
+ { "SeqNum", "mms.iec61850.seqnum",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_timeofentry,
+ { "TimeOfEntry", "mms.iec61850.timeofentry",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_datset,
+ { "DatSet", "mms.iec61850.datset",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_bufovfl,
+ { "BufOvfl", "mms.iec61850.bufovfl",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_confrev,
+ { "ConfRev", "mms.iec61850.confrev",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_inclusion_bitstring,
+ { "Inclusion-bitstring", "mms.iec61850.inclusion_bitstring",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_ctlModel,
+ { "ctlModel", "mms.iec61850.ctlmodel",
+ FT_UINT8, BASE_DEC, VALS(mms_iec6150_cntmodel_vals), 0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_QualityC0,
+ { "Validity", "mms.iec61850.validity",
+ FT_UINT8, BASE_HEX, VALS(mms_iec6150_validity_vals), 0xC0,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality20,
+ { "Overflow", "mms.iec61850.overflow",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality10,
+ { "OutofRange", "mms.iec61850.outofrange",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality8,
+ { "BadReference", "mms.iec61850.badreference",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality4,
+ { "Oscillatory", "mms.iec61850.oscillatory",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality2,
+ { "Failure", "mms.iec61850.failure",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality1,
+ { "OldData", "mms.iec61850.oldData",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality0080,
+ { "Inconsistent", "mms.iec61850.inconsistent",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality0040,
+ { "Inaccurate", "mms.iec61850.inaccurate",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality0020,
+ { "Source", "mms.iec61850.source",
+ FT_UINT8, BASE_HEX, VALS(mms_iec6150_source_vals), 0x20,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality0010,
+ { "Test", "mms.iec61850.test",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_Quality0008,
+ { "OperatorBlocked", "mms.iec61850.operatorblocked",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_mms_iec61850_quality_bitstring,
+ { "Quality", "mms.iec61850.quality_bitstring",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_timequality80,
+ { "Leap Second Known", "mms.iec61850.leapsecondknown",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_timequality40,
+ { "ClockFailure", "mms.iec61850.clockfailure",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_timequality20,
+ { "Clock not synchronized", "mms.iec61850.clocknotsynchronized",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_timequality1F,
+ { "Time Accuracy", "mms.iec61850.timeaccuracy",
+ FT_UINT8, BASE_HEX, VALS(mms_iec6150_timeaccuracy_vals), 0x1F,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_check_bitstring,
+ { "Check", "mms.iec61850.check_bitstring",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_check_b1,
+ { "Synchrocheck", "mms.iec61850.synchrocheck",
+ FT_BOOLEAN, 2, NULL, 0x2,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_check_b0,
+ { "Interlock-check", "mms.iec61850.interlockcheck",
+ FT_BOOLEAN, 2, NULL, 0x1,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_orcategory,
+ { "orCategory", "mms.iec61850.orcategory",
+ FT_UINT8, BASE_DEC, VALS(mms_iec6150_orcategory_vals), 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_beh$stval,
+ { "beh", "mms.iec61850.beh",
+ FT_UINT8, BASE_DEC, VALS(mms_iec6150_beh_vals), 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_mod$stval,
+ { "mod", "mms.iec61850.mod",
+ FT_UINT8, BASE_DEC, VALS(mms_iec6150_beh_vals), 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_health$stval,
+ { "health", "mms.iec61850.health",
+ FT_UINT8, BASE_DEC, VALS(mms_iec6150_health_vals), 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_ctlval,
+ { "ctlVal", "mms.iec61850.ctlval",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_origin,
+ { "Origin", "mms.iec61850.origin",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_origin_orcat,
+ { "Origin Category", "mms.iec61850.orcat",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_origin_orident,
+ { "Origin Identifier", "mms.iec61850.orident",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_ctlNum,
+ { "ctlNum", "mms.iec61850.ctlnum",
+ FT_INT8, BASE_DEC, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_T,
+ { "T(Timestamp)", "mms.iec61850.timestamp",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL } },
+ { &hf_mms_iec61850_test,
+ { "Test", "mms.iec61850.test",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
{ &hf_mms_confirmed_RequestPDU,
{ "confirmed-RequestPDU", "mms.confirmed_RequestPDU_element",
FT_NONE, BASE_NONE, NULL, 0,
@@ -8015,8 +9327,8 @@ void proto_register_mms(void) {
{ "defineEventAction", "mms.defineEventAction_element",
FT_NONE, BASE_NONE, NULL, 0,
"DefineEventAction_Response", HFILL }},
- { &hf_mms_deleteEventAction,
- { "deleteEventAction", "mms.deleteEventAction",
+ { &hf_mms_confirmedServiceRequest_deleteEventAction_01,
+ { "deleteEventAction", "mms.confirmedServiceRequest.deleteEventAction",
FT_INT32, BASE_DEC, NULL, 0,
"DeleteEventAction_Response", HFILL }},
{ &hf_mms_getEventActionAttributes_01,
@@ -8123,10 +9435,10 @@ void proto_register_mms(void) {
{ "domainId", "mms.domainId",
FT_STRING, BASE_NONE, NULL, 0,
"Identifier", HFILL }},
- { &hf_mms_itemId,
+ { &hf_mms_objectName_domain_specific_itemId,
{ "itemId", "mms.itemId",
FT_STRING, BASE_NONE, NULL, 0,
- "Identifier", HFILL }},
+ "ObjectName_domain_specific_itemid", HFILL }},
{ &hf_mms_aa_specific,
{ "aa-specific", "mms.aa_specific",
FT_STRING, BASE_NONE, NULL, 0,
@@ -8451,18 +9763,6 @@ void proto_register_mms(void) {
{ "localDetail", "mms.localDetail",
FT_BYTES, BASE_NONE, NULL, 0,
"BIT_STRING_SIZE_0_128", HFILL }},
- { &hf_mms_extendedObjectClass,
- { "extendedObjectClass", "mms.extendedObjectClass",
- FT_UINT32, BASE_DEC, VALS(mms_T_extendedObjectClass_vals), 0,
- NULL, HFILL }},
- { &hf_mms_objectClass,
- { "objectClass", "mms.objectClass",
- FT_INT32, BASE_DEC, VALS(mms_T_objectClass_vals), 0,
- NULL, HFILL }},
- { &hf_mms_objectScope,
- { "objectScope", "mms.objectScope",
- FT_UINT32, BASE_DEC, VALS(mms_T_objectScope_vals), 0,
- NULL, HFILL }},
{ &hf_mms_vmdSpecific,
{ "vmdSpecific", "mms.vmdSpecific_element",
FT_NONE, BASE_NONE, NULL, 0,
@@ -8475,6 +9775,18 @@ void proto_register_mms(void) {
{ "aaSpecific", "mms.aaSpecific_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
+ { &hf_mms_extendedObjectClass,
+ { "extendedObjectClass", "mms.extendedObjectClass",
+ FT_UINT32, BASE_DEC, VALS(mms_T_extendedObjectClass_vals), 0,
+ NULL, HFILL }},
+ { &hf_mms_objectClass,
+ { "objectClass", "mms.objectClass",
+ FT_INT32, BASE_DEC, VALS(mms_ObjectClass_vals), 0,
+ NULL, HFILL }},
+ { &hf_mms_objectScope,
+ { "objectScope", "mms.objectScope",
+ FT_UINT32, BASE_DEC, VALS(mms_ObjectScope_vals), 0,
+ NULL, HFILL }},
{ &hf_mms_getNameList_Request_continueAfter,
{ "continueAfter", "mms.getNameList-Request_continueAfter",
FT_STRING, BASE_NONE, NULL, 0,
@@ -8517,8 +9829,8 @@ void proto_register_mms(void) {
"T_extendedObjectClass_01", HFILL }},
{ &hf_mms_objectClass_01,
{ "objectClass", "mms.objectClass",
- FT_INT32, BASE_DEC, VALS(mms_T_objectClass_01_vals), 0,
- "T_objectClass_01", HFILL }},
+ FT_INT32, BASE_DEC, VALS(mms_T_objectClass_vals), 0,
+ NULL, HFILL }},
{ &hf_mms_currentName,
{ "currentName", "mms.currentName",
FT_UINT32, BASE_DEC, VALS(mms_ObjectName_vals), 0,
@@ -8838,7 +10150,7 @@ void proto_register_mms(void) {
{ &hf_mms_listOfData,
{ "listOfData", "mms.listOfData",
FT_UINT32, BASE_DEC, NULL, 0,
- "SEQUENCE_OF_Data", HFILL }},
+ NULL, HFILL }},
{ &hf_mms_listOfData_item,
{ "Data", "mms.Data",
FT_UINT32, BASE_DEC, VALS(mms_Data_vals), 0,
@@ -8859,6 +10171,10 @@ void proto_register_mms(void) {
{ "variableAccessSpecification", "mms.variableAccessSpecification",
FT_UINT32, BASE_DEC, VALS(mms_VariableAccessSpecification_vals), 0,
NULL, HFILL }},
+ { &hf_mms_listOfAccessResult_01,
+ { "listOfAccessResult", "mms.listOfAccessResult",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
{ &hf_mms_name,
{ "name", "mms.name",
FT_UINT32, BASE_DEC, VALS(mms_ObjectName_vals), 0,
@@ -8966,7 +10282,7 @@ void proto_register_mms(void) {
{ &hf_mms_structure_01,
{ "structure", "mms.structure",
FT_UINT32, BASE_DEC, NULL, 0,
- "SEQUENCE_OF_Data", HFILL }},
+ "T_structure_01", HFILL }},
{ &hf_mms_structure_item,
{ "Data", "mms.Data",
FT_UINT32, BASE_DEC, VALS(mms_Data_vals), 0,
@@ -8978,7 +10294,7 @@ void proto_register_mms(void) {
{ &hf_mms_data_bit_string,
{ "bit-string", "mms.data_bit-string",
FT_BYTES, BASE_NONE, NULL, 0,
- NULL, HFILL }},
+ "T_data_bit_string", HFILL }},
{ &hf_mms_integer_01,
{ "integer", "mms.integer",
FT_INT32, BASE_DEC, NULL, 0,
@@ -8986,7 +10302,7 @@ void proto_register_mms(void) {
{ &hf_mms_unsigned_01,
{ "unsigned", "mms.unsigned",
FT_INT32, BASE_DEC, NULL, 0,
- "INTEGER", HFILL }},
+ NULL, HFILL }},
{ &hf_mms_floating_point,
{ "floating-point", "mms.floating_point",
FT_BYTES, BASE_NONE, NULL, 0,
@@ -8994,15 +10310,15 @@ void proto_register_mms(void) {
{ &hf_mms_data_octet_string,
{ "octet-string", "mms.data.octet-string",
FT_BYTES, BASE_NONE, NULL, 0,
- NULL, HFILL }},
+ "T_data_octet_string", HFILL }},
{ &hf_mms_data_visible_string,
{ "visible-string", "mms.data.visible-string",
FT_STRING, BASE_NONE, NULL, 0,
- "VisibleString", HFILL }},
+ "T_data_visible_string", HFILL }},
{ &hf_mms_data_binary_time,
{ "binary-time", "mms.data.binary-time",
FT_STRING, BASE_NONE, NULL, 0,
- "TimeOfDay", HFILL }},
+ "T_data_binary_time", HFILL }},
{ &hf_mms_bcd_01,
{ "bcd", "mms.bcd",
FT_INT32, BASE_DEC, NULL, 0,
@@ -9687,6 +11003,46 @@ void proto_register_mms(void) {
{ "lastModified", "mms.lastModified",
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0,
"GeneralizedTime", HFILL }},
+ { &hf_mms_ReportedOptFlds_reserved,
+ { "reserved", "mms.ReportedOptFlds.reserved",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_sequence_number,
+ { "sequence-number", "mms.ReportedOptFlds.sequence.number",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_report_time_stamp,
+ { "report-time-stamp", "mms.ReportedOptFlds.report.time.stamp",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_reason_for_inclusion,
+ { "reason-for-inclusion", "mms.ReportedOptFlds.reason.for.inclusion",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_data_set_name,
+ { "data-set-name", "mms.ReportedOptFlds.data.set.name",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_data_reference,
+ { "data-reference", "mms.ReportedOptFlds.data.reference",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_buffer_overflow,
+ { "buffer-overflow", "mms.ReportedOptFlds.buffer.overflow",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_entryID,
+ { "entryID", "mms.ReportedOptFlds.entryID",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_conf_revision,
+ { "conf-revision", "mms.ReportedOptFlds.conf.revision",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_mms_ReportedOptFlds_segmentation,
+ { "segmentation", "mms.ReportedOptFlds.segmentation",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
{ &hf_mms_ParameterSupportOptions_str1,
{ "str1", "mms.ParameterSupportOptions.str1",
FT_BOOLEAN, 8, NULL, 0x80,
@@ -10099,11 +11455,14 @@ void proto_register_mms(void) {
{ "any-to-deleted", "mms.Transitions.any.to.deleted",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }},
- };
+ };
- /* List of subtrees */
- static gint *ett[] = {
- &ett_mms,
+ /* List of subtrees */
+ static int* ett[] = {
+ &ett_mms,
+ &ett_mms_iec61850_quality_bitstring,
+ &ett_mms_iec61850_check_bitstring,
+ &ett_mms_ReportedOptFlds,
&ett_mms_MMSpdu,
&ett_mms_Confirmed_RequestPDU,
&ett_mms_SEQUENCE_OF_Modifier,
@@ -10139,9 +11498,9 @@ void proto_register_mms(void) {
&ett_mms_RejectPDU,
&ett_mms_T_rejectReason,
&ett_mms_Status_Response,
+ &ett_mms_ObjectScope,
&ett_mms_GetNameList_Request,
&ett_mms_T_extendedObjectClass,
- &ett_mms_T_objectScope,
&ett_mms_GetNameList_Response,
&ett_mms_SEQUENCE_OF_Identifier,
&ett_mms_Identify_Response,
@@ -10196,10 +11555,11 @@ void proto_register_mms(void) {
&ett_mms_Read_Response,
&ett_mms_SEQUENCE_OF_AccessResult,
&ett_mms_Write_Request,
- &ett_mms_SEQUENCE_OF_Data,
+ &ett_mms_T_listOfData,
&ett_mms_Write_Response,
&ett_mms_Write_Response_item,
&ett_mms_InformationReport,
+ &ett_mms_T_listOfAccessResult,
&ett_mms_GetVariableAccessAttributes_Request,
&ett_mms_GetVariableAccessAttributes_Response,
&ett_mms_DefineNamedVariable_Request,
@@ -10222,6 +11582,8 @@ void proto_register_mms(void) {
&ett_mms_DeleteNamedType_Response,
&ett_mms_AccessResult,
&ett_mms_Data,
+ &ett_mms_SEQUENCE_OF_Data,
+ &ett_mms_T_structure_01,
&ett_mms_VariableAccessSpecification,
&ett_mms_T_listOfVariable_02,
&ett_mms_T_listOfVariable_item_02,
@@ -10319,81 +11681,88 @@ void proto_register_mms(void) {
&ett_mms_SEQUENCE_OF_DirectoryEntry,
&ett_mms_DirectoryEntry,
&ett_mms_FileAttributes,
- };
+ };
+
+ static ei_register_info ei[] = {
+ { &ei_mms_mal_timeofday_encoding, { "mms.malformed.timeofday_encoding", PI_MALFORMED, PI_WARN, "BER Error: malformed TimeOfDay encoding", EXPFILL }},
+ { &ei_mms_mal_utctime_encoding, { "mms.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed IEC61850 UTCTime encoding", EXPFILL }},
+ { &ei_mms_zero_pdu, { "mms.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte MMS PDU", EXPFILL }},
+ };
- static ei_register_info ei[] = {
- { &ei_mms_mal_timeofday_encoding, { "mms.malformed.timeofday_encoding", PI_MALFORMED, PI_WARN, "BER Error: malformed TimeOfDay encoding", EXPFILL }},
- { &ei_mms_mal_utctime_encoding, { "mms.malformed.utctime", PI_MALFORMED, PI_WARN, "BER Error: malformed IEC61850 UTCTime encoding", EXPFILL }},
- { &ei_mms_zero_pdu, { "mms.zero_pdu", PI_PROTOCOL, PI_ERROR, "Internal error, zero-byte MMS PDU", EXPFILL }},
- };
+ expert_module_t* expert_mms;
- expert_module_t* expert_mms;
+ /* Register protocol */
+ proto_mms = proto_register_protocol(PNAME, PSNAME, PFNAME);
+ register_dissector("mms", dissect_mms, proto_mms);
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_mms, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_mms = expert_register_protocol(proto_mms);
+ expert_register_field_array(expert_mms, ei, array_length(ei));
- /* Register protocol */
- proto_mms = proto_register_protocol(PNAME, PSNAME, PFNAME);
- register_dissector("mms", dissect_mms, proto_mms);
- /* Register fields and subtrees */
- proto_register_field_array(proto_mms, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
- expert_mms = expert_register_protocol(proto_mms);
- expert_register_field_array(expert_mms, ei, array_length(ei));
+ /* Setting to enable/disable the IEC-61850 mapping on MMS */
+ module_t* mms_module = prefs_register_protocol(proto_mms, proto_reg_handoff_mms);
+ prefs_register_bool_preference(mms_module, "use_iec61850_mapping",
+ "Dissect MMS as IEC-61850",
+ "Enables or disables dissection as IEC-61850 on top of MMS",
+ &use_iec61850_mapping);
}
-static gboolean
-dissect_mms_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *data _U_)
+static bool
+dissect_mms_heur(tvbuff_t* tvb, packet_info* pinfo, proto_tree* parent_tree, void* data)
{
- /* must check that this really is an mms packet */
- int offset = 0;
- guint32 length = 0 ;
- guint32 oct;
- gint idx = 0 ;
+ /* must check that this really is an mms packet */
+ int offset = 0;
+ uint32_t length = 0;
+ uint32_t oct;
+ int idx = 0;
- gint8 tmp_class;
- bool tmp_pc;
- gint32 tmp_tag;
+ int8_t tmp_class;
+ bool tmp_pc;
+ int32_t tmp_tag;
- /* first, check do we have at least 2 bytes (pdu) */
- if (!tvb_bytes_exist(tvb, 0, 2))
- return FALSE; /* no */
+ /* first, check do we have at least 2 bytes (pdu) */
+ if (!tvb_bytes_exist(tvb, 0, 2))
+ return false; /* no */
- /* can we recognize MMS PDU ? Return FALSE if not */
- /* get MMS PDU type */
- offset = get_ber_identifier(tvb, offset, &tmp_class, &tmp_pc, &tmp_tag);
+ /* can we recognize MMS PDU ? Return false if not */
+ /* get MMS PDU type */
+ offset = get_ber_identifier(tvb, offset, &tmp_class, &tmp_pc, &tmp_tag);
- /* check MMS type */
+ /* check MMS type */
- /* Class should be constructed */
- if (tmp_class!=BER_CLASS_CON)
- return FALSE;
+ /* Class should be constructed */
+ if (tmp_class != BER_CLASS_CON)
+ return false;
- /* see if the tag is a valid MMS PDU */
- try_val_to_str_idx(tmp_tag, mms_MMSpdu_vals, &idx);
- if (idx == -1) {
- return FALSE; /* no, it isn't an MMS PDU */
- }
+ /* see if the tag is a valid MMS PDU */
+ try_val_to_str_idx(tmp_tag, mms_MMSpdu_vals, &idx);
+ if (idx == -1) {
+ return false; /* no, it isn't an MMS PDU */
+ }
- /* check MMS length */
- oct = tvb_get_guint8(tvb, offset)& 0x7F;
- if (oct==0)
- /* MMS requires length after tag so not MMS if indefinite length*/
- return FALSE;
+ /* check MMS length */
+ oct = tvb_get_uint8(tvb, offset) & 0x7F;
+ if (oct == 0)
+ /* MMS requires length after tag so not MMS if indefinite length*/
+ return false;
- offset = get_ber_length(tvb, offset, &length, NULL);
- /* do we have enough bytes? */
- if (!tvb_bytes_exist(tvb, offset, length))
- return FALSE;
+ offset = get_ber_length(tvb, offset, &length, NULL);
+ /* do we have enough bytes? */
+ if (!tvb_bytes_exist(tvb, offset, length))
+ return false;
- dissect_mms(tvb, pinfo, parent_tree, data);
- return TRUE;
+ dissect_mms(tvb, pinfo, parent_tree, data);
+ return true;
}
/*--- proto_reg_handoff_mms --- */
void proto_reg_handoff_mms(void) {
- register_ber_oid_dissector("1.0.9506.2.3", dissect_mms, proto_mms,"MMS");
- register_ber_oid_dissector("1.0.9506.2.1", dissect_mms, proto_mms,"mms-abstract-syntax-version1(1)");
- heur_dissector_add("cotp", dissect_mms_heur, "MMS over COTP", "mms_cotp", proto_mms, HEURISTIC_ENABLE);
- heur_dissector_add("cotp_is", dissect_mms_heur, "MMS over COTP (inactive subset)", "mms_cotp_is", proto_mms, HEURISTIC_ENABLE);
+ register_ber_oid_dissector("1.0.9506.2.3", dissect_mms, proto_mms, "MMS");
+ register_ber_oid_dissector("1.0.9506.2.1", dissect_mms, proto_mms, "mms-abstract-syntax-version1(1)");
+ heur_dissector_add("cotp", dissect_mms_heur, "MMS over COTP", "mms_cotp", proto_mms, HEURISTIC_ENABLE);
+ heur_dissector_add("cotp_is", dissect_mms_heur, "MMS over COTP (inactive subset)", "mms_cotp_is", proto_mms, HEURISTIC_ENABLE);
}