BACnet:Fixed dissector for authentication related properties.

Fixed dissector for authentication related properties (open/close
tags were skipped)
Added new vendor id's as of january 24, 2024.
This commit is contained in:
Dirk Römmen 2024-01-24 19:51:28 +01:00 committed by AndersBroman
parent dd846520f4
commit 989002841e
2 changed files with 52 additions and 7 deletions

View File

@ -5265,7 +5265,7 @@ BACnetSuccessFilter [] = {
/* These values are generated by tools/generate-bacnet-vendors.py from
* https://bacnet.org/assigned-vendor-ids/
* Version: "As of November 27, 2023"
* Version: "As of January 24, 2024"
*/
static const value_string
@ -6724,6 +6724,15 @@ BACnetVendorIdentifiers [] = {
{ 1451, "Ryobi Limited" },
{ 1452, "EkkoSense Ltd" },
{ 1453, "ClimaCool" },
{ 1454, "Grid Connect Inc." },
{ 1455, "Ziegler Instrumentation UK Ltd" },
{ 1456, "ControlTec, LLC" },
{ 1457, "Aeterlink Corporation" },
{ 1458, "Alpha Epsilon Automation" },
{ 1459, "Astralite Inc." },
{ 1460, "Delta Fire Ltda." },
{ 1461, "Bock Water Heaters, Inc." },
{ 1462, "Cleaver-Brooks" },
{ 0, NULL }
};
static value_string_ext BACnetVendorIdentifiers_ext = VALUE_STRING_EXT_INIT(BACnetVendorIdentifiers);
@ -9433,6 +9442,8 @@ fAbstractSyntaxNType(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
offset = fXyColor(tvb, pinfo, tree, offset, ar);
else if (object_type == 64) /* color-temperature */
offset = fUnsignedTag(tvb, pinfo, tree, offset, ar);
else if (object_type == 54) /* lighting-output */
offset = fRealTag(tvb, pinfo, tree, offset, ar);
break;
case 166: /* life-safety-alarm-values */
offset = fApplicationTypesEnumerated(tvb, pinfo, tree, offset, ar, BACnetLifeSafetyState);
@ -9447,7 +9458,7 @@ fAbstractSyntaxNType(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
offset = fScale(tvb, pinfo, tree, offset);
break;
case 189: /* update-time */
if (object_type == 37)
if (object_type == 37) /* credential-data-input */
offset = fTimeStamp(tvb, pinfo, tree, offset, ar);
else
offset = fDateTime(tvb, pinfo, tree, offset, ar);
@ -12574,6 +12585,7 @@ fTimerStateChangeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
guint lastoffset = 0;
guint8 tag_no, tag_info;
guint32 lvt;
gint32 save_propertyIdentifier;
guint ftag_offset;
while (tvb_reported_length_remaining(tvb, offset) > 0 && offset > lastoffset) {
@ -12590,7 +12602,13 @@ fTimerStateChangeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
break;
case 1: /* constructed-value */
offset += ftag_offset;
offset = fAbstractSyntaxNType(tvb, pinfo, tree, offset);
/* this ASN-1 construction may contain also an property identifier, so
save the one we have got and restore it later and invalidate current
one to avoid misinterpretations */
save_propertyIdentifier = propertyIdentifier;
propertyIdentifier = -1;
offset = fAbstractSyntaxNType(tvb, pinfo, tree, offset);
propertyIdentifier = save_propertyIdentifier;
offset += fTagHeader(tvb, pinfo, offset, &tag_no, &tag_info, &lvt);
break;
case 2: /* date-time */
@ -12901,6 +12919,9 @@ fLandingCallStatus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
case 2: /* destination */
offset = fUnsignedTag(tvb, pinfo, tree, offset, "destination: ");
break;
case 3: /* floor-text */
offset = fCharacterString(tvb, pinfo, tree, offset, "floor-text: ");
break;
default:
return offset;
}
@ -12973,6 +12994,7 @@ fCOVMultipleSubscription(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
offset = fUnsignedTag(tvb, pinfo, tree, offset, "max notification delay: ");
break;
case 4: /* list-of-cov-subscription-specifications */
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
while (tvb_reported_length_remaining(tvb, offset) > 0) {
lastoffset = offset;
/* check the tag. A closing tag means we are done */
@ -12985,6 +13007,7 @@ fCOVMultipleSubscription(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
offset = fObjectIdentifier(tvb, pinfo, tree, offset, "ObjectIdentifier: ");
break;
case 1: /* list-of-cov-references */
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
while (tvb_reported_length_remaining(tvb, offset) > 0) {
lastoffset = offset;
/* check the tag. A closing tag means we are done */
@ -13009,12 +13032,14 @@ fCOVMultipleSubscription(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
}
if (offset <= lastoffset) break; /* nothing happened, exit loop */
}
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
break;
default:
return offset;
}
if (offset <= lastoffset) break; /* nothing happened, exit loop */
}
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
break;
default:
return offset;
@ -14527,16 +14552,22 @@ static guint
fYouAreRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint8 tag_no, tag_info;
guint32 lvt;
while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */
lastoffset = offset;
offset = fApplicationTypes(tvb, pinfo, tree, offset, "Vendor ID: ");
offset = fApplicationTypes(tvb, pinfo, tree, offset, "Model name: ");
offset = fApplicationTypes(tvb, pinfo, tree, offset, "Serial number: ");
if(tvb_reported_length_remaining(tvb, offset) > 0) {
fTagHeader(tvb, pinfo, offset, &tag_no, &tag_info, &lvt);
if(tvb_reported_length_remaining(tvb, offset) > 0 && tag_no == 12) {
offset = fApplicationTypes(tvb, pinfo, tree, offset, "Device Identifier: ");
}
if(tvb_reported_length_remaining(tvb, offset) > 0) {
fTagHeader(tvb, pinfo, offset, &tag_no, &tag_info, &lvt);
if(tvb_reported_length_remaining(tvb, offset) > 0 && tag_no == 6) {
offset = fApplicationTypes(tvb, pinfo, tree, offset, "Device MAC address: ");
}
if (offset <= lastoffset) break; /* nothing happened, exit loop */
@ -14681,7 +14712,9 @@ fAuthenticationPolicy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
switch (tag_no) {
case 0: /* credential-data-input */
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
offset = fDeviceObjectReference(tvb, pinfo, tree, offset);
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
break;
case 1: /* index */
offset = fUnsignedTag(tvb, pinfo, tree, offset, "index: ");
@ -14712,10 +14745,18 @@ fAuthenticationPolicy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
static guint
fRequestKeyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint8 tag_no, tag_info;
guint32 lvt;
offset = fObjectIdentifier(tvb, pinfo, tree, offset, "DeviceIdentifier: "); /* Requesting Device Identifier */
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
offset = fAddress(tvb, pinfo, tree, offset);
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
offset = fObjectIdentifier(tvb, pinfo, tree, offset, "DeviceIdentifier: "); /* Remote Device Identifier */
return fAddress(tvb, pinfo, tree, offset);
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
offset = fAddress(tvb, pinfo, tree, offset);
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
return offset;
}
static guint
@ -15613,13 +15654,17 @@ fAccessRule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
offset = fEnumeratedTag(tvb, pinfo, tree, offset, "time-range-specifier: ", NULL);
break;
case 1: /* time-range */
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
offset = fDeviceObjectPropertyReference(tvb, pinfo, tree, offset);
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
break;
case 2: /* location-specifier */
offset = fEnumeratedTag(tvb, pinfo, tree, offset, "location-specifier: ", NULL);
break;
case 3: /* location */
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
offset = fDeviceObjectReference(tvb, pinfo, tree, offset);
offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
break;
case 4: /* enable */
offset = fBooleanTag(tvb, pinfo, tree, offset, "enable: ");

View File

@ -763,7 +763,7 @@ dissect_ipv6_bvlc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
/* Put the BVLC Type in the info column */
col_append_fstr(pinfo->cinfo, COL_INFO, " BVLC Function %s ",
val_to_str_const(bvlc_function, bvlc_function_names, "unknown"));
val_to_str_const(bvlc_function, bvlc_ipv6_function_names, "unknown"));
ti = proto_tree_add_item(tree, proto_bvlc, tvb, 0,
bvlc_length, ENC_NA);