aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-iso14443.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2016-03-06 17:35:39 +0100
committerMartin Kaiser <wireshark@kaiser.cx>2016-03-18 16:32:00 +0000
commitbdca7767ab64c208d765844e945268c073dff52a (patch)
treecd7cd92c4ebe5ffc294b05b1face72b00f786494 /epan/dissectors/packet-iso14443.c
parente1d54cfc3e8223bb4334e5aeed019dab35528e9b (diff)
iso14443: fix the dissection of ATQA
the two bytes are sent LSB first all fields are defined relative to the entire 16bit value Change-Id: Iaea2b98fcb1f57224fbbd1c4c58473a7f810055d Reviewed-on: https://code.wireshark.org/review/14513 Reviewed-by: Martin Kaiser <wireshark@kaiser.cx>
Diffstat (limited to 'epan/dissectors/packet-iso14443.c')
-rw-r--r--epan/dissectors/packet-iso14443.c47
1 files changed, 36 insertions, 11 deletions
diff --git a/epan/dissectors/packet-iso14443.c b/epan/dissectors/packet-iso14443.c
index 838467eee7..72dece7499 100644
--- a/epan/dissectors/packet-iso14443.c
+++ b/epan/dissectors/packet-iso14443.c
@@ -186,7 +186,10 @@ static int hf_iso14443_len_field = -1;
static int hf_iso14443_resp_to = -1;
static int hf_iso14443_resp_in = -1;
static int hf_iso14443_short_frame = -1;
+static int hf_iso14443_atqa_rfu1 = -1;
+static int hf_iso14443_atqa_rfu2 = -1;
static int hf_iso14443_propr_coding = -1;
+static int hf_iso14443_uid_bits = -1;
static int hf_iso14443_uid_size = -1;
static int hf_iso14443_max_frame_size = -1;
static int hf_iso14443_bit_frame_anticoll = -1;
@@ -306,14 +309,18 @@ dissect_iso14443_cmd_type_wupa(tvbuff_t *tvb, packet_info *pinfo,
}
}
else if (pinfo->p2p_dir == P2P_DIR_RECV) {
+ guint16 atqa;
+
+ atqa = tvb_get_letohs(tvb, offset);
col_set_str(pinfo->cinfo, COL_INFO, "ATQA");
- proto_item_append_text(ti, ": ATQA");
+ proto_item_append_text(ti, ": ATQA 0x%04x", atqa);
+ proto_tree_add_item(tree, hf_iso14443_atqa_rfu1,
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(tree, hf_iso14443_propr_coding,
- tvb, offset, 1, ENC_BIG_ENDIAN);
- offset++;
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
- uid_bits = (tvb_get_guint8(tvb, offset) & 0xC0) >> 6;
+ uid_bits = (atqa & 0xC0) >> 6;
if (uid_bits == 0x00)
uid_size = 4;
else if (uid_bits == 0x01)
@@ -321,11 +328,17 @@ dissect_iso14443_cmd_type_wupa(tvbuff_t *tvb, packet_info *pinfo,
else if (uid_bits == 0x02)
uid_size = 10;
/* XXX- expert info for invalid uid size */
- proto_tree_add_uint_bits_format_value(tree, hf_iso14443_uid_size,
- tvb, offset*8, 2, uid_size, "%d", uid_size);
+ proto_tree_add_item(tree, hf_iso14443_uid_bits,
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_uint(tree, hf_iso14443_uid_size,
+ tvb, offset+1, 1, uid_size);
+
+ proto_tree_add_item(tree, hf_iso14443_atqa_rfu2,
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(tree, hf_iso14443_bit_frame_anticoll,
- tvb, offset, 1, ENC_BIG_ENDIAN);
- offset++;
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+ offset += 2;
}
return offset;
@@ -1209,13 +1222,25 @@ proto_register_iso14443(void)
{ "Short frame", "iso14443.short_frame",
FT_UINT8, BASE_HEX, VALS(iso14443_short_frame), 0, NULL, HFILL }
},
+ { &hf_iso14443_atqa_rfu1,
+ { "RFU", "iso14443.atqa_rfu",
+ FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL }
+ },
+ { &hf_iso14443_atqa_rfu2,
+ { "RFU", "iso14443.atqa_rfu",
+ FT_UINT16, BASE_HEX, NULL, 0x0020, NULL, HFILL }
+ },
{ &hf_iso14443_propr_coding,
{ "Proprietary coding", "iso14443.propr_coding",
- FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }
+ FT_UINT16, BASE_HEX, NULL, 0x0F00, NULL, HFILL }
+ },
+ { &hf_iso14443_uid_bits,
+ { "UID bits", "iso14443.uid_bits",
+ FT_UINT16, BASE_HEX, NULL, 0x00C0, NULL, HFILL }
},
{ &hf_iso14443_uid_size,
{ "UID size", "iso14443.uid_size",
- FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }
+ FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }
},
{ &hf_iso14443_max_frame_size,
{ "Maximum frame size", "iso14443.max_frame_size",
@@ -1223,7 +1248,7 @@ proto_register_iso14443(void)
},
{ &hf_iso14443_bit_frame_anticoll,
{ "Bit frame anticollision", "iso14443.bit_frame_anticoll",
- FT_UINT8, BASE_HEX, NULL, 0x1F, NULL, HFILL }
+ FT_UINT16, BASE_HEX, NULL, 0x001F, NULL, HFILL }
},
{ &hf_iso14443_apf,
{ "Anticollision prefix", "iso14443.apf",