Fix the verbatim issue
This commit is contained in:
parent
38eaf8c2ee
commit
a5858febf0
5 changed files with 236 additions and 150 deletions
|
@ -21,7 +21,7 @@ parser will read and parse in the ingress pipeline one protocol
|
||||||
\caption{P4 protocol independence~\cite{vanbever:_progr_networ_data_planes}}
|
\caption{P4 protocol independence~\cite{vanbever:_progr_networ_data_planes}}
|
||||||
\label{fig:p4fromnsg}
|
\label{fig:p4fromnsg}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
The \textit{target independence} is the second strong feature
|
The \textit{target independence} is the second major feature
|
||||||
of P4: it allows code to be compiled to different targets. While in
|
of P4: it allows code to be compiled to different targets. While in
|
||||||
theory the P4 code should be completely target independent, in reality,
|
theory the P4 code should be completely target independent, in reality,
|
||||||
there are some modifications needed on a per-target basis and each
|
there are some modifications needed on a per-target basis and each
|
||||||
|
@ -47,8 +47,9 @@ the higher level protocol identifier.\footnote{
|
||||||
This is important because
|
This is important because
|
||||||
Ethernet can only reference one protocol, which makes IPv4 and IPv6
|
Ethernet can only reference one protocol, which makes IPv4 and IPv6
|
||||||
mutually exclusive.
|
mutually exclusive.
|
||||||
The figures \ref{fig:ipv4header} and \ref{fig:ipv6header} show the
|
In the figures \ref{fig:ipv4header} and \ref{fig:ipv6header} we
|
||||||
packet headers of IPv4 and IPv6. The most notable differences between
|
show the packet headers of IPv4 and IPv6 for showing the in-protocol
|
||||||
|
differences. The most notable differences between
|
||||||
the two protocols for this thesis are:
|
the two protocols for this thesis are:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Different address lengths
|
\item Different address lengths
|
||||||
|
@ -67,11 +68,12 @@ addressing for protocols that have no or limited addressing support
|
||||||
(like TCP or UDP), protocols like ARP~\cite{rfc826} and
|
(like TCP or UDP), protocols like ARP~\cite{rfc826} and
|
||||||
NDP~\cite{rfc4861} provide support for resolving IPv6 and IPv4
|
NDP~\cite{rfc4861} provide support for resolving IPv6 and IPv4
|
||||||
addresses to hardware (MAC) addresses. While both ARP and NDP are only
|
addresses to hardware (MAC) addresses. While both ARP and NDP are only
|
||||||
used prior to establishing a connection on and their results are
|
used prior to establishing a connection and their results are
|
||||||
cached, their availability is crucial for operating a switch.
|
cached, their availability is crucial for operating a switch, because
|
||||||
|
without ARP or NDP no connection will every be established.
|
||||||
Figure \ref{fig:arpndp} illustrates a typical address resolution process.
|
Figure \ref{fig:arpndp} illustrates a typical address resolution process.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\includegraphics[scale=0.3]{arp-ndp}
|
\includegraphics[scale=0.4]{arp-ndp}
|
||||||
\centering
|
\centering
|
||||||
\caption{ARP and NDP}
|
\caption{ARP and NDP}
|
||||||
\label{fig:arpndp}
|
\label{fig:arpndp}
|
||||||
|
@ -90,8 +92,9 @@ way to communicate to the target IPv4 address (``The chicken and the
|
||||||
egg problem'').
|
egg problem'').
|
||||||
NDP on the other hand already works within IPv6, as every IPv6 host is
|
NDP on the other hand already works within IPv6, as every IPv6 host is
|
||||||
required to have a self-assigned link local IPv6 address from the
|
required to have a self-assigned link local IPv6 address from the
|
||||||
range \texttt{fe80::/10} (compare RFC4291~\cite{rfc4291}). NDP also
|
IPv6 network \texttt{fe80::/10} (compare
|
||||||
does not require broadcast communication, because hosts automatically
|
RFC4291~\cite{rfc4291}). While ARP uses broadcasting for address
|
||||||
|
resolution, NDP uses multicasting. IPv6 hosts automatically
|
||||||
join multicast groups that embed parts of their
|
join multicast groups that embed parts of their
|
||||||
IPv6 addresses~\cite{rfc2710},~\cite{wikipedia:_solic}. This way the
|
IPv6 addresses~\cite{rfc2710},~\cite{wikipedia:_solic}. This way the
|
||||||
collision domain is significantly reduced in IPv6, compared to IPv4.
|
collision domain is significantly reduced in IPv6, compared to IPv4.
|
||||||
|
@ -101,13 +104,13 @@ section \ref{results:netpfga:features}), the requirement to generate checksums
|
||||||
over payload poses difficult problems for some hardware targets. Even
|
over payload poses difficult problems for some hardware targets. Even
|
||||||
more difficult is the use of options within ICMP6.
|
more difficult is the use of options within ICMP6.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\includegraphics[scale=0.3]{icmp6ndp}
|
\includegraphics[scale=0.4]{icmp6ndp}
|
||||||
\centering
|
\centering
|
||||||
\caption{ICMP6 option fields}
|
\caption{ICMP6 option fields}
|
||||||
\label{fig:icmp6ndp}
|
\label{fig:icmp6ndp}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
The problem arises from the layout of the options, as seen in the
|
The problem arises from the layout of the options, as seen
|
||||||
following quote and in figure \ref{fig:icmp6ndp}:
|
in figure \ref{fig:icmp6ndp} and the following quote:
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
``Neighbor Discovery messages include zero or more options, some of
|
``Neighbor Discovery messages include zero or more options, some of
|
||||||
which may appear multiple times in the same message. Options should
|
which may appear multiple times in the same message. Options should
|
||||||
|
@ -116,18 +119,17 @@ be padded when necessary to ensure that they end on their natural
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
ICMP6 and ICMP are primarily used to signal errors in
|
ICMP6 and ICMP are primarily used to signal errors in
|
||||||
communication. Specifically signalling that a packet is too big to
|
communication. Specifically, signalling that a packet is too big to
|
||||||
pass a certain link and needs fragmentation is a common functionality
|
pass a certain link and needs fragmentation is a common functionality
|
||||||
of both protocols. For a host (or switch) to be able to emit ICMP6 and
|
of both protocols. For a host (or a switch) to be able to emit ICMP6 and
|
||||||
ICMP messages, the host requires a valid IPv6 / IPv4 address.
|
ICMP messages, the host requires a valid IPv6 / IPv4 address.
|
||||||
Without ICMP6 / ICMP support path MTU
|
Without ICMP6 / ICMP support path MTU
|
||||||
discovery~\cite{rfc1191},~\cite{rfc8201}
|
discovery~\cite{rfc1191},~\cite{rfc8201}
|
||||||
does not work and the sender needs to determine
|
does not work and the sender needs to determine
|
||||||
different ways of finding out the maximum MTU on the path.
|
different ways of finding out the maximum MTU on the path.
|
||||||
% ok -- need to separate backgroun and results
|
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\section{\label{background:transition}IPv6 Translation Mechanisms}
|
\section{\label{background:transition}IPv6 Translation Mechanisms}
|
||||||
While in this thesis the focus was in NAT64 as a translation mechanism,
|
While in this thesis we focus on NAT64 as a translation mechanism,
|
||||||
there are a variety of different approaches, some of which we would
|
there are a variety of different approaches, some of which we would
|
||||||
like to portray here.
|
like to portray here.
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
|
@ -151,61 +153,64 @@ translation direction, a translator will need to re-arrange fields to
|
||||||
a different position, remove fields and add fields.
|
a different position, remove fields and add fields.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
0 1 2 3
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|Version| Traffic Class | Flow Label |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|Version| Traffic Class | Flow Label |
|
||||||
| Payload Length | Next Header | Hop Limit |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| Payload Length | Next Header | Hop Limit |
|
||||||
| |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+ +
|
| |
|
||||||
| |
|
+ +
|
||||||
+ Source Address +
|
| |
|
||||||
| |
|
+ Source Address +
|
||||||
+ +
|
| |
|
||||||
| |
|
+ +
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| |
|
||||||
| |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+ +
|
| |
|
||||||
| |
|
+ +
|
||||||
+ Destination Address +
|
| |
|
||||||
| |
|
+ Destination Address +
|
||||||
+ +
|
| |
|
||||||
| |
|
+ +
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
\centering
|
\centering
|
||||||
\caption{IPv6 Header~\cite{rfc2460}}
|
\caption{IPv6 Header~\cite{rfc2460}}
|
||||||
\label{fig:ipv6header}
|
\label{fig:ipv6header}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
This in turn causes the packet size for standard headers
|
||||||
|
to differ by 160 Bit.\footnote{IPv6: 320 Bit, IPv4 160 Bit}
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\subsection{\label{background:transition:statefulnat64}Stateful NAT64}
|
\subsection{\label{background:transition:statefulnat64}Stateful NAT64}
|
||||||
Stateful NAT64 as defined in RFC6146~\cite{rfc6146} defines how to
|
Stateful NAT64 as defined in RFC6146~\cite{rfc6146} defines how to
|
||||||
create 1:n mappings between IPv6 and IPv4 hosts. The motivation for
|
create 1:n mappings between IPv6 and IPv4 hosts. The motivation for
|
||||||
stateful NAT64 is similar to stateful NAT44~\cite{rfc3022}: it allows
|
stateful NAT64 is similar to stateful NAT44~\cite{rfc3022}: while
|
||||||
translating many IPv6 addresses to one IPv4 address. While the
|
NAT44 allows translating many (private) IPv4 addresses to one
|
||||||
opposite translation is also technically possible, the differences in
|
(public) IPv4 address,
|
||||||
address space don't justify its use in general.
|
NAT64 allows translating many IPv6 addresses to one IPv4 address.
|
||||||
|
While the opposite stateful translation, mapping many IPv4 addresses
|
||||||
|
to one IPv6 address, is also technically possible,
|
||||||
|
the differences in address space size don't justify its use in general.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
0 1 2 3
|
||||||
0 1 2 3
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|Version| IHL |Type of Service| Total Length |
|
||||||
|Version| IHL |Type of Service| Total Length |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| Identification |Flags| Fragment Offset |
|
||||||
| Identification |Flags| Fragment Offset |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| Time to Live | Protocol | Header Checksum |
|
||||||
| Time to Live | Protocol | Header Checksum |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| Source Address |
|
||||||
| Source Address |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| Destination Address |
|
||||||
| Destination Address |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| Options | Padding |
|
||||||
| Options | Padding |
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
\caption{IPv4 Header~\cite{rfc791}}
|
\caption{IPv4 Header~\cite{rfc791}}
|
||||||
\label{fig:ipv4header}
|
\label{fig:ipv4header}
|
||||||
|
@ -238,17 +243,20 @@ Further translation can be achieved by using information in higher
|
||||||
level protocols like HTTP~\cite{rfc2616} or TLS~\cite{rfc4366}.
|
level protocols like HTTP~\cite{rfc2616} or TLS~\cite{rfc4366}.
|
||||||
Application proxies like
|
Application proxies like
|
||||||
nginx~\cite{nginx:_nginx_high_perfor_load_balan}
|
nginx~\cite{nginx:_nginx_high_perfor_load_balan}
|
||||||
use layer 7 protocol
|
use layer 7 protocol information, like the requested hostname,
|
||||||
information to proxy towards backends. Within this proxying method,
|
to proxy towards backends.
|
||||||
the underlying IP protocol can be changed from IPv6 to IPv4 and vice
|
|
||||||
versa. However, the requested hostname that is usually used for
|
Within this proxying method, the underlying IP protocol can be changed
|
||||||
selecting the backend is encrypted in TLS 1.3~\cite{rfc8446}, which
|
from IPv6 to IPv4 and vice versa. However, if using HTTPS with TLS
|
||||||
poses a challenge for implementations.
|
1.3~\cite{rfc8446}, the requested hostname that is usually used for
|
||||||
|
selecting the backend can be encrypted, which poses a challenge for
|
||||||
|
implementations.
|
||||||
|
|
||||||
While protocol dependent translation has the highest amount of
|
While protocol dependent translation has the highest amount of
|
||||||
information to choose from for translation, complex parsers or even
|
information to choose from for translation, complex parsers or even
|
||||||
cryptographic methods are required for it. That reduces the
|
cryptographic methods are required for it. That reduces the
|
||||||
opportunities of protocol dependent translation.
|
opportunities of protocol dependent translations to run on devices
|
||||||
|
with less sophisticated devices.
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\subsection{\label{background:transition:prefixnat}Mapping IPv4
|
\subsection{\label{background:transition:prefixnat}Mapping IPv4
|
||||||
Addresses in IPv6}
|
Addresses in IPv6}
|
||||||
|
@ -256,8 +264,9 @@ As described in section \ref{background:ip}, one of the major
|
||||||
differences between IPv6 and IPv4 is the address length. As the whole
|
differences between IPv6 and IPv4 is the address length. As the whole
|
||||||
IPv4 Internet can be represented in only 32 bits, it is a common
|
IPv4 Internet can be represented in only 32 bits, it is a common
|
||||||
practice to assign an IPv6 prefix for IPv6 hosts that represents a
|
practice to assign an IPv6 prefix for IPv6 hosts that represents a
|
||||||
mapping to the IPv4 Internet. In RFC6052~\cite{rfc6502} the well
|
mapping to the whole IPv4 Internet. In RFC6052~\cite{rfc6502} the well
|
||||||
known prefix \textit{64:ff9b::/96} is defined. One possibility to map
|
known prefix \textit{64:ff9b::/96} is defined that can be used for
|
||||||
|
this purpose. One possibility to map
|
||||||
an IPv4 address into the prefix is by adding its integer value to the
|
an IPv4 address into the prefix is by adding its integer value to the
|
||||||
prefix, treating it as an offset. In figure \ref{fig:ipv4embed}
|
prefix, treating it as an offset. In figure \ref{fig:ipv4embed}
|
||||||
we show example python code of how this can be done.
|
we show example python code of how this can be done.
|
||||||
|
@ -286,21 +295,21 @@ other prefix lengths are defined in RFC6052 (see figure
|
||||||
\ref{fig:prefixlen}) that allow flexible embedding of the IPv4 address.
|
\ref{fig:prefixlen}) that allow flexible embedding of the IPv4 address.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|PL| 0-------------32--40--48--56--64--72--80--88--96--104---------|
|
|PL| 0-------------32--40--48--56--64--72--80--88--96--104---------|
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|32| prefix |v4(32) | u | suffix |
|
|32| prefix |v4(32) | u | suffix |
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|40| prefix |v4(24) | u |(8)| suffix |
|
|40| prefix |v4(24) | u |(8)| suffix |
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|48| prefix |v4(16) | u | (16) | suffix |
|
|48| prefix |v4(16) | u | (16) | suffix |
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|56| prefix |(8)| u | v4(24) | suffix |
|
|56| prefix |(8)| u | v4(24) | suffix |
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|64| prefix | u | v4(32) | suffix |
|
|64| prefix | u | v4(32) | suffix |
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
|96| prefix | v4(32) |
|
|96| prefix | v4(32) |
|
||||||
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
+--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
\centering
|
\centering
|
||||||
\caption{IPv4 embedding depending on the prefix length}
|
\caption{IPv4 embedding depending on the prefix length}
|
||||||
|
@ -335,14 +344,16 @@ A record and gets an answer that the name
|
||||||
\textit{ipv4onlyhost.example.com} resolves to the IPv4 address
|
\textit{ipv4onlyhost.example.com} resolves to the IPv4 address
|
||||||
\textit{192.0.2.0}. The DNS64 server then embeds the IPv4 address in
|
\textit{192.0.2.0}. The DNS64 server then embeds the IPv4 address in
|
||||||
the configured IPv6 prefix (\textit{64:ff9b::/96} in this case) and
|
the configured IPv6 prefix (\textit{64:ff9b::/96} in this case) and
|
||||||
returns a fake AAAA record to the IPv6 only host. The IPv6 only host
|
returns a fake AAAA record to the IPv6 only host (pointing to
|
||||||
|
\textit{64:ff9b::c000:200} in this case). The IPv6 only host
|
||||||
then will use the address to connect to. The NAT64 translator recognises
|
then will use the address to connect to. The NAT64 translator recognises
|
||||||
either that the address is part of a configured prefix or that it has
|
either that the address is part of a configured prefix or that it has
|
||||||
a dedicated table entry for mapping this IPv6 address to an IPv4
|
a dedicated table entry for mapping this IPv6 address to an IPv4
|
||||||
address and translates it accordingly.
|
address and translates it accordingly.
|
||||||
|
% ok
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\section{\label{background:checksums}Protocol Checksums}
|
\section{\label{background:checksums}Protocol Checksums}
|
||||||
One challenge for translating IPv6-IPv4 are checksums of higher level
|
One challenge for translating IPv6 to IPv4 are checksums of higher level
|
||||||
protocols like TCP and UDP that incorporate information from the lower
|
protocols like TCP and UDP that incorporate information from the lower
|
||||||
level protocols. The pseudo header for upper layer protocols for
|
level protocols. The pseudo header for upper layer protocols for
|
||||||
IPv6 is defined in RFC2460~\cite{rfc2460} and shown in figure
|
IPv6 is defined in RFC2460~\cite{rfc2460} and shown in figure
|
||||||
|
@ -350,27 +361,27 @@ IPv6 is defined in RFC2460~\cite{rfc2460} and shown in figure
|
||||||
defined in RFC768 and RFC793 and are shown in \ref{fig:ipv4pseudoheader}.
|
defined in RFC768 and RFC793 and are shown in \ref{fig:ipv4pseudoheader}.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| |
|
| |
|
||||||
+ +
|
+ +
|
||||||
| |
|
| |
|
||||||
+ Source Address +
|
+ Source Address +
|
||||||
| |
|
| |
|
||||||
+ +
|
+ +
|
||||||
| |
|
| |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| |
|
| |
|
||||||
+ +
|
+ +
|
||||||
| |
|
| |
|
||||||
+ Destination Address +
|
+ Destination Address +
|
||||||
| |
|
| |
|
||||||
+ +
|
+ +
|
||||||
| |
|
| |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| Upper-Layer Packet Length |
|
| Upper-Layer Packet Length |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| zero | Next Header |
|
| zero | Next Header |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
\centering
|
\centering
|
||||||
\caption{IPv6 Pseudo Header}
|
\caption{IPv6 Pseudo Header}
|
||||||
|
@ -383,14 +394,14 @@ important because some targets (like the NetFPGA) do not allow to
|
||||||
access the payload (see section \ref{design:netpfga}).
|
access the payload (see section \ref{design:netpfga}).
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
0 7 8 15 16 23 24 31
|
0 7 8 15 16 23 24 31
|
||||||
+--------+--------+--------+--------+
|
+--------+--------+--------+--------+
|
||||||
| source address |
|
| source address |
|
||||||
+--------+--------+--------+--------+
|
+--------+--------+--------+--------+
|
||||||
| destination address |
|
| destination address |
|
||||||
+--------+--------+--------+--------+
|
+--------+--------+--------+--------+
|
||||||
| zero |protocol| TCP/UDP length |
|
| zero |protocol| TCP/UDP length |
|
||||||
+--------+--------+--------+--------+
|
+--------+--------+--------+--------+
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
\centering
|
\centering
|
||||||
\caption{IPv4 Pseudo Header}
|
\caption{IPv4 Pseudo Header}
|
||||||
|
|
|
@ -68,7 +68,7 @@ with legacy IPv4 devices still needs to be provided.
|
||||||
\end{figure}
|
\end{figure}
|
||||||
IPv6 hosts and IPv4 hosts cannot directly connect to each other,
|
IPv6 hosts and IPv4 hosts cannot directly connect to each other,
|
||||||
because the protocols are incompatible to each other.
|
because the protocols are incompatible to each other.
|
||||||
To allow communication between different protocol hosts,
|
To allow communication between different protocol host!s,
|
||||||
several transition mechanisms have been
|
several transition mechanisms have been
|
||||||
proposed~\cite{wikipedia:_ipv6},~\cite{rfc4213}.
|
proposed~\cite{wikipedia:_ipv6},~\cite{rfc4213}.
|
||||||
\begin{figure}[h]
|
\begin{figure}[h]
|
||||||
|
|
BIN
doc/Thesis.pdf
BIN
doc/Thesis.pdf
Binary file not shown.
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
|
|
||||||
\makeatletter
|
\makeatletter
|
||||||
\newcommand{\verbatimfont}[1]{\renewcommand{\verbatim@font}{\ttfamily#1}}
|
%\newcommand{\verbatimfont}[1]{\renewcommand{\verbatim@font}{\ttfamily#1}}
|
||||||
\makeatother
|
\makeatother
|
||||||
|
|
||||||
\input{preamble}
|
\input{preamble}
|
||||||
|
@ -17,7 +17,15 @@
|
||||||
|
|
||||||
%** begin the document environment
|
%** begin the document environment
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\verbatimfont{\tiny}%
|
%\verbatimfont{\tiny}%
|
||||||
|
%\renewcommand{\verbatim@font}{\normalfont\ttfamily\hyphenchar\font\m@ne\@noligs}
|
||||||
|
|
||||||
|
% \tiny\ttfamily}
|
||||||
|
|
||||||
|
\begin{tiny}
|
||||||
|
|
||||||
|
\end{tiny}
|
||||||
|
|
||||||
|
|
||||||
\frenchspacing
|
\frenchspacing
|
||||||
\sloppy
|
\sloppy
|
||||||
|
|
133
doc/appendix.tex
133
doc/appendix.tex
|
@ -49,11 +49,12 @@ After that the variable \texttt{P4\_PROJECT\_NAME} in
|
||||||
read \texttt{export P4\_PROJECT\_NAME=minip4}
|
read \texttt{export P4\_PROJECT\_NAME=minip4}
|
||||||
instead of \texttt{export P4\_PROJECT\_NAME=switch\_calc}.
|
instead of \texttt{export P4\_PROJECT\_NAME=switch\_calc}.
|
||||||
Sample code for installation:
|
Sample code for installation:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
mkdir -p ~/projects
|
mkdir -p ~/projects
|
||||||
git clone git@github.com:NetFPGA/P4-NetFPGA-live.git P4-NetFPGA
|
git clone git@github.com:NetFPGA/P4-NetFPGA-live.git P4-NetFPGA
|
||||||
sed -i 's/\(P4_PROJECT_NAME=\).*/\1minip4/' ~/projects/P4-NetFPGA/tools/settings.sh
|
sed -i 's/\(P4_PROJECT_NAME=\).*/\1minip4/' ~/projects/P4-NetFPGA/tools/settings.sh
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Version \textbf{v1.3.1-46-g97d3aaa} of the P4-NetPFGA repository was
|
Version \textbf{v1.3.1-46-g97d3aaa} of the P4-NetPFGA repository was
|
||||||
used for creating the bitfiles of this project.
|
used for creating the bitfiles of this project.
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
@ -87,7 +88,7 @@ First we get the integer values of the IPv4 addresses in python:
|
||||||
>>>
|
>>>
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
After that we set the table table entries for the NetFPGA.
|
After that we set the table table entries for the NetFPGA.
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
>> table_cam_add_entry realmain_v4_networks_0 realmain.set_egress_port 167772202 => 16 0 0 0 0
|
>> table_cam_add_entry realmain_v4_networks_0 realmain.set_egress_port 167772202 => 16 0 0 0 0
|
||||||
fields = [(u'hit', 1), (u'action_run', 3), (u'out_port', 8), (u'out_port', 8), (u'mac_addr', 48), (u'task', 16), (u'table_id', 16)]
|
fields = [(u'hit', 1), (u'action_run', 3), (u'out_port', 8), (u'out_port', 8), (u'mac_addr', 48), (u'task', 16), (u'table_id', 16)]
|
||||||
action_name = TopPipe.realmain.set_egress_port
|
action_name = TopPipe.realmain.set_egress_port
|
||||||
|
@ -120,16 +121,18 @@ READ 0x44020244 = 0x0001
|
||||||
success
|
success
|
||||||
>>
|
>>
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
On the host we setup the ARP entries:
|
On the host we setup the ARP entries:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
root@ESPRIMO-P956:~# ip neigh add 10.0.0.6 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
root@ESPRIMO-P956:~# ip neigh add 10.0.0.6 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
||||||
root@ESPRIMO-P956:~# ip neigh add 10.0.0.4 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
root@ESPRIMO-P956:~# ip neigh add 10.0.0.4 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
And then we generate test packets and expect 4 packets to show up on
|
And then we generate test packets and expect 4 packets to show up on
|
||||||
enp2s0f0.
|
enp2s0f0.
|
||||||
The following \texttt{tcpdump} output shows the expected packets
|
The following \texttt{tcpdump} output shows the expected packets
|
||||||
arriving on enp2s0f0:
|
arriving on enp2s0f0:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ sudo tcpdump -ni enp2s0f0
|
nico@ESPRIMO-P956:~$ sudo tcpdump -ni enp2s0f0
|
||||||
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
||||||
listening on enp2s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
|
listening on enp2s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
|
||||||
|
@ -138,6 +141,7 @@ listening on enp2s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
|
||||||
10:49:29.222340 IP 10.0.0.42 > 10.0.0.4: ICMP echo request, id 4440, seq 2, length 64
|
10:49:29.222340 IP 10.0.0.42 > 10.0.0.4: ICMP echo request, id 4440, seq 2, length 64
|
||||||
10:49:29.222418 IP 10.0.0.42 > 10.0.0.4: ICMP echo request, id 4440, seq 2, length 64
|
10:49:29.222418 IP 10.0.0.42 > 10.0.0.4: ICMP echo request, id 4440, seq 2, length 64
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
% ok
|
% ok
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\subsection{Test 2: IPv6 egress}
|
\subsection{Test 2: IPv6 egress}
|
||||||
|
@ -153,6 +157,7 @@ the Integer values of the IPv6 addresses:
|
||||||
42540766411362381960998550477184434242L
|
42540766411362381960998550477184434242L
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
After that we set the table entries:
|
After that we set the table entries:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
>> table_cam_add_entry realmain_v6_networks_0 realmain.set_egress_port 42540766411362381960998550477184434182 => 64 0 0 0 0
|
>> table_cam_add_entry realmain_v6_networks_0 realmain.set_egress_port 42540766411362381960998550477184434182 => 64 0 0 0 0
|
||||||
fields = [(u'hit', 1), (u'action_run', 3), (u'out_port', 8), (u'out_port', 8), (u'mac_addr', 48), (u'task', 16), (u'table_id', 16)]
|
fields = [(u'hit', 1), (u'action_run', 3), (u'out_port', 8), (u'out_port', 8), (u'mac_addr', 48), (u'task', 16), (u'table_id', 16)]
|
||||||
|
@ -192,13 +197,15 @@ READ 0x44020344 = 0x0001
|
||||||
success
|
success
|
||||||
>>
|
>>
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
On the host we set the IPv6 neighbor entries:
|
On the host we set the IPv6 neighbor entries:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ sudo ip -6 neigh add 2001:db8:42::6 lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
nico@ESPRIMO-P956:~$ sudo ip -6 neigh add 2001:db8:42::6 lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
||||||
nico@ESPRIMO-P956:~$ sudo ip -6 neigh add 2001:db8:42::4 lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
nico@ESPRIMO-P956:~$ sudo ip -6 neigh add 2001:db8:42::4 lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
And generate the test packets:
|
And generate the test packets:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:42::6
|
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:42::6
|
||||||
PING 2001:db8:42::6(2001:db8:42::6) 56 data bytes
|
PING 2001:db8:42::6(2001:db8:42::6) 56 data bytes
|
||||||
|
|
||||||
|
@ -211,6 +218,7 @@ listening on enp2s0f1, link-type EN10MB (Ethernet), capture size 262144 bytes
|
||||||
11:30:18.310178 IP6 2001:db8:42::42 > 2001:db8:42::6: ICMP6, echo request, seq 2, length 64
|
11:30:18.310178 IP6 2001:db8:42::42 > 2001:db8:42::6: ICMP6, echo request, seq 2, length 64
|
||||||
11:30:18.310258 IP6 2001:db8:42::42 > 2001:db8:42::6: ICMP6, echo request, seq 2, length 64
|
11:30:18.310258 IP6 2001:db8:42::42 > 2001:db8:42::6: ICMP6, echo request, seq 2, length 64
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
The packets are successfully seen by tcpdump.
|
The packets are successfully seen by tcpdump.
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\section{\label{appendix:bmv2}P4/BMV2 environment and tests}
|
\section{\label{appendix:bmv2}P4/BMV2 environment and tests}
|
||||||
|
@ -250,7 +258,7 @@ Sometimes flashing bitfiles to the NetFPGA will fail. A random amount
|
||||||
of reboots (1 to 3) and a random amount of reflashing will fix this
|
of reboots (1 to 3) and a random amount of reflashing will fix this
|
||||||
problem.
|
problem.
|
||||||
Below can be found the log output from the flashing process.
|
Below can be found the log output from the flashing process.
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/bitfiles$
|
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/bitfiles$
|
||||||
sudo bash -c ". $HOME/master-thesis/netpfga/bashinit && $(pwd -P)/program_switch.sh"
|
sudo bash -c ". $HOME/master-thesis/netpfga/bashinit && $(pwd -P)/program_switch.sh"
|
||||||
++ which vivado
|
++ which vivado
|
||||||
|
@ -296,6 +304,7 @@ nf3: ERROR while getting interface flags: No such device
|
||||||
+ bash config_writes.sh
|
+ bash config_writes.sh
|
||||||
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
% ok
|
% ok
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\section{\label{appendix:netpfgalogs:flashsuccess}NetFPGA Flash Success}
|
\section{\label{appendix:netpfgalogs:flashsuccess}NetFPGA Flash Success}
|
||||||
|
@ -305,7 +314,7 @@ its succeeding lines are missing, as seen below.
|
||||||
|
|
||||||
After that in all cases a reboot is required; the PCI rescan in none
|
After that in all cases a reboot is required; the PCI rescan in none
|
||||||
of our test cases re enabled the nf devices.
|
of our test cases re enabled the nf devices.
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@nsg-System:~$ cd $NF_DESIGN_DIR/bitfiles/
|
nico@nsg-System:~$ cd $NF_DESIGN_DIR/bitfiles/
|
||||||
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/bitfiles$
|
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/bitfiles$
|
||||||
sudo bash -c ". $HOME/master-thesis/netpfga/bashinit && $(pwd -P)/program_switch.sh"
|
sudo bash -c ". $HOME/master-thesis/netpfga/bashinit && $(pwd -P)/program_switch.sh"
|
||||||
|
@ -349,12 +358,13 @@ nf3: ERROR while getting interface flags: No such device
|
||||||
+ bash config_writes.sh
|
+ bash config_writes.sh
|
||||||
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/bitfiles$
|
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/bitfiles$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
% ok
|
% ok
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\section{\label{appendix:netfpgalogs:kernelmodule}NetFPGA Kernel module}
|
\section{\label{appendix:netfpgalogs:kernelmodule}NetFPGA Kernel module}
|
||||||
After a successful flash, loading the kernel module will enable nf
|
After a successful flash, loading the kernel module will enable nf
|
||||||
devices to appear in the operating system.
|
devices to appear in the operating system.
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@nsg-System:~$ ip l
|
nico@nsg-System:~$ ip l
|
||||||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
|
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
|
||||||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
||||||
|
@ -420,13 +430,14 @@ nico@nsg-System:~$ ip l
|
||||||
nico@nsg-System:~$
|
nico@nsg-System:~$
|
||||||
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
\section{\label{appendix:netfpgalogs:compilelogs}NetFPGA compile logs}
|
\section{\label{appendix:netfpgalogs:compilelogs}NetFPGA compile logs}
|
||||||
% ----------------------------------------------------------------------
|
% ----------------------------------------------------------------------
|
||||||
This section shows a compilation of of NetFPGA compile output and errors.
|
This section shows a compilation of of NetFPGA compile output and errors.
|
||||||
|
|
||||||
Unfound tbl files that are not correctly generated fail the compilation:
|
Unfound tbl files that are not correctly generated fail the compilation:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
# Fix introduced for SDNet 2017.4
|
# Fix introduced for SDNet 2017.4
|
||||||
sed -i 's/xsim\.dir\/xsc\/dpi\.so/dpi\.so/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim.bash
|
sed -i 's/xsim\.dir\/xsc\/dpi\.so/dpi\.so/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim.bash
|
||||||
sed -i 's/xsim\.dir\/xsc\/dpi\.so/dpi\.so/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim_waveform.bash
|
sed -i 's/xsim\.dir\/xsc\/dpi\.so/dpi\.so/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim_waveform.bash
|
||||||
|
@ -438,13 +449,15 @@ cp: cannot stat 'src/*.tbl': No such file or directory
|
||||||
make: *** [Makefile:23: cpp_test] Error 1
|
make: *** [Makefile:23: cpp_test] Error 1
|
||||||
[23:12] loch:minip4%
|
[23:12] loch:minip4%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Failure to generate an intermediate file:
|
Failure to generate an intermediate file:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
ERROR: [XSIM 43-3409] Failed to compile generated C file xsim.dir/work.SimpleSumeSwitch_tb#work.glbl/obj/xsim_3.c.
|
ERROR: [XSIM 43-3409] Failed to compile generated C file xsim.dir/work.SimpleSumeSwitch_tb#work.glbl/obj/xsim_3.c.
|
||||||
ERROR: [XSIM 43-3915] Encountered a fatal error. Cannot continue. Exiting...
|
ERROR: [XSIM 43-3915] Encountered a fatal error. Cannot continue. Exiting...
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Failure to compile because libncurses.so.5 is missing:
|
Failure to compile because libncurses.so.5 is missing:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
/opt/Xilinx/Vivado/2018.2/data/../tps/llvm/3.1/lnx64.o/bin/clang -fPIC -c -std=gnu89 -nobuiltininc -nostdinc++ -w -Wl,--unres
|
/opt/Xilinx/Vivado/2018.2/data/../tps/llvm/3.1/lnx64.o/bin/clang -fPIC -c -std=gnu89 -nobuiltininc -nostdinc++ -w -Wl,--unres
|
||||||
olved-symbols=ignore-in-object-files -fbracket-depth=1048576 -I/opt/Xilinx/Vivado/2018.2/data/../tps/llvm/3.1/lnx64.o/bin/../li
|
olved-symbols=ignore-in-object-files -fbracket-depth=1048576 -I/opt/Xilinx/Vivado/2018.2/data/../tps/llvm/3.1/lnx64.o/bin/../li
|
||||||
b/clang/3.1/include -fPIC -m64 -I"/opt/Xilinx/Vivado/2018.2/data/xsim/include" "xsim.dir/work.SimpleSumeSwitch_tb#work.glbl/ob
|
b/clang/3.1/include -fPIC -m64 -I"/opt/Xilinx/Vivado/2018.2/data/xsim/include" "xsim.dir/work.SimpleSumeSwitch_tb#work.glbl/ob
|
||||||
|
@ -455,9 +468,10 @@ ERROR: [XSIM 43-3409] Failed to compile generated C file xsim.dir/work.SimpleSum
|
||||||
ERROR: [XSIM 43-3915] Encountered a fatal error. Cannot continue. Exiting...
|
ERROR: [XSIM 43-3915] Encountered a fatal error. Cannot continue. Exiting...
|
||||||
[20:00] rainbow:SimpleSumeSwitch%
|
[20:00] rainbow:SimpleSumeSwitch%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Failure to access txt files that were not correctly generated in a
|
Failure to access txt files that were not correctly generated in a
|
||||||
different compilation step:
|
different compilation step:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
# Fix introduced for SDNet 2018.2
|
# Fix introduced for SDNet 2018.2
|
||||||
sed -i 's/glbl_sim/glbl/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim_waveform.bash
|
sed -i 's/glbl_sim/glbl/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim_waveform.bash
|
||||||
sed -i 's/SimpleSumeSwitch_tb_sim#work.glbl/SimpleSumeSwitch_tb/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim_waveform.bash
|
sed -i 's/SimpleSumeSwitch_tb_sim#work.glbl/SimpleSumeSwitch_tb/g' nf_sume_sdnet_ip/SimpleSumeSwitch/vivado_sim_waveform.bash
|
||||||
|
@ -467,8 +481,9 @@ cp: cannot stat 'testdata/*.txt': No such file or directory
|
||||||
make: *** [Makefile:17: all] Error 1
|
make: *** [Makefile:17: all] Error 1
|
||||||
[15:46] rainbow:minip4%
|
[15:46] rainbow:minip4%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Missing pcap files of non generated testdata causing compile abortion:
|
Missing pcap files of non generated testdata causing compile abortion:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
make -C testdata/
|
make -C testdata/
|
||||||
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/testdata'
|
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/testdata'
|
||||||
./gen_testdata.py
|
./gen_testdata.py
|
||||||
|
@ -490,7 +505,9 @@ make[1]: Leaving directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume
|
||||||
make: *** [Makefile:32: frontend] Error 2
|
make: *** [Makefile:32: frontend] Error 2
|
||||||
[15:47] rainbow:minip4%
|
[15:47] rainbow:minip4%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Syntax errors due to incorrect generation of a python script:
|
Syntax errors due to incorrect generation of a python script:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
update_compile_order: Time (s): cpu = 00:00:17 ; elapsed = 00:00:09 . Memory (MB): peak = 1995.594 ; gain = 0.016 ; free physic
|
update_compile_order: Time (s): cpu = 00:00:17 ; elapsed = 00:00:09 . Memory (MB): peak = 1995.594 ; gain = 0.016 ; free physic
|
||||||
al = 21975 ; free virtual = 33161
|
al = 21975 ; free virtual = 33161
|
||||||
|
@ -512,8 +529,9 @@ IndentationError: expected an indented block
|
||||||
ume_switch_sim.tcl" line 177)
|
ume_switch_sim.tcl" line 177)
|
||||||
INFO: [Common 17-206] Exiting Vivado at Sat May 18 15:21:21 2019...
|
INFO: [Common 17-206] Exiting Vivado at Sat May 18 15:21:21 2019...
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Missing axi files don't abort the compilation process: (shortened for formatting)
|
Missing axi files don't abort the compilation process: (shortened for formatting)
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
cp: cannot stat 'simple_sume_switch/test/nf_interface_0_log.axi': No such file or directory
|
cp: cannot stat 'simple_sume_switch/test/nf_interface_0_log.axi': No such file or directory
|
||||||
cp: cannot stat 'simple_sume_switch/test/nf_interface_0_stim.axi': No such file or directory
|
cp: cannot stat 'simple_sume_switch/test/nf_interface_0_stim.axi': No such file or directory
|
||||||
cp: cannot stat 'simple_sume_switch/test/nf_interface_0_expected.axi': No such file or directory
|
cp: cannot stat 'simple_sume_switch/test/nf_interface_0_expected.axi': No such file or directory
|
||||||
|
@ -536,8 +554,9 @@ cp: cannot stat 'simple_sume_switch/test/reg_stim.axi': No such file or director
|
||||||
['/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default/run.py',
|
['/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default/run.py',
|
||||||
'--sim', 'xsim']
|
'--sim', 'xsim']
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Add Wave error during compilation: (shortened for formatting)
|
Add Wave error during compilation: (shortened for formatting)
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
# add_wave $nf_sume_sdnet_ip/out_src_port
|
# add_wave $nf_sume_sdnet_ip/out_src_port
|
||||||
# add_wave $nf_sume_sdnet_ip/out_dst_port
|
# add_wave $nf_sume_sdnet_ip/out_dst_port
|
||||||
# set const_reg_ip /top_tb/top_sim/nf_datapath_0/nf_sume_sdnet_wrapper_1/inst/SimpleSumeSwitch_inst/const_reg_rw_0/
|
# set const_reg_ip /top_tb/top_sim/nf_datapath_0/nf_sume_sdnet_wrapper_1/inst/SimpleSumeSwitch_inst/const_reg_rw_0/
|
||||||
|
@ -565,8 +584,9 @@ cp: cannot stat 'simple_sume_switch/test/dma_0_log.axi': No such file or directo
|
||||||
using cmd ['/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default/run.py', '--sim', 'xsim']
|
using cmd ['/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default/run.py', '--sim', 'xsim']
|
||||||
[15:31] rainbow:P4-NetFPGA%
|
[15:31] rainbow:P4-NetFPGA%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Compilation error failing to run ``connect\_bd\_intf\_net.''
|
Compilation error failing to run ``connect\_bd\_intf\_net.''
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
ERROR: [BD 41-171] The modes of the interface pins 'cfg_interrupt'(Slave) and 'pcie3_cfg_interrupt'(Slave) are incompatible. They cannot be connected.
|
ERROR: [BD 41-171] The modes of the interface pins 'cfg_interrupt'(Slave) and 'pcie3_cfg_interrupt'(Slave) are incompatible. They cannot be connected.
|
||||||
ERROR: [BD 5-3] Error: running connect_bd_intf_net.
|
ERROR: [BD 5-3] Error: running connect_bd_intf_net.
|
||||||
ERROR: [Common 17-39] 'connect_bd_intf_net' failed due to earlier errors.
|
ERROR: [Common 17-39] 'connect_bd_intf_net' failed due to earlier errors.
|
||||||
|
@ -585,8 +605,9 @@ ERROR: [Common 17-39] 'connect_bd_intf_net' failed due to earlier errors.
|
||||||
"source ./tcl/control_sub.tcl"
|
"source ./tcl/control_sub.tcl"
|
||||||
(file "tcl/simple_sume_switch.tcl" line 89)
|
(file "tcl/simple_sume_switch.tcl" line 89)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Compilation aborts due to missing IP:
|
Compilation aborts due to missing IP:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
### set NF_10G_INTERFACE3_BASEADDR $M07_BASEADDR
|
### set NF_10G_INTERFACE3_BASEADDR $M07_BASEADDR
|
||||||
### set NF_10G_INTERFACE3_HIGHADDR $M07_HIGHADDR
|
### set NF_10G_INTERFACE3_HIGHADDR $M07_HIGHADDR
|
||||||
### set NF_10G_INTERFACE3_SIZEADDR $M07_SIZEADDR
|
### set NF_10G_INTERFACE3_SIZEADDR $M07_SIZEADDR
|
||||||
|
@ -600,8 +621,9 @@ hw/project/simple_sume_switch.srcs/sources_1/bd/control_sub/control_sub.bd>
|
||||||
ERROR: [Coretcl 2-1134] No IP matching VLNV 'NetFPGA:NetFPGA:nf_sume_sdnet:*' was found. Please check your repository configuration.
|
ERROR: [Coretcl 2-1134] No IP matching VLNV 'NetFPGA:NetFPGA:nf_sume_sdnet:*' was found. Please check your repository configuration.
|
||||||
INFO: [Common 17-206] Exiting Vivado at Sat May 25 11:52:01 2019...
|
INFO: [Common 17-206] Exiting Vivado at Sat May 25 11:52:01 2019...
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Mismatch: a non-critical critical error that does not abort the compilation process
|
Mismatch: a non-critical critical error that does not abort the compilation process
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
[SW] CAM_EnableDevice() - done
|
[SW] CAM_EnableDevice() - done
|
||||||
[2420698] INFO: finished packet stimulus file
|
[2420698] INFO: finished packet stimulus file
|
||||||
[2735572] ERROR: tuple mismatch for packet 1
|
[2735572] ERROR: tuple mismatch for packet 1
|
||||||
|
@ -611,8 +633,9 @@ $finish called at time : 2735572 ps : File
|
||||||
"/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/Testbench/Check.v"
|
"/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/Testbench/Check.v"
|
||||||
Line 120
|
Line 120
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Missing interface when testing switch\_calc:
|
Missing interface when testing switch\_calc:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
root@rainbow:~/master-thesis/netpfga/minip4/sw/hw_test_tool# python switch_calc_tester.py
|
root@rainbow:~/master-thesis/netpfga/minip4/sw/hw_test_tool# python switch_calc_tester.py
|
||||||
SIOCSIFADDR: No such device
|
SIOCSIFADDR: No such device
|
||||||
eth1: ERROR while getting interface flags: No such device
|
eth1: ERROR while getting interface flags: No such device
|
||||||
|
@ -623,6 +646,7 @@ The HW testing tool for the switch_calc design
|
||||||
type help to see all commands
|
type help to see all commands
|
||||||
testing>
|
testing>
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Ioctl error when adding table errors on the first NetFPGA card:
|
Ioctl error when adding table errors on the first NetFPGA card:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
>> table_cam_add_entry lookup_table send_to_port1 ff:ff:ff:ff:ff:ff =>
|
>> table_cam_add_entry lookup_table send_to_port1 ff:ff:ff:ff:ff:ff =>
|
||||||
|
@ -634,7 +658,7 @@ python: ioctl: Unknown error 512
|
||||||
[20:27] rainbow:CLI%
|
[20:27] rainbow:CLI%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
Exec format errors when loading the kernel module due to incompabilities:
|
Exec format errors when loading the kernel module due to incompabilities:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
[7:05] rainbow:netpfga% bash build-load-drivers.sh
|
[7:05] rainbow:netpfga% bash build-load-drivers.sh
|
||||||
+ cd /home/nico/projects/P4-NetFPGA/lib/sw/std/driver/sume_riffa_v1_0_0
|
+ cd /home/nico/projects/P4-NetFPGA/lib/sw/std/driver/sume_riffa_v1_0_0
|
||||||
+ make all
|
+ make all
|
||||||
|
@ -656,8 +680,10 @@ depmod -a 5.0.0-16-generic
|
||||||
modprobe: ERROR: could not insert 'sume_riffa': Exec format error
|
modprobe: ERROR: could not insert 'sume_riffa': Exec format error
|
||||||
[7:06] rainbow:netpfga%
|
[7:06] rainbow:netpfga%
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Java traceback when trying to install SDNET:
|
Java traceback when trying to install SDNET:
|
||||||
(reason was a hidden window)
|
(reason was a hidden window)
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Window must not be zero
|
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Window must not be zero
|
||||||
at java.desktop/sun.awt.X11.XAtom.checkWindow(Unknown Source)
|
at java.desktop/sun.awt.X11.XAtom.checkWindow(Unknown Source)
|
||||||
|
@ -719,8 +745,9 @@ Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Windo
|
||||||
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
|
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
|
||||||
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
|
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Failures when testing the first NetFPGA card
|
Failures when testing the first NetFPGA card
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
[ddr3B]: Running Auto Test
|
[ddr3B]: Running Auto Test
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
@ -752,7 +779,9 @@ Traceback (most recent call last):
|
||||||
raise child_exception
|
raise child_exception
|
||||||
OSError: [Errno 2] No such file or directory
|
OSError: [Errno 2] No such file or directory
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
More failures when testing the first NetFPGA card
|
More failures when testing the first NetFPGA card
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
[pcie]: Running Auto Test
|
[pcie]: Running Auto Test
|
||||||
|
@ -777,6 +806,7 @@ Traceback (most recent call last):
|
||||||
raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
|
raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
|
||||||
SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
|
SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Unexpected EOF during compilation:
|
Unexpected EOF during compilation:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
ERROR: [VRFC 10-1491] unexpected EOF
|
ERROR: [VRFC 10-1491] unexpected EOF
|
||||||
|
@ -791,6 +821,7 @@ INFO: [VRFC 10-311] analyzing module TopDeparser_t_EngineStage_5_ErrorCheck
|
||||||
INFO: [VRFC 10-311] analyzing module TopDeparser_t_EngineStage_6_ErrorCheck
|
INFO: [VRFC 10-311] analyzing module TopDeparser_t_EngineStage_6_ErrorCheck
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
The function syntax is not supported by p4/netfpga:
|
The function syntax is not supported by p4/netfpga:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
||||||
p4c-sdnet -o minip4.sdnet --sdnet_info .sdnet_switch_info.dat minip4_solution.p4
|
p4c-sdnet -o minip4.sdnet --sdnet_info .sdnet_switch_info.dat minip4_solution.p4
|
||||||
|
@ -805,9 +836,10 @@ Makefile:31: recipe for target 'frontend' failed
|
||||||
make: *** [frontend] Error 2
|
make: *** [frontend] Error 2
|
||||||
nico@nsg-System:~/master-thesis/netpfga$
|
nico@nsg-System:~/master-thesis/netpfga$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
The config\_writes.py is missing due to a previous, non critical
|
The config\_writes.py is missing due to a previous, non critical
|
||||||
compilation error:
|
compilation error:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default$
|
nico@nsg-System:~/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default$
|
||||||
cd $NF_DESIGN_DIR/test/sim_switch_default && make 2>&1 | tee ~/master-thesis/netpfga/log/step8-$(date +%F-%H%M%S)
|
cd $NF_DESIGN_DIR/test/sim_switch_default && make 2>&1 | tee ~/master-thesis/netpfga/log/step8-$(date +%F-%H%M%S)
|
||||||
rm -f config_writes.py*
|
rm -f config_writes.py*
|
||||||
|
@ -817,8 +849,9 @@ cp: cannot stat '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-swit
|
||||||
Makefile:36: recipe for target 'all' failed
|
Makefile:36: recipe for target 'all' failed
|
||||||
make: *** [all] Error 1
|
make: *** [all] Error 1
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Failed to synthesizing module errors:
|
Failed to synthesizing module errors:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
WARNING: [Synth 8-689] width (12) of port connection 'control_S_AXI_ARADDR' does not match port width (8) of module 'SimpleSumeSwitch'
|
WARNING: [Synth 8-689] width (12) of port connection 'control_S_AXI_ARADDR' does not match port width (8) of module 'SimpleSumeSwitch'
|
||||||
[/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/hw/project/
|
[/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/hw/project/
|
||||||
simple_sume_switch.srcs/sources_1/ip/nf_sume_sdnet_ip/nf_sume_sdnet_ip/wrapper/nf_sume_sdnet.v:199]
|
simple_sume_switch.srcs/sources_1/ip/nf_sume_sdnet_ip/nf_sume_sdnet_ip/wrapper/nf_sume_sdnet.v:199]
|
||||||
|
@ -841,8 +874,9 @@ ERROR: [Synth 8-6156] failed synthesizing module 'top'
|
||||||
[/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/
|
[/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/
|
||||||
simple_sume_switch/hw/hdl/top.v:43]
|
simple_sume_switch/hw/hdl/top.v:43]
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Missing ``souce'' files abort CLI compilation errors:
|
Missing ``souce'' files abort CLI compilation errors:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
cc -c -fPIC /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/sw/API/CAM.c
|
cc -c -fPIC /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/sw/API/CAM.c
|
||||||
-I/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/sw/API
|
-I/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/sw/API
|
||||||
cc -std=c99 -Wall -Werror -fPIC -c libcam.c
|
cc -std=c99 -Wall -Werror -fPIC -c libcam.c
|
||||||
|
@ -857,7 +891,9 @@ make[1]: *** [libcam] Error 1
|
||||||
make[1]: Leaving directory '/home/nico/master-thesis/netpfga/minip4/sw/CLI'
|
make[1]: Leaving directory '/home/nico/master-thesis/netpfga/minip4/sw/CLI'
|
||||||
ERROR: could not compile libcam souce files
|
ERROR: could not compile libcam souce files
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Generated axi files not found at a different stage:
|
Generated axi files not found at a different stage:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
cp: cannot stat '/home/nico/projects/P4-NetFPGA/contrib-projects/
|
cp: cannot stat '/home/nico/projects/P4-NetFPGA/contrib-projects/
|
||||||
sume-sdnet-switch/projects/minip4/simple_sume_switch/test/dma_0_expected.axi': No such file or directory
|
sume-sdnet-switch/projects/minip4/simple_sume_switch/test/dma_0_expected.axi': No such file or directory
|
||||||
|
@ -877,14 +913,16 @@ NetFPGA environment:
|
||||||
512
|
512
|
||||||
=== Work directory is /tmp/nico/test/simple_sume_switch
|
=== Work directory is /tmp/nico/test/simple_sume_switch
|
||||||
=== Setting up test in /tmp/nico/test/simple_sume_switch/sim_switch_default
|
=== Setting up test in /tmp/nico/test/simple_sume_switch/sim_switch_default
|
||||||
=== Running test /tmp/nico/test/simple_sume_switch/sim_switch_default ... using cmd ['/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch/test/sim_switch_default/run.py', '--sim', 'xsim']
|
=== Running test /tmp/nico/test/simple_sume_switch/sim_switch_default ... using
|
||||||
+ date
|
cmd ['/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/
|
||||||
|
minip4/simple_sume_switch/test/sim_switch_default/run.py', '--sim', 'xsim']+ date
|
||||||
Die Jul 23 13:34:54 CEST 2019
|
Die Jul 23 13:34:54 CEST 2019
|
||||||
+ [ = no ]
|
+ [ = no ]
|
||||||
+ cd /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch
|
+ cd /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/simple_sume_switch
|
||||||
+ make
|
+ make
|
||||||
make: *** No targets specified and no makefile found. Stop.
|
make: *** No targets specified and no makefile found. Stop.
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Renaming variables as follows breaks the compile process
|
Renaming variables as follows breaks the compile process
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@Xilinx_MaxPacketRegion(1024)
|
@Xilinx_MaxPacketRegion(1024)
|
||||||
|
@ -906,6 +944,7 @@ Renaming variables as follows breaks the compile process
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
In NetPFGA the LPM table size must be != 64:
|
In NetPFGA the LPM table size must be != 64:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
minip4_solution.p4(38): [--Wwarn=uninitialized_out_param] warning: out parameter meta may be uninitialized when RealParser terminates
|
minip4_solution.p4(38): [--Wwarn=uninitialized_out_param] warning: out parameter meta may be uninitialized when RealParser terminates
|
||||||
out metadata meta,
|
out metadata meta,
|
||||||
|
@ -932,8 +971,9 @@ Makefile:31: recipe for target 'frontend' failed
|
||||||
make: *** [frontend] Error 2
|
make: *** [frontend] Error 2
|
||||||
nico@nsg-System:~/master-thesis/netpfga/log$
|
nico@nsg-System:~/master-thesis/netpfga/log$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Cannot mix the key table types with P4/NetFPGA:
|
Cannot mix the key table types with P4/NetFPGA:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
||||||
p4c-sdnet -o minip4.sdnet --sdnet_info .sdnet_switch_info.dat minip4_solution.p4
|
p4c-sdnet -o minip4.sdnet --sdnet_info .sdnet_switch_info.dat minip4_solution.p4
|
||||||
actions_egress.p4(52): warning: Table v6_networks is not used; removing
|
actions_egress.p4(52): warning: Table v6_networks is not used; removing
|
||||||
|
@ -973,8 +1013,9 @@ make[1]: *** [all] Error 1
|
||||||
default_action = controller_debug_table_id(TABLE_ARP);
|
default_action = controller_debug_table_id(TABLE_ARP);
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Implicit error saying that LPM tables don't work in P4/NetFPGA:
|
Implicit error saying that LPM tables don't work in P4/NetFPGA:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
s/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/realmain_lookup_table_0_t.HDL/xpm_memory.sv
|
s/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/realmain_lookup_table_0_t.HDL/xpm_memory.sv
|
||||||
[SW] LPM_Init() - start
|
[SW] LPM_Init() - start
|
||||||
[SW] LPM_Init() - done
|
[SW] LPM_Init() - done
|
||||||
|
@ -984,8 +1025,9 @@ FATAL_ERROR: Vivado Simulator kernel has encounted an exception from DPI C funct
|
||||||
Time: 2016466 ps Iteration: 0 Process: /SimpleSumeSwitch_tb/LPM_VerifyDataset
|
Time: 2016466 ps Iteration: 0 Process: /SimpleSumeSwitch_tb/LPM_VerifyDataset
|
||||||
File: /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/Testbench/SimpleSumeSwitch_tb.sv
|
File: /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/Testbench/SimpleSumeSwitch_tb.sv
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
The table for exact matches must be at least 64 in P4/NetFPGA:
|
The table for exact matches must be at least 64 in P4/NetFPGA:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
minip4_solution.p4(35)
|
minip4_solution.p4(35)
|
||||||
parser RealParser(
|
parser RealParser(
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
@ -996,8 +1038,9 @@ actions_nat64_generic.p4(173): error: could not not map table size size
|
||||||
size = 63;
|
size = 63;
|
||||||
^^^^
|
^^^^
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Unsupported default parameters in P4/NetFPGA:
|
Unsupported default parameters in P4/NetFPGA:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
actions_egress.p4(89): error: data-plane arguments in default_actions are currently unsupported: realmain_controller_debug_table_id_0
|
actions_egress.p4(89): error: data-plane arguments in default_actions are currently unsupported: realmain_controller_debug_table_id_0
|
||||||
default_action = controller_debug_table_id(TABLE_V4_NETWORKS);
|
default_action = controller_debug_table_id(TABLE_V4_NETWORKS);
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -1007,8 +1050,9 @@ Compiler Bug: actions_egress.p4(89): unhandled expression realmain_controller_de
|
||||||
default_action = controller_debug_table_id(TABLE_V4_NETWORKS);
|
default_action = controller_debug_table_id(TABLE_V4_NETWORKS);
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Causing compiler bug by using an if statement at a wrong place in P4/NetFPGA:
|
Causing compiler bug by using an if statement at a wrong place in P4/NetFPGA:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
minip4_solution.p4(39)
|
minip4_solution.p4(39)
|
||||||
parser RealParser(
|
parser RealParser(
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
@ -1021,8 +1065,10 @@ make[1]: *** [all] Error 134
|
||||||
make[1]: Leaving directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
make[1]: Leaving directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
||||||
Makefile:31: recipe for target 'frontend' failed
|
Makefile:31: recipe for target 'frontend' failed
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Applying table ``twice'' in different branches is impossible in
|
Applying table ``twice'' in different branches is impossible in
|
||||||
P4/NetFPGA causes a different compiler bug:
|
P4/NetFPGA causes a different compiler bug:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
make -C src/
|
make -C src/
|
||||||
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src'
|
||||||
|
@ -1039,20 +1085,26 @@ Compiler Bug: overwrite
|
||||||
|
|
||||||
Makefile:34: recipe for target 'all' failed
|
Makefile:34: recipe for target 'all' failed
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Adding table entries requires setting parameters for all possible
|
Adding table entries requires setting parameters for all possible
|
||||||
actions that are registered in a table:
|
actions that are registered in a table:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
>> table_cam_add_entry realmain_v6_networks_0 realmain.set_egress_port
|
>> table_cam_add_entry realmain_v6_networks_0 realmain.set_egress_port
|
||||||
42540766411362381960998550477184434178 => 1 ERROR: not enough fields provided to complete _hexify()
|
42540766411362381960998550477184434178 => 1 ERROR: not enough fields provided to complete _hexify()
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
The table handling scripts do not handle conversion for long integers
|
The table handling scripts do not handle conversion for long integers
|
||||||
for P4/NetFPGA:
|
for P4/NetFPGA:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
>> table_cam_delete_entry realmain_v6_networks_0 42540766411362381960998550477184434179
|
>> table_cam_delete_entry realmain_v6_networks_0 42540766411362381960998550477184434179
|
||||||
ERROR: failed to convert 42540766411362381960998550477184434179 of type <type 'long'> to an integer
|
ERROR: failed to convert 42540766411362381960998550477184434179 of type <type 'long'> to an integer
|
||||||
nico@nsg-System:~/master-thesis/netpfga/minip4/sw/CLI$
|
nico@nsg-System:~/master-thesis/netpfga/minip4/sw/CLI$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
A P4/BMV2 compiler error:
|
A P4/BMV2 compiler error:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
Warning: you requested the nanomsg event logger, but bmv2 was compiled without -DBMELOG, and the event logger cannot be activated
|
Warning: you requested the nanomsg event logger, but bmv2 was compiled without -DBMELOG, and the event logger cannot be activated
|
||||||
Calling target program-options parser
|
Calling target program-options parser
|
||||||
|
@ -1083,6 +1135,7 @@ bad json:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
|
|
||||||
Inability of P4/BMV2 to have multiple LPM keys in a table:
|
Inability of P4/BMV2 to have multiple LPM keys in a table:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
@ -1106,12 +1159,15 @@ Compilation Error
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
Switch statements are not allowed in P4/BMV:
|
Switch statements are not allowed in P4/BMV:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
../p4src/static-mapping.p4(60): error: SwitchStatement: switch statements not allowed in actions
|
../p4src/static-mapping.p4(60): error: SwitchStatement: switch statements not allowed in actions
|
||||||
switch(hdr.icmp6.type) {
|
switch(hdr.icmp6.type) {
|
||||||
^^^^^^
|
^^^^^^
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
And also no ifs in actions:
|
And also no ifs in actions:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
../p4src/static-mapping.p4(57): error: MethodCallStatement: Conditional execution in actions is not supported on this target
|
../p4src/static-mapping.p4(57): error: MethodCallStatement: Conditional execution in actions is not supported on this target
|
||||||
hdr.icmp.setValid();
|
hdr.icmp.setValid();
|
||||||
|
@ -1132,7 +1188,9 @@ p4@ubuntu:~/master-thesis/p4app$
|
||||||
nat64_icmp6();
|
nat64_icmp6();
|
||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Compiler bug in P4/BMV2:
|
Compiler bug in P4/BMV2:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
p4c --target bmv2 --arch v1model --std p4-16 "../p4src/checksum_diff.p4" -o "/home/p4/master-thesis/p4src"
|
p4c --target bmv2 --arch v1model --std p4-16 "../p4src/checksum_diff.p4" -o "/home/p4/master-thesis/p4src"
|
||||||
In file: /home/p4/p4-tools/p4c/backends/bmv2/common/expression.cpp:168
|
In file: /home/p4/p4-tools/p4c/backends/bmv2/common/expression.cpp:168
|
||||||
|
@ -1157,6 +1215,7 @@ And p4c version:
|
||||||
```p4@ubuntu:~/master-thesis/p4app$ p4c --version
|
```p4@ubuntu:~/master-thesis/p4app$ p4c --version
|
||||||
p4c 0.5 (SHA: 5ae30ee)```
|
p4c 0.5 (SHA: 5ae30ee)```
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
|
|
||||||
%----------------------------------------------------------------------
|
%----------------------------------------------------------------------
|
||||||
\chapter{\label{benchmark}Benchmark Logs}
|
\chapter{\label{benchmark}Benchmark Logs}
|
||||||
|
@ -1273,7 +1332,7 @@ rtt min/avg/max/mdev = 0.097/0.200/0.304/0.104 ms
|
||||||
[15:12] nsg-System:~#
|
[15:12] nsg-System:~#
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
We also setup the IPv6 networking:
|
We also setup the IPv6 networking:
|
||||||
\begin{verbatim}
|
\begin{tiny}\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ ip addr show dev enp2s0f1
|
nico@ESPRIMO-P956:~$ ip addr show dev enp2s0f1
|
||||||
13: enp2s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
|
13: enp2s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
|
||||||
link/ether f8:f2:1e:09:62:d1 brd ff:ff:ff:ff:ff:ff
|
link/ether f8:f2:1e:09:62:d1 brd ff:ff:ff:ff:ff:ff
|
||||||
|
@ -1286,6 +1345,7 @@ nico@ESPRIMO-P956:~$ sudo ip route add 2001:db8:23::/96 via 2001:db8:42::77
|
||||||
[15:12] nsg-System:~# ip addr add 2001:db8:42::77/64 dev eth2
|
[15:12] nsg-System:~# ip addr add 2001:db8:42::77/64 dev eth2
|
||||||
[15:15] nsg-System:~# ip link set eth2 up
|
[15:15] nsg-System:~# ip link set eth2 up
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
And verify that IPv6 networking works:
|
And verify that IPv6 networking works:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:42::77
|
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:42::77
|
||||||
|
@ -1307,6 +1367,7 @@ net.ipv6.conf.all.forwarding = 1
|
||||||
net.ipv4.ip_forward = 1
|
net.ipv4.ip_forward = 1
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
And we test NAT64 with tayga:
|
And we test NAT64 with tayga:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ ping -c2 10.0.1.42
|
nico@ESPRIMO-P956:~$ ping -c2 10.0.1.42
|
||||||
PING 10.0.1.42 (10.0.1.42) 56(84) bytes of data.
|
PING 10.0.1.42 (10.0.1.42) 56(84) bytes of data.
|
||||||
|
@ -1331,6 +1392,8 @@ listening on enp2s0f1, link-type EN10MB (Ethernet), capture size 262144 bytes
|
||||||
0 packets dropped by kernel
|
0 packets dropped by kernel
|
||||||
nico@ESPRIMO-P956:~$
|
nico@ESPRIMO-P956:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
|
|
||||||
And test NAT64 from IPv6 to IPv4:
|
And test NAT64 from IPv6 to IPv4:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:23::a00:2a
|
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:23::a00:2a
|
||||||
|
@ -1347,6 +1410,7 @@ nico@ESPRIMO-P956:~$
|
||||||
\section{\label{benchmark:jool}Jool}
|
\section{\label{benchmark:jool}Jool}
|
||||||
We install Jool 4.0.1 from source from
|
We install Jool 4.0.1 from source from
|
||||||
\url{https://www.jool.mx/en/download.html} as follows:
|
\url{https://www.jool.mx/en/download.html} as follows:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
nico@nsg-System:~$ wget https://github.com/NICMx/Jool/releases/download/v4.0.1/jool_4.0.1.tar.gz
|
nico@nsg-System:~$ wget https://github.com/NICMx/Jool/releases/download/v4.0.1/jool_4.0.1.tar.gz
|
||||||
nico@nsg-System:~$ tar xvfz jool_4.0.1.tar.gz
|
nico@nsg-System:~$ tar xvfz jool_4.0.1.tar.gz
|
||||||
|
@ -1356,6 +1420,7 @@ nico@nsg-System:~/jool-4.0.1$ sudo apt install libnl-genl-3-dev
|
||||||
nico@nsg-System:~/jool-4.0.1$ sudo apt install iptables-dev
|
nico@nsg-System:~/jool-4.0.1$ sudo apt install iptables-dev
|
||||||
nico@nsg-System:~/jool-4.0.1$ sudo make install
|
nico@nsg-System:~/jool-4.0.1$ sudo make install
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
We enable forwarding:
|
We enable forwarding:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
sysctl -w net.ipv4.conf.all.forwarding=1
|
sysctl -w net.ipv4.conf.all.forwarding=1
|
||||||
|
@ -1363,6 +1428,7 @@ sysctl -w net.ipv6.conf.all.forwarding=1
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
We configure jool to map the network prefixes and setup iptables to
|
We configure jool to map the network prefixes and setup iptables to
|
||||||
redirect the traffic into the jool instance:
|
redirect the traffic into the jool instance:
|
||||||
|
\begin{tiny}
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
[16:53] nsg-System:~# modprobe jool_siit
|
[16:53] nsg-System:~# modprobe jool_siit
|
||||||
[16:54] nsg-System:~# jool_siit instance add "example" --iptables
|
[16:54] nsg-System:~# jool_siit instance add "example" --iptables
|
||||||
|
@ -1371,6 +1437,7 @@ redirect the traffic into the jool instance:
|
||||||
[16:57] nsg-System:~# ip6tables -t mangle -A PREROUTING -s 2001:db8:42::/120 -d 2001:db8:23::/120 -j JOOL_SIIT --instance example
|
[16:57] nsg-System:~# ip6tables -t mangle -A PREROUTING -s 2001:db8:42::/120 -d 2001:db8:23::/120 -j JOOL_SIIT --instance example
|
||||||
[16:57] nsg-System:~# iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -d 10.0.1.0/24 -j JOOL_SIIT --instance example
|
[16:57] nsg-System:~# iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -d 10.0.1.0/24 -j JOOL_SIIT --instance example
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
\end{tiny}
|
||||||
Afterwards we test NAT64:
|
Afterwards we test NAT64:
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
nico@ESPRIMO-P956:~/master-thesis/iperf$ ping6 2001:db8:23::2a
|
nico@ESPRIMO-P956:~/master-thesis/iperf$ ping6 2001:db8:23::2a
|
||||||
|
|
Loading…
Reference in a new issue