\chapter{\label{results}Results} %** Results.tex: What were the results achieved including an evaluation % This section describes the achieved results and compares the P4 based implementation with real world software solutions. We distinguish the software implementation of P4 (BMV2) and the hardware implementation (NetFPGA) due to significant differences in deployment and development. We present benchmarks for the existing software solutions as well as for our hardware implementation. As the objective of this thesis was to demonstrate the high speed capabilities of NAT64 in hardware, no benchmarks were performed on the P4 software implementation. % ---------------------------------------------------------------------- \section{\label{results:p4}NAT64 Overview} We successfully implemented P4 code to realise NAT64\cite{schottelius:thesisrepo}. It contains parsers for all related protocols (ipv6, ipv4, udp, tcp, icmp, icmp6, ndp, arp), supports EAMT as defined by RFC7757 \cite{rfc7757} and is feature equivalent to the two compared software solutions tayga\cite{lutchansky:_tayga_simpl_nat64_linux} and jool\cite{mexico:_jool_open_sourc_siit_nat64_linux}. Due to limitations in the P4 environment of the NetFPGA\cite{conclusion:netfpga} environment, the BMV2 implementation is more feature rich. Table \ref{tab:benchmark} summarises the achieved bandwidths of the NAT64 solutions. \begin{table}[htbp] \begin{center}\begin{minipage}{\textwidth} \begin{tabular}{| c | c | c | c |} \hline Solution & \multicolumn{3}{|c|}{Parallel connections} \\ & 1 & 20 & 3 \\ \hline Tayga & 3.02 & 3.28 & 2.85\\ \hline Jool & 6.67 & 16.8 ?? & 20.5 udp?\\ \hline P4 / NetPFGA & 9.28 & 9.29 & 9.29\\ \hline \end{tabular} \end{minipage} \caption{NAT64 Benchmark (IPv6 initiating), all results in Gbit/sec (\%loss)} \label{tab:benchmarkv6} \end{center} \end{table} During the benchmarks the client \begin{table}[htbp] \begin{center}\begin{minipage}{\textwidth} \begin{tabular}{| c | c | c | c |} \hline Solution & \multicolumn{3}{|c|}{Parallel connections} \\ & 1 & 20 & 3 \\ \hline Tayga & 3.36 & 3.29 & 3.11 \\ \hline Jool & 8.24 & 8.26 & 8.29\\ \hline P4 / NetPFGA & 8.43 & 9.29 & 9.29\\ \hline \end{tabular} \end{minipage} \caption{NAT64 Benchmark (IPv4 initiating), all results in Gbit/sec (\%loss)} \label{tab:benchmarkv4} \end{center} \end{table} % ---------------------------------------------------------------------- \section{\label{Results:BMV2}BMV2} The software implementation of P4 features most features, which is mostly due to available externs that can checksum the payload: Acting as a ``proper'' participant in NDP, requires the host to calculate checksums over the payload. Responds to icmp, icmp6 ndp \cite{rfc4861} arp test framework openvswitch Fully functional host Can compute checksums on its own. focus on typical use cases of icmp, icmp6, the software implementation supports translating echo request and echo reply messages, but does not support all ICMP/ICMP6 translations that are defined in RFC6145\cite{rfc6145}. Stateful : no automatic removal % ---------------------------------------------------------------------- \section{\label{results:tayga}Tayga} cpu bound, single thread % ---------------------------------------------------------------------- \section{\label{results:jool}Jool} % ---------------------------------------------------------------------- \section{\label{Results:NetPFGA}NetFPGA} \subsection{\label{results:netpfga:checksum}Checksum computation} \subsection{\label{results:netpfga:general}to be named} Trace files \begin{verbatim} create mode 100644 pcap/tcp-udp-delta-2019-07-17-1555-h1.pcap create mode 100644 pcap/tcp-udp-delta-2019-07-17-1555-h3.pcap create mode 100644 pcap/tcp-udp-delta-2019-07-17-1557-h1.pcap create mode 100644 pcap/tcp-udp-delta-2019-07-17-1558-h3.pcap \end{verbatim} \begin{verbatim} *** DONE 2019-07-21: Proof of v6->v4 working delta based CLOSED: [2019-07-21 Sun 12:30] #+BEGIN_CENTER pcap/tcp-udp-delta-from-v6-2019-07-21-0853-h1.pcap | Bin 0 -> 4252 bytes pcap/tcp-udp-delta-from-v6-2019-07-21-0853-h3.pcap | Bin 0 -> 2544 bytes #+END_CENTER \end{verbatim} \begin{verbatim} **** DONE Testing v4->v6 tcp: ok (version 10.0) CLOSED: [2019-08-04 Sun 09:15] #+BEGIN_CENTER nico@ESPRIMO-P956:~/master-thesis/bin$ ./socat-connect-tcp-v4 + echo from-v4-ok + socat - TCP:10.0.0.66:2345 TCPv6-ok nico@ESPRIMO-P956:~/master-thesis/bin$ ./socat-listen-tcp-v6 from-v4-ok #+END_CENTER trace: netfpga-nat64-2019-08-04-0907-enp2s0f0.pcap netfpga-nat64-2019-08-04-0907-enp2s0f1.pcap **** DONE Testing v4->v6 udp: ok (version 10.1) trace: create mode 100644 pcap/netfpga-nat64-udp-2019-08-04-0913-enp2s0f0.pcap create mode 100644 pcap/netfpga-nat64-udp-2019-08-04-0913-enp2s0f1.pcap \end{verbatim} \begin{verbatim} *** DONE 2019-08-04: version 10.1/10.2: new maxpacketregion: v4->v6 works CLOSED: [2019-08-04 Sun 19:42] #+BEGIN_CENTER nico@ESPRIMO-P956:~/master-thesis/bin$ ./init_ipv4_esprimo.sh nico@ESPRIMO-P956:~/master-thesis/bin$ ./set_ipv4_neighbor.sh #+END_CENTER Test 20 first: - Does't work -> missed to add table entries - Does work after setting table entries - 300 works - 1450 works - 1500 does not work Proof: create mode 100644 pcap/netfpga-10.2-maxpacket-2019-08-04-1931-enp2s0f0.pcap create mode 100644 pcap/netfpga-10.2-maxpacket-2019-08-04-1931-enp2s0f1.pcap \end{verbatim} \begin{verbatim} *** DONE 2019-08-04: test v6 -> v4: works for 1420 CLOSED: [2019-08-04 Sun 20:30] Proof: #+BEGIN_CENTER create mode 100644 pcap/netfpga-10.2-fromv6tov4-2019-08-04-1943-enp2s0f0.pcap create mode 100644 pcap/netfpga-10.2-fromv6tov4-2019-08-04-1943-enp2s0f1.pcap \end{verbatim} General result: limited NAT64 is working, however No Payload checksumming - requires controller Hash funktion in Arbeit No NDP, no ARP - focused on key factors of NAT64 translation, other features can be supported by controller \section{\label{results:softwarenat64}NAT64 in Software} Tayga, Jool tayga: Single threaded fork: \begin{verbatim} | What? | Description | State in P4 | References | |---------------------+------------------------------------------+-------------------+---------------------------------------------------------------------------------| | Jool EAMT | Mapping with tables, multiple entries | Supported | https://www.jool.mx/en/eamt.html, https://www.jool.mx/en/run-eam.html, RFC 7757 | | Jool SIIT | Mapping IPv6 to range of IPv4, one entry | Supported by EAMT | | \end{verbatim} \section{\label{results:features}Feature comparison} speed - sessions - eamt can act as host lpm tables ping ping6 support ndp controller support \section{todo - FIXME: remove} \begin{verbatim} ***** Dorth eher detailiertes Drawing ***** Längste Section! \end{verbatim}