<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/simtrace2/+/26572">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">wireshark lua dissector: dissect more<br><br>Change-Id: If81812b6330205a65c1c9b7d4240094b71f3c757<br>---<br>M contrib/simtrace.lua<br>1 file changed, 96 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/contrib/simtrace.lua b/contrib/simtrace.lua</span><br><span>index 1ca1b0b..efae492 100644</span><br><span>--- a/contrib/simtrace.lua</span><br><span>+++ b/contrib/simtrace.lua</span><br><span>@@ -42,14 +42,38 @@</span><br><span> local tpdu_hdr = ProtoField.uint32("usb_simtrace.tpdu_hdr", "tpdu_hdr", base.HEX_DEC, NULL, 0x1)</span><br><span> local rxtxdatalen = ProtoField.uint16("usb_simtrace.rxtxdatalen", "rx/tx data length", base.HEX_DEC)</span><br><span> local rxtxdata = ProtoField.bytes("usb_simtrace.rxtxdata", "rx/tx (data)")</span><br><span style="color: hsl(0, 100%, 40%);">-usb_simtrace_protocol.fields = {</span><br><span style="color: hsl(0, 100%, 40%);">- msgtype, seqnr, slotnr, reserved, payloadlen, payload, pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+local CEMU_STATUS_F_VCC_PRESENT = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_VCC_PRESENT", "VCC_PRESENT", base.HEX_DEC, NULL, 0x00000001)</span><br><span style="color: hsl(120, 100%, 40%);">+local CEMU_STATUS_F_CLK_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CLK_ACTIVE", "CLK_ACTIVE", base.HEX_DEC, NULL, 0x00000002)</span><br><span style="color: hsl(120, 100%, 40%);">+local CEMU_STATUS_F_RCEMU_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RCEMU_ACTIVE", "CEMU_ACTIVE", base.HEX_DEC, NULL, 0x00000004)</span><br><span style="color: hsl(120, 100%, 40%);">+local CEMU_STATUS_F_CARD_INSERT = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CARD_INSERT", "CARD_INSERT", base.HEX_DEC, NULL, 0x00000008)</span><br><span style="color: hsl(120, 100%, 40%);">+local CEMU_STATUS_F_RESET_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RESET_ACTIVE", "RESET_ACTIVE", base.HEX_DEC, NULL, 0x00000010)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+local modem_reset_types = {</span><br><span style="color: hsl(120, 100%, 40%);">+ [0x00] = "de-assert",</span><br><span style="color: hsl(120, 100%, 40%);">+ [0x01] = "assert",</span><br><span style="color: hsl(120, 100%, 40%);">+ [0x02] = "pulse"</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+local modem_reset_status = ProtoField.uint8("usb_simtrace.modem.reset_type", "modem reset type", base.HEX, modem_reset_types, 0xf)</span><br><span style="color: hsl(120, 100%, 40%);">+local modem_reset_len = ProtoField.uint8("usb_simtrace.modem.reset_len", "modem reset length (ms)", base.DEC)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+usb_simtrace_protocol.fields = {</span><br><span style="color: hsl(120, 100%, 40%);">+ msgtype, seqnr, slotnr, reserved, payloadlen, payload,</span><br><span style="color: hsl(120, 100%, 40%);">+ pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata,</span><br><span style="color: hsl(120, 100%, 40%);">+ 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,</span><br><span style="color: hsl(120, 100%, 40%);">+ modem_reset_status, modem_reset_len</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+local is_hdr = Field.new("usb_simtrace.tpdu_hdr")</span><br><span style="color: hsl(120, 100%, 40%);">+local is_pbrx = Field.new("usb_simtrace.pb_and_rx")</span><br><span style="color: hsl(120, 100%, 40%);">+local is_pbtx = Field.new("usb_simtrace.pb_and_tx")</span><br><span style="color: hsl(120, 100%, 40%);">+local is_final= Field.new("usb_simtrace.final")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function dissect_rxtx(payload_data,pinfo,tree)</span><br><span> </span><br><span> local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "rx/tx data")</span><br><span style="color: hsl(0, 100%, 40%);">- local len = payload_data(8+4,2):le_uint();</span><br><span style="color: hsl(0, 100%, 40%);">- local cmd32 = payload_data(8+0,4):le_uint();</span><br><span style="color: hsl(120, 100%, 40%);">+ local len = payload_data(4,2):le_uint();</span><br><span style="color: hsl(120, 100%, 40%);">+ local cmd32 = payload_data(0,4):le_uint();</span><br><span> </span><br><span> headerSubtree:add(pb_and_rx, cmd32)</span><br><span> headerSubtree:add(pb_and_tx, cmd32)</span><br><span>@@ -57,7 +81,65 @@</span><br><span> headerSubtree:add(tpdu_hdr, cmd32)</span><br><span> </span><br><span> headerSubtree:add(rxtxdatalen, len)</span><br><span style="color: hsl(0, 100%, 40%);">- headerSubtree:add_le(rxtxdata, payload_data(8+6,len))</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add_le(rxtxdata, payload_data(6,len))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ -- ghetto dissection does not work due to mixed in procedure bytes</span><br><span style="color: hsl(120, 100%, 40%);">+ --if pinfo.visited == false then</span><br><span style="color: hsl(120, 100%, 40%);">+ -- Dissector.get("iso7816"):call(payload_data(6):tvb(), pinfo, tree)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+-- local offs = 0</span><br><span style="color: hsl(120, 100%, 40%);">+-- if (is_pbrx().value == 1 or is_pbtx().value == 1) and is_final().value == 0 then</span><br><span style="color: hsl(120, 100%, 40%);">+-- offs = 1</span><br><span style="color: hsl(120, 100%, 40%);">+-- else</span><br><span style="color: hsl(120, 100%, 40%);">+-- offs = 0</span><br><span style="color: hsl(120, 100%, 40%);">+-- end</span><br><span style="color: hsl(120, 100%, 40%);">+--</span><br><span style="color: hsl(120, 100%, 40%);">+-- if is_hdr().value == 1 then</span><br><span style="color: hsl(120, 100%, 40%);">+-- Dissector.get("gsm_sim"):call(concatss:tvb(), pinfo, tree)</span><br><span style="color: hsl(120, 100%, 40%);">+-- concatss = payload_data(6):bytes()</span><br><span style="color: hsl(120, 100%, 40%);">+-- else</span><br><span style="color: hsl(120, 100%, 40%);">+-- concatss = concatss .. payload_data(6+offs):bytes()</span><br><span style="color: hsl(120, 100%, 40%);">+-- end</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+--end</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+end</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function dissect_status(payload_data,pinfo,tree)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "status message")</span><br><span style="color: hsl(120, 100%, 40%);">+ local cmd32 = payload_data(0,4):le_uint();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(CEMU_STATUS_F_VCC_PRESENT, cmd32)</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(CEMU_STATUS_F_CLK_ACTIVE, cmd32)</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(CEMU_STATUS_F_RCEMU_ACTIVE, cmd32)</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(CEMU_STATUS_F_CARD_INSERT, cmd32)</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(CEMU_STATUS_F_RESET_ACTIVE, cmd32)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ 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))</span><br><span style="color: hsl(120, 100%, 40%);">+end</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function dissect_atr(payload_data,pinfo,tree)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ local len = payload_data(0,1):le_uint()</span><br><span style="color: hsl(120, 100%, 40%);">+ Dissector.get("iso7816.atr"):call(payload_data(1):tvb(), pinfo, tree)</span><br><span style="color: hsl(120, 100%, 40%);">+end</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function dissect_modem_reset(payload_data,pinfo,tree)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "modem reset")</span><br><span style="color: hsl(120, 100%, 40%);">+ local cmd8 = payload_data(0,1):le_uint();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(modem_reset_status, cmd8)</span><br><span style="color: hsl(120, 100%, 40%);">+ pinfo.cols.info:append(" reset type:" .. modem_reset_types[cmd8]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if(cmd8 == 2) then</span><br><span style="color: hsl(120, 100%, 40%);">+ local duration = payload_data(1,2):le_uint()</span><br><span style="color: hsl(120, 100%, 40%);">+ headerSubtree:add(modem_reset_len, duration)</span><br><span style="color: hsl(120, 100%, 40%);">+ pinfo.cols.info:append(" duration:" .. duration .. "ms")</span><br><span style="color: hsl(120, 100%, 40%);">+ end</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> end</span><br><span> </span><br><span> function usb_simtrace_protocol.dissector(buffer, pinfo, tree)</span><br><span>@@ -76,7 +158,13 @@</span><br><span> pinfo.cols.info = string.format("Cmd 0x%04X : %s", command, control_commands[command])</span><br><span> local payload_data = buffer(8,length-8)</span><br><span> if(command == 0x0101 or command == 0x0106) then</span><br><span style="color: hsl(0, 100%, 40%);">- return dissect_rxtx(buffer(),pinfo,subtree)</span><br><span style="color: hsl(120, 100%, 40%);">+ return dissect_rxtx(payload_data(),pinfo,subtree)</span><br><span style="color: hsl(120, 100%, 40%);">+ elseif(command == 0x0104) then</span><br><span style="color: hsl(120, 100%, 40%);">+ return dissect_status(payload_data(),pinfo,subtree)</span><br><span style="color: hsl(120, 100%, 40%);">+ elseif(command == 0x0102) then</span><br><span style="color: hsl(120, 100%, 40%);">+ return dissect_atr(payload_data(),pinfo,subtree)</span><br><span style="color: hsl(120, 100%, 40%);">+ elseif(command == 0x0201) then</span><br><span style="color: hsl(120, 100%, 40%);">+ return dissect_modem_reset(payload_data(),pinfo,subtree)</span><br><span> else</span><br><span> subtree:add(payload, payload_data)</span><br><span> end</span><br><span>@@ -89,4 +177,6 @@</span><br><span> usb_product_dissectors:add(0x1d50616d, usb_simtrace_protocol)</span><br><span> usb_product_dissectors:add(0x1d50616e, usb_simtrace_protocol)</span><br><span> DissectorTable.get("usb.bulk"):add(0xffff, usb_simtrace_protocol)</span><br><span style="color: hsl(120, 100%, 40%);">+DissectorTable.get("usb.interrupt"):add(0xffff, usb_simtrace_protocol)</span><br><span style="color: hsl(120, 100%, 40%);">+--concatss = ByteArray.new()</span><br><span> end</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/simtrace2/+/26572">change 26572</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/simtrace2/+/26572"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: simtrace2 </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If81812b6330205a65c1c9b7d4240094b71f3c757 </div>
<div style="display:none"> Gerrit-Change-Number: 26572 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>