aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Lars Völker <lars.voelker@technica-engineering.de>2022-01-16 18:23:34 +0100
committerA Wireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2022-01-18 05:25:16 +0000
commit6d5a961414000baea8db308e11d149f11c0510c9 (patch)
tree771f2c6a2234a5f5037f085edd1640ab335056f4
parent3bbcf76d30bd2606118e5180b73379ac47188d0a (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.c14
-rw-r--r--epan/dissectors/packet-iso15765.h4
-rw-r--r--epan/dissectors/packet-uds.c2
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;