Fix Design/P4/BMV2
This commit is contained in:
parent
71e0e61248
commit
002887533a
2 changed files with 32 additions and 23 deletions
|
@ -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
|
||||||
|
|
BIN
doc/Thesis.pdf
BIN
doc/Thesis.pdf
Binary file not shown.
Loading…
Reference in a new issue