mirror of
https://github.com/jmcorgan/fips.git
synced 2026-08-10 08:37:02 +00:00
Wire format diagrams: - Add 24 SVG diagrams covering every FMP and FSP wire format: common prefix, established frame headers, Noise IK handshake messages, handshake flow, TreeAnnounce, AncestryEntry, FilterAnnounce, LookupRequest/Response, SessionDatagram, Disconnect, SenderReport, ReceiverReport, FSP complete message, SessionSetup/Ack/Msg3, PathMtuNotification, CoordsRequired, PathBroken, and MtuExceeded - Replace ASCII art in fips-wire-formats.md with SVG references - Apply text edits to fips-mesh-layer.md, fips-mesh-operation.md, fips-transport-layer.md, and fips-ipv6-adapter.md Spanning tree dynamics: - Add 12 topology SVG diagrams: node join (overview + 3-panel steps), three-node convergence (4-panel), link addition with depth labels, link removal, partition formation, and 6 real-world example diagrams (office, mixed-link, two-site WAN topologies) - Rewrite all code blocks to narrative prose with diagram references - Add inline prior art attributions distinguishing Yggdrasil-derived concepts from FIPS-novel contributions - Add 3 new references (De Couto ETX, IEEE 802.1D, RFC 2328 OSPF) and Prior Art summary - Remove outdated sections: indirect partition note, integration test gaps, DHT-based lookup reference - Change "must elect a new root" to "must rediscover its new root" Spanning tree design review (fips-spanning-tree.md): - Rename "Root Election" to "Root Discovery" across docs - Add "What Is a Spanning Tree?" introductory section - Add parent selection intro explaining self-organization role - Fix tree distance example: 4 hops, not 2 - Clarify timestamp field as advisory only - Remove unimplemented ROOT_TIMEOUT and TREE_ENTRY_TTL from timing parameters and implementation status tables Bloom filter design review (fips-bloom-filters.md): - Add "What Is a Bloom Filter?" intro section - Rewrite Purpose section to frame filters as routing path identification - Correct FPR analysis (old values were 3-50x overstated) - Add Filter Occupancy Model based on network size and tree position - Fix filter expiration to describe actual MMP-based cleanup - Combine Scale Considerations with Size Classes after Wire Format - Fix stale FPR values in src/bloom/mod.rs comments Session layer review (fips-session-layer.md): - Add inline prior art attributions: Noise Protocol Framework, WireGuard, DTLS (RFC 6347), IKEv2 (RFC 7296), RFC 1191 PMTUD, Yggdrasil, NIP-44 - Replace warmup state machine ASCII art with SVG diagram - Convert CoordsWarmup wire format code block to prose - Add External References section with full citations Level 5 implementation doc cleanup: - Delete fips-software-architecture.md (redundant with protocol layer docs) - Delete fips-state-machines.md (Rust tutorial, not protocol design) - Add fipsctl command reference to README.md - Update cross-references in fips-intro.md, docs/design/README.md, fips-transport-layer.md, fips-configuration.md Fixes: - Correct fd::/8 to fd00::/8 in fips-session-layer.md, fips-identity-derivation.svg, and fips-node-architecture.svg - Fix config example MTU: 1197 → 1472 in fips-configuration.md File organization: - Move all SVG diagrams into docs/design/diagrams/ subdirectory - Update all diagram references to use new paths
141 lines
6.9 KiB
XML
141 lines
6.9 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 780 310" font-family="monospace" font-size="13">
|
|
<!-- Background -->
|
|
<rect width="780" height="310" fill="#0d1117" rx="8"/>
|
|
|
|
<!-- Title -->
|
|
<text x="390" y="24" fill="#e0e0e0" text-anchor="middle" font-size="14" font-weight="bold">Node B Joins via D — State Progression</text>
|
|
|
|
<!-- Panel subtitles -->
|
|
<text x="130" y="46" fill="#909090" text-anchor="middle" font-size="11">T1 — Link established</text>
|
|
<text x="390" y="46" fill="#909090" text-anchor="middle" font-size="11">T2–T3 — B re-parents to D</text>
|
|
<text x="650" y="46" fill="#909090" text-anchor="middle" font-size="11">T4–T5 — Filter propagation</text>
|
|
|
|
<!-- Vertical separators -->
|
|
<line x1="260" y1="36" x2="260" y2="300" stroke="#303050" stroke-width="1"/>
|
|
<line x1="520" y1="36" x2="520" y2="300" stroke="#303050" stroke-width="1"/>
|
|
|
|
<!-- ======================== -->
|
|
<!-- PANEL 1: Link established -->
|
|
<!-- ======================== -->
|
|
<!-- A at (130, 110), children C(65,190) D(130,190) E(195,190), B below D at (130,265) -->
|
|
|
|
<!-- Root label -->
|
|
<text x="130" y="82" fill="#d0a040" text-anchor="middle" font-size="9">★ root</text>
|
|
|
|
<!-- Tree links A to children -->
|
|
<line x1="130" y1="128" x2="65" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
<line x1="130" y1="128" x2="130" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
<line x1="130" y1="128" x2="195" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
|
|
<!-- New peer link D to B (dashed green, vertical) -->
|
|
<line x1="130" y1="208" x2="130" y2="247" stroke="#60a060" stroke-width="2" stroke-dasharray="6,3"/>
|
|
<text x="152" y="233" fill="#60a060" font-size="9">new link</text>
|
|
|
|
<!-- Node A (root) -->
|
|
<circle cx="130" cy="110" r="18" fill="#1a1a2e" stroke="#d0a040" stroke-width="2.5"/>
|
|
<text x="130" y="114" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">A</text>
|
|
|
|
<!-- Node C -->
|
|
<circle cx="65" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="65" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">C</text>
|
|
|
|
<!-- Node D -->
|
|
<circle cx="130" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="130" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">D</text>
|
|
|
|
<!-- Node E -->
|
|
<circle cx="195" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="195" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">E</text>
|
|
|
|
<!-- Node B (not yet in tree, dashed border) -->
|
|
<circle cx="130" cy="265" r="18" fill="#1a1a2e" stroke="#808890" stroke-width="2" stroke-dasharray="4,3"/>
|
|
<text x="130" y="269" fill="#808890" text-anchor="middle" font-weight="bold" font-size="13">B</text>
|
|
|
|
<!-- ======================== -->
|
|
<!-- PANEL 2: B re-parents to D -->
|
|
<!-- ======================== -->
|
|
<!-- A at (390, 110), children C(325,190) D(390,190) E(455,190), B at (390,265) -->
|
|
|
|
<!-- Root label -->
|
|
<text x="390" y="82" fill="#d0a040" text-anchor="middle" font-size="9">★ root</text>
|
|
|
|
<!-- Tree links A to children -->
|
|
<line x1="390" y1="128" x2="325" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
<line x1="390" y1="128" x2="390" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
<line x1="390" y1="128" x2="455" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
|
|
<!-- Tree link D to B (gold) -->
|
|
<line x1="390" y1="208" x2="390" y2="247" stroke="#d0a040" stroke-width="2"/>
|
|
|
|
<!-- Node A (root) -->
|
|
<circle cx="390" cy="110" r="18" fill="#1a1a2e" stroke="#d0a040" stroke-width="2.5"/>
|
|
<text x="390" y="114" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">A</text>
|
|
|
|
<!-- Node C -->
|
|
<circle cx="325" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="325" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">C</text>
|
|
|
|
<!-- Node D -->
|
|
<circle cx="390" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="390" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">D</text>
|
|
|
|
<!-- Node E -->
|
|
<circle cx="455" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="455" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">E</text>
|
|
|
|
<!-- Node B (child of D) -->
|
|
<circle cx="390" cy="265" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="390" y="269" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">B</text>
|
|
|
|
<!-- Annotation near B -->
|
|
<text x="416" y="278" fill="#909090" font-size="9">parent=D, seq=2</text>
|
|
|
|
<!-- ======================== -->
|
|
<!-- PANEL 3: Filter propagation -->
|
|
<!-- ======================== -->
|
|
<!-- A at (650, 110), children C(585,190) D(650,190) E(715,190), B at (650,265) -->
|
|
|
|
<!-- Root label -->
|
|
<text x="650" y="82" fill="#d0a040" text-anchor="middle" font-size="9">★ root</text>
|
|
|
|
<!-- Tree links A to children -->
|
|
<line x1="650" y1="128" x2="585" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
<line x1="650" y1="128" x2="650" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
<line x1="650" y1="128" x2="715" y2="172" stroke="#d0a040" stroke-width="2"/>
|
|
|
|
<!-- Tree link D to B (gold) -->
|
|
<line x1="650" y1="208" x2="650" y2="247" stroke="#d0a040" stroke-width="2"/>
|
|
|
|
<!-- Node A (root) -->
|
|
<circle cx="650" cy="110" r="18" fill="#1a1a2e" stroke="#d0a040" stroke-width="2.5"/>
|
|
<text x="650" y="114" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">A</text>
|
|
|
|
<!-- Node C -->
|
|
<circle cx="585" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="585" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">C</text>
|
|
|
|
<!-- Node D -->
|
|
<circle cx="650" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="650" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">D</text>
|
|
|
|
<!-- Node E -->
|
|
<circle cx="715" cy="190" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="715" y="194" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">E</text>
|
|
|
|
<!-- Node B (child of D) -->
|
|
<circle cx="650" cy="265" r="18" fill="#1a1a2e" stroke="#e0e0e0" stroke-width="2"/>
|
|
<text x="650" y="269" fill="#e0e0e0" text-anchor="middle" font-weight="bold" font-size="13">B</text>
|
|
|
|
<!-- FilterAnnounce arrow and label (drawn last so they render on top) -->
|
|
<defs>
|
|
<marker id="arrowBlue" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
<path d="M0,0 L8,3 L0,6" fill="#6090c0"/>
|
|
</marker>
|
|
</defs>
|
|
<line x1="640" y1="177" x2="640" y2="132" stroke="#6090c0" stroke-width="1.5" stroke-dasharray="4,3" marker-end="url(#arrowBlue)"/>
|
|
<text x="622" y="158" fill="#6090c0" font-size="9" text-anchor="end">FilterAnnounce</text>
|
|
|
|
<!-- Annotation near A -->
|
|
<text x="688" y="102" fill="#909090" font-size="9">B reachable via D</text>
|
|
</svg>
|