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/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( 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(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved 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: 2 Gerrit-Owner: Hoernchen <ewild at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211215/61d6fa1b/attachment.htm>