# mms.cnf # mms conformation file #.MODULE_IMPORT ISO-8650-ACSE-1 acse #.IMPORT ../acse/acse-exp.cnf #.EXPORTS MMSpdu #.PDU #.NO_EMIT #.TYPE_RENAME #.TYPE_ATTR TimeOfDay TYPE = FT_STRING DISPLAY = BASE_NONE UtcTime TYPE = FT_STRING DISPLAY = BASE_NONE #.FIELD_RENAME ConfirmedServiceRequest/deleteEventCondition confirmedServiceRequest_deleteEventCondition ConfirmedServiceResponse/deleteEventCondition confirmedServiceResponse_deleteEventCondition ConfirmedServiceRequest/deleteEventAction confirmedServiceRequest_deleteEventAction ConfirmedServiceRequest/deleteEventAction confirmedServiceRequest_deleteEventAction ConfirmedServiceRequest/deleteEventEnrollment confirmedServiceRequest_deleteEventEnrollment ConfirmedServiceResponse/deleteEventEnrollment confirmedServiceResponse_deleteEventEnrollment TypeSpecification/bit-string typeSpecification_bit-string Data/bit-string data_bit-string TypeSpecification/octet-string typeSpecification_octet-string Data/octet-string data_octet-string TypeSpecification/visible-string typeSpecification_visible-string Data/visible-string data_visible-string TypeSpecification/binary-time typeSpecification_binary-time Data/binary-time data_binary-time GetNameList-Request/continueAfter getNameList-Request_continueAfter GetCapabilityList-Request/continueAfter getCapabilityList-Request_continueAfter GetEventEnrollmentAttributes-Request/continueAfter getEventEnrollmentAttributes-Request_continueAfter GetAlarmEnrollmentSummary-Request/continueAfter getAlarmEnrollmentSummary-Request_continueAfter FileDirectory-Request/continueAfter fileDirectory-Request_continueAfter GetDomainAttributes-Response/state getDomainAttributes-Response_state GetProgramInvocationAttributes-Response/state getProgramInvocationAttributes-Response_state ReportSemaphoreEntryStatus-Request/state reportSemaphoreEntryStatus-Request_state AlterEventEnrollment-Response/currentState/state alterEventEnrollment-Response_currentState_state #.FIELD_ATTR ConfirmedServiceRequest/deleteEventCondition ABBREV=confirmedServiceRequest.deleteEventCondition ConfirmedServiceResponse/deleteEventCondition ABBREV=confirmedServiceResponse.deleteEventCondition ConfirmedServiceRequest/deleteEventAction ABBREV=confirmedServiceRequest.deleteEventAction ConfirmedServiceRequest/deleteEventAction ABBREV=confirmedServiceRequest.deleteEventAction ConfirmedServiceRequest/deleteEventEnrollment ABBREV=confirmedServiceRequest.deleteEventEnrollment ConfirmedServiceResponse/deleteEventEnrollment ABBREV=confirmedServiceResponse.deleteEventEnrollment TypeSpecification/bit-string ABBREV=typeSpecification_bit-string Data/bit-string ABBREV=data_bit-string TypeSpecification/octet-string ABBREV=typeSpecification.octet-string Data/octet-string ABBREV=data.octet-string TypeSpecification/visible-string ABBREV=typeSpecification.visible-string Data/visible-string ABBREV=data.visible-string TypeSpecification/binary-time ABBREV=typeSpecification.binary-time Data/binary-time ABBREV=data.binary-time GetNameList-Request/continueAfter ABBREV=getNameList-Request_continueAfter GetCapabilityList-Request/continueAfter ABBREV=getCapabilityList-Request_continueAfter GetEventEnrollmentAttributes-Request/continueAfter ABBREV=getEventEnrollmentAttributes-Request_continueAfter GetAlarmEnrollmentSummary-Request/continueAfter ABBREV=getAlarmEnrollmentSummary-Request_continueAfter FileDirectory-Request/continueAfter ABBREV=fileDirectory-Request_continueAfter GetDomainAttributes-Response/state ABBREV=getDomainAttributes-Response_state GetProgramInvocationAttributes-Response/state ABBREV=getProgramInvocationAttributes-Response_state ReportSemaphoreEntryStatus-Request/state ABBREV=reportSemaphoreEntryStatus-Request_state AlterEventEnrollment-Response/currentState/state ABBREV=alterEventEnrollment-Response_currentState_state #.FN_BODY ApplicationReference/ap-title offset=dissect_acse_AP_title(FALSE, tvb, offset, actx, tree, hf_mms_ap_title); #.FN_BODY ApplicationReference/ap-invocation-id offset=dissect_acse_AP_invocation_identifier(FALSE, tvb, offset, actx, tree, hf_mms_ap_invocation_id); #.FN_BODY ApplicationReference/ae-qualifier offset=dissect_acse_AE_qualifier(FALSE, tvb, offset, actx, tree, hf_mms_ae_qualifier); #.FN_BODY ApplicationReference/ae-invocation-id offset=dissect_acse_AE_invocation_identifier(FALSE, tvb, offset, actx, tree, hf_mms_ae_invocation_id); #.FN_BODY MMSpdu VAL_PTR=&branch_taken gint branch_taken; %(DEFAULT_BODY)s 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); } #.FN_BODY TimeOfDay guint32 len; guint32 milliseconds; guint16 days; gchar * 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); } 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, "????"); } #.FN_BODY UtcTime guint32 len; guint32 seconds; guint32 fraction; guint32 nanoseconds; nstime_t ts; gchar * ptime; 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; } 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) ) ; ts.secs = seconds; ts.nsecs = nanoseconds; 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); } #.FN_BODY Unsigned32 VAL_PTR=&val guint32 val; %(DEFAULT_BODY)s if (hf_index == hf_mms_invokeID) private_data_add_preCinfo(actx, val); #.FN_BODY FloatingPoint %(DEFAULT_BODY)s private_data_add_moreCinfo_float(actx, tvb); #.FN_BODY Identifier int offset_id = offset; %(DEFAULT_BODY)s 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); }