diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:26 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:26 +0000 |
commit | c4e8a3222648fcf22ca207f1815ebbf7cd144eeb (patch) | |
tree | 93d5c6aa93d9987680dd1adad5685e2ad698f223 /epan/dissectors/packet-mms.c | |
parent | Adding upstream version 4.2.6. (diff) | |
download | wireshark-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.c | 3719 |
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, + ¶meter_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); - } + ¶meter_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); + ¶meter_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); } |