# goose.cnf # goose conformation file #.MODULE_IMPORT #.EXPORTS #.PDU #.NO_EMIT ONLY_VALS GOOSEpdu #.FN_BODY IECGoosePdu/simulation VAL_PTR = &value bool value; uint32_t len = tvb_reported_length_remaining(tvb, offset); int origin_offset = offset; %(DEFAULT_BODY)s if((actx->private_data) && (actx->created_item)){ goose_chk_data_t *data_chk = (goose_chk_data_t *)actx->private_data; proto_tree *expert_inf_tree = NULL; /* S bit set and Simulation attribute clear: reject as invalid GOOSE */ if((data_chk->s_bit == true) && (value == false)){ /* It really looks better showed as a new subtree */ expert_inf_tree = proto_item_add_subtree(actx->created_item, ett_expert_inf_sim); proto_tree_add_expert(expert_inf_tree, actx->pinfo, &ei_goose_invalid_sim, tvb, origin_offset, len); } } #.END #.FN_BODY UtcTime uint32_t len; uint32_t seconds; uint32_t fraction; uint32_t nanoseconds; nstime_t ts; char * ptime; len = tvb_reported_length_remaining(tvb, offset); if(len != 8) { proto_tree_add_expert(tree, actx->pinfo, &ei_goose_mal_utctime, tvb, offset, len); 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 = (uint32_t)( ((uint64_t)fraction * UINT64_C(1000000000)) / UINT64_C(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); } #.END #.FN_BODY FloatingPoint int len = tvb_reported_length_remaining(tvb, offset); %(DEFAULT_BODY)s if ((len == FLOAT_ENC_LENGTH) && (tvb_get_uint8(tvb,0) == SINGLE_FLOAT_EXP_BITS) ){ /* IEEE 754 single precision floating point */ proto_item_set_hidden(actx->created_item); proto_tree_add_item(tree, hf_goose_float_value, tvb, 1, (FLOAT_ENC_LENGTH-1), ENC_BIG_ENDIAN); } #.END #.TYPE_ATTR UtcTime TYPE = FT_STRING DISPLAY = BASE_NONE #.FIELD_RENAME GetReferenceRequestPdu/offset getReferenceRequest_offset GSEMngtResponses/getGsReference gseMngtResponses_GetGSReference GSEMngtResponses/getGoReference gseMngtResponses_GetGOReference GSEMngtResponses/getGSSEDataOffset gseMngtResponses_GetGSSEDataOffset GSEMngtResponses/getGOOSEElementNumber gseMngtResponses_GetGOOSEElementNumber #.FIELD_ATTR IECGoosePdu/stNum TYPE = FT_UINT32 DISPLAY = BASE_DEC IECGoosePdu/sqNum TYPE = FT_UINT32 DISPLAY = BASE_DEC GetReferenceRequestPdu/offset ABBREV=getReferenceRequest.offset IECGoosePdu/simulation BLURB = "BOOLEAN" #.END