nftables weiter gemacht

This commit is contained in:
Alfred Krohmer 2014-02-15 11:58:16 +01:00
parent 8742dc849c
commit 5aa914d39f
9 changed files with 815 additions and 107 deletions

View File

@ -1,124 +1,238 @@
\subsubsection{Performance-Vergleich}
Außerdem habe ich iptables unter dem Performance-Aspekt verglichen. Die Benchmarks liefen auf zwei der Zotac-Boards als Nodes und einem Rechner mit Intel Core 2 Duo-Prozessor als Firewall, auf dem die beiden Firewalllösungen liefen um den Datenverkehr zwischen den beiden Nodes zu kontrollieren.
\paragraph{Testaufbau}
\paragraph{Einfache Drop-Regeln} Für den nachfolgenden Benchmark habe ich entsprechend viele Regeln generieren lassen, die besagen, dass von (zufällig gewählten) IP-Adressen alle Pakete gedropt werden sollen.
Um die Performance der beiden Firewall-Lösungen vergleichen zu könne, habe ich jeweils zwei unserer Zotac-Boards mit der Onboard-Netzwerkkarte an einen zusätzlichen Firewall-Rechner, der mir bereitgestellt wurde, verbunden. Die Spezifikationen der Zotac-Boards sind dem Abschnitt »Hardware« zu entnehmen. \\
Der zusätzliche Rechner war mit einem Intel Core 2 Duo E6750 mit 2,66 GHz, 2 GiB RAM ausgestattet und zwei Intel Gigabit-Netzwerkkarten ausgestattet (Intel 82566DM-2 und 82572EI). Die beiden Intel-Netzwerkkarten wurden direkt mit den beiden Zotac-Boards verbunden.
Der Firewall-Rechner wurde über die Onboard-Netzwerkkarte und die beiden Zotac-Boards über USB-Netzwerkkarten mit einem Switch und darüber mit der Headnode verbunden um einen Zugriff von außen bereitzustellen. \\
Der Firewall-Rechner soll nun über \texttt{iptables} und \texttt{nftables} den Datenverkehr zwischen den beiden Nodes kontrollieren. Die beiden Netzwerk-Interfaces der Firewall waren im Bridge-Modus verbunden. \\
\includegraphics{bilder/nft-layout.pdf}
\paragraph{Verwendete Software} Um schnell genug eine große Anzahl an Paketen pro Sekunde (PPS) erzeugen zu können um die Firewall-Lösungen zu benchmarken, habe ich \texttt{pktgen} verwendet. Hierbei handelt es sich um einen Paketgenerator, der als Kernel-Modul geladen wird und dadurch direkt im Kernel (ohne teure Kontext-Switches ins Userland) ausgeführt wird.
Zur Überwachung der Messdaten (Datenrate und PPS) habe ich auf allen vier Netzwerkschnittstellen das Tool \texttt{ifpps} aus dem \texttt{netsniff-ng}-Bundle laufen lassen.
\pagebreak
\paragraph{Testeinstellung} Zunächst habe ich die Datenrate und die PPS in Abhängigkeit der Ethernet Frame-Größe gemessen um festzustellen, mit welcher Paketgröße die Messungen am besten durchzuführen sind. \\ \\
\pgfplotstableread{
0 33333
500 33333
1000 33333
1500 33333
2000 33333
2500 33333
3000 33333
3500 33333
4000 33333
4500 31952
5000 28936
5500 26422
6000 24331
6500 22422
7000 20868
7500 19467
8000 18212
8500 17109
9000 16174
9500 15349
10000 14621
10500 13960
11000 13351
11500 12781
12000 12265
12500 11788
13000 11346
13500 10915
14000 10554
14500 10187
15000 9847
15500 9526
16000 8772
16500 8974
17000 8483
17500 8433
18000 8238
18500 7369
19000 7371
19500 7433
20000 6400
20500 7074
21000 5486
21500 4512
22000 5172
22500 5003
}\nftipt
\pgfplotstableread{
0 33333
500 33333
1000 33333
1500 33333
2000 33333
2500 29107
3000 24655
3500 21367
4000 18912
4500 16928
5000 15318
5500 13979
6000 12886
6500 11973
7000 11129
7500 10436
8000 9823
8500 9259
9000 8821
9500 8371
10000 7948
10500 7584
11000 7256
11500 6944
12000 6656
12500 6410
13000 6161
13500 5924
14000 5696
14500 5538
15000 5345
15500 5160
16000 5000
16500 4824
17000 4720
17500 4575
18000 4455
18500 4221
19000 4213
19500 4060
}\nftnft
size rate pps
1500 986.004 82167
1450 985.7216 84976
1400 984.7376 87923
1350 984.2904 91138
1300 983.4968 94567
1250 982.78 98278
1200 982.08 102300
1150 981.18 106650
1100 980.2496 111392
1050 979.2384 116576
1000 978.304 122288
950 977.36 128600
900 975.0024 135417
850 974.27 143275
800 972.5888 151967
750 970.572 161762
700 968.3856 172926
650 966.2328 185814
600 963.1056 200647
550 959.7588 218127
500 955.604 238901
450 951.588 264330
400 945.3248 295414
350 937.3336 334762
300 923.2584 384691
250 855.588 427794
200 662.5952 433335
150 527.3604 439467
100 354.96 443700
50 207.176 446500
}\sizeratepps
\begin{tikzpicture}
\pgfplotsset{
y axis style/.style={
yticklabel style=#1,
y axis line style=#1,
ylabel style=#1,
ytick style=#1
}
}
\begin{axis}[
xmin=0,
xmax=23000,
ymin=0,
xlabel={Anzahl der Firewall-Regeln},
ylabel={Verarbeitete Pakete pro Sekunde},
width=15cm, height=10cm,
legend entries={iptables,nftables}
title=Sender,
xmin=1,
xmax=1500,
xlabel={Ethernet Frame-Größe},
xtick={100,300,500,700,900,1100,1300,1500},
ymin=0,
axis y line*=left,
ylabel={Datenrate [MBit/s]},
y axis style=blue!75!black,
tick label style={/pgf/number format/fixed,/pgf/number format/1000 sep = \thinspace},
scaled ticks=false
]
\addplot[smooth,blue] table {\nftipt};
\addplot[smooth,red] table {\nftnft};
\addplot[smooth,blue] table[x={size}, y={rate}] {\sizeratepps};
\end{axis}
\begin{axis}[
width=15cm, height=10cm,
xmin=1,
xmax=1500,
axis x line=none,
ymin=0,ymax=500000,
ytick pos=right,
axis y line* = right,
ylabel={PPS},
ylabel near ticks,
ytick={100000,200000,300000,400000},
y axis style=red!75!black,
tick label style={/pgf/number format/fixed,/pgf/number format/1000 sep = \thinspace},
scaled ticks=false
]
\addplot[smooth,red] table[x={size}, y={pps}] {\sizeratepps};
\end{axis}
\end{tikzpicture}
Die maximale PPS(packages-per-second)-Rate liegt initial bei 33333 Paketen pro Sekunde, da ich als Delay zwischen den einzelnen Paketen 30 $\mu$s eingestellt habe. Bei einem kleineren Delay wurde bereits Pakete an der Netzwerkkarte der Firewall gedropt.
\vspace{1cm}
Es wurden Paketgrößen von einer Größe von 1 bis 1500 Byte (MTU des Ethernet) verwendet, diese hatten allerdings keinen Einfluss auf die PPS, da bei den verwendeten Regeln nur die IP-Header in Betracht gezogen wurden und die Sättigung (an Datenübertragungsrate) der Netzwerkkarte längst nicht erreicht wurde.
\pgfplotstableread{
size rate pps
1500 982.38 81865
1450 981.1512 84582
1400 983.4272 87806
1350 981.936 90920
1300 979.9816 94229
1250 977.44 97744
1200 980.7936 102166
1150 978.5396 106363
1100 975.6472 110869
1050 972.3588 115757
1000 977.192 122149
950 974.0312 128162
900 970.6896 134818
850 965.4368 141976
800 970.8992 151703
750 966.756 161126
700 960.9544 171599
650 956.2592 183896
600 961.4736 200307
550 954.8088 217002
500 946.992 236748
450 928.7784 257994
400 823.2672 257271
350 722.5316 258047
300 615.1632 256318
250 492.206 246103
200 406.3824 253989
150 299.2116 249343
100 205.8888 257361
50 123.79728 257911
\paragraph{iptables}
}\sizerateppsrecv
Wie aus dem Diagramm ersichtlich wird, bricht die PPS-Rate ab ca. 5000 Regeln exponentiell ein und strebt ca. 5000 PPS an. Ab ca. 23000 Regeln werden wieder Pakete an der Firewall gedropt, weil die Pakete nicht schnell genug verarbeitet werden können.
\begin{tikzpicture}
\pgfplotsset{
y axis style/.style={
yticklabel style=#1,
y axis line style=#1,
ylabel style=#1,
ytick style=#1
}
}
\begin{axis}[
width=15cm, height=10cm,
title=Empfänger,
xmin=1,
xmax=1500,
xlabel={Ethernet Frame-Größe},
xtick={100,300,500,700,900,1100,1300,1500},
ymin=0,
axis y line*=left,
ylabel={Datenrate [MBit/s]},
y axis style=blue!75!black,
tick label style={/pgf/number format/fixed,/pgf/number format/1000 sep = \thinspace},
scaled ticks=false
]
\addplot[smooth,blue] table[x={size}, y={rate}] {\sizerateppsrecv};
\end{axis}
\begin{axis}[
width=15cm, height=10cm,
xmin=1,
xmax=1500,
axis x line=none,
ymin=0,ymax=500000,
ytick pos=right,
axis y line* = right,
ylabel={PPS},
ylabel near ticks,
ytick={100000,200000,300000,400000},
y axis style=red!75!black,
tick label style={/pgf/number format/fixed,/pgf/number format/1000 sep = \thinspace},
scaled ticks=false
]
\addplot[smooth,red] table[x={size}, y={pps}] {\sizerateppsrecv};
\end{axis}
\end{tikzpicture}
\paragraph{nftables}
\pagebreak
Der Graph verläuft von der Form her grundsätzlich genau wie bei iptables, jedoch ist nftables offensichtlich noch erheblich langsamer als iptables. Die PPS-Rate beginnt schon bei ca. 2500 Regeln einzubrechen und bereits ab 20000 Regeln werden Pakete gedropt.
Wie aus den Diagrammen ersichtlich wird, wird bei Frame-Größen, die an die MTU des Ethernets (1500 Bytes) heranreichen, das Gigabit-Netzwerk mit ca. 980 MBit/s und ca. 82000 PPS fast komplett ausgereizt. Je kleiner die Frame-Größe wird, desto größer wird zunächst die Anzahl der PPS, da das Netzwerk immer noch gut ausgelastet wird; die Datenrate sinkt zunächst zur langsam. \\
Beim Sender beginnt jedoch bei Frame-Größe kleiner 300 Byte die Datenrate linear zu sinken. Die PPS stagnieren dann bei ca. 450000 Paketen. Dies ist mit der Leistungsfähigkeit der Atom-Prozessoren zu erklären, da diese ab dieser Grenze komplett ausgelastet sind und die Pakete nicht schneller erzeugen können. \\
Beim Empfänger geschieht dieser Einbrauch schon bei ca. 450 Byte Frame-Größe. Hier stagniert die PPS bei ca. 250000. Auch dies lässt sich mit der Auslastung des Prozessors erklären. Der Unterschied zum Sender besteht darin, dass bei diesem die Pakete lediglich statisch zusammengesetzt und losgeschickt werden müssen. Beim Empfänger hingegen muss das Betriebssystem die Pakete zunächst auswerten, was den Bearbeitungszeit verlängert. Dadurch kommen beim Empfänger wesentlich weniger Pakete an, als der Sender losschickt. (Die übrigen Pakete werden gedroppt.) \\
Um eine größtmögliche Auslastung des Gigabit-Netzwerkes zu ermöglichen und gleichzeitig die maximale Anzahl an PPS zu erhalten, habe ich also für die folgenden Benchmarks die Ethernet Frame-Größe auf 450 festgesetzt.
\paragraph{Anfängliche Probleme} Anfangs habe ich auf dem Empfänger keine »Anwendung« laufen lassen, die die Pakete des Senders entgegennimmt. Deshalb musste der Kernel zusätzliche ein ICMP-Paket mit »Connection Refused«-Flag an den Sender zurückschicken und daraufhin weitere Fehlerbehandlungen durchführen. Auf diese Weise habe ich am Empfänger zunächst nur ca. 110000 PPS empfangen können. Als Lösungsansatz habe ich dann \texttt{netcat} auf dem Port am Empfänger laufen lassen und die Daten nach \texttt{/dev/null} umgeleitet. Damit kamen keine Fehler mehr zustande und es konnten ca. 150000 PPS empfangen werden. Dies liegt jedoch immer noch weit unter den am Sender losgeschickten 450000 PPS und ist damit zu erklären, dass es für jedes Paket zu einem Kontex-Switch vom Kernel zu \texttt{netcat} kam und deshalb wieder die Bearbeitungszeit pro Paket stieg. \\
Letztendlich habe ich dazu entschieden, auf der Empfängerseite mit \texttt{iptables} die Pakete, die auf dem entsprechenden Port angekommen, direkt zu droppen. Damit konnten nun die zuvor erwähnten ca. 250000 PPS empfangen werden.
\pagebreak
\paragraph{Einfache Drop-Regeln} Für den nachfolgenden Benchmark habe ich entsprechend viele Regeln generieren lassen, die besagen, dass von (zufällig gewählten) IP-Adressen alle Pakete gedropt werden sollen. \\
\pgfplotstableread{benchmarks/nft/ipt-nft-simple-drop.txt}{\nftsimpledrop}
\begin{minipage}{\textwidth}
\flushright
\begin{tikzpicture}
\begin{axis}[
name=plot1,
xtick={5000,10000,15000,20000,25000,30000},
xmin=200, xmax=30000,
ymin=0,
xlabel={Anzahl der Firewall-Regeln}, ylabel={Datenrate [MBit/s]},
tick label style={/pgf/number format/fixed,/pgf/number format/1000 sep = \thinspace},
width=15cm, height=10cm,
legend entries={iptables,nftables},
scaled ticks=false
]
\addplot[smooth,blue] table [x={rules}, y={iptrate}] {\nftsimpledrop};
\addplot[smooth,red] table [x={rules}, y={nftrate}] {\nftsimpledrop};
\end{axis}
\begin{axis}[
name=plot2,
at=(plot1.below south), anchor=above north,
yshift=-0.5cm,
xtick={5000,10000,15000,20000,25000,30000},
xmin=200, xmax=30000,
ymin=0,
xlabel={Anzahl der Firewall-Regeln}, ylabel={PPS},
tick label style={/pgf/number format/fixed,/pgf/number format/1000 sep = \thinspace},
width=15cm, height=10cm,
legend entries={iptables,nftables},
scaled ticks=false
]
\addplot[smooth,blue] table [x={rules}, y={iptpps}] {\nftsimpledrop};
\addplot[smooth,red] table [x={rules}, y={nftpps}] {\nftsimpledrop};
\end{axis}
\end{tikzpicture}
\end{minipage} \\
Die Datenrate und die Anzahl an PPS liegen initial bei den bereits zuvor gemessenen ca. 980 MBit/s und 250000 Paketen pro Sekunde. Jedoch bricht die Leistungsfähigkeit bei beiden Firewall-Lösungen schnell erheblich ein. So kann \texttt{iptables} bei 5000 Regeln nur noch ca. 100 MBit/s bei 28000 Paketen verarbeiten, \texttt{nftables} schafft hier nur ca. 50 MBit/s bei 14000 Paketen.

