2019-07-31 08:50:30 +00:00
|
|
|
\chapter{\label{appendixA}Test descriptions}
|
2019-07-31 09:30:56 +00:00
|
|
|
\section{\label{chapterA:netpfga-setup}NetFPGA Setup}
|
|
|
|
Description of installation, commit of netpfga-live
|
2019-02-21 19:29:50 +00:00
|
|
|
|
2019-07-31 08:50:30 +00:00
|
|
|
\section{\label{chapterA:section1}NetFPGA NAT64 Test cases}
|
|
|
|
todo: add graphic of nsg <-> esprimo cabling
|
|
|
|
\begin{verbatim}
|
|
|
|
|
|
|
|
ip addr add 10.0.0.42/24 dev enp2s0f0
|
|
|
|
|
|
|
|
# Adding necessary ARP entries: for the virtual IPv4 address(es)
|
|
|
|
ip neigh add 10.0.0.6 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
|
|
|
ip neigh add 10.0.0.42 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
2019-07-31 09:30:56 +00:00
|
|
|
For all test cases the following network settings on esprimo:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
12: enp2s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
|
|
|
|
link/ether f8:f2:1e:09:62:d0 brd ff:ff:ff:ff:ff:ff
|
|
|
|
inet 10.0.0.42/24 scope global enp2s0f0
|
|
|
|
valid_lft forever preferred_lft forever
|
|
|
|
inet6 fe80::faf2:1eff:fe09:62d0/64 scope link
|
|
|
|
valid_lft forever preferred_lft forever
|
|
|
|
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
|
|
|
|
inet6 2001:db8:42::42/64 scope global
|
|
|
|
valid_lft forever preferred_lft forever
|
|
|
|
inet6 fe80::faf2:1eff:fe09:62d1/64 scope link
|
|
|
|
valid_lft forever preferred_lft forever
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
\subsection{Test 1: IPv4 egress settings work}
|
2019-08-01 18:59:21 +00:00
|
|
|
Scenario: simple egress port setting for the IPv4 addresses
|
2019-07-31 08:50:30 +00:00
|
|
|
|
|
|
|
Step 1: getting correct values for table entries from python:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
>>> int(ipaddress.IPv4Address(u"10.0.0.42"))
|
|
|
|
167772202
|
|
|
|
>>> int(ipaddress.IPv4Address(u"10.0.0.4"))
|
|
|
|
167772164
|
|
|
|
>>>
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Step 2: setting table netries
|
2019-02-21 19:29:50 +00:00
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
2019-07-31 08:50:30 +00:00
|
|
|
>> 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)]
|
|
|
|
action_name = TopPipe.realmain.set_egress_port
|
|
|
|
field_vals = [1, '16', '0', '0', '0', '0']
|
|
|
|
CAM_Init_ValidateContext() - done
|
|
|
|
WROTE 0x44020250 = 0xa00002a
|
|
|
|
WROTE 0x44020280 = 0x0000
|
|
|
|
WROTE 0x44020284 = 0x0000
|
|
|
|
WROTE 0x44020288 = 0x10000000
|
|
|
|
WROTE 0x4402028c = 0x0001
|
|
|
|
READ 0x44020244 = 0x0001
|
|
|
|
WROTE 0x44020240 = 0x0001
|
|
|
|
READ 0x44020244 = 0x0001
|
|
|
|
READ 0x44020244 = 0x0001
|
|
|
|
success
|
|
|
|
>> table_cam_add_entry realmain_v4_networks_0 realmain.set_egress_port 167772164 => 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)]
|
|
|
|
action_name = TopPipe.realmain.set_egress_port
|
|
|
|
field_vals = [1, '16', '0', '0', '0', '0']
|
|
|
|
CAM_Init_ValidateContext() - done
|
|
|
|
WROTE 0x44020250 = 0xa000004
|
|
|
|
WROTE 0x44020280 = 0x0000
|
|
|
|
WROTE 0x44020284 = 0x0000
|
|
|
|
WROTE 0x44020288 = 0x10000000
|
|
|
|
WROTE 0x4402028c = 0x0001
|
|
|
|
READ 0x44020244 = 0x0001
|
|
|
|
WROTE 0x44020240 = 0x0001
|
|
|
|
READ 0x44020244 = 0x0001
|
|
|
|
READ 0x44020244 = 0x0001
|
|
|
|
success
|
|
|
|
>>
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Step 3: setting arp entries
|
|
|
|
|
|
|
|
\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.4 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
2019-02-21 19:29:50 +00:00
|
|
|
|
|
|
|
\end{verbatim}
|
2019-07-31 08:50:30 +00:00
|
|
|
Step 3: generating test packets, expecting 4 packets to show up on
|
|
|
|
enp2s0f0:
|
|
|
|
|
2019-07-31 09:30:56 +00:00
|
|
|
%\tvb
|
2019-07-31 08:50:30 +00:00
|
|
|
\begin{verbatim}
|
|
|
|
nico@ESPRIMO-P956:~$ sudo tcpdump -ni enp2s0f0
|
|
|
|
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
|
|
|
listening on enp2s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
|
|
|
|
10:49:28.200407 IP 10.0.0.42 > 10.0.0.4: ICMP echo request, id 4440, seq 1, length 64
|
|
|
|
10:49:28.200445 IP 10.0.0.42 > 10.0.0.4: ICMP echo request, id 4440, seq 1, 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
|
|
|
|
\end{verbatim}
|
2019-07-31 09:30:56 +00:00
|
|
|
%\tve
|
2019-07-31 08:50:30 +00:00
|
|
|
|
|
|
|
Result: sucess
|
|
|
|
|
|
|
|
|
2019-07-31 09:30:56 +00:00
|
|
|
\subsection{Test 2: IPv6 egress}
|
|
|
|
Similar to the IPv4 setting before, just for IPv6.
|
|
|
|
|
|
|
|
Step 1: getting IP address values
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
>>> int(ipaddress.IPv6Address(u"2001:db8:42::4"))
|
|
|
|
42540766411362381960998550477184434180L
|
|
|
|
>>> int(ipaddress.IPv6Address(u"2001:db8:42::6"))
|
|
|
|
42540766411362381960998550477184434182L
|
|
|
|
>>> int(ipaddress.IPv6Address(u"2001:db8:42::42"))
|
|
|
|
42540766411362381960998550477184434242L
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Step 2: setting table entries
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
>> 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)]
|
|
|
|
action_name = TopPipe.realmain.set_egress_port
|
|
|
|
field_vals = [1, '64', '0', '0', '0', '0']
|
|
|
|
CAM_Init_ValidateContext() - done
|
|
|
|
WROTE 0x44020350 = 0x0006
|
|
|
|
WROTE 0x44020354 = 0x0000
|
|
|
|
WROTE 0x44020358 = 0x420000
|
|
|
|
WROTE 0x4402035c = 0x20010db8
|
|
|
|
WROTE 0x44020380 = 0x0000
|
|
|
|
WROTE 0x44020384 = 0x0000
|
|
|
|
WROTE 0x44020388 = 0x40000000
|
|
|
|
WROTE 0x4402038c = 0x0001
|
|
|
|
READ 0x44020344 = 0x0001
|
|
|
|
WROTE 0x44020340 = 0x0001
|
|
|
|
READ 0x44020344 = 0x0001
|
|
|
|
READ 0x44020344 = 0x0001
|
|
|
|
success
|
|
|
|
>> table_cam_add_entry realmain_v6_networks_0 realmain.set_egress_port 42540766411362381960998550477184434242 => 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)]
|
|
|
|
action_name = TopPipe.realmain.set_egress_port
|
|
|
|
field_vals = [1, '64', '0', '0', '0', '0']
|
|
|
|
CAM_Init_ValidateContext() - done
|
|
|
|
WROTE 0x44020350 = 0x0042
|
|
|
|
WROTE 0x44020354 = 0x0000
|
|
|
|
WROTE 0x44020358 = 0x420000
|
|
|
|
WROTE 0x4402035c = 0x20010db8
|
|
|
|
WROTE 0x44020380 = 0x0000
|
|
|
|
WROTE 0x44020384 = 0x0000
|
|
|
|
WROTE 0x44020388 = 0x40000000
|
|
|
|
WROTE 0x4402038c = 0x0001
|
|
|
|
READ 0x44020344 = 0x0001
|
|
|
|
WROTE 0x44020340 = 0x0001
|
|
|
|
READ 0x44020344 = 0x0001
|
|
|
|
READ 0x44020344 = 0x0001
|
|
|
|
success
|
|
|
|
>>
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Step 3: setting neighbor entries
|
|
|
|
|
|
|
|
\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::4 lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Step 4: generating test packets
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
nico@ESPRIMO-P956:~$ ping6 -c2 2001:db8:42::6
|
|
|
|
PING 2001:db8:42::6(2001:db8:42::6) 56 data bytes
|
|
|
|
|
|
|
|
|
|
|
|
nico@ESPRIMO-P956:~$ sudo tcpdump -ni enp2s0f1
|
|
|
|
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
|
|
|
listening on enp2s0f1, link-type EN10MB (Ethernet), capture size 262144 bytes
|
|
|
|
11:30:17.287577 IP6 2001:db8:42::42 > 2001:db8:42::6: ICMP6, echo request, seq 1, length 64
|
|
|
|
11:30:17.287599 IP6 2001:db8:42::42 > 2001:db8:42::6: ICMP6, echo request, seq 1, 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
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Result: success, packet is seen twice.
|
2019-02-21 19:29:50 +00:00
|
|
|
|
2019-08-01 18:59:21 +00:00
|
|
|
% ------------------------------------------------------------------------------
|
|
|
|
\subsection{Test 3: NAT64}
|
|
|
|
|
|
|
|
Additionally to the preparations done in test 1 and 2, the following
|
|
|
|
steps were taken:
|
|
|
|
|
|
|
|
Step 1: getting IP address values via Python
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
>>> int(ipaddress.IPv6Address(u"2001:db8:42::2a"))
|
|
|
|
42540766411362381960998550477184434218L
|
|
|
|
|
|
|
|
>>> int(ipaddress.IPv6Address(u"2001:db8:42::"))
|
|
|
|
42540766411362381960998550477184434176L
|
|
|
|
|
|
|
|
>>> int(ipaddress.IPv4Address(u"10.0.0.0"))
|
|
|
|
167772160
|
|
|
|
|
|
|
|
|
|
|
|
>>> int(ipaddress.IPv4Address(u"10.0.0.66"))
|
|
|
|
167772226
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Add table entry for 2001:db8:42:2a to be translated to 10.0.0.42:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
>> table_cam_add_entry realmain_nat64_0 realmain.nat64_static 42540766411362381960998550477184434218 => 42540766411362381960998550477184434176 167772160 42540766411362381960998550477184434176 0
|
|
|
|
fields = [(u'hit', 1), (u'action_run', 3), (u'v6_src', 128), (u'v4_dst', 32), (u'nat64_prefix', 128), (u'table_id', 16)]
|
|
|
|
action_name = TopPipe.realmain.nat64_static
|
|
|
|
field_vals = [2, '42540766411362381960998550477184434176', '167772160', '42540766411362381960998550477184434176', '0']
|
|
|
|
CAM_Init_ValidateContext() - done
|
|
|
|
WROTE 0x44020050 = 0x002a
|
|
|
|
WROTE 0x44020054 = 0x0000
|
|
|
|
WROTE 0x44020058 = 0x420000
|
|
|
|
WROTE 0x4402005c = 0x20010db8
|
|
|
|
WROTE 0x44020080 = 0x0000
|
|
|
|
WROTE 0x44020084 = 0x0000
|
|
|
|
WROTE 0x44020088 = 0x0000
|
|
|
|
WROTE 0x4402008c = 0xdb80042
|
|
|
|
WROTE 0x44020090 = 0x2001
|
|
|
|
WROTE 0x44020094 = 0x0a00
|
|
|
|
WROTE 0x44020098 = 0x0000
|
|
|
|
WROTE 0x4402009c = 0x0000
|
|
|
|
WROTE 0x440200a0 = 0xdb80042
|
|
|
|
WROTE 0x440200a4 = 0x22001
|
|
|
|
READ 0x44020044 = 0x0001
|
|
|
|
WROTE 0x44020040 = 0x0001
|
|
|
|
READ 0x44020044 = 0x0001
|
|
|
|
READ 0x44020044 = 0x0001
|
|
|
|
success
|
|
|
|
>>
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
2019-08-02 10:03:26 +00:00
|
|
|
Add table entry for 2001:db8:42::a00:2a to be translated to 10.0.0.66:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
2019-08-01 18:59:21 +00:00
|
|
|
Add table entry for 10.0.0.66 to be translated to 2001:db8:42:42:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
>> table_cam_add_entry realmain_nat46_0 realmain.nat46_static 167772226 => 42540766411362381960998550477184434176 167772160 42540766411362381960998550477184434176 0
|
|
|
|
fields = [(u'hit', 1), (u'action_run', 3), (u'v6_src', 128), (u'v4_dst', 32), (u'nat64_prefix', 128), (u'table_id', 16)]
|
|
|
|
action_name = TopPipe.realmain.nat46_static
|
|
|
|
field_vals = [2, '42540766411362381960998550477184434176', '167772160', '42540766411362381960998550477184434176', '0']
|
|
|
|
CAM_Init_ValidateContext() - done
|
|
|
|
WROTE 0x44020150 = 0xa000042
|
|
|
|
WROTE 0x44020180 = 0x0000
|
|
|
|
WROTE 0x44020184 = 0x0000
|
|
|
|
WROTE 0x44020188 = 0x0000
|
|
|
|
WROTE 0x4402018c = 0xdb80042
|
|
|
|
WROTE 0x44020190 = 0x2001
|
|
|
|
WROTE 0x44020194 = 0x0a00
|
|
|
|
WROTE 0x44020198 = 0x0000
|
|
|
|
WROTE 0x4402019c = 0x0000
|
|
|
|
WROTE 0x440201a0 = 0xdb80042
|
|
|
|
WROTE 0x440201a4 = 0x22001
|
|
|
|
READ 0x44020144 = 0x0001
|
|
|
|
WROTE 0x44020140 = 0x0001
|
|
|
|
READ 0x44020144 = 0x0001
|
|
|
|
READ 0x44020144 = 0x0001
|
|
|
|
success
|
|
|
|
>>
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
Step 3: setting neighbor entries
|
|
|
|
|
|
|
|
\begin{verbatim}
|
2019-08-02 10:03:26 +00:00
|
|
|
sudo ip neigh add 10.0.0.66 lladdr f8:f2:1e:09:62:d1 dev enp2s0f0
|
|
|
|
sudo ip -6 neigh add 2001:db8:42::2a lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
|
|
|
sudo ip -6 neighbor add 2001:db8:42::a00:2a lladdr f8:f2:1e:09:62:d0 dev enp2s0f1
|
|
|
|
|
2019-08-01 18:59:21 +00:00
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Step 4: ping test should translate, but fail with wrong checksum:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-07-29 17:13:47 +00:00
|
|
|
\chapter{\label{appendixB}Appendix B?}
|
2019-02-21 19:29:50 +00:00
|
|
|
|
|
|
|
|
|
|
|
%Entries for the list of abbrevations:
|
|
|
|
%
|
|
|
|
%To generate the list of abbrevations, execute:
|
|
|
|
%makeindex Thesis.nlo -s nomencl.ist -o Thesis.nls
|
|
|
|
%
|
|
|
|
%If you are using TeXniCenter, specify:
|
|
|
|
%"%bm.nlo" -s nomencl.ist -o "%bm.nls"
|
|
|
|
%as beeing the argument list for makeindex.
|
|
|
|
%---------------------------------------------------------------------------------------------------------
|
|
|
|
%For old nomencl package uncomment this:
|
|
|
|
%\printglossary
|
|
|
|
%For new nomencl package uncomment this:
|
|
|
|
\printnomenclature
|
|
|
|
|
|
|
|
\abbrev{XCA}{\markup{X}tremely \markup{C}ool \markup{A}bbrevations}
|