Fix Design/P4/BMV2

This commit is contained in:
Nico Schottelius 2019-08-19 15:17:38 +02:00
parent 71e0e61248
commit 002887533a
2 changed files with 32 additions and 23 deletions

View file

@ -259,25 +259,7 @@ session table inside the python controller. While the Jool and Tayga
both support cleaning up old session entries, both support cleaning up old session entries,
our P4 based solution does not support this feature at the moment. our P4 based solution does not support this feature at the moment.
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\section{\label{Design:BMV2}BMV2} \section{\label{design:bmv2}P4/BMV2}
Development of the thesis took place on a software emulated switch
that is implemented using Open vSwitch~\cite{openvswitch}
and the behavioral model~\cite{_implem_your_switc_target_with_bmv2}.
The development followed
closely the general design shown in section
\ref{design:nat64}. Within the software emulation checksums can be
computed with two different methods:
\begin{itemize}
\item Recalculating the checksum by inspecting headers and payload
\item Calculating the difference between the translated headers
\end{itemize}
The BMV2 model is rather sophisticated and provides many standard
features including checksumming over payload. This allows the BMV2
model to operate as a full featured host, including advanced features
like responding to ICMP6 Neighbor discovery requests~\cite{rfc4861}
that include payload checksums.
A typical code to create the checksum can be found in figure
\ref{fig:checksum}.
\begin{figure}[h] \begin{figure}[h]
\begin{verbatim} \begin{verbatim}
/* checksumming for icmp6_na_ns_option */ /* checksumming for icmp6_na_ns_option */
@ -306,12 +288,39 @@ update_checksum_with_payload(meta.chk_icmp6_na_ns == 1,
); );
\end{verbatim} \end{verbatim}
\centering \centering
\caption{IPv4 Pseudo Header} \caption{P4/BMV2 checksumming}
\label{fig:checksum} \label{fig:bmv2checksum}
\end{figure} \end{figure}
The software emulated switch that is implemented using
Open vSwitch~\cite{openvswitch} and the
behavioral model~\cite{_implem_your_switc_target_with_bmv2}
offers the fastest and easiest way of P4 development. All NAT64
features are tested first on P4/BMV2 and in a second step ported to
P4/NetFPGA and modified, where necessary.
The development follows closely the general design shown in section
\ref{design:nat64}.
As outlined in section \ref{background:checksums}, checksums inside
higher level protocols need to be adjusted after translation.
Within the software emulation checksums can be
computed with two different methods:
\begin{itemize}
\item Recalculating the checksum by inspecting headers and payload
\item Calculating the difference between the translated headers
\end{itemize}
The BMV2 model is sophisticated and provides direct support
for calculating the checksum over the payload. This allows the BMV2
model to operate as a full featured host, including advanced features
like responding to ICMP6 Neighbor discovery requests~\cite{rfc4861}
that include payload checksums. Sample code that calculates the
required checksum for answering NDP queries is shown in figure
\ref{fig:bmv2checksum}. The code shows how the field
\texttt{hdr.icmp6.checksum} is updated with the \texttt{csum16} method
depending on the IPv6 and ICMP6 headers as well as the payload. The
second option of using the differences is described in section
\ref{design:netpfga}.
% ok
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\section{\label{Design:NetPFGA}NetFPGA - FIXME: relate things} \section{\label{design:netpfga}NetFPGA - FIXME: relate things}
While the P4-NetFPGA project ~\cite{netfpga:_p4_netpf_public_github} While the P4-NetFPGA project ~\cite{netfpga:_p4_netpf_public_github}
allows compiling P4 to the NetPFGA, the design slightly varies. allows compiling P4 to the NetPFGA, the design slightly varies.
In particular, the NetFPGA P4 compiler does not support reading In particular, the NetFPGA P4 compiler does not support reading

Binary file not shown.