View File

@ -0,0 +1,5 @@
\subsubsection{Verfügbare Tools}
Da nftables erst vor kurzem Einzug in den Linux-Kernel gehalten hat, gibt es in noch keiner Linux-Distribution entsprechende Tools für die Konfiguration der neuen Firewall-Lösung. Man hat also nur die Möglichkeit, sich die Userland-Programme selbst zu kompilieren. (Bei Arch Linux waren diese bereits im AUR vorhanden, nicht jedoch im offizielen Repository.)
Das zentrale Tool zur Konfiguration stellt hier \texttt{nft} dar. Die Syntax wurde im vorherigen Abschnitt bereits demonstriert.

View File

@ -0,0 +1,47 @@
\subsubsection{Rückblick}
Da es bereits vor \texttt{nftables} und \texttt{iptables} mehrere Firewall-Implementierungen für Linux gab, lohnt sich ein kleiner Rückblick.
\begin{itemize}
\item ab Kernel 1.0 (1994): \texttt{ipfw} (IP FireWall), von FreeBSD auf Linux portiert
\item ab Kernel 2.0 (1996): \texttt{ipfwadm} (IP FireWall Admin)
\item ab Kernel 2.2 (1999): \texttt{ipchains}
\item ab Kernel 2.3 (2000): \texttt{iptables}
\item ab Kernel 3.13 (2014): \texttt{nftables}
\end{itemize}
Wie man sieht mussten sich Linux-Nutzer, die eine Firewall benötigten, seit 1994 bis jetzt mit vier verschiedenen Firewall-Lösungen auseinander setzen. Die letzte davon, \texttt{iptables} ist nun bald seit 14 Jahr im Einsatz und soll jetzt auf Dauer von \texttt{nftables} abgelöst werden.
\subsubsection{Funktionsweise}
\paragraph{\texttt{iptables}} selbst ist nur für das Firewalling des IPv4-Traffics verantwortlich. Für andere Protokolle gibt es weitere entsprechende Tools:
\begin{itemize}
\item \textbf{\texttt{ip6tables}} für IPv6
\item \textbf{\texttt{arptables}} für ARP (Address Resolution Protocol, zu IP-Adressen werden im lokalen Subnetz MAC-Adressen abgefragt, um Ethernet-Pakete versenden zu können)
\item \textbf{\texttt{ebtables}} für Ethernet Bridging
\end{itemize}
Alle diese Tools haben im Linux-Kernel eine Entsprechung in der Netfilter-Infrastruktur. An dieser Stelle sind für jedes Protokoll alle möglichen Filterkriterien und -aktionen einzeln im Kernel (meist als Modul ladbar) implementiert. Da diese Implementierungen alle sehr protokollspezifisch sind, sorgte dies dafür, dass enorm viel Code für jedes Protokoll repliziert werden musste.
\paragraph{\texttt{nftables}} soll alle Implementierungen für die verschiedenen Protokolle zusammenfassen und damit die Schnittstelle der Konfigurationstools zum Kernel vereinfachen, die Code-Replikation verringern und ein effizienteres Abarbeiten der Regeln gewährleisten.
Dies wird durch den Einsatz einer kleinen virtuellen Maschine im Kernel gewährleistet. Im Gegensatz zu \texttt{iptables}, wo für jedes Filterkriterium einer Regel eine eigene Funktion im Kernel aufgerufen wurde, wird nun das zu verarbeitende Paket geladen und die zu Byte-Code kompilierten Regeln in der virtuellen Maschine angewendet. Dieser Code kann nun einzelne Felder und Bits eines Pakets betrachten und vergleichen, arithmetische Operationen darauf ausführen und das Paket ändern.
Darüber hinaus soll nun ein atomares Austauschen der Firewall-Regeln in einer einzelnen Netlink-Transaktion möglich sein. (Netlink ist die Schnittstelle zum Kernel, mit der die Netfilter-Infrastruktur angesprochen wird; dies ist die bisher schnellste Schnittstelle zum Kernel, besonders wenn große Mengen an Daten übertragen werden sollen) Dies funktioniert bisher allerdings noch nicht effektiv, weil das Userspace-Tool \texttt{nft} noch keine Möglichkeit bietet, alle bereits existenten Regeln zu entfernen und gleichzeitig die aktualisierte Fassung der Regeln zu laden. (Man müsste hier für jede Regel-Aktualisierung, die man durchführen will, ein eigenes nft-Script schreiben, dass zunächst die alte Regel entfernt und eine neue hinzufügt. Diese Aktualisierung ist dann atomar.)
\subsubsection{table, chain, hook}
Während \texttt{iptables} noch vordefinierte Tabellen (\texttt{filter}, \texttt{nat}, \texttt{mangle}, etc.) und mehrere Chains (\texttt{PREROUTING}, \texttt{INPUT}, \texttt{FORWARD}, \texttt{OUTPUT}, \texttt{POSTROUTING}) in diesen Tabellen hatte, gibt es in \texttt{nftables} keine vorgefertigen Tabellen und Chains mehr. Stattdessen gibt es sogenannte Hooks, in die man sich in selbst erstellten Chains »einhängen« kann. Dabei kann man eine Priorität angeben, die die Reihenfolge der Abarbeitung der Chains angibt. Diese Hooks entsprechen dabei größtenteils den Tabellen und Chains aus \texttt{iptables}.
\subsubsection{Syntax}
Für \texttt{iptables} könnte man bspw. folgenden Aufruf verwende, um eingehende TCP-Pakete auf Port 22 zunächst zu loggen und anschließend zu verwerfen: \\
\shellcmd{iptables -A INPUT -p tcp ---dport 22 -j LOG} \\
\shellcmd{iptables -A INPUT -p tcp ---dport 22 -j DROP} \\
Für \texttt{nftables} müsste man sich zunächst mit folgenden Befehlen je eine beispielhafte Tabelle und Chain anlegen (oder dies entsprechend in ein Script einbauen): \\
\shellcmd{nft add table filter} \\
\shellcmd{nft add chain filter input \enquote{\{ type filter hook input priority 0; \}}} \\
Die Regel kann man nun bspw. wie folgt einfügen: \\
\shellcmd{nft add rule filter input tcp dport 80 log drop}

