|
|
|
@ -90,7 +90,7 @@ Table~\ref{tab:p4bmv2features} references all implemented features.
|
|
|
|
|
\hline |
|
|
|
|
\textbf{Feature} & \textbf{Description} & \textbf{Status} \\ |
|
|
|
|
\hline |
|
|
|
|
Switch to controller & Switch forwards unhandeled packets to |
|
|
|
|
Switch to controller & Switch forwards unhandled packets to |
|
|
|
|
controller & fully implemented\footnote{Source code: \texttt{actions\_egress.p4}}\\ |
|
|
|
|
\hline |
|
|
|
|
Controller to Switch & Controller can setup table entries & |
|
|
|
@ -173,7 +173,7 @@ features and reasons about their implementation status.
|
|
|
|
|
\hline |
|
|
|
|
\textbf{Feature} & \textbf{Description} & \textbf{Status} \\ |
|
|
|
|
\hline |
|
|
|
|
Switch to controller & Switch forwards unhandeled packets to |
|
|
|
|
Switch to controller & Switch forwards unhandled packets to |
|
|
|
|
controller & portable\footnote{While the NetFPGA P4 implementation |
|
|
|
|
does not have the clone3() extern that the BMV2 implementation offers, |
|
|
|
|
communication to the controller can easily be realised by using one of |
|
|
|
@ -188,7 +188,7 @@ portable\footnote{The p4utils suite offers an easy access to the
|
|
|
|
|
\hline |
|
|
|
|
NDP & Switch responds to ICMP6 neighbor & \\ |
|
|
|
|
& solicitation request (without controller) & |
|
|
|
|
portable\footnote{NetFPGA/P4 does not offer calculating the checksume |
|
|
|
|
portable\footnote{NetFPGA/P4 does not offer calculating the checksum |
|
|
|
|
over the payload. However delta checksumming can be used to create |
|
|
|
|
the required checksum for replying.} \\ |
|
|
|
|
\hline |
|
|
|
@ -263,7 +263,7 @@ forward packets anymore. Multiple reboots (up to 3)
|
|
|
|
|
and multiple times reflashing the bitstream to the NetFPGA usually |
|
|
|
|
restored the intended behaviour. However due to this ``crashes'', it |
|
|
|
|
was impossible for us run a benchmark for more than one hour. |
|
|
|
|
Similariy, sometimes flashing the bitstream to the NetFPGA would fail. |
|
|
|
|
Similarly, sometimes flashing the bitstream to the NetFPGA would fail. |
|
|
|
|
It was required to reboot the host containing the |
|
|
|
|
NetFPGA card up to 3 times to enable successful flashing.\footnote{Typical |
|
|
|
|
output of the flashing process would be: ``fpga configuration |
|
|
|
@ -271,7 +271,7 @@ failed. DONE PIN is not HIGH''}
|
|
|
|
|
% ok |
|
|
|
|
% ---------------------------------------------------------------------- |
|
|
|
|
\subsubsection{\label{results:netpfga:performance}Performance} |
|
|
|
|
The NetFGPA card performed at near line speed and offers |
|
|
|
|
The NetFPGA card performed at near line speed and offers |
|
|
|
|
NAT64 translations at 9.28 Gbit/s (see section \ref{results:benchmark} |
|
|
|
|
for details). |
|
|
|
|
Single and multiple streams |
|
|
|
@ -284,7 +284,7 @@ The handling and usability of the NetFPGA card is rather difficult. In
|
|
|
|
|
this section we describe our findings and experiences with the card |
|
|
|
|
and its toolchain. |
|
|
|
|
|
|
|
|
|
To use the NetFGPA, the tools Vivado and SDNET provided by Xilinx need to be |
|
|
|
|
To use the NetFPGA, the tools Vivado and SDNET provided by Xilinx need to be |
|
|
|
|
installed. However a bug in the installer triggers an infinite loop, |
|
|
|
|
if a certain shared library\footnote{The required shared library |
|
|
|
|
is libncurses5.} is missing on the target operating system. The |
|
|
|
@ -310,7 +310,7 @@ gen\_testdata.py.}
|
|
|
|
|
|
|
|
|
|
However incorrect parsing generates syntactically incorrect |
|
|
|
|
scripts or scripts that generate incorrect output. The toolchain |
|
|
|
|
provided by the NetFGPA-P4 repository contains more than 80000 lines |
|
|
|
|
provided by the NetFPGA-P4 repository contains more than 80000 lines |
|
|
|
|
of code. The supporting scripts for setting table entries require |
|
|
|
|
setting the parameters for all possible actions, not only for the |
|
|
|
|
selected action. Supplying only the required parameters results in a |
|
|
|
@ -332,7 +332,7 @@ compile process.
|
|
|
|
|
During the compile process various informational, warning and error |
|
|
|
|
messages are printed. However some informational messages constitute |
|
|
|
|
critical errors, while on the other hand critical errors and syntax |
|
|
|
|
errors often do not constitue a critical |
|
|
|
|
errors often do not constitute a critical |
|
|
|
|
error.\footnote{F.i. ``CRITICAL WARNING: [BD 41-737] Cannot set the |
|
|
|
|
parameter TRANSLATION\_MODE on /axi\_interconnect\_0. It is |
|
|
|
|
read-only.'' is a non critical warning.} |
|
|
|
@ -344,7 +344,7 @@ release, use 'get\_user\_parameters' instead''.}
|
|
|
|
|
Programs or scripts that are called during the compile process do not |
|
|
|
|
necessarily exit non zero if they encountered a critical error. Thus |
|
|
|
|
finding the source of an error can be difficult due to the compile |
|
|
|
|
process continuing after critical errors occured. Not only programs |
|
|
|
|
process continuing after critical errors occurred. Not only programs |
|
|
|
|
that have critical errors exit ``successfully'', but also python |
|
|
|
|
scripts that encounter critical paths don't abort with raise(), but |
|
|
|
|
print an error message to stdout and don't abort with an error. |
|
|
|
@ -383,7 +383,7 @@ techniques are missing or not supported.
|
|
|
|
|
\item Analysing / accessing payload is not supported |
|
|
|
|
\item Checksum computation over payload is not supported |
|
|
|
|
\item Using LPM tables can lead to compilation errors |
|
|
|
|
\item Depening on the match type, only certain table sizes are allowed |
|
|
|
|
\item Depending on the match type, only certain table sizes are allowed |
|
|
|
|
\end{itemize} |
|
|
|
|
Renaming variables in the declaration of the parser or deparser lead |
|
|
|
|
to compilation errors. Function syntax is not supported. For this |
|
|
|
|