Change in simtrace2[master]: wireshark lua dissector: dissect more

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Hoernchen gerrit-no-reply at lists.osmocom.org
Tue Dec 14 18:56:08 UTC 2021


Hoernchen has uploaded this change for review. ( https://gerrit.osmocom.org/c/simtrace2/+/26572 )


Change subject: wireshark lua dissector: dissect more
......................................................................

wireshark lua dissector: dissect more

Change-Id: If81812b6330205a65c1c9b7d4240094b71f3c757
---
M contrib/simtrace.lua
1 file changed, 96 insertions(+), 6 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/72/26572/1

diff --git a/contrib/simtrace.lua b/contrib/simtrace.lua
index 1ca1b0b..efae492 100644
--- a/contrib/simtrace.lua
+++ b/contrib/simtrace.lua
@@ -42,14 +42,38 @@
 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, pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata
+
+local CEMU_STATUS_F_VCC_PRESENT  = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_VCC_PRESENT", "VCC_PRESENT", base.HEX_DEC, NULL, 0x00000001)
+local CEMU_STATUS_F_CLK_ACTIVE  = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CLK_ACTIVE", "CLK_ACTIVE", base.HEX_DEC, NULL, 0x00000002)
+local CEMU_STATUS_F_RCEMU_ACTIVE  = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RCEMU_ACTIVE", "CEMU_ACTIVE", base.HEX_DEC, NULL, 0x00000004)
+local CEMU_STATUS_F_CARD_INSERT  = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CARD_INSERT", "CARD_INSERT", base.HEX_DEC, NULL, 0x00000008)
+local CEMU_STATUS_F_RESET_ACTIVE  = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RESET_ACTIVE", "RESET_ACTIVE", base.HEX_DEC, NULL, 0x00000010)
+
+local modem_reset_types = {
+    [0x00] = "de-assert",
+    [0x01] = "assert",
+    [0x02] = "pulse"
 }
+local modem_reset_status = ProtoField.uint8("usb_simtrace.modem.reset_type", "modem reset type", base.HEX, modem_reset_types, 0xf)
+local modem_reset_len = ProtoField.uint8("usb_simtrace.modem.reset_len", "modem reset length (ms)", base.DEC)
+
+usb_simtrace_protocol.fields = {
+  msgtype, seqnr, slotnr, reserved, payloadlen, payload,
+  pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata,
+  CEMU_STATUS_F_VCC_PRESENT, CEMU_STATUS_F_CLK_ACTIVE, CEMU_STATUS_F_RCEMU_ACTIVE, CEMU_STATUS_F_CARD_INSERT, CEMU_STATUS_F_RESET_ACTIVE,
+  modem_reset_status, modem_reset_len
+}
+
+local is_hdr = Field.new("usb_simtrace.tpdu_hdr")
+local is_pbrx = Field.new("usb_simtrace.pb_and_rx")
+local is_pbtx = Field.new("usb_simtrace.pb_and_tx")
+local is_final= Field.new("usb_simtrace.final")
+
 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();
+  local len  = payload_data(4,2):le_uint();
+  local cmd32 =  payload_data(0,4):le_uint();
 
   headerSubtree:add(pb_and_rx, cmd32)
   headerSubtree:add(pb_and_tx, cmd32)
@@ -57,7 +81,65 @@
   headerSubtree:add(tpdu_hdr, cmd32)
 
   headerSubtree:add(rxtxdatalen, len)
-  headerSubtree:add_le(rxtxdata, payload_data(8+6,len))
+  headerSubtree:add_le(rxtxdata, payload_data(6,len))
+
+  -- ghetto dissection does not work due to mixed in procedure bytes
+  --if pinfo.visited == false then
+  -- Dissector.get("iso7816"):call(payload_data(6):tvb(), pinfo, tree)
+
+-- local offs = 0
+-- if (is_pbrx().value == 1 or is_pbtx().value == 1) and is_final().value == 0 then
+--    offs = 1
+-- else
+--  offs = 0
+-- end
+--
+-- if is_hdr().value == 1 then
+--   Dissector.get("gsm_sim"):call(concatss:tvb(), pinfo, tree)
+--   concatss =  payload_data(6):bytes()
+--  else
+--   concatss = concatss .. payload_data(6+offs):bytes()
+--  end
+
+--end
+
+end
+
+function dissect_status(payload_data,pinfo,tree)
+
+  local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "status message")
+  local cmd32 =  payload_data(0,4):le_uint();
+
+  headerSubtree:add(CEMU_STATUS_F_VCC_PRESENT, cmd32)
+  headerSubtree:add(CEMU_STATUS_F_CLK_ACTIVE, cmd32)
+  headerSubtree:add(CEMU_STATUS_F_RCEMU_ACTIVE, cmd32)
+  headerSubtree:add(CEMU_STATUS_F_CARD_INSERT, cmd32)
+  headerSubtree:add(CEMU_STATUS_F_RESET_ACTIVE, cmd32)
+
+  pinfo.cols.info:append(" VCC:" .. payload_data(0,1):bitfield(7, 1) .. " CLK:" .. payload_data(0,1):bitfield(6, 1) .. " RESET:" .. payload_data(0,1):bitfield(3, 1))
+end
+
+function dissect_atr(payload_data,pinfo,tree)
+
+  local len  = payload_data(0,1):le_uint()
+  Dissector.get("iso7816.atr"):call(payload_data(1):tvb(), pinfo, tree)
+end
+
+function dissect_modem_reset(payload_data,pinfo,tree)
+
+  local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "modem reset")
+  local cmd8 =  payload_data(0,1):le_uint();
+
+  headerSubtree:add(modem_reset_status, cmd8)
+  pinfo.cols.info:append(" reset type:" .. modem_reset_types[cmd8]);
+
+  if(cmd8 == 2) then
+    local duration = payload_data(1,2):le_uint()
+    headerSubtree:add(modem_reset_len, duration)
+    pinfo.cols.info:append(" duration:" ..  duration .. "ms")
+  end
+
+
 end
 
 function usb_simtrace_protocol.dissector(buffer, pinfo, tree)
