SIMple can stream its own ISO 7816 APDUs as GSMTAP-SIM packets (its --gsmtap option), so it belongs beside the sniffers and the sigrok decoder. The diagrams get a compact SIMple block between the SIMtrace2 sniffers and the sigrok_iso7816_stream boxes (they do not move): title SIMple, subtitle "APDU -> GSMTAP", and its own arrow into the UDP :4729 listener. It is deliberately smaller than the primary sniffers, matching its role as a secondary source. The README alt text and the gsmtap capture-mode bullet/comment now list SIMple as a source too (linked to its repository in the bullet). Both languages; 558 Python + 80 Node tests; runtime zip rebuilt with the updated diagrams.
79 lines
6.3 KiB
XML
79 lines
6.3 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="640" viewBox="0 0 960 640" role="img" aria-labelledby="diagram-title diagram-desc" font-family="'Segoe UI', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif">
|
|
<title id="diagram-title">SIMtrace Analyser: capture and analysis</title>
|
|
<desc id="diagram-desc">SIMtrace2 hardware is read by simtrace2-pysniff (bundled) or the original simtrace2-sniff, and FX2 hardware by the sigrok_iso7816_stream decoder; the sniffers, the decoder and SIMple stream GSMTAP-SIM to the listener on UDP :4729. The server can also read SIMtrace2 hardware directly over USB with the bundled sniffer code, and imports PCAP/COMPRION traces from files. simtrace-analyser-server decodes and stores the traffic in SQLite and serves the web UI.</desc>
|
|
<defs>
|
|
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
<path d="M0 0 L10 5 L0 10 Z" fill="#64748b"/>
|
|
</marker>
|
|
</defs>
|
|
<rect x="1" y="1" width="958" height="638" rx="18" fill="#ffffff" stroke="#e2e8f0" stroke-width="1.5"/>
|
|
<text x="480" y="30" text-anchor="middle" font-size="14" fill="#475569">capture → analyse</text>
|
|
|
|
<!-- capture devices -->
|
|
<rect x="100" y="48" width="250" height="64" rx="12" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.5"/>
|
|
<text x="225" y="74" text-anchor="middle" font-size="15" font-weight="600" fill="#0f172a">SIMtrace2 hardware</text>
|
|
<text x="225" y="94" text-anchor="middle" font-size="12" fill="#475569">Osmocom USB sniffer</text>
|
|
|
|
<rect x="610" y="48" width="250" height="64" rx="12" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.5"/>
|
|
<text x="735" y="74" text-anchor="middle" font-size="15" font-weight="600" fill="#0f172a">FX2 logic analyzer</text>
|
|
<text x="735" y="94" text-anchor="middle" font-size="12" fill="#475569">Saleae clone</text>
|
|
|
|
<line x1="225" y1="112" x2="225" y2="148" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="735" y1="112" x2="735" y2="148" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<!-- sniffers -->
|
|
<rect x="100" y="150" width="250" height="96" rx="12" fill="#eff6ff" stroke="#93c5fd" stroke-width="1.5"/>
|
|
<text x="225" y="176" text-anchor="middle" font-size="14" font-weight="600" fill="#0f172a">SIMtrace2 sniffers</text>
|
|
<text x="225" y="202" text-anchor="middle" font-size="13" fill="#334155" font-family="'Cascadia Mono', Consolas, 'DejaVu Sans Mono', monospace">simtrace2-pysniff</text>
|
|
<text x="225" y="224" text-anchor="middle" font-size="13" fill="#334155" font-family="'Cascadia Mono', Consolas, 'DejaVu Sans Mono', monospace">simtrace2-sniff (Osmocom)</text>
|
|
|
|
<rect x="610" y="150" width="250" height="96" rx="12" fill="#f5f3ff" stroke="#c4b5fd" stroke-width="1.5"/>
|
|
<text x="735" y="190" text-anchor="middle" font-size="14" font-weight="600" fill="#0f172a" font-family="'Cascadia Mono', Consolas, 'DejaVu Sans Mono', monospace">sigrok_iso7816_stream</text>
|
|
<text x="735" y="212" text-anchor="middle" font-size="13" fill="#475569">decoder</text>
|
|
|
|
<!-- a secondary GSMTAP-SIM source: SIMple can stream its APDUs -->
|
|
<rect x="395" y="166" width="170" height="64" rx="12" fill="#ecfeff" stroke="#a5f3fc" stroke-width="1.5"/>
|
|
<text x="480" y="192" text-anchor="middle" font-size="16" font-weight="600" fill="#0f172a">SIMple</text>
|
|
<text x="480" y="212" text-anchor="middle" font-size="12" fill="#475569">APDU → GSMTAP</text>
|
|
|
|
<line x1="225" y1="246" x2="425" y2="278" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="480" y1="230" x2="480" y2="278" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="735" y1="246" x2="535" y2="278" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<!-- GSMTAP listener -->
|
|
<rect x="350" y="280" width="260" height="72" rx="12" fill="#fffbeb" stroke="#fcd34d" stroke-width="1.5"/>
|
|
<text x="480" y="310" text-anchor="middle" font-size="16" font-weight="600" fill="#0f172a" font-family="'Cascadia Mono', Consolas, 'DejaVu Sans Mono', monospace">GSMTAP UDP :4729</text>
|
|
<text x="480" y="332" text-anchor="middle" font-size="13" fill="#475569">listener</text>
|
|
|
|
<!-- file import -->
|
|
<rect x="650" y="280" width="240" height="72" rx="12" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.5"/>
|
|
<text x="770" y="310" text-anchor="middle" font-size="14" font-weight="600" fill="#0f172a">PCAP / COMPRION</text>
|
|
<text x="770" y="332" text-anchor="middle" font-size="13" fill="#475569">import from files</text>
|
|
|
|
<line x1="480" y1="352" x2="480" y2="390" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="770" y1="352" x2="635" y2="390" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<!-- the direct USB path bypasses the sniffers and GSMTAP -->
|
|
<path d="M100 84 H52 V448 H258" fill="none" stroke="#64748b" stroke-width="2" stroke-linejoin="round" marker-end="url(#arrow)"/>
|
|
<text x="64" y="418" font-size="12" font-weight="600" fill="#475569">direct USB</text>
|
|
<text x="64" y="436" font-size="12" fill="#475569">pysniff code in-process</text>
|
|
|
|
<!-- analysis server -->
|
|
<rect x="260" y="392" width="440" height="84" rx="12" fill="#ecfdf5" stroke="#6ee7b7" stroke-width="1.5"/>
|
|
<text x="480" y="427" text-anchor="middle" font-size="18" font-weight="600" fill="#0f172a" font-family="'Cascadia Mono', Consolas, 'DejaVu Sans Mono', monospace">simtrace-analyser-server</text>
|
|
<text x="480" y="451" text-anchor="middle" font-size="13" fill="#475569">decodes · stores</text>
|
|
|
|
<line x1="400" y1="476" x2="250" y2="514" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
<line x1="560" y1="476" x2="710" y2="514" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)"/>
|
|
|
|
<!-- storage and UI -->
|
|
<rect x="110" y="516" width="280" height="76" rx="12" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.5"/>
|
|
<text x="250" y="548" text-anchor="middle" font-size="18" font-weight="600" fill="#0f172a">SQLite</text>
|
|
<text x="250" y="570" text-anchor="middle" font-size="13" fill="#475569">sessions.db</text>
|
|
|
|
<rect x="570" y="516" width="280" height="76" rx="12" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.5"/>
|
|
<text x="710" y="548" text-anchor="middle" font-size="18" font-weight="600" fill="#0f172a">Browser (web UI)</text>
|
|
<text x="710" y="570" text-anchor="middle" font-size="13" fill="#475569">installable PWA</text>
|
|
</svg>
|