Browse Source

add presentation, update graphics

Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
master
Nico Schottelius 3 years ago
parent
commit
45871ae2c9
  1. BIN
      doc/HIGH SPEED NAT64 WITH P4.pdf
  2. 4
      doc/Makefile
  3. BIN
      doc/Thesis.pdf
  4. 73
      doc/graphviz/arp-ndp.svg
  5. 118
      doc/graphviz/dns64.svg
  6. 85
      doc/graphviz/dualstack.svg
  7. 2
      doc/graphviz/icmp6ndp.dot
  8. 91
      doc/graphviz/icmp6ndp.svg
  9. 18
      doc/graphviz/nat64-two-directions.dot
  10. 51
      doc/graphviz/nat64-two-directions.svg
  11. 74
      doc/graphviz/netpfgadesign.svg
  12. 45
      doc/graphviz/networkdesignnat64.svg
  13. 2
      doc/graphviz/p4switch-stateful.dot
  14. 193
      doc/graphviz/p4switch-stateful.svg
  15. 96
      doc/graphviz/p4switch.svg
  16. 57
      doc/graphviz/softwarenat64design.svg
  17. 52
      doc/graphviz/statefulnat64.svg
  18. 53
      doc/graphviz/switchdesign.svg
  19. 85
      doc/graphviz/v4only.svg
  20. 41
      doc/graphviz/v6-v4-innetwork.svg
  21. 12
      doc/graphviz/v6-v4-mixed.dot
  22. 85
      doc/graphviz/v6-v4-mixed.svg
  23. 85
      doc/graphviz/v6-v4-standard.svg
  24. 13
      doc/graphviz/v6-v6-separated.dot
  25. 108
      doc/graphviz/v6-v6-separated.svg
  26. 85
      doc/graphviz/v6only.svg

BIN
doc/HIGH SPEED NAT64 WITH P4.pdf

Binary file not shown.

4
doc/Makefile

