diff --git a/doc/HIGH SPEED NAT64 WITH P4.pdf b/doc/HIGH SPEED NAT64 WITH P4.pdf new file mode 100644 index 0000000..439ebb3 Binary files /dev/null and b/doc/HIGH SPEED NAT64 WITH P4.pdf differ diff --git a/doc/Makefile b/doc/Makefile index 47b8d1e..6251f32 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 04c69cf..2301536 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 0000000..7c473dc --- /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 0000000..1a2c3c8 --- /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 0000000..ec0204b --- /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 dd06073..8b8f737 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 0000000..2fe2a2e --- /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 0000000..f5464c8 --- /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 0000000..cb4e887 --- /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 0000000..3c19150 --- /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 0000000..f1c8673 --- /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 2469f37..686c5c1 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 0000000..fdf41e3 --- /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 0000000..0bf1eaa --- /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 0000000..3066804 --- /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 0000000..c356e34 --- /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 0000000..f269fd9 --- /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 0000000..3e561af --- /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 0000000..c048004 --- /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 e7904fb..5cc5d44 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 0000000..50a82f5 --- /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 0000000..44aaed8 --- /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 ccd899a..2b985af 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 0000000..3110129 --- /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 0000000..db19f40 --- /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 + + + +