diff --git a/doc/HIGH SPEED NAT64 WITH P4.pdf b/doc/HIGH SPEED NAT64 WITH P4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..439ebb3498eeddbde6bc4c5e619d66d42fc6efaa Binary files /dev/null and b/doc/HIGH SPEED NAT64 WITH P4.pdf differ diff --git a/doc/Makefile b/doc/Makefile index 47b8d1e246ac8855a52b47f9d32f9b68f13f39f5..6251f326d64b76c12206308308201b249741e51d 100644 --- a/doc/Makefile +++ b/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 < $< > $@ diff --git a/doc/Thesis.pdf b/doc/Thesis.pdf index 04c69cf2f7e44bfefa46955cb6168011dfb64533..230153616fb3ccbb71d215fd23b4edf59dce63c4 100644 Binary files a/doc/Thesis.pdf and b/doc/Thesis.pdf differ diff --git a/doc/graphviz/arp-ndp.svg b/doc/graphviz/arp-ndp.svg new file mode 100644 index 0000000000000000000000000000000000000000..7c473dcc87e9e9d46c8064b724c5df866d930993 --- /dev/null +++ b/doc/graphviz/arp-ndp.svg @@ -0,0 +1,73 @@ + + + + + + +G + + +cluster_v6 + + + +cluster_v4 + + + + +v6host1 + +IPv6 only host (fe80::1 and 2001:db8::1) + + + +v6host2 + +IPv6 only host (fe80::2 and 2001:db8::2) + + + +v6host1->v6host2 + + +ICMP6 neighbor solicitation, who has 2001:db8::2? [Multicast] + + + +v6host2->v6host1 + + +ICMP6 Neighbor Advertisement: 2001:db8::2 has 00:00:0a:00:00:42' [Unicast] + + + +v4host1 + +IPv4 only host (192.0.2.1) + + + +v4host2 + +IPv4 only host (192.0.2.2) + + + +v4host1->v4host2 + + +ARP who has 192.0.2.2? [Broadcast] + + + +v4host2->v4host1 + + +ARP 192.0.2.2 is at 00:00:0a:00:00:22' [Unicast] + + + diff --git a/doc/graphviz/dns64.svg b/doc/graphviz/dns64.svg new file mode 100644 index 0000000000000000000000000000000000000000..1a2c3c88c8691400e55978704c55548d7c3c6029 --- /dev/null +++ b/doc/graphviz/dns64.svg @@ -0,0 +1,118 @@ + + + + + + +G + + +cluster_dns64 + +DNS request + + +cluster_nat64 + +NAT64 translation + + + +v6host1 + +IPv6 only host + + + +dnsserver + +DNS64 DNS server + + + +v6host1->dnsserver + + +ipv4onlyhost.example.com: +AAAA? + + + +nat64 + +NAT64 translator + + + +v6host1->nat64 + + +Packet for +64:ff9b::c000:200 +tcp port 80 + + + +dnsserver->v6host1 + + +AAAA +64:ff9b::c000:200 + + + +authdns + +DNS server +for example.com + + + +dnsserver->authdns + + +ipv4onlyhost.example.com: +AAAA? + + + +dnsserver->authdns + + +ipv4onlyhost.example.com: +A? + + + +authdns->dnsserver + + +NO AAAA record + + + +authdns->dnsserver + + +A: 192.0.2.0 + + + +v4host1 + +IPv4 host: 192.0.2.0 + + + +nat64->v4host1 + + +Packet + for 192.0.2.0 +tcp port 80 + + + diff --git a/doc/graphviz/dualstack.svg b/doc/graphviz/dualstack.svg new file mode 100644 index 0000000000000000000000000000000000000000..ec0204be6250756061e42e2e51fc6c583c259d3a --- /dev/null +++ b/doc/graphviz/dualstack.svg @@ -0,0 +1,85 @@ + + + + + + +G + + + +host1 + +Dualstack host + + + +switch1 + +Network Switch + + + +host1--switch1 + + + + +host2 + +Dualstack host + + + +host2--switch1 + + + + +host3 + +Dualstack host + + + +host3--switch1 + + + + +router + +IPv6 & IPv4 router + + + +v4internet + +IPv4 Internet + + + +router--v4internet + + + + +v6internet + +IPv6 Internet + + + +router--v6internet + + + + +switch1--router + + + + diff --git a/doc/graphviz/icmp6ndp.dot b/doc/graphviz/icmp6ndp.dot index dd06073442bf2cd413fc07011cfa1f9eaaaeac8d..8b8f7376bfa550bd49ffa5f51a44858d8240d848 100644 --- a/doc/graphviz/icmp6ndp.dot +++ b/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" ] diff --git a/doc/graphviz/icmp6ndp.svg b/doc/graphviz/icmp6ndp.svg new file mode 100644 index 0000000000000000000000000000000000000000..2fe2a2e2cc80da17bf08be0539a54d4db5b891d8 --- /dev/null +++ b/doc/graphviz/icmp6ndp.svg @@ -0,0 +1,91 @@ + + + + + + +G + + + +ipv6 + +IPv6 + + + +icmp6 + +ICMP6 + + + +ipv6->icmp6 + + + + + +icmp6ns + +ICMP6 Neighbor Advertisement + + + +icmp6->icmp6ns + + + + + +icmp6nsll + +ICMP6 Link layer option + + + +icmp6ns->icmp6nsll + + + + + +icmp6other + +Option field 1 + + + +icmp6nsll->icmp6other + + + + + +icmp6other2 + +Option field 2 + + + +icmp6other->icmp6other2 + + + + + +icmp6othern + +Option field n + + + +icmp6other2->icmp6othern + + + + + diff --git a/doc/graphviz/nat64-two-directions.dot b/doc/graphviz/nat64-two-directions.dot new file mode 100644 index 0000000000000000000000000000000000000000..f5464c8830ed3d96470de4c92b09e8ffaadb773d --- /dev/null +++ b/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" ]; +} diff --git a/doc/graphviz/nat64-two-directions.svg b/doc/graphviz/nat64-two-directions.svg new file mode 100644 index 0000000000000000000000000000000000000000..cb4e887c02272c01c5685357c4eee2effaddc32d --- /dev/null +++ b/doc/graphviz/nat64-two-directions.svg @@ -0,0 +1,51 @@ + + + + + + +G + + + +v4host1 + +IPv4 only host + + + +v6host2 + +IPv6 only host + + + +v4host1->v6host2 + + +TCP:192.0.1.1:2342 + + + +v6host1 + +IPv6 only host + + + +v4internet + +The whole IPv4 Internet + + + +v6host1->v4internet + + +2001:db8:cafe::/96 + + + diff --git a/doc/graphviz/netpfgadesign.svg b/doc/graphviz/netpfgadesign.svg new file mode 100644 index 0000000000000000000000000000000000000000..3c191500ed5a30ac1cec6149fc3cd0c04cdca75b --- /dev/null +++ b/doc/graphviz/netpfgadesign.svg @@ -0,0 +1,74 @@ + + + + + + +G + + +cluster_esprimo + +Load generator + + +cluster_nsg + +NetFPGA Host + + + +x520_1 + +X520: IPv4 + + + +netpfga1 + +NetFPGA Port 1 + + + +x520_1--netpfga1 + + + + +x520_2 + +X520: IPv6 + + + +netpfga2 + +NetFPGA Port 2 + + + +x520_2--netpfga2 + + + + +x520_nsg + +X520: P4 Controller + + + +netpfga3 + +NetFPGA Port 3 + + + +netpfga3--x520_nsg + + + + diff --git a/doc/graphviz/networkdesignnat64.svg b/doc/graphviz/networkdesignnat64.svg new file mode 100644 index 0000000000000000000000000000000000000000..f1c8673459373699ebd09828eb2118d586ba6c9e --- /dev/null +++ b/doc/graphviz/networkdesignnat64.svg @@ -0,0 +1,45 @@ + + + + + + +G + + + +v6host + +2001:db8:42::42 + + + +nat64 + +NAT64 translator + + + +v6host->nat64 + + +Connect to 2001:db8:42::10.0.0.42 + + + +v4host + +10.0.0.42 + + + +nat64->v4host + + +Connect to 10.0.0.66 + + + diff --git a/doc/graphviz/p4switch-stateful.dot b/doc/graphviz/p4switch-stateful.dot index 2469f37765c203c6c51d3be037bf5a3f1f891e99..686c5c1079c365beab802ab5a9c5537ccd6d7718 100644 --- a/doc/graphviz/p4switch-stateful.dot +++ b/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" ]; diff --git a/doc/graphviz/p4switch-stateful.svg b/doc/graphviz/p4switch-stateful.svg new file mode 100644 index 0000000000000000000000000000000000000000..fdf41e32fcc2968236afe971274aa4a65a5153ce --- /dev/null +++ b/doc/graphviz/p4switch-stateful.svg @@ -0,0 +1,193 @@ + + + + + + +G + + +cluster_nat64 + +P4 Switch + + +cluster_p4controller + +P4 Controller + + + +v4host + +IPv4 Host + + + +v6host + +IPv6 Host + + + +v6packet + +IPv6 Packet + + + +v6host->v6packet + + + + + +parser + +Parser + + + +v4packet + +IPv6 Packet + + + +parser->v4packet + + + + + +deparser + +Deparser + + + +controller + +Controller Reads Packet + + + +deparser->controller + + + + + +translation + +Translation + + + +deparser2 + +Deparser + + + +translation->deparser2 + + + + + +mismatch + +Table Mismatch + + + +mismatch->deparser + + + + + +v4packet->mismatch + + +1. + + + +tablematch + +Table Match + + + +v4packet->tablematch + + +2. + + + +v4packet2 + +IPv4 Packet + + + +v4packet2->v4host + + + + + +v6packet->parser + + + + + +tableentry + +Create Table Entry + + + +reinject + +Reinject Packet + + + +tableentry->reinject + + + + + +tablematch->translation + + + + + +reinject->parser + + + + + +controller->tableentry + + + + + +deparser2->v4packet2 + + + + + diff --git a/doc/graphviz/p4switch.svg b/doc/graphviz/p4switch.svg new file mode 100644 index 0000000000000000000000000000000000000000..0bf1eaaef8366ae5040843755ea56f0ed508df49 --- /dev/null +++ b/doc/graphviz/p4switch.svg @@ -0,0 +1,96 @@ + + + + + + +G + + +cluster_nat64 + +P4 Switch + + + +v4host + +IPv4 Host + + + +parser + +Parser + + + +v4host->parser + + + + + +v6host + +IPv6 Host + + + +v4packet + +IPv4 Packet + + + +parser->v4packet + + + + + +deparser + +Deparser + + + +deparser->v6host + + + + + +translation + +Translation + + + +v6packet + +IPv6 Packet + + + +translation->v6packet + + + + + +v4packet->translation + + + + + +v6packet->deparser + + + + + diff --git a/doc/graphviz/softwarenat64design.svg b/doc/graphviz/softwarenat64design.svg new file mode 100644 index 0000000000000000000000000000000000000000..30668048cabb88b67f38c027774f386e568d22f8 --- /dev/null +++ b/doc/graphviz/softwarenat64design.svg @@ -0,0 +1,57 @@ + + + + + + +G + + +cluster_esprimo + +Load generator + + +cluster_nsg + +NAT64 Host + + + +x520_1 + +X520: IPv4 + + + +x520_nsg_1 + +X520: IPv4 + + + +x520_1--x520_nsg_1 + + + + +x520_2 + +X520: IPv6 + + + +x520_nsg_2 + +X520: IPv6 + + + +x520_2--x520_nsg_2 + + + + diff --git a/doc/graphviz/statefulnat64.svg b/doc/graphviz/statefulnat64.svg new file mode 100644 index 0000000000000000000000000000000000000000..c356e348ddcc16b29cb9a4d5febecc174bbd6dae --- /dev/null +++ b/doc/graphviz/statefulnat64.svg @@ -0,0 +1,52 @@ + + + + + + +G + + + +v6host1 + +IPv6/TCP: [2001:db8::1]:2323 + + + +nat64gw + +NAT64 translator + + + +v6host1--nat64gw + + + + +v6host2 + +IPv6/TCP: [2001:db8::17]:4242 + + + +v6host2--nat64gw + + + + +v4host + +IPv4/TCP: 198.51.100.2:4323, 198.51.100.2:3345 + + + +nat64gw--v4host + + + + diff --git a/doc/graphviz/switchdesign.svg b/doc/graphviz/switchdesign.svg new file mode 100644 index 0000000000000000000000000000000000000000..f269fd9baef6edc2c56d8b7922d5623117ad02f6 --- /dev/null +++ b/doc/graphviz/switchdesign.svg @@ -0,0 +1,53 @@ + + + + + + +G + + + +v4host + +IPv4 hosts + + + +v6host + +IPv6 hosts + + + +nat64gw + +P4 switch: NAT64 + + + +v6host--nat64gw + + + + +nat64gw--v4host + + + + +controller + +P4 Controller + + + +nat64gw--controller + +custom protocol + + + diff --git a/doc/graphviz/v4only.svg b/doc/graphviz/v4only.svg new file mode 100644 index 0000000000000000000000000000000000000000..3e561af030fdbf5f4b292bd9029017e87005f83c --- /dev/null +++ b/doc/graphviz/v4only.svg @@ -0,0 +1,85 @@ + + + + + + +G + + + +v4host1 + +IPv4 only host + + + +switch1 + +Network Switch + + + +v4host1--switch1 + + + + +v4host2 + +IPv4 only host + + + +v4host2--switch1 + + + + +v4host3 + +IPv4 only host + + + +v4host3--switch1 + + + + +v4router + +IPv4 router + + + +v4internet + +IPv4 Internet + + + +v4router--v4internet + + + + +v6internet + +IPv6 Internet + + + +v4router--v6internet + + + + +switch1--v4router + + + + diff --git a/doc/graphviz/v6-v4-innetwork.svg b/doc/graphviz/v6-v4-innetwork.svg new file mode 100644 index 0000000000000000000000000000000000000000..c048004e51ed56c672a57be5bea30c4b476002ab --- /dev/null +++ b/doc/graphviz/v6-v4-innetwork.svg @@ -0,0 +1,41 @@ + + + + + + +G + + + +v6host + +IPv6 only host + + + +switch1 + +Network Switch and NAT64 translator + + + +v6host--switch1 + + + + +v4host + +IPv4 only host + + + +v4host--switch1 + + + + diff --git a/doc/graphviz/v6-v4-mixed.dot b/doc/graphviz/v6-v4-mixed.dot index e7904fbbe2f3ad444230676c345e6737f822a922..5cc5d44f193427eee370afbc1a837cd41b16e2d5 100644 --- a/doc/graphviz/v6-v4-mixed.dot +++ b/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" ]; diff --git a/doc/graphviz/v6-v4-mixed.svg b/doc/graphviz/v6-v4-mixed.svg new file mode 100644 index 0000000000000000000000000000000000000000..50a82f5547caf2fdf7cd1f8a4bdacab519851325 --- /dev/null +++ b/doc/graphviz/v6-v4-mixed.svg @@ -0,0 +1,85 @@ + + + + + + +G + + + +v6host12 + +IPv6 only host + + + +switchboth + +Network Switch with NAT64 + + + +v6host12--switchboth + + + + +v6host22 + +IPv6 only host + + + +v6host22--switchboth + + + + +v6host32 + +IPv6 only host + + + +v6host32--switchboth + + + + +v4host12 + +IPv4 only host + + + +v4host12--switchboth + + + + +v4host22 + +IPv4 only host + + + +v4host22--switchboth + + + + +v4host32 + +IPv4 only host + + + +v4host32--switchboth + + + + diff --git a/doc/graphviz/v6-v4-standard.svg b/doc/graphviz/v6-v4-standard.svg new file mode 100644 index 0000000000000000000000000000000000000000..44aaed8b32b0e6375533493d67a481305d4f8697 --- /dev/null +++ b/doc/graphviz/v6-v4-standard.svg @@ -0,0 +1,85 @@ + + + + + + +G + + + +v6host + +IPv6 only host + + + +switch1 + +Network Switch + + + +v6host--switch1 + + + + +v4host + +IPv4 only host + + + +switch2 + +Network Switch + + + +v4host--switch2 + + + + +v6router + +IPv6 router + + + +switch1--v6router + + + + +v4router + +IPv4 router + + + +switch2--v4router + + + + +nat64gw + +NAT64 translator + + + +v6router--nat64gw + + + + +v4router--nat64gw + + + + diff --git a/doc/graphviz/v6-v6-separated.dot b/doc/graphviz/v6-v6-separated.dot index ccd899af8adf42e2889f9b04f3c41a67fe7b507d..2b985af3fc2d3a958a00f9f77de5fd4e2fd23657 100644 --- a/doc/graphviz/v6-v6-separated.dot +++ b/doc/graphviz/v6-v6-separated.dot @@ -2,13 +2,12 @@ graph G { node [ shape="box"]; rankdir="LR"; - v6host1 [ label="IPv6 only host"]; - v6host2 [ label="IPv6 only host"]; - v6host3 [ label="IPv6 only host"]; - - v4host1 [ label="IPv4 only host"]; - v4host2 [ label="IPv4 only host"]; - v4host3 [ label="IPv4 only host"]; + v6host1 [ label="IPv6 only host" color="blue" ]; + v6host2 [ label="IPv6 only host" color="blue" ]; + v6host3 [ label="IPv6 only host" color="blue" ]; + v4host1 [ label="IPv4 only host" color="yellow" ]; + v4host2 [ label="IPv4 only host" color="yellow" ]; + v4host3 [ label="IPv4 only host" color="yellow" ]; switchv6 [ label="Network Segment", shape="oval" ]; switchv4 [ label="Network Segment", shape="oval" ]; diff --git a/doc/graphviz/v6-v6-separated.svg b/doc/graphviz/v6-v6-separated.svg new file mode 100644 index 0000000000000000000000000000000000000000..3110129db7a852f220eaceefb41477c5f0ae4bc3 --- /dev/null +++ b/doc/graphviz/v6-v6-separated.svg @@ -0,0 +1,108 @@ + + + + + + +G + + + +v6host1 + +IPv6 only host + + + +switchv6 + +Network Segment + + + +v6host1--switchv6 + + + + +v6host2 + +IPv6 only host + + + +v6host2--switchv6 + + + + +v6host3 + +IPv6 only host + + + +v6host3--switchv6 + + + + +v4host1 + +IPv4 only host + + + +switchv4 + +Network Segment + + + +v4host1--switchv4 + + + + +v4host2 + +IPv4 only host + + + +v4host2--switchv4 + + + + +v4host3 + +IPv4 only host + + + +v4host3--switchv4 + + + + +nat64gw + +Router / +NAT64 translator + + + +switchv6--nat64gw + + + + +switchv4--nat64gw + + + + diff --git a/doc/graphviz/v6only.svg b/doc/graphviz/v6only.svg new file mode 100644 index 0000000000000000000000000000000000000000..db19f40225c6485abbb49507d09959706e0e041f --- /dev/null +++ b/doc/graphviz/v6only.svg @@ -0,0 +1,85 @@ + + + + + + +G + + + +v6host1 + +IPv6 only host + + + +switch1 + +Network Switch + + + +v6host1--switch1 + + + + +v6host2 + +IPv6 only host + + + +v6host2--switch1 + + + + +v6host3 + +IPv6 only host + + + +v6host3--switch1 + + + + +v6router + +IPv6 router + + + +v4internet + +IPv4 Internet + + + +v6router--v4internet + + + + +v6internet + +IPv6 Internet + + + +v6router--v6internet + + + + +switch1--v6router + + + +