aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rfid-pn532.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-02-06 13:23:54 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-02-06 13:23:54 +0000
commit6bcbacf99a86ff653aeadcf4319292113e60c729 (patch)
treef17c6ead8f3e965eacc222825132f34581b5ce69 /epan/dissectors/packet-rfid-pn532.c
parentba959015f6e64d1cfa9ecfa091ac93258ba39f98 (diff)
From Tyson Key:
Support for dissection of MiFare command payloads in PN532 InDataExchange packets. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8291 svn path=/trunk/; revision=47518
Diffstat (limited to 'epan/dissectors/packet-rfid-pn532.c')
-rw-r--r--epan/dissectors/packet-rfid-pn532.c40
1 files changed, 36 insertions, 4 deletions
diff --git a/epan/dissectors/packet-rfid-pn532.c b/epan/dissectors/packet-rfid-pn532.c
index c4eb0afe5b..0828b93388 100644
--- a/epan/dissectors/packet-rfid-pn532.c
+++ b/epan/dissectors/packet-rfid-pn532.c
@@ -80,7 +80,8 @@ static int hf_pn532_14443b_proto_info = -1;
#define READ_GPIO 0x0C
#define WRITE_GPIO 0x0E
#define SET_SERIAL_BAUD_RATE 0x10
-#define SET_PARAMETERS 0x12
+#define SET_PARAMETERS_REQ 0x12
+#define SET_PARAMETERS_RSP 0x13
#define SAM_CONFIGURATION 0x14
#define POWER_DOWN 0x16
@@ -155,7 +156,8 @@ static int hf_pn532_14443b_proto_info = -1;
enum {
SUB_DATA = 0,
SUB_FELICA,
-
+ SUB_MIFARE,
+
SUB_MAX
};
@@ -184,7 +186,11 @@ static const value_string pn532_commands[] = {
{READ_GPIO, "ReadGPIO"},
{WRITE_GPIO, "WriteGPIO"},
{SET_SERIAL_BAUD_RATE, "SetSerialBaudRate"},
- {SET_PARAMETERS, "SetParameters"},
+
+ /* Set Parameters */
+ {SET_PARAMETERS_REQ, "SetParameters"},
+ {SET_PARAMETERS_RSP, "SetParameters (Response)"},
+
{SAM_CONFIGURATION, "SAMConfiguration"},
{POWER_DOWN, "PowerDown"},
@@ -352,7 +358,10 @@ dissect_pn532(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree)
case SET_SERIAL_BAUD_RATE:
break;
- case SET_PARAMETERS:
+ case SET_PARAMETERS_REQ:
+ break;
+
+ case SET_PARAMETERS_RSP:
break;
case SAM_CONFIGURATION:
@@ -462,6 +471,19 @@ dissect_pn532(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree)
break;
case IN_DATA_EXCHANGE_REQ:
+
+ if (sub_selected == SUB_MIFARE) {
+ /* Logical target number */
+ proto_tree_add_item(pn532_tree, hf_pn532_Tg, tvb, 2, 1, ENC_BIG_ENDIAN);
+
+ /* Seems to work for payloads from LibNFC's "nfc-mfultralight" command */
+ next_tvb = tvb_new_subset_remaining(tvb, 3);
+ call_dissector(sub_handles[SUB_MIFARE], next_tvb, pinfo, tree);
+ }
+
+ else {
+ }
+
break;
case IN_DATA_EXCHANGE_RSP:
@@ -478,6 +500,10 @@ dissect_pn532(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree)
next_tvb = tvb_new_subset_remaining(tvb, 3);
call_dissector(sub_handles[SUB_FELICA], next_tvb, pinfo, tree);
}
+
+ /* MiFare transmissions may identify as spurious FeliCa packets, in some cases */
+ else {
+ }
break;
@@ -491,6 +517,10 @@ dissect_pn532(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree)
next_tvb = tvb_new_subset_remaining(tvb, 4);
call_dissector(sub_handles[SUB_FELICA], next_tvb, pinfo, tree);
}
+
+ /* MiFare transmissions may identify as spurious FeliCa packets, in some cases */
+ else {
+ }
break;
@@ -631,6 +661,7 @@ void proto_register_pn532(void)
static const enum_val_t sub_enum_vals[] = {
{ "data", "Data", SUB_DATA },
{ "felica", "Sony FeliCa", SUB_FELICA },
+ { "mifare", "NXP MiFare", SUB_MIFARE },
{ NULL, NULL, 0 }
};
@@ -653,6 +684,7 @@ void proto_reg_handoff_pn532(void)
sub_handles[SUB_DATA] = find_dissector("data");
sub_handles[SUB_FELICA] = find_dissector("felica");
+ sub_handles[SUB_MIFARE] = find_dissector("mifare");
}
/*