View File

@ -1,3 +1,5 @@
\subsection{nftables}
\subsection{Vergleich \texttt{nftables} und \texttt{iptables}}
\input{abschnitte/nftables/nftables-vs}
\input{abschnitte/nftables/nftables-tools}
\input{abschnitte/nftables/nftables-perf}

View File

@ -0,0 +1,302 @@
rules iptrate iptpps nftrate nftpps
0 905.148 251430 924.588 256830
100 934.9704 259714 905.9544 251654
200 933.3396 259261 705.5856 195996
300 843.2568 234238 537.174 149215
400 730.9116 203031 443.4588 123183
500 647.1468 179763 374.3748 103993
600 557.406 154835 334.7244 92979
700 525.5856 145996 292.1184 81144
800 480.3156 133421 267.714 74365
900 441.8676 122741 240.5988 66833
1000 408.9024 113584 228.6072 63502
1100 381.7836 106051 204.9336 56926
1200 356.7888 99108 196.7832 54662
1300 335.3148 93143 181.1232 50312
1400 315.5616 87656 170.406 47335
1500 299.898 83305 160.8192 44672
1600 284.9688 79158 149.4864 41524
1700 271.2312 75342 141.9264 39424
1800 258.876 71910 135.162 37545
1900 245.4048 68168 130.4604 36239
2000 236.5416 65706 123.1056 34196
2100 227.25 63125 118.1772 32827
2200 218.0988 60583 113.526 31535
2300 210.2508 58403 109.0476 30291
2400 201.4596 55961 104.67 29075
2500 195.5952 54332 100.8108 28003
2600 189.0144 52504 97.4592 27072
2700 182.808 50780 94.1076 26141
2800 176.7708 49103 90.9324 25259
2900 170.7156 47421 88.3116 24531
3000 166.4568 46238 85.3992 23722
3100 161.7732 44937 83.2392 23122
3200 157.1112 43642 80.4708 22353
3300 152.5716 42381 78.1848 21718
3400 148.7088 41308 75.996 21110
3500 144.8892 40247 74.0916 20581
3600 141.21 39225 72.2016 20056
3700 137.7 38250 70.2036 19501
3800 134.3664 37324 69.2856 19246
3900 131.0976 36416 67.6188 18783
4000 128.2104 35614 66.078 18355
4100 125.4744 34854 64.8216 18006
4200 121.7844 33829 62.9496 17486
4300 120.0672 33352 61.8336 17176
4400 117.4572 32627 60.1596 16711
4500 115.0632 31962 59.1948 16443
4600 112.7124 31309 57.6792 16022
4700 110.1096 30586 56.9376 15816
4800 108.2916 30081 55.4868 15413
4900 106.1712 29492 54.666 15185
5000 104.1588 28933 53.3268 14813
5100 102.5316 28481 52.686 14635
5200 99.882 27745 51.4188 14283
5300 98.6148 27393 50.6736 14076
5400 96.7536 26876 49.5864 13774
5500 95.0436 26401 48.9348 13593
5600 93.7476 26041 47.8044 13279
5700 91.6668 25463 47.3076 13141
5800 90.2556 25071 46.17 12825
5900 88.542 24595 45.6876 12691
6000 87.444 24290 44.7948 12443
6100 85.77 23825 44.1792 12272
6200 84.4632 23462 43.9668 12213
6300 83.1204 23089 43.4304 12064
6400 81.7308 22703 42.6312 11842
6500 80.7732 22437 42.1272 11702
6600 79.326 22035 41.3028 11473
6700 78.4368 21788 40.8888 11358
6800 77.1768 21438 40.1796 11161
6900 76.0716 21131 39.7764 11049
7000 74.9376 20816 39.1392 10872
7100 73.8288 20508 38.7144 10754
7200 72.9576 20266 38.0916 10581
7300 71.6868 19913 37.5192 10422
7400 70.8948 19693 37.0764 10299
7500 69.8112 19392 36.6012 10167
7600 68.76 19100 36.1836 10051
7700 67.9356 18871 35.7192 9922
7800 67.1544 18654 35.1216 9756
7900 66.3228 18423 35.0424 9734
8000 65.5164 18199 34.452 9570
8100 64.7136 17976 34.1208 9478
8200 63.7632 17712 33.6888 9358
8300 62.8956 17471 33.3468 9263
8400 62.3088 17308 32.9328 9148
8500 61.5744 17104 32.3748 8993
8600 60.7428 16873 32.0544 8904
8700 60.0732 16687 31.8816 8856
8800 59.3424 16484 31.3884 8719
8900 58.7412 16317 30.9672 8602
9000 58.1184 16144 30.618 8505
9100 57.4812 15967 30.402 8445
9200 56.9052 15807 29.9808 8328
9300 56.3076 15641 29.88 8300
9400 55.7136 15476 29.232 8120
9500 55.1412 15317 29.1168 8088
9600 54.612 15170 28.8288 8008
9700 54.0072 15002 28.6416 7956
9800 53.568 14880 28.278 7855
9900 53.01 14725 28.1196 7811
10000 52.524 14590 27.7812 7717
10100 52.038 14455 27.5184 7644
10200 51.4728 14298 27.216 7560
10300 51.0516 14181 27.0144 7504
10400 50.562 14045 26.6976 7416
10500 50.1084 13919 26.586 7385
10600 49.5972 13777 26.0964 7249
10700 49.068 13630 26.0388 7233
10800 48.7368 13538 25.7148 7143
10900 48.3372 13427 25.6104 7114
11000 47.8656 13296 25.1892 6997
11100 47.4372 13177 25.2216 7006
11200 47.0268 13063 24.93 6925
11300 46.6272 12952 24.7428 6873
11400 46.224 12840 24.4764 6799
11500 45.9 12750 24.2568 6738
11600 45.4392 12622 23.9616 6656
11700 45.0864 12524 23.868 6630
11800 44.7552 12432 23.5476 6541
11900 44.3484 12319 23.508 6530
12000 43.9632 12212 23.2344 6454
12100 43.6212 12117 23.0904 6414
12200 43.2576 12016 22.8276 6341
12300 42.9192 11922 22.7052 6307
12400 42.588 11830 22.4568 6238
12500 42.2748 11743 22.4316 6231
12600 41.904 11640 22.086 6135
12700 41.4396 11511 22.1112 6142
12800 41.3028 11473 21.8196 6061
12900 40.932 11370 21.8196 6061
13000 40.5792 11272 21.456 5960
13100 39.9996 11111 21.4488 5958
13200 40.0896 11136 21.1356 5871
13300 39.7188 11033 21.186 5885
13400 39.4992 10972 20.844 5790
13500 38.9052 10807 20.7972 5777
13600 38.8656 10796 20.6316 5731
13700 38.6424 10734 20.4876 5691
13800 38.4012 10667 20.3544 5654
13900 37.908 10530 20.2464 5624
14000 37.818 10505 20.0952 5582
14100 37.5264 10424 19.9512 5542
14200 37.3068 10363 19.8 5500
14300 36.7632 10212 19.6776 5466
14400 36.756 10210 19.512 5420
14500 36.2448 10068 19.404 5390
14600 35.8848 9968 19.224 5340
14700 35.5932 9887 19.152 5320
14800 35.8596 9961 18.9576 5266
14900 35.5932 9887 18.936 5260
15000 35.3448 9818 18.7524 5209
15100 34.9992 9722 18.5508 5153
15200 34.83 9675 18.4536 5126
15300 34.5312 9592 18.3888 5108
15400 34.4376 9566 18.2268 5063
15500 34.1496 9486 18.09 5025
15600 33.948 9430 18.0396 5011
15700 33.786 9385 17.8884 4969
15800 33.5592 9322 17.8056 4946
15900 33.39 9275 17.55 4875
16000 33.156 9210 17.586 4885
16100 32.9472 9152 17.4744 4854
16200 30.1572 8377 17.37 4825
16300 32.3748 8993 17.1792 4772
16400 28.692 7970 17.154 4765
16500 32.2236 8951 17.0856 4746
16600 29.9196 8311 16.9596 4711
16700 31.5864 8774 16.7976 4666
16800 29.4768 8188 16.722 4645
16900 31.4136 8726 16.578 4605
17000 30.9924 8609 16.542 4595
17100 30.8988 8583 16.2288 4508
17200 26.5284 7369 16.3656 4546
17300 29.8476 8291 16.2648 4518
17400 29.7612 8267 16.1064 4474
17500 29.8224 8284 16.1136 4476
17600 29.682 8245 16.0164 4449
17700 28.278 7855 15.9084 4419
17800 27.0648 7518 15.8256 4396
17900 28.8036 8001 15.7248 4368
18000 28.6632 7962 15.588 4330
18100 29.2104 8114 15.5376 4316
18200 29.0124 8059 15.0948 4193
18300 28.9476 8041 15.3936 4276
18400 28.1844 7829 15.0948 4193
18500 28.638 7955 15.2028 4223
18600 19.944 5540 15.1236 4201
18700 26.8704 7464 14.9976 4166
18800 26.4636 7351 14.5404 4039
18900 27.2916 7581 14.904 4140
19000 19.4472 5402 14.8284 4119
19100 20.7324 5759 14.6124 4059
19200 27.0036 7501 14.6268 4063
19300 17.2404 4789 14.6124 4059
19400 18.7884 5219 14.5512 4042
19500 22.6368 6288 14.3208 3978
19600 21.006 5835 14.3532 3987
19700 22.6908 6303 13.7556 3821
19800 21.2328 5898 13.968 3880
19900 20.4264 5674 14.1336 3926
20000 23.7816 6606 13.2408 3678
20100 26.2836 7301 13.8384 3844
20200 23.814 6615 13.4208 3728
20300 20.9592 5822 13.698 3805
20400 17.3592 4822 13.7628 3823
20500 18.8928 5248 13.752 3820
20600 25.1712 6992 13.6584 3794
20700 24.9048 6918 12.9924 3609
20800 21.7872 6052 13.4676 3741
20900 16.7508 4653 13.32 3700
21000 22.6332 6287 13.3884 3719
21100 19.2132 5337 13.3308 3703
21200 19.1808 5328 12.9348 3593
21300 21.3732 5937 12.7548 3543
21400 18.8496 5236 13.2048 3668
21500 18.6732 5187 13.1148 3643
21600 17.2656 4796 12.906 3585
21700 14.2308 3953 12.9456 3596
21800 14.796 4110 12.9384 3594
21900 14.04 3900 12.8232 3562
22000 23.0292 6397 12.7872 3552
22100 13.2192 3672 11.8332 3287
22200 23.3568 6488 12.3624 3434
22300 14.0364 3899 10.9944 3054
22400 14.7132 4087 11.9304 3314
22500 17.4312 4842 12.51 3475
22600 14.5548 4043 12.4272 3452
22700 11.772 3270 11.7792 3272
22800 19.422 5395 12.3768 3438
22900 11.682 3245 11.4156 3171
23000 11.1456 3096 11.9376 3316
23100 14.904 4140 11.3868 3163
23200 13.6476 3791 11.8008 3278
23300 10.2564 2849 11.3364 3149
23400 12.5064 3474 10.8108 3003
23500 14.364 3990 10.8756 3021
23600 12.1356 3371 10.8576 3016
23700 11.5596 3211 10.9152 3032
23800 12.996 3610 10.6308 2953
23900 12.42 3450 11.3472 3152
24000 11.7396 3261 11.4192 3172
24100 17.6688 4908 10.728 2980
24200 10.854 3015 10.5372 2927
24300 11.7216 3256 10.5624 2934
24400 12.3876 3441 10.4148 2893
24500 12.0024 3334 11.0304 3064
24600 12.5964 3499 10.2636 2851
24700 14.8824 4134 10.4652 2907
24800 10.7748 2993 9.7776 2716
24900 10.2492 2847 9.9 2750
25000 10.8828 3023 9.9288 2758
25100 9.4032 2612 9.936 2760
25200 11.0556 3071 10.3032 2862
25300 9.828 2730 10.9008 3028
25400 9.4608 2628 9.7452 2707
25500 9.2808 2578 9.846 2735
25600 8.5176 2366 9.99 2775
25700 9.3672 2602 9.18 2550
25800 8.442 2345 9.3456 2596
25900 9.9828 2773 9.756 2710
26000 10.3824 2884 9.7956 2721
26100 8.2152 2282 9.4428 2623
26200 7.6284 2119 10.4436 2901
26300 10.7316 2981 10.0692 2797
26400 9.2232 2562 9.5256 2646
26500 8.1936 2276 9.324 2590
26600 8.2008 2278 9.5292 2647
26700 8.658 2405 8.7084 2419
26800 7.6104 2114 9.2664 2574
26900 8.1576 2266 9.144 2540
27000 9.4428 2623 8.8596 2461
27100 7.5384 2094 8.3988 2333
27200 7.4808 2078 8.6472 2402
27300 7.0272 1952 8.6292 2397
27400 6.8868 1913 9.5292 2647
27500 6.984 1940 9.2268 2563
27600 6.6384 1844 8.2692 2297
27700 6.5736 1826 8.4348 2343
27800 6.8184 1894 8.7264 2424
27900 6.9192 1922 8.6148 2393
28000 6.1704 1714 8.91 2475
28100 6.6564 1849 8.5068 2363
28200 5.7168 1588 7.9632 2212
28300 6.408 1780 8.1432 2262
28400 6.8076 1891 8.0352 2232
28500 5.6448 1568 8.0388 2233
28600 6.7788 1883 8.3556 2321
28700 6.2388 1733 7.7112 2142
28800 5.7708 1603 7.866 2185
28900 6.0876 1691 7.5312 2092
29000 5.7168 1588 7.8408 2178
29100 5.5044 1529 7.8696 2186
29200 5.6124 1559 7.3548 2043
29300 5.4864 1524 7.1928 1998
29400 5.2164 1449 7.002 1945
29500 5.148 1430 7.3584 2044
29600 5.4504 1514 7.3728 2048
29700 5.0796 1411 7.7904 2164
29800 5.166 1435 7.0056 1946
29900 5.4144 1504 7.2072 2002
30000 5.3352 1482 6.75 1875

