aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wild <ewild@sysmocom.de>2021-07-28 15:22:18 +0200
committerlaforge <laforge@osmocom.org>2021-08-02 09:23:19 +0000
commit23a97714671b62d1fcfd93804454f6e376b99b1d (patch)
tree7a3b8ab7a850482c2f56de0c9c137d28232d3276
parenta755b53768a3f9e5fd407979f65ee599890bb0c5 (diff)
contrib: more cardem dissection
-rw-r--r--contrib/simtrace.lua29
1 files changed, 27 insertions, 2 deletions
diff --git a/contrib/simtrace.lua b/contrib/simtrace.lua
index 8298265..5a273d2 100644
--- a/contrib/simtrace.lua
+++ b/contrib/simtrace.lua
@@ -36,9 +36,29 @@ local reserved = ProtoField.uint16("usb_simtrace.reserved", "reserved", base.HE
local payloadlen = ProtoField.uint16("usb_simtrace.length", "length", base.HEX_DEC)
local payload = ProtoField.bytes("usb_simtrace.payload", "Data")
+local pb_and_rx = ProtoField.uint32("usb_simtrace.pb_and_rx", "pb_and_rx", base.HEX_DEC, NULL, 0x8)
+local pb_and_tx = ProtoField.uint32("usb_simtrace.pb_and_tx", "pb_and_tx", base.HEX_DEC, NULL, 0x4)
+local final = ProtoField.uint32("usb_simtrace.final", "final", base.HEX_DEC, NULL, 0x2)
+local tpdu_hdr = ProtoField.uint32("usb_simtrace.tpdu_hdr", "tpdu_hdr", base.HEX_DEC, NULL, 0x1)
+local rxtxdatalen = ProtoField.uint16("usb_simtrace.rxtxdatalen", "rx/tx data length", base.HEX_DEC)
+local rxtxdata = ProtoField.bytes("usb_simtrace.rxtxdata", "rx/tx (data)")
usb_simtrace_protocol.fields = {
- msgtype, seqnr, slotnr, reserved, payloadlen, payload
+ msgtype, seqnr, slotnr, reserved, payloadlen, payload, pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata
}
+function dissect_rxtx(payload_data,pinfo,tree)
+
+ local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "rx/tx data")
+ local len = payload_data(8+4,2):le_uint();
+ local cmd32 = payload_data(8+0,4):le_uint();
+
+ headerSubtree:add(pb_and_rx, cmd32)
+ headerSubtree:add(pb_and_tx, cmd32)
+ headerSubtree:add(final, cmd32)
+ headerSubtree:add(tpdu_hdr, cmd32)
+
+ headerSubtree:add(rxtxdatalen, len)
+ headerSubtree:add_le(rxtxdata, payload_data(8+6,len))
+end
function usb_simtrace_protocol.dissector(buffer, pinfo, tree)
length = buffer:len()
@@ -54,7 +74,12 @@ function usb_simtrace_protocol.dissector(buffer, pinfo, tree)
subtree:add(slotnr, buffer(3,1))
subtree:add_le(payloadlen, buffer(6,2))
pinfo.cols.info = string.format("Cmd 0x%04X : %s", command, control_commands[command])
- subtree:add(payload, buffer(8,length-8))
+ local payload_data = buffer(8,length-8)
+ if(command == 0x0101 or command == 0x0106) then
+ return dissect_rxtx(buffer(),pinfo,subtree)
+ else
+ subtree:add(payload, payload_data)
+ end
end