diff options
author | Dr. Lars Völker <lars.voelker@technica-engineering.de> | 2022-01-16 18:23:34 +0100 |
---|---|---|
committer | A Wireshark GitLab Utility <gerald+gitlab-utility@wireshark.org> | 2022-01-18 05:25:16 +0000 |
commit | 6d5a961414000baea8db308e11d149f11c0510c9 (patch) | |
tree | 771f2c6a2234a5f5037f085edd1640ab335056f4 | |
parent | 3bbcf76d30bd2606118e5180b73379ac47188d0a (diff) |
ISO15765: change addresses to 32bit
Currently the dissector maps 29bit addresses to 16bit. This limitation
is being resolved by allowing 32bit addresses to be passed on.
-rw-r--r-- | epan/dissectors/packet-iso15765.c | 14 | ||||
-rw-r--r-- | epan/dissectors/packet-iso15765.h | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-uds.c | 2 |
3 files changed, 13 insertions, 7 deletions
diff --git a/epan/dissectors/packet-iso15765.c b/epan/dissectors/packet-iso15765.c index db1cde6e0a..d3abb7f5df 100644 --- a/epan/dissectors/packet-iso15765.c +++ b/epan/dissectors/packet-iso15765.c @@ -310,12 +310,18 @@ masked_guint16_value(const guint16 value, const guint16 mask) return (value & mask) >> ws_ctz(mask); } +static guint32 +masked_guint32_value(const guint32 value, const guint32 mask) +{ + return (value & mask) >> ws_ctz(mask); +} + /* * setting addresses to 0xffffffff, if not found or configured * returning number of addresses (0: none, 1:ecu (both addr same), 2:source+target) */ static guint8 -find_config_can_addr_mapping(gboolean ext_id, guint32 can_id, guint16 *source_addr, guint16 *target_addr) { +find_config_can_addr_mapping(gboolean ext_id, guint32 can_id, guint32 *source_addr, guint32 *target_addr) { config_can_addr_mapping_t *tmp = NULL; guint32 i; @@ -334,13 +340,13 @@ find_config_can_addr_mapping(gboolean ext_id, guint32 can_id, guint16 *source_ad if (tmp != NULL) { if (tmp->ecu_addr_mask != 0) { - *source_addr = masked_guint16_value(can_id, tmp->ecu_addr_mask); + *source_addr = masked_guint32_value(can_id, tmp->ecu_addr_mask); *target_addr = *source_addr; return 1; } if (tmp->source_addr_mask != 0 && tmp->target_addr_mask != 0) { - *source_addr = masked_guint16_value(can_id, tmp->source_addr_mask); - *target_addr = masked_guint16_value(can_id, tmp->target_addr_mask); + *source_addr = masked_guint32_value(can_id, tmp->source_addr_mask); + *target_addr = masked_guint32_value(can_id, tmp->target_addr_mask); return 2; } } diff --git a/epan/dissectors/packet-iso15765.h b/epan/dissectors/packet-iso15765.h index 486b381ee5..3a3176d396 100644 --- a/epan/dissectors/packet-iso15765.h +++ b/epan/dissectors/packet-iso15765.h @@ -21,8 +21,8 @@ struct iso15765_info { guint32 bus_type; guint32 id; guint32 len; - guint16 target_address; - guint16 source_address; + guint32 target_address; + guint32 source_address; guint8 number_of_addresses_valid; }; diff --git a/epan/dissectors/packet-uds.c b/epan/dissectors/packet-uds.c index 690e0a8f1e..b801250492 100644 --- a/epan/dissectors/packet-uds.c +++ b/epan/dissectors/packet-uds.c @@ -600,7 +600,7 @@ call_heur_subdissector_uds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, } static int -dissect_uds_internal(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint16 source_address, guint16 target_address, guint8 number_of_addresses_valid) +dissect_uds_internal(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 source_address, guint32 target_address, guint8 number_of_addresses_valid) { proto_tree *uds_tree, *subtree; proto_item *ti; |