@@ -76,7 +158,13 @@
   pinfo.cols.info = string.format("Cmd 0x%04X : %s", command, control_commands[command])
   local payload_data = buffer(8,length-8)
   if(command == 0x0101 or command == 0x0106) then
-    return dissect_rxtx(buffer(),pinfo,subtree)
+    return dissect_rxtx(payload_data(),pinfo,subtree)
+  elseif(command == 0x0104) then
+	return dissect_status(payload_data(),pinfo,subtree)
+  elseif(command == 0x0102) then
+	return dissect_atr(payload_data(),pinfo,subtree)
+  elseif(command == 0x0201) then
+	return dissect_modem_reset(payload_data(),pinfo,subtree)
   else
     subtree:add(payload, payload_data)
   end
@@ -89,4 +177,6 @@
 usb_product_dissectors:add(0x1d50616d, usb_simtrace_protocol)
 usb_product_dissectors:add(0x1d50616e, usb_simtrace_protocol)
 DissectorTable.get("usb.bulk"):add(0xffff, usb_simtrace_protocol)
+DissectorTable.get("usb.interrupt"):add(0xffff, usb_simtrace_protocol)
+--concatss =  ByteArray.new()
 end

-- 
To view, visit https://gerrit.osmocom.org/c/simtrace2/+/26572
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: simtrace2
Gerrit-Branch: master
Gerrit-Change-Id: If81812b6330205a65c1c9b7d4240094b71f3c757
Gerrit-Change-Number: 26572
Gerrit-PatchSet: 1
Gerrit-Owner: Hoernchen <ewild at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211214/1155529b/attachment.htm>


More information about the gerrit-log mailing list