@ -15,9 +15,13 @@ clean:
all-graphviz:
for dot in graphviz/*.dot; do make $${dot%%.dot}.png; done
for dot in graphviz/*.dot; do make $${dot%%.dot}.pdf; done
for dot in graphviz/*.dot; do make $${dot%%.dot}.svg; done
graphviz/%.png: graphviz/%.dot
dot -Tpng < $< > $@
graphviz/%.pdf: graphviz/%.dot
dot -Tpdf < $< > $@
graphviz/%.svg: graphviz/%.dot
dot -Tsvg < $< > $@

BIN
doc/Thesis.pdf

Binary file not shown.

73
doc/graphviz/arp-ndp.svg

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="1025pt" height="232pt"
viewBox="0.00 0.00 1025.00 232.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 228)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-228 1021,-228 1021,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_v6</title>
<polygon fill="none" stroke="#000000" points="8,-8 8,-108 1009,-108 1009,-8 8,-8"/>
</g>
<g id="clust2" class="cluster">
<title>cluster_v4</title>
<polygon fill="none" stroke="#000000" points="47,-116 47,-216 970,-216 970,-116 47,-116"/>
</g>
<!-- v6host1 -->
<g id="node1" class="node">
<title>v6host1</title>
<polygon fill="none" stroke="#000000" points="255,-76 16,-76 16,-40 255,-40 255,-76"/>
<text text-anchor="middle" x="135.5" y="-54.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host (fe80::1 and 2001:db8::1)</text>
</g>
<!-- v6host2 -->
<g id="node2" class="node">
<title>v6host2</title>
<polygon fill="none" stroke="#000000" points="1001,-76 762,-76 762,-40 1001,-40 1001,-76"/>
<text text-anchor="middle" x="881.5" y="-54.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host (fe80::2 and 2001:db8::2)</text>
</g>
<!-- v6host1&#45;&gt;v6host2 -->
<g id="edge1" class="edge">
<title>v6host1&#45;&gt;v6host2</title>
<path fill="none" stroke="#000000" d="M255.0865,-49.5709C267.5463,-48.9283 280.0269,-48.3821 292,-48 484.3465,-41.861 532.6535,-41.861 725,-48 733.6992,-48.2776 742.6663,-48.6419 751.6987,-49.0668"/>
<polygon fill="#000000" stroke="#000000" points="751.7531,-52.5736 761.9135,-49.5709 752.0982,-45.5821 751.7531,-52.5736"/>
<text text-anchor="middle" x="508.5" y="-51.8" font-family="Times,serif" font-size="14.00" fill="#000000">ICMP6 neighbor solicitation, who has 2001:db8::2? [Multicast]</text>
</g>
<!-- v6host2&#45;&gt;v6host1 -->
<g id="edge2" class="edge">
<title>v6host2&#45;&gt;v6host1</title>
<path fill="none" stroke="#000000" d="M761.8853,-62.2147C749.431,-62.536 736.9594,-62.809 725,-63 532.5801,-66.073 484.4199,-66.073 292,-63 283.3107,-62.8612 274.3511,-62.6791 265.3242,-62.4667"/>
<polygon fill="#000000" stroke="#000000" points="265.198,-58.9626 255.1147,-62.2147 265.0252,-65.9605 265.198,-58.9626"/>
<text text-anchor="middle" x="508.5" y="-68.8" font-family="Times,serif" font-size="14.00" fill="#000000">ICMP6 Neighbor Advertisement: 2001:db8::2 has 00:00:0a:00:00:42&#39; [Unicast]</text>
</g>
<!-- v4host1 -->
<g id="node3" class="node">
<title>v4host1</title>
<polygon fill="none" stroke="#000000" points="216,-184 55,-184 55,-148 216,-148 216,-184"/>
<text text-anchor="middle" x="135.5" y="-162.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host (192.0.2.1)</text>
</g>
<!-- v4host2 -->
<g id="node4" class="node">
<title>v4host2</title>
<polygon fill="none" stroke="#000000" points="962,-184 801,-184 801,-148 962,-148 962,-184"/>
<text text-anchor="middle" x="881.5" y="-162.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host (192.0.2.2)</text>
</g>
<!-- v4host1&#45;&gt;v4host2 -->
<g id="edge3" class="edge">
<title>v4host1&#45;&gt;v4host2</title>
<path fill="none" stroke="#000000" d="M216.2759,-159.8511C240.6003,-158.266 267.3734,-156.786 292,-156 484.3465,-149.861 532.6535,-149.861 725,-156 746.2597,-156.6785 769.1191,-157.8743 790.6217,-159.2084"/>
<polygon fill="#000000" stroke="#000000" points="790.522,-162.709 800.7241,-159.8511 790.9665,-155.7231 790.522,-162.709"/>
<text text-anchor="middle" x="508.5" y="-159.8" font-family="Times,serif" font-size="14.00" fill="#000000">ARP who has 192.0.2.2? [Broadcast]</text>
</g>
<!-- v4host2&#45;&gt;v4host1 -->
<g id="edge4" class="edge">
<title>v4host2&#45;&gt;v4host1</title>
<path fill="none" stroke="#000000" d="M800.6887,-169.0746C776.3633,-169.8672 749.5984,-170.6072 725,-171 532.5801,-174.073 484.4199,-174.073 292,-171 270.7647,-170.6609 247.9148,-170.063 226.4135,-169.396"/>
<polygon fill="#000000" stroke="#000000" points="226.4175,-165.8945 216.3113,-169.0746 226.1949,-172.8909 226.4175,-165.8945"/>
<text text-anchor="middle" x="508.5" y="-176.8" font-family="Times,serif" font-size="14.00" fill="#000000">ARP 192.0.2.2 is at 00:00:0a:00:00:22&#39; [Unicast]</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

118
doc/graphviz/dns64.svg

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="806pt" height="355pt"
viewBox="0.00 0.00 806.00 355.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 351)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-351 802,-351 802,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_dns64</title>
<polygon fill="none" stroke="#000000" points="8,-8 8,-240 627,-240 627,-8 8,-8"/>
<text text-anchor="middle" x="317.5" y="-224.8" font-family="Times,serif" font-size="14.00" fill="#000000">DNS request</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_nat64</title>
<polygon fill="none" stroke="#000000" points="638,-9 638,-240 782,-240 782,-9 638,-9"/>
<text text-anchor="middle" x="710" y="-224.8" font-family="Times,serif" font-size="14.00" fill="#000000">NAT64 translation</text>
</g>
<!-- v6host1 -->
<g id="node1" class="node">
<title>v6host1</title>
<polygon fill="none" stroke="#000000" points="630,-347 534,-347 534,-311 630,-311 630,-347"/>
<text text-anchor="middle" x="582" y="-325.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host</text>
</g>
<!-- dnsserver -->
<g id="node2" class="node">
<title>dnsserver</title>
<polygon fill="none" stroke="#000000" points="470.5,-209 345.5,-209 345.5,-173 470.5,-173 470.5,-209"/>
<text text-anchor="middle" x="408" y="-187.3" font-family="Times,serif" font-size="14.00" fill="#000000">DNS64 DNS server</text>
</g>
<!-- v6host1&#45;&gt;dnsserver -->
<g id="edge1" class="edge">
<title>v6host1&#45;&gt;dnsserver</title>
<path fill="none" stroke="#000000" d="M533.6755,-325.763C487.5222,-321.5451 422.7284,-312.2933 407,-293 390.3097,-272.5268 393.4078,-241.2846 398.9011,-218.7724"/>
<polygon fill="#000000" stroke="#000000" points="402.2809,-219.6816 401.5311,-209.1133 395.5268,-217.8425 402.2809,-219.6816"/>
<text text-anchor="middle" x="483.5" y="-274.3" font-family="Times,serif" font-size="14.00" fill="#000000">ipv4onlyhost.example.com:</text>
<text text-anchor="middle" x="483.5" y="-259.3" font-family="Times,serif" font-size="14.00" fill="#000000">AAAA?</text>
</g>
<!-- nat64 -->
<g id="node4" class="node">
<title>nat64</title>
<polygon fill="none" stroke="#000000" points="759.5,-209 646.5,-209 646.5,-173 759.5,-173 759.5,-209"/>
<text text-anchor="middle" x="703" y="-187.3" font-family="Times,serif" font-size="14.00" fill="#000000">NAT64 translator</text>
</g>
<!-- v6host1&#45;&gt;nat64 -->
<g id="edge7" class="edge">
<title>v6host1&#45;&gt;nat64</title>
<path fill="none" stroke="#000000" d="M630.2449,-321.6696C648.5506,-316.5376 668.0774,-307.8165 681,-293 698.6005,-272.82 703.2106,-241.9386 703.9638,-219.4412"/>
<polygon fill="#000000" stroke="#000000" points="707.4663,-219.1878 704.0637,-209.1542 700.4666,-219.1197 707.4663,-219.1878"/>
<text text-anchor="middle" x="749" y="-281.8" font-family="Times,serif" font-size="14.00" fill="#000000">Packet for</text>
<text text-anchor="middle" x="749" y="-266.8" font-family="Times,serif" font-size="14.00" fill="#000000">64:ff9b::c000:200</text>
<text text-anchor="middle" x="749" y="-251.8" font-family="Times,serif" font-size="14.00" fill="#000000">tcp port 80</text>
</g>
<!-- dnsserver&#45;&gt;v6host1 -->
<g id="edge2" class="edge">
<title>dnsserver&#45;&gt;v6host1</title>
<path fill="none" stroke="#000000" d="M470.6925,-200.7021C501.5362,-208.5557 536.9455,-222.6809 560,-248 567.1013,-255.7989 573.2063,-280.6795 577.171,-300.8289"/>
<polygon fill="#000000" stroke="#000000" points="573.761,-301.6347 579.0431,-310.8189 580.6412,-300.3453 573.761,-301.6347"/>
<text text-anchor="middle" x="624" y="-274.3" font-family="Times,serif" font-size="14.00" fill="#000000">AAAA</text>
<text text-anchor="middle" x="624" y="-259.3" font-family="Times,serif" font-size="14.00" fill="#000000">64:ff9b::c000:200</text>
</g>
<!-- authdns -->
<g id="node3" class="node">
<title>authdns</title>
<polygon fill="none" stroke="#000000" points="373,-54 263,-54 263,-16 373,-16 373,-54"/>
<text text-anchor="middle" x="318" y="-38.8" font-family="Times,serif" font-size="14.00" fill="#000000">DNS server</text>
<text text-anchor="middle" x="318" y="-23.8" font-family="Times,serif" font-size="14.00" fill="#000000">for example.com</text>
</g>
<!-- dnsserver&#45;&gt;authdns -->
<g id="edge3" class="edge">
<title>dnsserver&#45;&gt;authdns</title>
<path fill="none" stroke="#000000" d="M345.4768,-185.8446C247.5428,-177.1295 67.1032,-158.2434 48,-136 -12.2297,-65.8697 155.0221,-44.3604 252.8397,-37.8194"/>
<polygon fill="#000000" stroke="#000000" points="253.1917,-41.3042 262.9508,-37.1797 252.7497,-34.3182 253.1917,-41.3042"/>
<text text-anchor="middle" x="124.5" y="-117.3" font-family="Times,serif" font-size="14.00" fill="#000000">ipv4onlyhost.example.com:</text>
<text text-anchor="middle" x="124.5" y="-102.3" font-family="Times,serif" font-size="14.00" fill="#000000">AAAA?</text>
</g>
<!-- dnsserver&#45;&gt;authdns -->
<g id="edge4" class="edge">
<title>dnsserver&#45;&gt;authdns</title>
<path fill="none" stroke="#000000" d="M345.1369,-178.8446C301.9505,-169.0694 250.1329,-154.0196 237,-136 225.2203,-119.8371 227.7122,-108.7126 237,-91 243.6442,-78.329 254.6005,-67.958 266.3396,-59.7372"/>
<polygon fill="#000000" stroke="#000000" points="268.4949,-62.5108 274.9754,-54.129 264.6824,-56.6401 268.4949,-62.5108"/>
<text text-anchor="middle" x="313.5" y="-117.3" font-family="Times,serif" font-size="14.00" fill="#000000">ipv4onlyhost.example.com:</text>
<text text-anchor="middle" x="313.5" y="-102.3" font-family="Times,serif" font-size="14.00" fill="#000000">A?</text>
</g>
<!-- authdns&#45;&gt;dnsserver -->
<g id="edge5" class="edge">
<title>authdns&#45;&gt;dnsserver</title>
<path fill="none" stroke="#000000" d="M352.3749,-54.0692C366.1592,-63.4332 380.9036,-75.959 390,-91 403.0598,-112.5944 407.1443,-141.2832 408.2065,-162.3933"/>
<polygon fill="#000000" stroke="#000000" points="404.7164,-162.7747 408.518,-172.664 411.7132,-162.5624 404.7164,-162.7747"/>
<text text-anchor="middle" x="455.5" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">NO AAAA record</text>
</g>
<!-- authdns&#45;&gt;dnsserver -->
<g id="edge6" class="edge">
<title>authdns&#45;&gt;dnsserver</title>
<path fill="none" stroke="#000000" d="M373.1522,-43.602C423.8234,-52.7648 493.4896,-68.9861 510,-91 522,-107 520.2507,-118.8267 510,-136 501.8374,-149.6751 488.9699,-160.1519 475.0878,-168.1008"/>
<polygon fill="#000000" stroke="#000000" points="473.0712,-165.2073 465.858,-172.9675 476.3361,-171.3993 473.0712,-165.2073"/>
<text text-anchor="middle" x="553" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">A: 192.0.2.0</text>
</g>
<!-- v4host1 -->
<g id="node5" class="node">
<title>v4host1</title>
<polygon fill="none" stroke="#000000" points="774,-53 646,-53 646,-17 774,-17 774,-53"/>
<text text-anchor="middle" x="710" y="-31.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 host: 192.0.2.0</text>
</g>
<!-- nat64&#45;&gt;v4host1 -->
<g id="edge8" class="edge">
<title>nat64&#45;&gt;v4host1</title>
<path fill="none" stroke="#000000" d="M703.8167,-172.7995C705.0285,-145.7929 707.3129,-94.8833 708.7401,-63.0767"/>
<polygon fill="#000000" stroke="#000000" points="712.2366,-63.2314 709.1885,-53.0846 705.2437,-62.9176 712.2366,-63.2314"/>
<text text-anchor="middle" x="745" y="-124.8" font-family="Times,serif" font-size="14.00" fill="#000000">Packet</text>
<text text-anchor="middle" x="745" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000"> for 192.0.2.0</text>
<text text-anchor="middle" x="745" y="-94.8" font-family="Times,serif" font-size="14.00" fill="#000000">tcp port 80</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

85
doc/graphviz/dualstack.svg

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="335pt" height="260pt"
viewBox="0.00 0.00 335.00 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-256 331,-256 331,4 -4,4"/>
<!-- host1 -->
<g id="node1" class="node">
<title>host1</title>
<polygon fill="none" stroke="#000000" points="97,-252 0,-252 0,-216 97,-216 97,-252"/>
<text text-anchor="middle" x="48.5" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">Dualstack host</text>
</g>
<!-- switch1 -->
<g id="node7" class="node">
<title>switch1</title>
<ellipse fill="none" stroke="#000000" cx="163.5" cy="-162" rx="68.4888" ry="18"/>
<text text-anchor="middle" x="163.5" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">Network Switch</text>
</g>
<!-- host1&#45;&#45;switch1 -->
<g id="edge1" class="edge">
<title>host1&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M77.5194,-215.8314C95.751,-204.4168 119.0932,-189.8025 136.8548,-178.6822"/>
</g>
<!-- host2 -->
<g id="node2" class="node">
<title>host2</title>
<polygon fill="none" stroke="#000000" points="212,-252 115,-252 115,-216 212,-216 212,-252"/>
<text text-anchor="middle" x="163.5" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">Dualstack host</text>
</g>
<!-- host2&#45;&#45;switch1 -->
<g id="edge2" class="edge">
<title>host2&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M163.5,-215.8314C163.5,-205 163.5,-191.2876 163.5,-180.4133"/>
</g>
<!-- host3 -->
<g id="node3" class="node">
<title>host3</title>
<polygon fill="none" stroke="#000000" points="327,-252 230,-252 230,-216 327,-216 327,-252"/>
<text text-anchor="middle" x="278.5" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">Dualstack host</text>
</g>
<!-- host3&#45;&#45;switch1 -->
<g id="edge3" class="edge">
<title>host3&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M249.4806,-215.8314C231.249,-204.4168 207.9068,-189.8025 190.1452,-178.6822"/>
</g>
<!-- router -->
<g id="node4" class="node">
<title>router</title>
<polygon fill="none" stroke="#000000" points="224.5,-108 102.5,-108 102.5,-72 224.5,-72 224.5,-108"/>
<text text-anchor="middle" x="163.5" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 &amp; IPv4 router</text>
</g>
<!-- v4internet -->
<g id="node5" class="node">
<title>v4internet</title>
<polygon fill="none" stroke="#000000" points="99.1279,-.0493 102.854,-.1479 106.5416,-.2953 110.1756,-.4913 113.7413,-.7353 117.2244,-1.0266 120.6112,-1.3645 123.8884,-1.7479 127.0436,-2.1759 130.0651,-2.6472 132.942,-3.1606 135.6643,-3.7147 138.223,-4.308 140.6099,-4.9388 142.8179,-5.6054 144.841,-6.3059 146.6742,-7.0385 148.3136,-7.8012 149.7563,-8.5918 151.0003,-9.4082 152.045,-10.2481 152.8906,-11.1093 153.5381,-11.9894 153.9898,-12.886 154.2485,-13.7965 154.3181,-14.7186 154.2032,-15.6497 153.909,-16.5873 153.4414,-17.5287 152.8069,-18.4713 152.0125,-19.4127 151.0655,-20.3503 149.9736,-21.2814 148.7447,-22.2035 147.3871,-23.114 145.9088,-24.0106 144.3183,-24.8907 142.6236,-25.7519 140.8331,-26.5918 138.9545,-27.4082 136.9957,-28.1988 134.9642,-28.9615 132.8672,-29.6941 130.7114,-30.3946 128.5034,-31.0612 126.2492,-31.692 123.9543,-32.2853 121.6241,-32.8394 119.2633,-33.3528 116.8763,-33.8241 114.467,-34.2521 112.0388,-34.6355 109.5951,-34.9734 107.1386,-35.2647 104.6719,-35.5087 102.1971,-35.7047 99.7163,-35.8521 97.2314,-35.9507 94.7441,-36 92.2559,-36 89.7686,-35.9507 87.2837,-35.8521 84.8029,-35.7047 82.3281,-35.5087 79.8614,-35.2647 77.4049,-34.9734 74.9612,-34.6355 72.533,-34.2521 70.1237,-33.8241 67.7367,-33.3528 65.3759,-32.8394 63.0457,-32.2853 60.7508,-31.692 58.4966,-31.0612 56.2886,-30.3946 54.1328,-29.6941 52.0358,-28.9615 50.0043,-28.1988 48.0455,-27.4082 46.1669,-26.5918 44.3764,-25.7519 42.6817,-24.8907 41.0912,-24.0106 39.6129,-23.114 38.2553,-22.2035 37.0264,-21.2814 35.9345,-20.3503 34.9875,-19.4127 34.1931,-18.4713 33.5586,-17.5287 33.091,-16.5873 32.7968,-15.6497 32.6819,-14.7186 32.7515,-13.7965 33.0102,-12.886 33.4619,-11.9894 34.1094,-11.1093 34.955,-10.2481 35.9997,-9.4082 37.2437,-8.5918 38.6864,-7.8012 40.3258,-7.0385 42.159,-6.3059 44.1821,-5.6054 46.3901,-4.9388 48.777,-4.308 51.3357,-3.7147 54.058,-3.1606 56.9349,-2.6472 59.9564,-2.1759 63.1116,-1.7479 66.3888,-1.3645 69.7756,-1.0266 73.2587,-.7353 76.8244,-.4913 80.4584,-.2953 84.146,-.1479 87.8721,-.0493 91.6214,0 95.3786,0 99.1279,-.0493"/>
<text text-anchor="middle" x="93.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 Internet</text>
</g>
<!-- router&#45;&#45;v4internet -->
<g id="edge5" class="edge">
<title>router&#45;&#45;v4internet</title>
<path fill="none" stroke="#000000" d="M145.836,-71.8314C134.8196,-60.5001 120.7375,-46.0157 109.9561,-34.9263"/>
</g>
<!-- v6internet -->
<g id="node6" class="node">
<title>v6internet</title>
<polygon fill="none" stroke="#000000" points="239.1279,-.0493 242.854,-.1479 246.5416,-.2953 250.1756,-.4913 253.7413,-.7353 257.2244,-1.0266 260.6112,-1.3645 263.8884,-1.7479 267.0436,-2.1759 270.0651,-2.6472 272.942,-3.1606 275.6643,-3.7147 278.223,-4.308 280.6099,-4.9388 282.8179,-5.6054 284.841,-6.3059 286.6742,-7.0385 288.3136,-7.8012 289.7563,-8.5918 291.0003,-9.4082 292.045,-10.2481 292.8906,-11.1093 293.5381,-11.9894 293.9898,-12.886 294.2485,-13.7965 294.3181,-14.7186 294.2032,-15.6497 293.909,-16.5873 293.4414,-17.5287 292.8069,-18.4713 292.0125,-19.4127 291.0655,-20.3503 289.9736,-21.2814 288.7447,-22.2035 287.3871,-23.114 285.9088,-24.0106 284.3183,-24.8907 282.6236,-25.7519 280.8331,-26.5918 278.9545,-27.4082 276.9957,-28.1988 274.9642,-28.9615 272.8672,-29.6941 270.7114,-30.3946 268.5034,-31.0612 266.2492,-31.692 263.9543,-32.2853 261.6241,-32.8394 259.2633,-33.3528 256.8763,-33.8241 254.467,-34.2521 252.0388,-34.6355 249.5951,-34.9734 247.1386,-35.2647 244.6719,-35.5087 242.1971,-35.7047 239.7163,-35.8521 237.2314,-35.9507 234.7441,-36 232.2559,-36 229.7686,-35.9507 227.2837,-35.8521 224.8029,-35.7047 222.3281,-35.5087 219.8614,-35.2647 217.4049,-34.9734 214.9612,-34.6355 212.533,-34.2521 210.1237,-33.8241 207.7367,-33.3528 205.3759,-32.8394 203.0457,-32.2853 200.7508,-31.692 198.4966,-31.0612 196.2886,-30.3946 194.1328,-29.6941 192.0358,-28.9615 190.0043,-28.1988 188.0455,-27.4082 186.1669,-26.5918 184.3764,-25.7519 182.6817,-24.8907 181.0912,-24.0106 179.6129,-23.114 178.2553,-22.2035 177.0264,-21.2814 175.9345,-20.3503 174.9875,-19.4127 174.1931,-18.4713 173.5586,-17.5287 173.091,-16.5873 172.7968,-15.6497 172.6819,-14.7186 172.7515,-13.7965 173.0102,-12.886 173.4619,-11.9894 174.1094,-11.1093 174.955,-10.2481 175.9997,-9.4082 177.2437,-8.5918 178.6864,-7.8012 180.3258,-7.0385 182.159,-6.3059 184.1821,-5.6054 186.3901,-4.9388 188.777,-4.308 191.3357,-3.7147 194.058,-3.1606 196.9349,-2.6472 199.9564,-2.1759 203.1116,-1.7479 206.3888,-1.3645 209.7756,-1.0266 213.2587,-.7353 216.8244,-.4913 220.4584,-.2953 224.146,-.1479 227.8721,-.0493 231.6214,0 235.3786,0 239.1279,-.0493"/>
<text text-anchor="middle" x="233.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Internet</text>
</g>
<!-- router&#45;&#45;v6internet -->
<g id="edge6" class="edge">
<title>router&#45;&#45;v6internet</title>
<path fill="none" stroke="#000000" d="M181.164,-71.8314C192.1804,-60.5001 206.2625,-46.0157 217.0439,-34.9263"/>
</g>
<!-- switch1&#45;&#45;router -->
<g id="edge4" class="edge">
<title>switch1&#45;&#45;router</title>
<path fill="none" stroke="#000000" d="M163.5,-143.8314C163.5,-133 163.5,-119.2876 163.5,-108.4133"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

2
doc/graphviz/icmp6ndp.dot

@ -6,7 +6,7 @@ digraph G {
ipv6 [ label="IPv6" ]
icmp6 [ label="ICMP6" ]
icmp6ns [ label="ICMP6 Neigbor Advertisement" ]
icmp6ns [ label="ICMP6 Neighbor Advertisement" ]
icmp6nsll [ label="ICMP6 Link layer option" ]
icmp6other [ label="Option field 1" ]
icmp6other2 [ label="Option field 2" ]

91
doc/graphviz/icmp6ndp.svg

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="965pt" height="44pt"
viewBox="0.00 0.00 965.00 44.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 40)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-40 961,-40 961,4 -4,4"/>
<!-- ipv6 -->
<g id="node1" class="node">
<title>ipv6</title>
<polygon fill="none" stroke="#000000" points="54,-36 0,-36 0,0 54,0 54,-36"/>
<text text-anchor="middle" x="27" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6</text>
</g>
<!-- icmp6 -->
<g id="node2" class="node">
<title>icmp6</title>
<polygon fill="none" stroke="#000000" points="147,-36 90,-36 90,0 147,0 147,-36"/>
<text text-anchor="middle" x="118.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">ICMP6</text>
</g>
<!-- ipv6&#45;&gt;icmp6 -->
<g id="edge1" class="edge">
<title>ipv6&#45;&gt;icmp6</title>
<path fill="none" stroke="#000000" d="M54.453,-18C62.3869,-18 71.1998,-18 79.6866,-18"/>
<polygon fill="#000000" stroke="#000000" points="79.796,-21.5001 89.796,-18 79.7959,-14.5001 79.796,-21.5001"/>
</g>
<!-- icmp6ns -->
<g id="node3" class="node">
<title>icmp6ns</title>
<polygon fill="none" stroke="#000000" points="379,-36 183,-36 183,0 379,0 379,-36"/>
<text text-anchor="middle" x="281" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">ICMP6 Neighbor Advertisement</text>
</g>
<!-- icmp6&#45;&gt;icmp6ns -->
<g id="edge2" class="edge">
<title>icmp6&#45;&gt;icmp6ns</title>
<path fill="none" stroke="#000000" d="M147.1777,-18C154.8057,-18 163.517,-18 172.7536,-18"/>
<polygon fill="#000000" stroke="#000000" points="172.9559,-21.5001 182.9559,-18 172.9558,-14.5001 172.9559,-21.5001"/>
</g>
<!-- icmp6nsll -->
<g id="node4" class="node">
<title>icmp6nsll</title>
<polygon fill="none" stroke="#000000" points="570,-36 415,-36 415,0 570,0 570,-36"/>
<text text-anchor="middle" x="492.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">ICMP6 Link layer option</text>
</g>
<!-- icmp6ns&#45;&gt;icmp6nsll -->
<g id="edge3" class="edge">
<title>icmp6ns&#45;&gt;icmp6nsll</title>
<path fill="none" stroke="#000000" d="M379.0108,-18C387.5379,-18 396.1325,-18 404.5712,-18"/>
<polygon fill="#000000" stroke="#000000" points="404.7722,-21.5001 414.7722,-18 404.7722,-14.5001 404.7722,-21.5001"/>
</g>
<!-- icmp6other -->
<g id="node5" class="node">
<title>icmp6other</title>
<polygon fill="none" stroke="#000000" points="699,-36 606,-36 606,0 699,0 699,-36"/>
<text text-anchor="middle" x="652.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Option field 1</text>
</g>
<!-- icmp6nsll&#45;&gt;icmp6other -->
<g id="edge4" class="edge">
<title>icmp6nsll&#45;&gt;icmp6other</title>
<path fill="none" stroke="#000000" d="M570.1565,-18C578.666,-18 587.2108,-18 595.4055,-18"/>
<polygon fill="#000000" stroke="#000000" points="595.5691,-21.5001 605.5691,-18 595.569,-14.5001 595.5691,-21.5001"/>
</g>
<!-- icmp6other2 -->
<g id="node6" class="node">
<title>icmp6other2</title>
<polygon fill="none" stroke="#000000" points="828,-36 735,-36 735,0 828,0 828,-36"/>
<text text-anchor="middle" x="781.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Option field 2</text>
</g>
<!-- icmp6other&#45;&gt;icmp6other2 -->
<g id="edge5" class="edge">
<title>icmp6other&#45;&gt;icmp6other2</title>
<path fill="none" stroke="#000000" d="M699.072,-18C707.4751,-18 716.3193,-18 724.9693,-18"/>
<polygon fill="#000000" stroke="#000000" points="724.9964,-21.5001 734.9964,-18 724.9964,-14.5001 724.9964,-21.5001"/>
</g>
<!-- icmp6othern -->
<g id="node7" class="node">
<title>icmp6othern</title>
<polygon fill="none" stroke="#000000" points="957,-36 864,-36 864,0 957,0 957,-36"/>
<text text-anchor="middle" x="910.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Option field n</text>
</g>
<!-- icmp6other2&#45;&gt;icmp6othern -->
<g id="edge6" class="edge">
<title>icmp6other2&#45;&gt;icmp6othern</title>
<path fill="none" stroke="#000000" stroke-dasharray="1,5" d="M828.072,-18C836.4751,-18 845.3193,-18 853.9693,-18"/>
<polygon fill="#000000" stroke="#000000" points="853.9964,-21.5001 863.9964,-18 853.9964,-14.5001 853.9964,-21.5001"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

18
doc/graphviz/nat64-two-directions.dot

@ -0,0 +1,18 @@
digraph G {
size="10!";
rankdir="LR";
node [ shape="box"];
v4host1 [ label="IPv4 only host" color="yellow" ];
v6host2 [ label="IPv6 only host" color="blue" ];
v6host1 [ label="IPv6 only host" color="blue" ];
v4internet [ label="The whole IPv4 Internet" color="yellow" ];
v6host1->v4internet [ label="2001:db8:cafe::/96" ];
v4host1->v6host2 [ label="TCP:192.0.1.1:2342" ];
}

51
doc/graphviz/nat64-two-directions.svg

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="720pt" height="176pt"
viewBox="0.00 0.00 720.00 175.96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1.7955 1.7955) rotate(0) translate(4 94)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-94 397,-94 397,4 -4,4"/>
<!-- v4host1 -->
<g id="node1" class="node">
<title>v4host1</title>
<polygon fill="none" stroke="#ffff00" points="96,-36 0,-36 0,0 96,0 96,-36"/>
<text text-anchor="middle" x="48" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host</text>
</g>
<!-- v6host2 -->
<g id="node2" class="node">
<title>v6host2</title>
<polygon fill="none" stroke="#0000ff" points="366.5,-36 270.5,-36 270.5,0 366.5,0 366.5,-36"/>
<text text-anchor="middle" x="318.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host</text>
</g>
<!-- v4host1&#45;&gt;v6host2 -->
<g id="edge2" class="edge">
<title>v4host1&#45;&gt;v6host2</title>
<path fill="none" stroke="#000000" d="M96.0483,-18C141.9709,-18 211.2752,-18 260.3054,-18"/>
<polygon fill="#000000" stroke="#000000" points="260.4445,-21.5001 270.4444,-18 260.4444,-14.5001 260.4445,-21.5001"/>
<text text-anchor="middle" x="170" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">TCP:192.0.1.1:2342</text>
</g>
<!-- v6host1 -->
<g id="node3" class="node">
<title>v6host1</title>
<polygon fill="none" stroke="#0000ff" points="96,-90 0,-90 0,-54 96,-54 96,-90"/>
<text text-anchor="middle" x="48" y="-68.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host</text>
</g>
<!-- v4internet -->
<g id="node4" class="node">
<title>v4internet</title>
<polygon fill="none" stroke="#ffff00" points="393,-90 244,-90 244,-54 393,-54 393,-90"/>
<text text-anchor="middle" x="318.5" y="-68.3" font-family="Times,serif" font-size="14.00" fill="#000000">The whole IPv4 Internet</text>
</g>
<!-- v6host1&#45;&gt;v4internet -->
<g id="edge1" class="edge">
<title>v6host1&#45;&gt;v4internet</title>
<path fill="none" stroke="#000000" d="M96.0483,-72C134.157,-72 188.3674,-72 233.7315,-72"/>
<polygon fill="#000000" stroke="#000000" points="233.8617,-75.5001 243.8616,-72 233.8616,-68.5001 233.8617,-75.5001"/>
<text text-anchor="middle" x="170" y="-75.8" font-family="Times,serif" font-size="14.00" fill="#000000">2001:db8:cafe::/96</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

74
doc/graphviz/netpfgadesign.svg

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="429pt" height="207pt"
viewBox="0.00 0.00 429.00 207.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 203)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-203 425,-203 425,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_esprimo</title>
<polygon fill="none" stroke="#000000" points="7,-62 7,-191 106,-191 106,-62 7,-62"/>
<text text-anchor="middle" x="56.5" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">Load generator</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_nsg</title>
<polygon fill="none" stroke="#000000" points="126,-8 126,-191 413,-191 413,-8 126,-8"/>
<text text-anchor="middle" x="269.5" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">NetFPGA Host</text>
</g>
<!-- x520_1 -->
<g id="node1" class="node">
<title>x520_1</title>
<polygon fill="none" stroke="#000000" points="96,-160 16,-160 16,-124 96,-124 96,-160"/>
<text text-anchor="middle" x="56" y="-138.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: IPv4</text>
</g>
<!-- netpfga1 -->
<g id="node4" class="node">
<title>netpfga1</title>
<polygon fill="none" stroke="#000000" points="241,-160 134,-160 134,-124 241,-124 241,-160"/>
<text text-anchor="middle" x="187.5" y="-138.3" font-family="Times,serif" font-size="14.00" fill="#000000">NetFPGA Port 1</text>
</g>
<!-- x520_1&#45;&#45;netpfga1 -->
<g id="edge2" class="edge">
<title>x520_1&#45;&#45;netpfga1</title>
<path fill="none" stroke="#000000" d="M96.1689,-142C107.9517,-142 121.033,-142 133.5277,-142"/>
</g>
<!-- x520_2 -->
<g id="node2" class="node">
<title>x520_2</title>
<polygon fill="none" stroke="#000000" points="96,-106 16,-106 16,-70 96,-70 96,-106"/>
<text text-anchor="middle" x="56" y="-84.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: IPv6</text>
</g>
<!-- netpfga2 -->
<g id="node5" class="node">
<title>netpfga2</title>
<polygon fill="none" stroke="#000000" points="241,-106 134,-106 134,-70 241,-70 241,-106"/>
<text text-anchor="middle" x="187.5" y="-84.3" font-family="Times,serif" font-size="14.00" fill="#000000">NetFPGA Port 2</text>
</g>
<!-- x520_2&#45;&#45;netpfga2 -->
<g id="edge3" class="edge">
<title>x520_2&#45;&#45;netpfga2</title>
<path fill="none" stroke="#000000" d="M96.1689,-88C107.9517,-88 121.033,-88 133.5277,-88"/>
</g>
<!-- x520_nsg -->
<g id="node3" class="node">
<title>x520_nsg</title>
<polygon fill="none" stroke="#000000" points="405,-52 277,-52 277,-16 405,-16 405,-52"/>
<text text-anchor="middle" x="341" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: P4 Controller</text>
</g>
<!-- netpfga3 -->
<g id="node6" class="node">
<title>netpfga3</title>
<polygon fill="none" stroke="#000000" points="241,-52 134,-52 134,-16 241,-16 241,-52"/>
<text text-anchor="middle" x="187.5" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">NetFPGA Port 3</text>
</g>
<!-- netpfga3&#45;&#45;x520_nsg -->
<g id="edge1" class="edge">
<title>netpfga3&#45;&#45;x520_nsg</title>
<path fill="none" stroke="#000000" d="M241.1869,-34C252.6854,-34 264.9453,-34 276.7951,-34"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

45
doc/graphviz/networkdesignnat64.svg

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="256pt" height="218pt"
viewBox="0.00 0.00 255.50 218.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 214)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-214 251.5,-214 251.5,4 -4,4"/>
<!-- v6host -->
<g id="node1" class="node">
<title>v6host</title>
<polygon fill="none" stroke="#000000" points="109.5,-210 3.5,-210 3.5,-174 109.5,-174 109.5,-210"/>
<text text-anchor="middle" x="56.5" y="-188.3" font-family="Times,serif" font-size="14.00" fill="#000000">2001:db8:42::42</text>
</g>
<!-- nat64 -->
<g id="node2" class="node">
<title>nat64</title>
<polygon fill="none" stroke="#000000" points="113,-123 0,-123 0,-87 113,-87 113,-123"/>
<text text-anchor="middle" x="56.5" y="-101.3" font-family="Times,serif" font-size="14.00" fill="#000000">NAT64 translator</text>
</g>
<!-- v6host&#45;&gt;nat64 -->
<g id="edge1" class="edge">
<title>v6host&#45;&gt;nat64</title>
<path fill="none" stroke="#000000" d="M56.5,-173.9735C56.5,-162.1918 56.5,-146.5607 56.5,-133.1581"/>
<polygon fill="#000000" stroke="#000000" points="60.0001,-133.0033 56.5,-123.0034 53.0001,-133.0034 60.0001,-133.0033"/>
<text text-anchor="middle" x="152" y="-144.8" font-family="Times,serif" font-size="14.00" fill="#000000">Connect to 2001:db8:42::10.0.0.42</text>
</g>
<!-- v4host -->
<g id="node3" class="node">
<title>v4host</title>
<polygon fill="none" stroke="#000000" points="90.5,-36 22.5,-36 22.5,0 90.5,0 90.5,-36"/>
<text text-anchor="middle" x="56.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">10.0.0.42</text>
</g>
<!-- nat64&#45;&gt;v4host -->
<g id="edge2" class="edge">
<title>nat64&#45;&gt;v4host</title>
<path fill="none" stroke="#000000" d="M56.5,-76.8156C56.5,-63.4102 56.5,-47.7801 56.5,-36.0034"/>
<polygon fill="#000000" stroke="#000000" points="53.0001,-76.9735 56.5,-86.9735 60.0001,-76.9736 53.0001,-76.9735"/>
<text text-anchor="middle" x="114" y="-57.8" font-family="Times,serif" font-size="14.00" fill="#000000">Connect to 10.0.0.66</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

2
doc/graphviz/p4switch-stateful.dot

@ -1,5 +1,7 @@
digraph G {
rankdir="TB";
size="10!";
v4host [ shape="box" label="IPv4 Host" ];
v6host [ shape="box" label="IPv6 Host" ];

193
doc/graphviz/p4switch-stateful.svg

@ -0,0 +1,193 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="404pt" height="720pt"
viewBox="0.00 0.00 404.25 720.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(.75 .75) rotate(0) translate(4 956)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-956 535,-956 535,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_nat64</title>
<polygon fill="none" stroke="#000000" points="226,-227 226,-816 511,-816 511,-227 226,-227"/>
<text text-anchor="middle" x="368.5" y="-800.8" font-family="Times,serif" font-size="14.00" fill="#000000">P4 Switch</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_p4controller</title>
<polygon fill="none" stroke="#000000" points="8,-8 8,-375 218,-375 218,-8 8,-8"/>
<text text-anchor="middle" x="113" y="-359.8" font-family="Times,serif" font-size="14.00" fill="#000000">P4 Controller</text>
</g>
<!-- v4host -->
<g id="node1" class="node">
<title>v4host</title>
<polygon fill="none" stroke="#000000" points="482.5,-125 411.5,-125 411.5,-89 482.5,-89 482.5,-125"/>
<text text-anchor="middle" x="447" y="-103.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 Host</text>
</g>
<!-- v6host -->
<g id="node2" class="node">
<title>v6host</title>
<polygon fill="none" stroke="#000000" points="494.5,-952 423.5,-952 423.5,-916 494.5,-916 494.5,-952"/>
<text text-anchor="middle" x="459" y="-930.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Host</text>
</g>
<!-- v6packet -->
<g id="node9" class="node">
<title>v6packet</title>
<ellipse fill="none" stroke="#000000" cx="459" cy="-861" rx="53.0913" ry="18"/>
<text text-anchor="middle" x="459" y="-857.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Packet</text>
</g>
<!-- v6host&#45;&gt;v6packet -->
<g id="edge1" class="edge">
<title>v6host&#45;&gt;v6packet</title>
<path fill="none" stroke="#000000" d="M459,-915.9551C459,-907.8828 459,-898.1764 459,-889.1817"/>
<polygon fill="#000000" stroke="#000000" points="462.5001,-889.0903 459,-879.0904 455.5001,-889.0904 462.5001,-889.0903"/>
</g>
<!-- parser -->
<g id="node3" class="node">
<title>parser</title>
<ellipse fill="none" stroke="#000000" cx="459" cy="-767" rx="32.4942" ry="18"/>
<text text-anchor="middle" x="459" y="-763.3" font-family="Times,serif" font-size="14.00" fill="#000000">Parser</text>
</g>
<!-- v4packet -->
<g id="node7" class="node">
<title>v4packet</title>
<ellipse fill="none" stroke="#000000" cx="447" cy="-656" rx="53.0913" ry="18"/>
<text text-anchor="middle" x="447" y="-652.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Packet</text>
</g>
<!-- parser&#45;&gt;v4packet -->
<g id="edge3" class="edge">
<title>parser&#45;&gt;v4packet</title>
<path fill="none" stroke="#000000" d="M457.0184,-748.6706C455.1225,-731.1329 452.2357,-704.4306 450.0472,-684.1867"/>
<polygon fill="#000000" stroke="#000000" points="453.4993,-683.5542 448.9447,-673.9883 446.5399,-684.3066 453.4993,-683.5542"/>
</g>
<!-- deparser -->
<g id="node4" class="node">
<title>deparser</title>
<ellipse fill="none" stroke="#000000" cx="283" cy="-420" rx="42.4939" ry="18"/>
<text text-anchor="middle" x="283" y="-416.3" font-family="Times,serif" font-size="14.00" fill="#000000">Deparser</text>
</g>
<!-- controller -->
<g id="node13" class="node">
<title>controller</title>
<ellipse fill="none" stroke="#000000" cx="113" cy="-326" rx="96.6831" ry="18"/>
<text text-anchor="middle" x="113" y="-322.3" font-family="Times,serif" font-size="14.00" fill="#000000">Controller Reads Packet</text>
</g>
<!-- deparser&#45;&gt;controller -->
<g id="edge6" class="edge">
<title>deparser&#45;&gt;controller</title>
<path fill="none" stroke="#000000" d="M257.1807,-405.7234C229.5362,-390.4377 185.3121,-365.9844 153.1247,-348.1866"/>
<polygon fill="#000000" stroke="#000000" points="154.4171,-344.9018 143.9722,-343.1258 151.0298,-351.0277 154.4171,-344.9018"/>
</g>
<!-- translation -->
<g id="node5" class="node">
<title>translation</title>
<ellipse fill="none" stroke="#000000" cx="447" cy="-420" rx="50.8918" ry="18"/>
<text text-anchor="middle" x="447" y="-416.3" font-family="Times,serif" font-size="14.00" fill="#000000">Translation</text>
</g>
<!-- deparser2 -->
<g id="node14" class="node">
<title>deparser2</title>
<ellipse fill="none" stroke="#000000" cx="447" cy="-253" rx="42.4939" ry="18"/>
<text text-anchor="middle" x="447" y="-249.3" font-family="Times,serif" font-size="14.00" fill="#000000">Deparser</text>
</g>
<!-- translation&#45;&gt;deparser2 -->
<g id="edge12" class="edge">
<title>translation&#45;&gt;deparser2</title>
<path fill="none" stroke="#000000" d="M447,-401.8102C447,-372.8234 447,-315.9192 447,-281.4916"/>
<polygon fill="#000000" stroke="#000000" points="450.5001,-281.1674 447,-271.1674 443.5001,-281.1674 450.5001,-281.1674"/>
</g>
<!-- mismatch -->
<g id="node6" class="node">
<title>mismatch</title>
<ellipse fill="none" stroke="#000000" cx="304" cy="-531" rx="69.5877" ry="18"/>
<text text-anchor="middle" x="304" y="-527.3" font-family="Times,serif" font-size="14.00" fill="#000000">Table Mismatch</text>
</g>
<!-- mismatch&#45;&gt;deparser -->
<g id="edge5" class="edge">
<title>mismatch&#45;&gt;deparser</title>
<path fill="none" stroke="#000000" d="M300.5323,-512.6706C297.199,-495.0521 292.116,-468.1843 288.2798,-447.9073"/>
<polygon fill="#000000" stroke="#000000" points="291.7012,-447.1634 286.4032,-437.9883 284.8232,-448.4647 291.7012,-447.1634"/>
</g>
<!-- v4packet&#45;&gt;mismatch -->
<g id="edge4" class="edge">
<title>v4packet&#45;&gt;mismatch</title>
<path fill="none" stroke="#000000" d="M427.7144,-639.1419C402.9067,-617.4569 359.6599,-579.6537 331.433,-554.9799"/>
<polygon fill="#000000" stroke="#000000" points="333.7302,-552.3392 323.8976,-548.393 329.1232,-557.6096 333.7302,-552.3392"/>
<text text-anchor="middle" x="387.5" y="-589.8" font-family="Times,serif" font-size="14.00" fill="#000000">1.</text>
</g>
<!-- tablematch -->
<g id="node11" class="node">
<title>tablematch</title>
<ellipse fill="none" stroke="#000000" cx="447" cy="-531" rx="55.7903" ry="18"/>
<text text-anchor="middle" x="447" y="-527.3" font-family="Times,serif" font-size="14.00" fill="#000000">Table Match</text>
</g>
<!-- v4packet&#45;&gt;tablematch -->
<g id="edge10" class="edge">
<title>v4packet&#45;&gt;tablematch</title>
<path fill="none" stroke="#000000" d="M447,-637.8239C447,-617.2723 447,-583.5472 447,-559.4893"/>
<polygon fill="#000000" stroke="#000000" points="450.5001,-559.198 447,-549.198 443.5001,-559.198 450.5001,-559.198"/>
<text text-anchor="middle" x="452.5" y="-589.8" font-family="Times,serif" font-size="14.00" fill="#000000">2.</text>
</g>
<!-- v4packet2 -->
<g id="node8" class="node">
<title>v4packet2</title>
<ellipse fill="none" stroke="#000000" cx="447" cy="-180" rx="53.0913" ry="18"/>
<text text-anchor="middle" x="447" y="-176.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 Packet</text>
</g>
<!-- v4packet2&#45;&gt;v4host -->
<g id="edge14" class="edge">
<title>v4packet2&#45;&gt;v4host</title>
<path fill="none" stroke="#000000" d="M447,-161.9551C447,-153.8828 447,-144.1764 447,-135.1817"/>
<polygon fill="#000000" stroke="#000000" points="450.5001,-135.0903 447,-125.0904 443.5001,-135.0904 450.5001,-135.0903"/>
</g>
<!-- v6packet&#45;&gt;parser -->
<g id="edge2" class="edge">
<title>v6packet&#45;&gt;parser</title>
<path fill="none" stroke="#000000" d="M459,-842.8759C459,-829.3516 459,-810.6192 459,-795.1514"/>
<polygon fill="#000000" stroke="#000000" points="462.5001,-795.0685 459,-785.0685 455.5001,-795.0685 462.5001,-795.0685"/>
</g>
<!-- tableentry -->
<g id="node10" class="node">
<title>tableentry</title>
<ellipse fill="none" stroke="#000000" cx="127" cy="-180" rx="77.9862" ry="18"/>
<text text-anchor="middle" x="127" y="-176.3" font-family="Times,serif" font-size="14.00" fill="#000000">Create Table Entry</text>
</g>
<!-- reinject -->
<g id="node12" class="node">
<title>reinject</title>
<ellipse fill="none" stroke="#000000" cx="133" cy="-34" rx="65.7887" ry="18"/>
<text text-anchor="middle" x="133" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">Reinject Packet</text>
</g>
<!-- tableentry&#45;&gt;reinject -->
<g id="edge8" class="edge">
<title>tableentry&#45;&gt;reinject</title>
<path fill="none" stroke="#000000" d="M127.7478,-161.8042C128.7718,-136.8868 130.6208,-91.8938 131.8293,-62.4877"/>
<polygon fill="#000000" stroke="#000000" points="135.3291,-62.5604 132.2428,-52.4251 128.335,-62.2729 135.3291,-62.5604"/>
</g>
<!-- tablematch&#45;&gt;translation -->
<g id="edge11" class="edge">
<title>tablematch&#45;&gt;translation</title>
<path fill="none" stroke="#000000" d="M447,-512.6706C447,-495.2373 447,-468.7482 447,-448.5489"/>
<polygon fill="#000000" stroke="#000000" points="450.5001,-448.3566 447,-438.3566 443.5001,-448.3567 450.5001,-448.3566"/>
</g>
<!-- reinject&#45;&gt;parser -->
<g id="edge9" class="edge">
<title>reinject&#45;&gt;parser</title>
<path fill="none" stroke="#000000" d="M196.0643,-39.1621C308.2895,-49.2036 531,-73.3679 531,-107 531,-711.5 531,-711.5 531,-711.5 531,-731.1222 514.0179,-744.7755 496.5486,-753.6294"/>
<polygon fill="#000000" stroke="#000000" points="495.0677,-750.458 487.4563,-757.8281 498.0024,-756.8132 495.0677,-750.458"/>
</g>
<!-- controller&#45;&gt;tableentry -->
<g id="edge7" class="edge">
<title>controller&#45;&gt;tableentry</title>
<path fill="none" stroke="#000000" d="M114.7448,-307.8042C117.1341,-282.8868 121.4485,-237.8938 124.2683,-208.4877"/>
<polygon fill="#000000" stroke="#000000" points="127.7626,-208.7136 125.2332,-198.4251 120.7946,-208.0453 127.7626,-208.7136"/>
</g>
<!-- deparser2&#45;&gt;v4packet2 -->
<g id="edge13" class="edge">
<title>deparser2&#45;&gt;v4packet2</title>
<path fill="none" stroke="#000000" d="M447,-234.9551C447,-226.8828 447,-217.1764 447,-208.1817"/>
<polygon fill="#000000" stroke="#000000" points="450.5001,-208.0903 447,-198.0904 443.5001,-208.0904 450.5001,-208.0903"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

96
doc/graphviz/p4switch.svg

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="146pt" height="479pt"
viewBox="0.00 0.00 146.00 479.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 475)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-475 142,-475 142,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_nat64</title>
<polygon fill="none" stroke="#000000" points="8,-64 8,-427 130,-427 130,-64 8,-64"/>
<text text-anchor="middle" x="69" y="-411.8" font-family="Times,serif" font-size="14.00" fill="#000000">P4 Switch</text>
</g>
<!-- v4host -->
<g id="node1" class="node">
<title>v4host</title>
<polygon fill="none" stroke="#000000" points="104.5,-471 33.5,-471 33.5,-435 104.5,-435 104.5,-471"/>
<text text-anchor="middle" x="69" y="-449.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 Host</text>
</g>
<!-- parser -->
<g id="node3" class="node">
<title>parser</title>
<ellipse fill="none" stroke="#000000" cx="69" cy="-378" rx="32.4942" ry="18"/>
<text text-anchor="middle" x="69" y="-374.3" font-family="Times,serif" font-size="14.00" fill="#000000">Parser</text>
</g>
<!-- v4host&#45;&gt;parser -->
<g id="edge6" class="edge">
<title>v4host&#45;&gt;parser</title>
<path fill="none" stroke="#000000" d="M69,-434.8446C69,-426.3401 69,-416.0076 69,-406.4964"/>
<polygon fill="#000000" stroke="#000000" points="72.5001,-406.2481 69,-396.2482 65.5001,-406.2482 72.5001,-406.2481"/>
</g>
<!-- v6host -->
<g id="node2" class="node">
<title>v6host</title>
<polygon fill="none" stroke="#000000" points="104.5,-36 33.5,-36 33.5,0 104.5,0 104.5,-36"/>
<text text-anchor="middle" x="69" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Host</text>
</g>
<!-- v4packet -->
<g id="node6" class="node">
<title>v4packet</title>
<ellipse fill="none" stroke="#000000" cx="69" cy="-306" rx="53.0913" ry="18"/>
<text text-anchor="middle" x="69" y="-302.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 Packet</text>
</g>
<!-- parser&#45;&gt;v4packet -->
<g id="edge1" class="edge">
<title>parser&#45;&gt;v4packet</title>
<path fill="none" stroke="#000000" d="M69,-359.8314C69,-352.131 69,-342.9743 69,-334.4166"/>
<polygon fill="#000000" stroke="#000000" points="72.5001,-334.4132 69,-324.4133 65.5001,-334.4133 72.5001,-334.4132"/>
</g>
<!-- deparser -->
<g id="node4" class="node">
<title>deparser</title>
<ellipse fill="none" stroke="#000000" cx="69" cy="-90" rx="42.4939" ry="18"/>
<text text-anchor="middle" x="69" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">Deparser</text>
</g>
<!-- deparser&#45;&gt;v6host -->
<g id="edge5" class="edge">
<title>deparser&#45;&gt;v6host</title>
<path fill="none" stroke="#000000" d="M69,-71.8314C69,-64.131 69,-54.9743 69,-46.4166"/>
<polygon fill="#000000" stroke="#000000" points="72.5001,-46.4132 69,-36.4133 65.5001,-46.4133 72.5001,-46.4132"/>
</g>
<!-- translation -->
<g id="node5" class="node">
<title>translation</title>
<ellipse fill="none" stroke="#000000" cx="69" cy="-234" rx="50.8918" ry="18"/>
<text text-anchor="middle" x="69" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">Translation</text>
</g>
<!-- v6packet -->
<g id="node7" class="node">
<title>v6packet</title>
<ellipse fill="none" stroke="#000000" cx="69" cy="-162" rx="53.0913" ry="18"/>
<text text-anchor="middle" x="69" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Packet</text>
</g>
<!-- translation&#45;&gt;v6packet -->
<g id="edge3" class="edge">
<title>translation&#45;&gt;v6packet</title>
<path fill="none" stroke="#000000" d="M69,-215.8314C69,-208.131 69,-198.9743 69,-190.4166"/>
<polygon fill="#000000" stroke="#000000" points="72.5001,-190.4132 69,-180.4133 65.5001,-190.4133 72.5001,-190.4132"/>
</g>
<!-- v4packet&#45;&gt;translation -->
<g id="edge2" class="edge">
<title>v4packet&#45;&gt;translation</title>
<path fill="none" stroke="#000000" d="M69,-287.8314C69,-280.131 69,-270.9743 69,-262.4166"/>
<polygon fill="#000000" stroke="#000000" points="72.5001,-262.4132 69,-252.4133 65.5001,-262.4133 72.5001,-262.4132"/>
</g>
<!-- v6packet&#45;&gt;deparser -->
<g id="edge4" class="edge">
<title>v6packet&#45;&gt;deparser</title>
<path fill="none" stroke="#000000" d="M69,-143.8314C69,-136.131 69,-126.9743 69,-118.4166"/>
<polygon fill="#000000" stroke="#000000" points="72.5001,-118.4132 69,-108.4133 65.5001,-118.4133 72.5001,-118.4132"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

57
doc/graphviz/softwarenat64design.svg

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="238pt" height="153pt"
viewBox="0.00 0.00 238.00 153.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 149)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-149 234,-149 234,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_esprimo</title>
<polygon fill="none" stroke="#000000" points="7,-8 7,-137 106,-137 106,-8 7,-8"/>
<text text-anchor="middle" x="56.5" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">Load generator</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_nsg</title>
<polygon fill="none" stroke="#000000" points="126,-8 126,-137 222,-137 222,-8 126,-8"/>
<text text-anchor="middle" x="174" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">NAT64 Host</text>
</g>
<!-- x520_1 -->
<g id="node1" class="node">
<title>x520_1</title>
<polygon fill="none" stroke="#000000" points="96,-106 16,-106 16,-70 96,-70 96,-106"/>
<text text-anchor="middle" x="56" y="-84.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: IPv4</text>
</g>
<!-- x520_nsg_1 -->
<g id="node3" class="node">
<title>x520_nsg_1</title>
<polygon fill="none" stroke="#000000" points="214,-106 134,-106 134,-70 214,-70 214,-106"/>
<text text-anchor="middle" x="174" y="-84.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: IPv4</text>
</g>
<!-- x520_1&#45;&#45;x520_nsg_1 -->
<g id="edge1" class="edge">
<title>x520_1&#45;&#45;x520_nsg_1</title>
<path fill="none" stroke="#000000" d="M96.2789,-88C108.4301,-88 121.7633,-88 133.9027,-88"/>
</g>
<!-- x520_2 -->
<g id="node2" class="node">
<title>x520_2</title>
<polygon fill="none" stroke="#000000" points="96,-52 16,-52 16,-16 96,-16 96,-52"/>
<text text-anchor="middle" x="56" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: IPv6</text>
</g>
<!-- x520_nsg_2 -->
<g id="node4" class="node">
<title>x520_nsg_2</title>
<polygon fill="none" stroke="#000000" points="214,-52 134,-52 134,-16 214,-16 214,-52"/>
<text text-anchor="middle" x="174" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">X520: IPv6</text>
</g>
<!-- x520_2&#45;&#45;x520_nsg_2 -->
<g id="edge2" class="edge">
<title>x520_2&#45;&#45;x520_nsg_2</title>
<path fill="none" stroke="#000000" d="M96.2789,-34C108.4301,-34 121.7633,-34 133.9027,-34"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

52
doc/graphviz/statefulnat64.svg

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="400pt" height="188pt"
viewBox="0.00 0.00 399.50 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-184 395.5,-184 395.5,4 -4,4"/>
<!-- v6host1 -->
<g id="node1" class="node">
<title>v6host1</title>
<polygon fill="none" stroke="#000000" points="183,-180 0,-180 0,-144 183,-144 183,-180"/>
<text text-anchor="middle" x="91.5" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6/TCP: [2001:db8::1]:2323</text>
</g>
<!-- nat64gw -->
<g id="node4" class="node">
<title>nat64gw</title>
<polygon fill="none" stroke="#000000" points="250,-108 137,-108 137,-72 250,-72 250,-108"/>
<text text-anchor="middle" x="193.5" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">NAT64 translator</text>
</g>
<!-- v6host1&#45;&#45;nat64gw -->
<g id="edge1" class="edge">
<title>v6host1&#45;&#45;nat64gw</title>
<path fill="none" stroke="#000000" d="M117.2389,-143.8314C132.7013,-132.9167 152.3084,-119.0764 167.7693,-108.1628"/>
</g>
<!-- v6host2 -->
<g id="node2" class="node">
<title>v6host2</title>
<polygon fill="none" stroke="#000000" points="391.5,-180 201.5,-180 201.5,-144 391.5,-144 391.5,-180"/>
<text text-anchor="middle" x="296.5" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6/TCP: [2001:db8::17]:4242</text>
</g>
<!-- v6host2&#45;&#45;nat64gw -->
<g id="edge2" class="edge">
<title>v6host2&#45;&#45;nat64gw</title>
<path fill="none" stroke="#000000" d="M270.5088,-143.8314C254.8947,-132.9167 235.0955,-119.0764 219.4829,-108.1628"/>
</g>
<!-- v4host -->
<g id="node3" class="node">
<title>v4host</title>
<polygon fill="none" stroke="#000000" points="339,-36 48,-36 48,0 339,0 339,-36"/>
<text text-anchor="middle" x="193.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4/TCP: 198.51.100.2:4323, 198.51.100.2:3345</text>
</g>
<!-- nat64gw&#45;&#45;v4host -->
<g id="edge3" class="edge">
<title>nat64gw&#45;&#45;v4host</title>
<path fill="none" stroke="#000000" d="M193.5,-71.8314C193.5,-61 193.5,-47.2876 193.5,-36.4133"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

53
doc/graphviz/switchdesign.svg

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="324pt" height="190pt"
viewBox="0.00 0.00 323.50 190.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 186)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-186 319.5,-186 319.5,4 -4,4"/>
<!-- v4host -->
<g id="node1" class="node">
<title>v4host</title>
<polygon fill="none" stroke="#000000" points="96.5,-36 22.5,-36 22.5,0 96.5,0 96.5,-36"/>
<text text-anchor="middle" x="59.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 hosts</text>
</g>
<!-- v6host -->
<g id="node2" class="node">
<title>v6host</title>
<polygon fill="none" stroke="#000000" points="96.5,-182 22.5,-182 22.5,-146 96.5,-146 96.5,-182"/>
<text text-anchor="middle" x="59.5" y="-160.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 hosts</text>
</g>
<!-- nat64gw -->
<g id="node3" class="node">
<title>nat64gw</title>
<polygon fill="none" stroke="#000000" points="119,-109 0,-109 0,-73 119,-73 119,-109"/>
<text text-anchor="middle" x="59.5" y="-87.3" font-family="Times,serif" font-size="14.00" fill="#000000">P4 switch: NAT64</text>
</g>
<!-- v6host&#45;&#45;nat64gw -->
<g id="edge2" class="edge">
<title>v6host&#45;&#45;nat64gw</title>
<path fill="none" stroke="#000000" d="M59.5,-145.9551C59.5,-134.7241 59.5,-120.3298 59.5,-109.0904"/>
</g>
<!-- nat64gw&#45;&#45;v4host -->
<g id="edge1" class="edge">
<title>nat64gw&#45;&#45;v4host</title>
<path fill="none" stroke="#000000" d="M59.5,-72.9551C59.5,-61.7241 59.5,-47.3298 59.5,-36.0904"/>
</g>
<!-- controller -->
<g id="node4" class="node">
<title>controller</title>
<polygon fill="none" stroke="#000000" points="315.5,-109 225.5,-109 225.5,-73 315.5,-73 315.5,-109"/>
<text text-anchor="middle" x="270.5" y="-87.3" font-family="Times,serif" font-size="14.00" fill="#000000">P4 Controller</text>
</g>
<!-- nat64gw&#45;&#45;controller -->
<g id="edge3" class="edge">
<title>nat64gw&#45;&#45;controller</title>
<path fill="none" stroke="#000000" d="M119.1181,-91C152.8748,-91 194.4149,-91 225.4359,-91"/>
<text text-anchor="middle" x="172.25" y="-97.8" font-family="Times,serif" font-size="14.00" fill="#000000">custom protocol</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

85
doc/graphviz/v4only.svg

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="332pt" height="260pt"
viewBox="0.00 0.00 332.00 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-256 328,-256 328,4 -4,4"/>
<!-- v4host1 -->
<g id="node1" class="node">
<title>v4host1</title>
<polygon fill="none" stroke="#000000" points="96,-252 0,-252 0,-216 96,-216 96,-252"/>
<text text-anchor="middle" x="48" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host</text>
</g>
<!-- switch1 -->
<g id="node7" class="node">
<title>switch1</title>
<ellipse fill="none" stroke="#000000" cx="162" cy="-162" rx="68.4888" ry="18"/>
<text text-anchor="middle" x="162" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">Network Switch</text>
</g>
<!-- v4host1&#45;&#45;switch1 -->
<g id="edge1" class="edge">
<title>v4host1&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M76.767,-215.8314C94.8401,-204.4168 117.9794,-189.8025 135.5865,-178.6822"/>
</g>
<!-- v4host2 -->
<g id="node2" class="node">
<title>v4host2</title>
<polygon fill="none" stroke="#000000" points="210,-252 114,-252 114,-216 210,-216 210,-252"/>
<text text-anchor="middle" x="162" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host</text>
</g>
<!-- v4host2&#45;&#45;switch1 -->
<g id="edge2" class="edge">
<title>v4host2&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M162,-215.8314C162,-205 162,-191.2876 162,-180.4133"/>
</g>
<!-- v4host3 -->
<g id="node3" class="node">
<title>v4host3</title>
<polygon fill="none" stroke="#000000" points="324,-252 228,-252 228,-216 324,-216 324,-252"/>
<text text-anchor="middle" x="276" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host</text>
</g>
<!-- v4host3&#45;&#45;switch1 -->
<g id="edge3" class="edge">
<title>v4host3&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M247.233,-215.8314C229.1599,-204.4168 206.0206,-189.8025 188.4135,-178.6822"/>
</g>
<!-- v4router -->
<g id="node4" class="node">
<title>v4router</title>
<polygon fill="none" stroke="#000000" points="201,-108 123,-108 123,-72 201,-72 201,-108"/>
<text text-anchor="middle" x="162" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 router</text>
</g>
<!-- v4internet -->
<g id="node5" class="node">
<title>v4internet</title>
<polygon fill="none" stroke="#000000" points="97.6279,-.0493 101.354,-.1479 105.0416,-.2953 108.6756,-.4913 112.2413,-.7353 115.7244,-1.0266 119.1112,-1.3645 122.3884,-1.7479 125.5436,-2.1759 128.5651,-2.6472 131.442,-3.1606 134.1643,-3.7147 136.723,-4.308 139.1099,-4.9388 141.3179,-5.6054 143.341,-6.3059 145.1742,-7.0385 146.8136,-7.8012 148.2563,-8.5918 149.5003,-9.4082 150.545,-10.2481 151.3906,-11.1093 152.0381,-11.9894 152.4898,-12.886 152.7485,-13.7965 152.8181,-14.7186 152.7032,-15.6497 152.409,-16.5873 151.9414,-17.5287 151.3069,-18.4713 150.5125,-19.4127 149.5655,-20.3503 148.4736,-21.2814 147.2447,-22.2035 145.8871,-23.114 144.4088,-24.0106 142.8183,-24.8907 141.1236,-25.7519 139.3331,-26.5918 137.4545,-27.4082 135.4957,-28.1988 133.4642,-28.9615 131.3672,-29.6941 129.2114,-30.3946 127.0034,-31.0612 124.7492,-31.692 122.4543,-32.2853 120.1241,-32.8394 117.7633,-33.3528 115.3763,-33.8241 112.967,-34.2521 110.5388,-34.6355 108.0951,-34.9734 105.6386,-35.2647 103.1719,-35.5087 100.6971,-35.7047 98.2163,-35.8521 95.7314,-35.9507 93.2441,-36 90.7559,-36 88.2686,-35.9507 85.7837,-35.8521 83.3029,-35.7047 80.8281,-35.5087 78.3614,-35.2647 75.9049,-34.9734 73.4612,-34.6355 71.033,-34.2521 68.6237,-33.8241 66.2367,-33.3528 63.8759,-32.8394 61.5457,-32.2853 59.2508,-31.692 56.9966,-31.0612 54.7886,-30.3946 52.6328,-29.6941 50.5358,-28.9615 48.5043,-28.1988 46.5455,-27.4082 44.6669,-26.5918 42.8764,-25.7519 41.1817,-24.8907 39.5912,-24.0106 38.1129,-23.114 36.7553,-22.2035 35.5264,-21.2814 34.4345,-20.3503 33.4875,-19.4127 32.6931,-18.4713 32.0586,-17.5287 31.591,-16.5873 31.2968,-15.6497 31.1819,-14.7186 31.2515,-13.7965 31.5102,-12.886 31.9619,-11.9894 32.6094,-11.1093 33.455,-10.2481 34.4997,-9.4082 35.7437,-8.5918 37.1864,-7.8012 38.8258,-7.0385 40.659,-6.3059 42.6821,-5.6054 44.8901,-4.9388 47.277,-4.308 49.8357,-3.7147 52.558,-3.1606 55.4349,-2.6472 58.4564,-2.1759 61.6116,-1.7479 64.8888,-1.3645 68.2756,-1.0266 71.7587,-.7353 75.3244,-.4913 78.9584,-.2953 82.646,-.1479 86.3721,-.0493 90.1214,0 93.8786,0 97.6279,-.0493"/>
<text text-anchor="middle" x="92" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 Internet</text>
</g>
<!-- v4router&#45;&#45;v4internet -->
<g id="edge5" class="edge">
<title>v4router&#45;&#45;v4internet</title>
<path fill="none" stroke="#000000" d="M144.336,-71.8314C133.3196,-60.5001 119.2375,-46.0157 108.4561,-34.9263"/>
</g>
<!-- v6internet -->
<g id="node6" class="node">
<title>v6internet</title>
<polygon fill="none" stroke="#000000" points="237.6279,-.0493 241.354,-.1479 245.0416,-.2953 248.6756,-.4913 252.2413,-.7353 255.7244,-1.0266 259.1112,-1.3645 262.3884,-1.7479 265.5436,-2.1759 268.5651,-2.6472 271.442,-3.1606 274.1643,-3.7147 276.723,-4.308 279.1099,-4.9388 281.3179,-5.6054 283.341,-6.3059 285.1742,-7.0385 286.8136,-7.8012 288.2563,-8.5918 289.5003,-9.4082 290.545,-10.2481 291.3906,-11.1093 292.0381,-11.9894 292.4898,-12.886 292.7485,-13.7965 292.8181,-14.7186 292.7032,-15.6497 292.409,-16.5873 291.9414,-17.5287 291.3069,-18.4713 290.5125,-19.4127 289.5655,-20.3503 288.4736,-21.2814 287.2447,-22.2035 285.8871,-23.114 284.4088,-24.0106 282.8183,-24.8907 281.1236,-25.7519 279.3331,-26.5918 277.4545,-27.4082 275.4957,-28.1988 273.4642,-28.9615 271.3672,-29.6941 269.2114,-30.3946 267.0034,-31.0612 264.7492,-31.692 262.4543,-32.2853 260.1241,-32.8394 257.7633,-33.3528 255.3763,-33.8241 252.967,-34.2521 250.5388,-34.6355 248.0951,-34.9734 245.6386,-35.2647 243.1719,-35.5087 240.6971,-35.7047 238.2163,-35.8521 235.7314,-35.9507 233.2441,-36 230.7559,-36 228.2686,-35.9507 225.7837,-35.8521 223.3029,-35.7047 220.8281,-35.5087 218.3614,-35.2647 215.9049,-34.9734 213.4612,-34.6355 211.033,-34.2521 208.6237,-33.8241 206.2367,-33.3528 203.8759,-32.8394 201.5457,-32.2853 199.2508,-31.692 196.9966,-31.0612 194.7886,-30.3946 192.6328,-29.6941 190.5358,-28.9615 188.5043,-28.1988 186.5455,-27.4082 184.6669,-26.5918 182.8764,-25.7519 181.1817,-24.8907 179.5912,-24.0106 178.1129,-23.114 176.7553,-22.2035 175.5264,-21.2814 174.4345,-20.3503 173.4875,-19.4127 172.6931,-18.4713 172.0586,-17.5287 171.591,-16.5873 171.2968,-15.6497 171.1819,-14.7186 171.2515,-13.7965 171.5102,-12.886 171.9619,-11.9894 172.6094,-11.1093 173.455,-10.2481 174.4997,-9.4082 175.7437,-8.5918 177.1864,-7.8012 178.8258,-7.0385 180.659,-6.3059 182.6821,-5.6054 184.8901,-4.9388 187.277,-4.308 189.8357,-3.7147 192.558,-3.1606 195.4349,-2.6472 198.4564,-2.1759 201.6116,-1.7479 204.8888,-1.3645 208.2756,-1.0266 211.7587,-.7353 215.3244,-.4913 218.9584,-.2953 222.646,-.1479 226.3721,-.0493 230.1214,0 233.8786,0 237.6279,-.0493"/>
<text text-anchor="middle" x="232" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 Internet</text>
</g>
<!-- v4router&#45;&#45;v6internet -->
<g id="edge6" class="edge">
<title>v4router&#45;&#45;v6internet</title>
<path fill="none" stroke="#000000" d="M179.664,-71.8314C190.6804,-60.5001 204.7625,-46.0157 215.5439,-34.9263"/>
</g>
<!-- switch1&#45;&#45;v4router -->
<g id="edge4" class="edge">
<title>switch1&#45;&#45;v4router</title>
<path fill="none" stroke="#000000" d="M162,-143.8314C162,-133 162,-119.2876 162,-108.4133"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

41
doc/graphviz/v6-v4-innetwork.svg

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="304pt" height="116pt"
viewBox="0.00 0.00 304.37 116.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 112)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-112 300.3737,-112 300.3737,4 -4,4"/>
<!-- v6host -->
<g id="node1" class="node">
<title>v6host</title>
<polygon fill="none" stroke="#000000" points="139.1869,-108 43.1869,-108 43.1869,-72 139.1869,-72 139.1869,-108"/>
<text text-anchor="middle" x="91.1869" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host</text>
</g>
<!-- switch1 -->
<g id="node3" class="node">
<title>switch1</title>
<ellipse fill="none" stroke="#000000" cx="148.1869" cy="-18" rx="148.3739" ry="18"/>
<text text-anchor="middle" x="148.1869" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Network Switch and NAT64 translator</text>
</g>
<!-- v6host&#45;&#45;switch1 -->
<g id="edge1" class="edge">
<title>v6host&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M105.5704,-71.8314C114.1452,-61 125.0009,-47.2876 133.6097,-36.4133"/>
</g>
<!-- v4host -->
<g id="node2" class="node">
<title>v4host</title>
<polygon fill="none" stroke="#000000" points="253.1869,-108 157.1869,-108 157.1869,-72 253.1869,-72 253.1869,-108"/>
<text text-anchor="middle" x="205.1869" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv4 only host</text>
</g>
<!-- v4host&#45;&#45;switch1 -->
<g id="edge2" class="edge">
<title>v4host&#45;&#45;switch1</title>
<path fill="none" stroke="#000000" d="M190.8033,-71.8314C182.2285,-61 171.3728,-47.2876 162.764,-36.4133"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

12
doc/graphviz/v6-v4-mixed.dot

@ -3,12 +3,12 @@ graph G {
rankdir="LR";
v6host12 [ label="IPv6 only host"];
v6host22 [ label="IPv6 only host"];
v6host32 [ label="IPv6 only host"];
v4host12 [ label="IPv4 only host"];
v4host22 [ label="IPv4 only host"];
v4host32 [ label="IPv4 only host"];
v6host12 [ label="IPv6 only host" color="blue" ];
v6host22 [ label="IPv6 only host" color="blue" ];
v6host32 [ label="IPv6 only host" color="blue" ];
v4host12 [ label="IPv4 only host" color="yellow" ];
v4host22 [ label="IPv4 only host" color="yellow" ];
v4host32 [ label="IPv4 only host" color="yellow" ];
switchboth [ label="Network Switch with NAT64", shape="oval" ];

85
doc/graphviz/v6-v4-mixed.svg

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="371pt" height="314pt"
viewBox="0.00 0.00 371.38 314.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 310)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-310 367.3795,-310 367.3795,4 -4,4"/>
<!-- v6host12 -->
<g id="node1" class="node">
<title>v6host12</title>
<polygon fill="none" stroke="#0000ff" points="96,-306 0,-306 0,-270 96,-270 96,-306"/>
<text text-anchor="middle" x="48" y="-284.3" font-family="Times,serif" font-size="14.00" fill="#000000">IPv6 only host</text>
</g>
<!-- switchboth -->
<g id="node7" class="node">
<title>switchboth</title>
<ellipse fill="none" stroke="#000000" cx="247.6897" cy="-153" rx="115.8798" ry="18"/>
<text text-anchor="middle" x="247.6897" y="-149.3" font-family="Times,serif" font-size="14.00" fill="#000000">Network Switch with NAT64</text>
</g>
<!-- v6host12&#45;&#45;switchboth -->
<g id="edge1" class="edge">