View File

@ -8,6 +8,7 @@
\usepackage{courier}
\usepackage{microtype}
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}
\usepackage{epigraph}
\setlength\epigraphwidth{8cm}
@ -18,6 +19,8 @@
\RequirePackage{mymacros}
\usepackage{tikz}
\usepackage{pgfplotstable}
\usepackage{csquotes}
\usepackage{float}
\lstset{basicstyle=\footnotesize\ttfamily,breaklines=true,xleftmargin=1cm}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,235 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="25cm" height="16cm" viewBox="625 -471 498 317" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<path style="fill: #770000" d="M 775.558 -270.043 L 795.091,-290 L 795.091,-195.553 L 775.558,-175.582 L 775.558,-270.043z"/>
<path style="fill: #770000" d="M 776.041 -269.576 L 795.559,-289.532 L 795.559,-195.056 L 776.041,-175.1 L 776.041,-269.576z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #aaaaaa" d="M 776.041 -269.576 L 795.559,-289.532 L 795.559,-195.056 L 776.041,-175.1 L 776.041,-269.576"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 775.558 -253.976 L 795.091,-273.918"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 775.558 -238.376 L 795.091,-258.274"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 775.558 -222.82 L 795.091,-242.733"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 775.558 -206.752 L 795.091,-227.572"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 775.558 -191.167 L 795.091,-210.612"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 782.708 -275.906 L 782.708,-259.853"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 787.942 -266.154 L 787.942,-250.116"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 783.19 -245.218 L 783.19,-230.613"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 788.424 -234.999 L 788.424,-220.89"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 783.673 -215.028 L 783.673,-198.975"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 788.907 -204.793 L 788.907,-188.755"/>
<path style="fill: #aa0000" d="M 747.926 -270.043 L 747.926,-254.458 L 775.558,-254.458 L 775.558,-270.043 L 747.926,-270.043z"/>
<path style="fill: #aa0000" d="M 748.394 -269.576 L 748.394,-253.976 L 776.041,-253.976 L 776.041,-269.576 L 748.394,-269.576z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 748.423 -253.976 L 776.041,-253.976 L 776.041,-269.576 L 748.423,-269.576"/>
<path style="fill: #aa0000" d="M 747.926 -254.458 L 747.926,-238.888 L 775.558,-238.888 L 775.558,-254.458 L 747.926,-254.458z"/>
<path style="fill: #aa0000" d="M 748.394 -253.976 L 748.394,-238.376 L 776.041,-238.376 L 776.041,-253.976 L 748.394,-253.976z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 748.423 -238.376 L 776.041,-238.376 L 776.041,-253.976 L 748.423,-253.976"/>
<path style="fill: #aa0000" d="M 747.926 -238.888 L 747.926,-223.288 L 775.558,-223.288 L 775.558,-238.888 L 747.926,-238.888z"/>
<path style="fill: #aa0000" d="M 748.394 -238.376 L 748.394,-222.82 L 776.041,-222.82 L 776.041,-238.376 L 748.394,-238.376z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 748.423 -222.82 L 776.041,-222.82 L 776.041,-238.376 L 748.423,-238.376"/>
<path style="fill: #aa0000" d="M 747.926 -223.288 L 747.926,-207.22 L 775.558,-207.22 L 775.558,-223.288 L 747.926,-223.288z"/>
<path style="fill: #aa0000" d="M 748.394 -222.82 L 748.394,-206.752 L 776.041,-206.752 L 776.041,-222.82 L 748.394,-222.82z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 748.423 -206.752 L 776.041,-206.752 L 776.041,-222.82 L 748.423,-222.82"/>
<path style="fill: #aa0000" d="M 747.926 -207.22 L 747.926,-191.65 L 775.558,-191.65 L 775.558,-207.22 L 747.926,-207.22z"/>
<path style="fill: #aa0000" d="M 748.394 -206.752 L 748.394,-191.167 L 776.041,-191.167 L 776.041,-206.752 L 748.394,-206.752z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 748.423 -191.167 L 776.041,-191.167 L 776.041,-206.752 L 748.423,-206.752"/>
<path style="fill: #aa0000" d="M 747.926 -191.65 L 747.926,-176.079 L 775.558,-176.079 L 775.558,-191.65 L 747.926,-191.65z"/>
<path style="fill: #aa0000" d="M 748.394 -191.167 L 748.394,-175.582 L 776.041,-175.582 L 776.041,-191.167 L 748.394,-191.167z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 748.423 -175.582 L 776.041,-175.582 L 776.041,-191.167 L 748.423,-191.167"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 757.444 -269.576 L 757.444,-253.99"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 766.523 -253.976 L 766.523,-238.917"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 757.444 -237.923 L 757.444,-222.835"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 766.523 -222.82 L 766.523,-207.264"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 757.444 -206.752 L 757.444,-191.182"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 766.523 -191.167 L 766.523,-176.094"/>
<path style="fill: #ff555d" d="M 747.926 -270.043 L 767.927,-290 L 795.091,-290 L 775.076,-270.043 L 747.926,-270.043z"/>
<path style="fill: #ff555d" d="M 748.394 -269.576 L 768.409,-289.532 L 795.559,-289.532 L 775.558,-269.576 L 748.394,-269.576z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 748.423 -269.576 L 768.409,-289.532 L 795.559,-289.532 L 775.558,-269.576 L 748.423,-269.576"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 783.146 -275.409 L 763.175,-275.409"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 757.444 -270.073 L 777.751,-290"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 759.842 -281.257 L 769.827,-281.257"/>
</g>
<g>
<rect style="fill: #b3b3b3" x="844.416" y="-290" width="45.4859" height="106.134"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 1.6; stroke: #000000" x="844.416" y="-290" width="45.4859" height="106.134"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="848.964" y="-283.632" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="848.964" y="-271.502" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="848.964" y="-259.373" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="848.964" y="-247.243" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="848.964" y="-232.688" width="22.743" height="7.27775"/>
<ellipse style="fill: #00ff00" cx="883.079" cy="-231.475" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="883.079" cy="-231.475" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: #ffff00" cx="883.079" cy="-226.623" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="883.079" cy="-226.623" rx="1.59201" ry="1.59201"/>
<rect style="fill: #ffffff" x="873.981" y="-230.262" width="5.45831" height="4.85183"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="873.981" y="-230.262" width="5.45831" height="4.85183"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 851.997 -215.706 L 851.997,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 859.578 -215.706 L 859.578,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 867.159 -215.706 L 867.159,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 874.74 -215.706 L 874.74,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 882.32 -215.706 L 882.32,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 889.901 -215.706 L 889.901,-189.173"/>
<polygon style="fill: #999999" points="835.318,-174.769 844.416,-192.963 844.416,-183.866 889.901,-183.866 889.901,-192.963 902.031,-174.769 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" points="835.318,-174.769 844.416,-192.963 844.416,-183.866 889.901,-183.866 889.901,-192.963 902.031,-174.769 "/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="868.675" y="-159.737">
<tspan x="868.675" y="-159.737">zotac-firewall</tspan>
</text>
</g>
<g>
<rect style="fill: #b3b3b3" x="634.416" y="-290" width="45.4859" height="106.134"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 1.6; stroke: #000000" x="634.416" y="-290" width="45.4859" height="106.134"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="638.964" y="-283.632" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="638.964" y="-271.502" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="638.964" y="-259.373" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="638.964" y="-247.243" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="638.964" y="-232.688" width="22.743" height="7.27775"/>
<ellipse style="fill: #00ff00" cx="673.079" cy="-231.475" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="673.079" cy="-231.475" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: #ffff00" cx="673.079" cy="-226.623" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="673.079" cy="-226.623" rx="1.59201" ry="1.59201"/>
<rect style="fill: #ffffff" x="663.981" y="-230.262" width="5.45831" height="4.85183"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="663.981" y="-230.262" width="5.45831" height="4.85183"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 641.997 -215.706 L 641.997,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 649.578 -215.706 L 649.578,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 657.159 -215.706 L 657.159,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 664.74 -215.706 L 664.74,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 672.32 -215.706 L 672.32,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 679.901 -215.706 L 679.901,-189.173"/>
<polygon style="fill: #999999" points="625.318,-174.769 634.416,-192.963 634.416,-183.866 679.901,-183.866 679.901,-192.963 692.031,-174.769 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" points="625.318,-174.769 634.416,-192.963 634.416,-183.866 679.901,-183.866 679.901,-192.963 692.031,-174.769 "/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="658.675" y="-159.737">
<tspan x="658.675" y="-159.737">zotac3</tspan>
</text>
</g>
<g>
<rect style="fill: #b3b3b3" x="1064.42" y="-290" width="45.4859" height="106.134"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 1.6; stroke: #000000" x="1064.42" y="-290" width="45.4859" height="106.134"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="1068.96" y="-283.632" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="1068.96" y="-271.502" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="1068.96" y="-259.373" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="1068.96" y="-247.243" width="36.3888" height="12.1296"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="1068.96" y="-232.688" width="22.743" height="7.27775"/>
<ellipse style="fill: #00ff00" cx="1103.08" cy="-231.475" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="1103.08" cy="-231.475" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: #ffff00" cx="1103.08" cy="-226.623" rx="1.59201" ry="1.59201"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="1103.08" cy="-226.623" rx="1.59201" ry="1.59201"/>
<rect style="fill: #ffffff" x="1093.98" y="-230.262" width="5.45831" height="4.85183"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="1093.98" y="-230.262" width="5.45831" height="4.85183"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 1072 -215.706 L 1072,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 1079.58 -215.706 L 1079.58,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 1087.16 -215.706 L 1087.16,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 1094.74 -215.706 L 1094.74,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 1102.32 -215.706 L 1102.32,-189.173"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 1109.9 -215.706 L 1109.9,-189.173"/>
<polygon style="fill: #999999" points="1055.32,-174.769 1064.42,-192.963 1064.42,-183.866 1109.9,-183.866 1109.9,-192.963 1122.03,-174.769 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" points="1055.32,-174.769 1064.42,-192.963 1064.42,-183.866 1109.9,-183.866 1109.9,-192.963 1122.03,-174.769 "/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="1088.67" y="-159.737">
<tspan x="1088.67" y="-159.737">zotac4</tspan>
</text>
</g>
<g>
<path style="fill: #770000" d="M 982.951 -270.043 L 1002.48,-290 L 1002.48,-195.553 L 982.951,-175.582 L 982.951,-270.043z"/>
<path style="fill: #770000" d="M 983.433 -269.576 L 1002.95,-289.532 L 1002.95,-195.056 L 983.433,-175.1 L 983.433,-269.576z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.1; stroke: #aaaaaa" d="M 983.433 -269.576 L 1002.95,-289.532 L 1002.95,-195.056 L 983.433,-175.1 L 983.433,-269.576"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 982.951 -253.976 L 1002.48,-273.918"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 982.951 -238.376 L 1002.48,-258.274"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 982.951 -222.82 L 1002.48,-242.733"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 982.951 -206.752 L 1002.48,-227.572"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 982.951 -191.167 L 1002.48,-210.612"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 990.1 -275.906 L 990.1,-259.853"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 995.334 -266.154 L 995.334,-250.116"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 990.582 -245.218 L 990.582,-230.613"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 995.816 -234.999 L 995.816,-220.89"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 991.065 -215.028 L 991.065,-198.975"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 996.299 -204.793 L 996.299,-188.755"/>
<path style="fill: #aa0000" d="M 955.318 -270.043 L 955.318,-254.458 L 982.951,-254.458 L 982.951,-270.043 L 955.318,-270.043z"/>
<path style="fill: #aa0000" d="M 955.786 -269.576 L 955.786,-253.976 L 983.433,-253.976 L 983.433,-269.576 L 955.786,-269.576z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 955.815 -253.976 L 983.433,-253.976 L 983.433,-269.576 L 955.815,-269.576"/>
<path style="fill: #aa0000" d="M 955.318 -254.458 L 955.318,-238.888 L 982.951,-238.888 L 982.951,-254.458 L 955.318,-254.458z"/>
<path style="fill: #aa0000" d="M 955.786 -253.976 L 955.786,-238.376 L 983.433,-238.376 L 983.433,-253.976 L 955.786,-253.976z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 955.815 -238.376 L 983.433,-238.376 L 983.433,-253.976 L 955.815,-253.976"/>
<path style="fill: #aa0000" d="M 955.318 -238.888 L 955.318,-223.288 L 982.951,-223.288 L 982.951,-238.888 L 955.318,-238.888z"/>
<path style="fill: #aa0000" d="M 955.786 -238.376 L 955.786,-222.82 L 983.433,-222.82 L 983.433,-238.376 L 955.786,-238.376z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 955.815 -222.82 L 983.433,-222.82 L 983.433,-238.376 L 955.815,-238.376"/>
<path style="fill: #aa0000" d="M 955.318 -223.288 L 955.318,-207.22 L 982.951,-207.22 L 982.951,-223.288 L 955.318,-223.288z"/>
<path style="fill: #aa0000" d="M 955.786 -222.82 L 955.786,-206.752 L 983.433,-206.752 L 983.433,-222.82 L 955.786,-222.82z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 955.815 -206.752 L 983.433,-206.752 L 983.433,-222.82 L 955.815,-222.82"/>
<path style="fill: #aa0000" d="M 955.318 -207.22 L 955.318,-191.65 L 982.951,-191.65 L 982.951,-207.22 L 955.318,-207.22z"/>
<path style="fill: #aa0000" d="M 955.786 -206.752 L 955.786,-191.167 L 983.433,-191.167 L 983.433,-206.752 L 955.786,-206.752z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 955.815 -191.167 L 983.433,-191.167 L 983.433,-206.752 L 955.815,-206.752"/>
<path style="fill: #aa0000" d="M 955.318 -191.65 L 955.318,-176.079 L 982.951,-176.079 L 982.951,-191.65 L 955.318,-191.65z"/>
<path style="fill: #aa0000" d="M 955.786 -191.167 L 955.786,-175.582 L 983.433,-175.582 L 983.433,-191.167 L 955.786,-191.167z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #c7c7c7" d="M 955.815 -175.582 L 983.433,-175.582 L 983.433,-191.167 L 955.815,-191.167"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 964.836 -269.576 L 964.836,-253.99"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 973.915 -253.976 L 973.915,-238.917"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 964.836 -237.923 L 964.836,-222.835"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 973.915 -222.82 L 973.915,-207.264"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 964.836 -206.752 L 964.836,-191.182"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #aaaaaa" d="M 973.915 -191.167 L 973.915,-176.094"/>
<path style="fill: #ff555d" d="M 955.318 -270.043 L 975.319,-290 L 1002.48,-290 L 982.468,-270.043 L 955.318,-270.043z"/>
<path style="fill: #ff555d" d="M 955.786 -269.576 L 975.801,-289.532 L 1002.95,-289.532 L 982.951,-269.576 L 955.786,-269.576z"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 955.815 -269.576 L 975.801,-289.532 L 1002.95,-289.532 L 982.951,-269.576 L 955.815,-269.576"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 990.538 -275.409 L 970.567,-275.409"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 964.836 -270.073 L 985.144,-290"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.6; stroke: #e2e2e2" d="M 967.234 -281.257 L 977.219,-281.257"/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="680.669" y1="-232.384" x2="833.893" y2="-232.384"/>
<polygon style="fill: #000000" points="841.393,-232.384 831.393,-227.384 833.893,-232.384 831.393,-237.384 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="841.393,-232.384 831.393,-227.384 833.893,-232.384 831.393,-237.384 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="1063.61" y1="-232.384" x2="900.439" y2="-232.384"/>
<polygon style="fill: #000000" points="892.939,-232.384 902.939,-237.384 900.439,-232.384 902.939,-227.384 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="892.939,-232.384 902.939,-237.384 900.439,-232.384 902.939,-227.384 "/>
</g>
<g>
<rect style="fill: #b3b3b3" x="820" y="-380" width="92.7273" height="40.8"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 1.6; stroke: #000000" x="820" y="-380" width="92.7273" height="40.8"/>
<rect style="fill: #000000" x="829.273" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="838.545" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="847.818" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="857.091" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="866.364" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="875.636" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="884.909" y="-366.091" width="4.63636" height="4.45091"/>
<rect style="fill: #000000" x="894.182" y="-366.091" width="4.63636" height="4.45091"/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="866.364" y="-325.345">
<tspan x="866.364" y="-325.345"></tspan>
</text>
</g>
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="658.675,-290.791 658.675,-320 831.591,-320 831.591,-363.865 "/>
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="1088.67,-290 1088.67,-320 896.5,-320 896.5,-363.865 "/>
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="868.675,-290 868.675,-336.001 868.682,-336.001 868.682,-363.865 "/>
<g>
<rect style="fill: #b3b3b3" x="640.689" y="-470" width="44.1388" height="102.99"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 1.6; stroke: #000000" x="640.689" y="-470" width="44.1388" height="102.99"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="645.103" y="-463.821" width="35.311" height="11.7703"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="645.103" y="-452.05" width="35.311" height="11.7703"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="645.103" y="-440.28" width="35.311" height="11.7703"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="645.103" y="-428.51" width="35.311" height="11.7703"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="645.103" y="-414.385" width="22.0694" height="7.0622"/>
<ellipse style="fill: #00ff00" cx="678.207" cy="-413.208" rx="1.54486" ry="1.54486"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="678.207" cy="-413.208" rx="1.54486" ry="1.54486"/>
<ellipse style="fill: #ffff00" cx="678.207" cy="-408.5" rx="1.54486" ry="1.54486"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" cx="678.207" cy="-408.5" rx="1.54486" ry="1.54486"/>
<rect style="fill: #ffffff" x="669.379" y="-412.031" width="5.29665" height="4.70813"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x="669.379" y="-412.031" width="5.29665" height="4.70813"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 648.046 -397.907 L 648.046,-372.159"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 655.402 -397.907 L 655.402,-372.159"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 662.759 -397.907 L 662.759,-372.159"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 670.115 -397.907 L 670.115,-372.159"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 677.471 -397.907 L 677.471,-372.159"/>
<path style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" d="M 684.828 -397.907 L 684.828,-372.159"/>
<polygon style="fill: #999999" points="631.861,-358.182 640.689,-375.837 640.689,-367.01 684.828,-367.01 684.828,-375.837 696.598,-358.182 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" points="631.861,-358.182 640.689,-375.837 640.689,-367.01 684.828,-367.01 684.828,-375.837 696.598,-358.182 "/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="664.23" y="-343.239">
<tspan x="664.23" y="-343.239">zotac0</tspan>
</text>
</g>
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="859.409,-363.865 859.409,-420 685.318,-420 685.318,-420 "/>
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="1007.5" y="-240">
<tspan x="1007.5" y="-240">1 GBit/s</tspan>
</text>
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="688.045" y="-240">
<tspan x="688.045" y="-240">1 GBit/s</tspan>
</text>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB