Cleanup, add stateful figure

This commit is contained in:
Nico Schottelius 2019-08-22 10:09:56 +02:00
parent fe866aeb1d
commit 6393127e84
3 changed files with 68 additions and 1 deletions

View file

@ -251,6 +251,12 @@ highest degree of flexibility, as it provides support for individual
entries based on table entries and LPM table entries.
% ----------------------------------------------------------------------
\section{\label{design:statefulnat64}Stateful NAT64}
\begin{figure}[h]
\includegraphics[scale=0.5]{p4switch-stateful}
\centering
\caption{Stateful NAT64 with P4}
\label{fig:p4switchstateful}
\end{figure}
Similar to stateless NAT64, the design of stateful NAT64 depends on
the features of the individual implementation. As pointed out in section
\ref{background:transition:statefulnat64}, stateful NAT64 is very
@ -261,7 +267,9 @@ to solve this problem:
\begin{itemize}
\item For P4/BMV2 and P4/NetPFGA a python controller handles packets
that don't have a table entry, sets the table entry in the P4 switch
and inserts the original packet afterwards back into the switch.
and inserts the original packet afterwards back into the
switch. Figure \ref{fig:p4switchstateful} shows the flow of a packet
with stateful translation in detail.
\item With tayga we rely on the Linux kernel NAT44 capabilities
\item Jool implements its own stateful mechanism based on port
ranges

Binary file not shown.

View file

@ -0,0 +1,59 @@
digraph G {
rankdir="TB";
v4host [ shape="box" label="IPv4 Host" ];
v6host [ shape="box" label="IPv6 Host" ];
rank=same;
parser [ label="Parser"];
deparser [ label="Deparser"];
translation [ label="Translation"];
mismatch [ label="Table mismatch"];
v4packet [ label="IPv6 Packet"];
v4packet2 [ label="IPv4 Packet"];
v6packet [ label="IPv6 Packet"];
tableentry [ label="Create table entry" ];
tablematch [ label="Table match" ];
reinject [ label="Reinject packet" ];
controller [ label="Controller reads packet" ]
deparser [ label="Deparser"];
deparser2 [ label="Deparser"];
subgraph cluster_nat64 {
label="P4 Switch";
parser;
v4packet;
deparser;
mismatch;
tablematch;
translation;
deparser2;
}
subgraph cluster_p4controller {
label="P4 Controller";
controller;
tableentry;
reinject;
}
v6host->v6packet->parser;
parser->v4packet;
v4packet->mismatch [ label="1." ];
mismatch->deparser->controller;
controller->tableentry->reinject;
reinject->parser;
v4packet->tablematch [ label="2." ];
tablematch->translation->deparser2;
deparser2->v4packet2->v4host;
}