Sebastian Rieger
4 years ago
12 changed files with 1170 additions and 0 deletions
-
99Materialien/Labs/AdvancedComputerNetworks-HS-Fulda/4_mininet_intro/customTopo.py
-
BINMaterialien/Labs/AdvancedComputerNetworks-HS-Fulda/4_mininet_intro/figures/logo.pdf
-
BINMaterialien/Labs/AdvancedComputerNetworks-HS-Fulda/4_mininet_intro/lab4.pdf
-
BINMaterialien/Labs/AdvancedComputerNetworks-HS-Fulda/4_mininet_intro/lab4.synctex.gz
-
250Materialien/Labs/AdvancedComputerNetworks-HS-Fulda/4_mininet_intro/lab4.tex
-
BINMaterialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/figures/logo.pdf
-
35Materialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/lab5.aux
-
511Materialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/lab5.log
-
13Materialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/lab5.out
-
BINMaterialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/lab5.pdf
-
BINMaterialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/lab5.synctex.gz
-
262Materialien/Labs/AdvancedComputerNetworks-HS-Fulda/5_p4_intro/lab5.tex
@ -0,0 +1,99 @@ |
|||||
|
from mininet.topo import Topo |
||||
|
from mininet.node import Node |
||||
|
from mininet.net import Mininet |
||||
|
from mininet.cli import CLI |
||||
|
from mininet.link import TCIntf |
||||
|
from enum import Enum |
||||
|
|
||||
|
|
||||
|
class NodeRoles(Enum): |
||||
|
ROUTER = 'Router' |
||||
|
SWITCH = 'Switch' |
||||
|
HOST = 'Host' |
||||
|
|
||||
|
|
||||
|
class Router(Node): |
||||
|
|
||||
|
def config(self, **params): |
||||
|
super(Router, self).config(**params) |
||||
|
self.cmd('sysctl net.ipv4.ip_forward=1') |
||||
|
self.waitOutput() |
||||
|
|
||||
|
def terminate(self): |
||||
|
self.cmd('sysctl net.ipv4.ip_forward=0') |
||||
|
self.waitOutput() |
||||
|
super(Router, self).terminate() |
||||
|
|
||||
|
def print_routing_table(self): |
||||
|
print(self.name + ' - Routing Table') |
||||
|
print(self.cmd('ip route')) |
||||
|
|
||||
|
|
||||
|
class CustomTopo(Topo): |
||||
|
|
||||
|
__LINK_BANDWIDTH = 1 |
||||
|
|
||||
|
def __init__(self): |
||||
|
Topo.__init__(self) |
||||
|
|
||||
|
def build(self): |
||||
|
|
||||
|
r1 = self.addNode('r1', cls=Router, ip=None, |
||||
|
role=NodeRoles.ROUTER.value) |
||||
|
|
||||
|
s1 = self.addSwitch('s1', role=NodeRoles.SWITCH.value) |
||||
|
s2 = self.addSwitch('s2', role=NodeRoles.SWITCH.value) |
||||
|
|
||||
|
h11 = self.addHost('h11', ip='10.0.1.11/24', |
||||
|
# inNamespace=False, |
||||
|
defaultRoute='via 10.0.1.254', |
||||
|
role=NodeRoles.HOST.value) |
||||
|
h12 = self.addHost('h12', ip='10.0.1.12/24', |
||||
|
defaultRoute='via 10.0.1.254', |
||||
|
role=NodeRoles.HOST.value) |
||||
|
|
||||
|
h21 = self.addHost('h21', ip='10.0.2.21/24', |
||||
|
defaultRoute='via 10.0.2.254', |
||||
|
role=NodeRoles.HOST.value) |
||||
|
h22 = self.addHost('h22', ip='10.0.2.22/24', |
||||
|
defaultRoute='via 10.0.2.254', |
||||
|
role=NodeRoles.HOST.value) |
||||
|
|
||||
|
for node1, node2 in [(h11, s1), (h12, s1), (h21, s2), (h22, s2)]: |
||||
|
self.addLink(node1, node2, |
||||
|
cls1=TCIntf, cls2=TCIntf, |
||||
|
intfName1=node1 + '-' + node2, |
||||
|
intfName2=node2 + '-' + node1, |
||||
|
params1={'bw': self.__LINK_BANDWIDTH}, |
||||
|
params2={'bw': self.__LINK_BANDWIDTH}) |
||||
|
|
||||
|
self.addLink(r1, s1, |
||||
|
cls1=TCIntf, cls2=TCIntf, |
||||
|
intfName1=r1 + '-' + s1, |
||||
|
intfName2=s1 + '-' + r1, |
||||
|
params1={'ip': '10.0.1.254/24', 'bw': self.__LINK_BANDWIDTH}, |
||||
|
params2={'bw': self.__LINK_BANDWIDTH}) |
||||
|
|
||||
|
self.addLink(r1, s2, |
||||
|
cls1=TCIntf, cls2=TCIntf, |
||||
|
intfName1=r1 + '-' + s2, |
||||
|
intfName2=s2 + '-' + r1, |
||||
|
params1={'ip': '10.0.2.254/24', 'bw': self.__LINK_BANDWIDTH}, |
||||
|
params2={'bw': self.__LINK_BANDWIDTH}) |
||||
|
|
||||
|
|
||||
|
def run(): |
||||
|
topo = CustomTopo() |
||||
|
net = Mininet(topo=topo) |
||||
|
net.start() |
||||
|
|
||||
|
for node in net.topo.nodes(): |
||||
|
print(net[node].params['role']) |
||||
|
net['r1'].print_routing_table() |
||||
|
|
||||
|
CLI(net) |
||||
|
net.stop() |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
run() |
@ -0,0 +1,250 @@ |
|||||
|
\documentclass[12pt,a4paper]{article} |
||||
|
|
||||
|
\usepackage[ngerman]{babel} |
||||
|
\usepackage[utf8]{inputenc} |
||||
|
\usepackage{geometry} |
||||
|
\usepackage{graphicx} |
||||
|
\usepackage{caption} |
||||
|
\usepackage{setspace} |
||||
|
\usepackage{float} |
||||
|
\usepackage{hyperref} |
||||
|
\usepackage{enumitem} |
||||
|
\usepackage{listings} |
||||
|
\lstset{ |
||||
|
basicstyle=\ttfamily\fontsize{10}{10}\selectfont, |
||||
|
tabsize=1, |
||||
|
frame=single, |
||||
|
} |
||||
|
|
||||
|
\onehalfspacing |
||||
|
|
||||
|
\geometry{a4paper, top=20mm, left=30mm, right=20mm, bottom=20mm, headsep=10mm, footskip=12mm} |
||||
|
|
||||
|
\hypersetup{ |
||||
|
unicode=true, |
||||
|
pdftitle={ACN-LAB4}, |
||||
|
pdfsubject={ACN-LAB4}, |
||||
|
pdfauthor={Sebastian~Rieger,Christoph~Hardegen}, |
||||
|
pdfkeywords={}, |
||||
|
colorlinks=true, |
||||
|
urlcolor=black, |
||||
|
linkcolor=black, |
||||
|
breaklinks=true, |
||||
|
citecolor=black, |
||||
|
filecolor=black} |
||||
|
|
||||
|
\begin{document} |
||||
|
|
||||
|
\begin{figure} |
||||
|
\begin{center} |
||||
|
\includegraphics[scale=0.5]{figures/logo.pdf} |
||||
|
\end{center} |
||||
|
\end{figure} |
||||
|
|
||||
|
\begin{center} |
||||
|
\begin{Huge} |
||||
|
\textsc{Advanced Computer Networks} \\ |
||||
|
\end{Huge} |
||||
|
\vspace{.5cm} |
||||
|
\begin{large} |
||||
|
\textsc{Lab 4: Mininet \& SDN Introduction} |
||||
|
\end{large} |
||||
|
\end{center} |
||||
|
|
||||
|
\section{Mininet} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Verschaffen Sie sich einen Überblick zu Mininet und |
||||
|
klären Sie folgende Fragestellungen: |
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Was ist Mininet und wo hat es seinen Ursprung? |
||||
|
\item Wie ist Mininet (grob) aufgebaut bzw. wie funktioniert es? |
||||
|
\item Was sind Einsatzszenarien für Mininet? |
||||
|
\end{itemize} |
||||
|
Relevante Informationen finden Sie z.B. unter \url{http://mininet.org/overview/}. \\ |
||||
|
----------------------------------------------------------------------------------------------------------------- |
||||
|
\item[] Die folgenden Aufgabenstellungen/Inhalte orientieren sich am Mininet Walkthrough (\url{http://mininet.org/walkthrough/}). |
||||
|
Für deren Bearbeitung erhalten Sie Zugriff auf eine vorbereitete virtuelle Maschine. |
||||
|
%\item Bilden Sie Gruppen von 2 bis max. 4 Personen und erfragen Sie einen Gruppenzugang zu einer benötigten VM. |
||||
|
%Melden Sie sich mit den Zugangsdaten auf Ihrer VM an. |
||||
|
\item Unter \url{http://192.168.76.212:17000} haben Sie aus dem VPN Zugriff auf eine Ubuntu 18.04 VM in der mininet bereits installiert ist. Melden Sie sich dafür ihren Gruppen-Accounts an (User: acn-groupXY, Passwort: netlab). Starten Sie die Standard-Topologie von Mininet: |
||||
|
\begin{lstlisting} |
||||
|
sudo mn |
||||
|
\end{lstlisting} |
||||
|
Welche Komponenten können Sie anhand der Ausgabe des Skripts identifizieren? |
||||
|
Wie sind diese miteinander verbunden? |
||||
|
Welche Rolle nehmen die einzelnen Komponenten innerhalb der Mininet-Topologie ein? |
||||
|
\item Rufen Sie die Hilfe der Mininet-CLI auf. |
||||
|
Verschaffen Sie sich einen Überblick über die verfügbaren Kommandos. |
||||
|
Testen Sie diese und interpretieren Sie die Ausgaben. |
||||
|
\begin{lstlisting} |
||||
|
mininet> help |
||||
|
|
||||
|
mininet> (dump | net | nodes | links | ports) |
||||
|
mininet> h1 (ifconfig | arp | route | tcpdump | ...) |
||||
|
mininet> pingall |
||||
|
mininet> h1 ping h2 |
||||
|
mininet> iperf h1 h2 |
||||
|
mininet> link s1 h1 (down | up) |
||||
|
mininet> xterm h1 |
||||
|
\end{lstlisting} |
||||
|
\item Stoppen Sie die Standard-Topologie: |
||||
|
\begin{lstlisting} |
||||
|
mininet> exit |
||||
|
\end{lstlisting} |
||||
|
Erzeugte Ressourcen werden normalerweise beim Stoppen gelöscht. |
||||
|
Ressourcen können auch manuell beseitigt werden (Cleanup, z.B. im Fehlerfall): |
||||
|
\begin{lstlisting} |
||||
|
sudo mn -c |
||||
|
\end{lstlisting} |
||||
|
\item Machen Sie sich mit den Optionen des Mininet-Kommandos vertraut: |
||||
|
\begin{lstlisting} |
||||
|
sudo mn --help |
||||
|
\end{lstlisting} |
||||
|
%\item Führen Sie Ihre Experimente mit weiteren Beispiel-Topologien durch: |
||||
|
\item Starten Sie folgende in Mininet enthaltene Beispiel-Topologien: |
||||
|
\begin{lstlisting} |
||||
|
sudo mn --topo single,4 |
||||
|
sudo mn --topo linear,4 |
||||
|
sudo mn --topo tree,depth=2,fanout=4 |
||||
|
\end{lstlisting} |
||||
|
Nutzen Sie die Ausgaben von Mininet-CLI-Kommandos, um die Topologien zu skizzieren. |
||||
|
Variieren Sie die Parameter und vollziehen Sie die Topologie-Änderungen nach.\\ |
||||
|
----------------------------------------------------------------------------------------------------------------- \\ |
||||
|
% Im Folgenden werden Sie eine eigene Topologie betrachten/entwickeln und dabei weitere Konzepte von bzw. die Programmierung mit Mininet kennenlernen. |
||||
|
% Die Implementierung der Custom-Topologie finden Sie in \texttt{customTopo.py}. |
||||
|
% \item Schauen Sie sich den Programmcode an und versuchen Sie diesen schrittweise nachzuvollziehen. |
||||
|
% Die folgenden Anmerkungen unterstützen Sie hierbei: |
||||
|
% \begin{itemize}[leftmargin=*] |
||||
|
% \setlength\itemsep{.1em} |
||||
|
% \item Der Import relevanter Mininet-Klassen erfolgt in den Zeilen 1 bis 5. |
||||
|
% \item Die Enumeration \texttt{NodeRoles} dient der Abbildung der Rollen verschiedener Komponenten in der Mininet-Topologie (Zeilen 9 bis 12). |
||||
|
% \item Die Klasse \texttt{Router} erweitert die Mininet-Klasse \texttt{Node} und bildet einen einfachen Router ab (Zeilen 15 bis 29). |
||||
|
% Die Methoden \texttt{config} und \texttt{terminate} werden implizit beim Erstellen/Starten bzw. dem Löschen/Stoppen aufgerufen. |
||||
|
% \item Die Klasse \texttt{CustomTopo} erweitert die Mininet-Klasse \texttt{Topo} und implementiert eine eigene Mininet-Topologie. |
||||
|
% \item In der \texttt{build}-Methode wird die Topologie konstruiert (Zeilen 39 bis 82). |
||||
|
% Die addNode-API wird für die Konstruktion des Routers (Zeilen 41 und 42), die addSwitch- bzw. addHost-API für die der Switches (Zeilen 44 und 45) bzw. Hosts (z.B. Zeilen 47 bis 50) verwendet, wobei die Erstellung durch die Übergabe einzelner Parameter bestimmt wird. |
||||
|
% Neben Standard-Parametern (siehe Mininet Python API Reference Manual) können weitere, eigene Parameter genutzt werden. |
||||
|
% In der Custom-Topologie wird dies anhand des Parameters \texttt{role} verdeutlicht (z.B. Zeile 42). |
||||
|
% Standardmäßig werden Mininet-Nodes in eigenen Linux Namespaces realisiert. |
||||
|
% Ein Mininet-Node kann jedoch auch im Standard-Namespace abgebildet werden (Zeile 48). |
||||
|
% Über die addLink-API werden die Links zwischen den einzelnen Komponenten der Mininet-Topologie erstellt (z.B. Zeilen 70 bis 75). |
||||
|
% \item Die \texttt{run}-Funktion definiert die Ausführung (Zeilen 85 bis 95). |
||||
|
% Hierbei wird zuerst eine Mininet-Topologie (Zeile 86) und basierend auf dieser im zweiten Schritt ein Mininet-Netz (Zeile 87) konstruiert. |
||||
|
% Daraufhin werden das Netzwerk und die Mininet-CLI gestartet (Zeilen 88 und 94). |
||||
|
% Der Zugriff auf erstellte Komponenten des Mininet-Netzes ist exemplarisch in den Zeilen 90 bis 92 gezeigt. |
||||
|
% Wird die Mininet-CLI verlassen, so werden alle Ressourcen der Topologie bzw. des Mininet-Netzes gelöscht (Zeile 95). |
||||
|
% \end{itemize} |
||||
|
% \item Starten Sie die Custom-Topologie und nutzen Sie die Mininet-CLI-Kommandos für verschiedene Experimente in dieser. |
||||
|
% Versuchen Sie die Konzepte, die in der Custom-Topologie angewandt werden, nachzuvollziehen. |
||||
|
% Verwenden Sie dabei z.B. die Kommandos \texttt{ping}, \texttt{tracepath}, \texttt{iperf}, \texttt{tcpdump}. |
||||
|
% \begin{lstlisting} |
||||
|
% sudo python customTopo.py |
||||
|
% \end{lstlisting} |
||||
|
% \item[] \textit{ANMERKUNG}: Die Custom-Topologie dient als einfaches Beispiel zur Einführung. |
||||
|
% In Ihren Topologien, die Sie im Rahmen der Programming Assignments implementieren, sollten Sie im Allgemeinen ähnliche Argumente parametrisieren (Konstanten) sowie zusammenhängende Elemente in Listen, Dictionaries oder ähnlichem organisieren. |
||||
|
% \item Stoppen und ergänzen Sie die Custom-Topologie um ein weiteres Netzwerk, bestehend aus einem Switch sowie zwei Hosts, und binden Sie dieses an den Router an. |
||||
|
% Starten Sie die Custom-Topologie und testen Sie Ihre Erweiterungen. \\ |
||||
|
|
||||
|
\section{Software-Defined Networking und OpenFlow} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Was verstehen Sie unter Software-Defined Networking? |
||||
|
\item Welche wesentlichen Komponenten existieren in einer SDN-Architektur? Skizzieren Sie eine beispielhafte SDN-Infrastruktur. |
||||
|
\item Was ist OpenFlow? Beschreiben Sie den Standard kurz. Gibt es Alternativen? |
||||
|
\end{itemize} |
||||
|
|
||||
|
\section{OpenFlow Switch} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Recherchieren Sie, was \texttt{Open vSwitch} ist und welche Features unterstützt werden: |
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item \url{http://www.openvswitch.org/} |
||||
|
\item \url{http://www.openvswitch.org/features/} |
||||
|
\end{itemize} |
||||
|
\item Vollziehen Sie die Implementierung der Mininet-Topologie: |
||||
|
|
||||
|
\url{https://mmnet.informatik.hs-fulda.de/OpenFlowTopo.py} |
||||
|
|
||||
|
nach. |
||||
|
Starten Sie die Topologie und beschreiben Sie deren Architektur nach der Ausführung: |
||||
|
\begin{lstlisting} |
||||
|
sudo python OpenFlowTopo.py |
||||
|
\end{lstlisting} |
||||
|
\item Testen Sie die Kommunikation zwischen den Hosts in der Topologie, z.B. über das Kommando \texttt{ping}. |
||||
|
Beobachten Sie zudem mit dem Kommando \texttt{tcpdump} oder mit \texttt{sudo wireshark-gtk}, welche Nachrichten von einem Host gesendet (und empfangen) werden. |
||||
|
Ist eine Kommunikation möglich? Was vermuten Sie als Ursache und wie lässt sich das Problem lösen? |
||||
|
\item Nutzen Sie die Kommandos \texttt{ovs-vsctl} und \texttt{ovs-ofctl} (weiteres Terminal), um relevante Informationen zum Switch in der Topologie zu erhalten (Ports, Tabellen, Flows, etc.): |
||||
|
\begin{lstlisting} |
||||
|
sudo ovs-vsctl show |
||||
|
|
||||
|
sudo ovs-ofctl [show | dump-ports | dump-flows] -O OpenFlow10 ofp-sw1 |
||||
|
mininet> dpctl [show | dump-ports | dump-flows] |
||||
|
|
||||
|
(ovs-vsctl | ovs-ofctl) --help |
||||
|
mininet> dpctl --help |
||||
|
\end{lstlisting} |
||||
|
\end{itemize} |
||||
|
|
||||
|
%\newpage |
||||
|
\section{OpenFlow Controller} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Recherchieren Sie, worum es sich bei \texttt{Ryu} handelt: |
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item \url{https://github.com/osrg/ryu#whats-ryu} |
||||
|
\item \url{https://ryu.readthedocs.io/en/latest/getting_started.html#what-s-ryu} |
||||
|
\end{itemize} |
||||
|
%\item Installieren Sie \texttt{Ryu} auf Ihrer virtuellen Maschine: |
||||
|
%\begin{lstlisting} |
||||
|
%pip install ryu |
||||
|
%\end{lstlisting} |
||||
|
\item Prüfen Sie den festgelegten Manager (Controller) für den Switch (weiteres Terminal): |
||||
|
\begin{lstlisting} |
||||
|
sudo ovs-vsctl get-manager |
||||
|
sudo netstat -tulpn | grep 6633 |
||||
|
\end{lstlisting} |
||||
|
Läuft der Controller? Wie hängt dies mit der Kommunikation der Hosts zusammen? |
||||
|
\item Überlegen Sie sich, welche Flows auf dem Switch installiert werden müssen, damit eine ICMP-Kommunikation zwischen den Hosts möglich wird. |
||||
|
Welche Matching-Felder und Actions benötigen Sie? (Tipp: \texttt{Ethertype IPv4} = \texttt{0x0800} und \texttt{ARP} = \texttt{0x0806}) |
||||
|
\item Ergänzen Sie die Ryu-Applikation: |
||||
|
|
||||
|
\url{https://mmnet.informatik.hs-fulda.de/OpenFlowApp.py} |
||||
|
|
||||
|
um die fehlenden Flows. |
||||
|
Mit Hilfe des Kommandos \texttt{ifconfig} können Sie die MAC- und IP-Adressen der Hosts ermitteln. |
||||
|
\item[] ANMERKUNG: Für das Löschen aller Flows auf dem Switch können Sie eines der folgenden Kommandos benutzen: |
||||
|
\begin{lstlisting} |
||||
|
sudo ovs-ofctl del-flows ofp-sw1 |
||||
|
mininet> dpctl del-flows |
||||
|
\end{lstlisting} |
||||
|
\item Starten Sie den OpenFlow Controller (weiteres Terminal): |
||||
|
\begin{lstlisting} |
||||
|
sudo ryu-manager OpenFlowApp.py |
||||
|
\end{lstlisting} |
||||
|
\item Überprüfen Sie die korrekte Installation der Flows auf dem Switch. |
||||
|
\item Testen Sie die Kommunikation zwischen den Hosts in der Topologie. |
||||
|
\end{itemize} |
||||
|
|
||||
|
\section{Wozu SDN?} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Welche Vorteile bietet Software-Defined Networking? |
||||
|
\item Welche Nachteile (Herausforderungen) ergeben sich durch SDN? |
||||
|
\item Was sind mögliche Einsatzszenarien von SDN? |
||||
|
%\item Gibt es mögliche Alternativen zu SDN? |
||||
|
\end{itemize} |
||||
|
|
||||
|
----------------------------------------------------------------------------------------------------------------- |
||||
|
\item Eine Vielzahl an Programmierbeispielen finden Sie im offiziellen GitHub-Repository von Mininet (\url{https://github.com/mininet/mininet/tree/master/examples}). |
||||
|
\item Die Dokumentation der Mininet Python API finden Sie im offiziellen Reference Manual (\url{http://mininet.org/api/index.html}). |
||||
|
\end{itemize} |
||||
|
\end{document} |
@ -0,0 +1,35 @@ |
|||||
|
\relax |
||||
|
\providecommand\hyper@newdestlabel[2]{} |
||||
|
\providecommand\babel@aux[2]{} |
||||
|
\@nameuse{bbl@beforestart} |
||||
|
\catcode `"\active |
||||
|
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} |
||||
|
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined |
||||
|
\global\let\oldcontentsline\contentsline |
||||
|
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} |
||||
|
\global\let\oldnewlabel\newlabel |
||||
|
\gdef\newlabel#1#2{\newlabelxx{#1}#2} |
||||
|
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} |
||||
|
\AtEndDocument{\ifx\hyper@anchor\@undefined |
||||
|
\let\contentsline\oldcontentsline |
||||
|
\let\newlabel\oldnewlabel |
||||
|
\fi} |
||||
|
\fi} |
||||
|
\global\let\hyper@last\relax |
||||
|
\gdef\HyperFirstAtBeginDocument#1{#1} |
||||
|
\providecommand\HyField@AuxAddToFields[1]{} |
||||
|
\providecommand\HyField@AuxAddToCoFields[2]{} |
||||
|
\babel@aux{ngerman}{} |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {1}Programmable Data Plane und P4}{1}{section.1}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {2}P4 Beispiel\,(1): Repeater}{1}{section.2}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {3}P4 Beispiel\,(2): Minimalistischer Layer 2 Switch}{2}{section.3}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Aufgabe 1: Hinzufügen von Tabelleneinträgen für die MAC-Adressen der Hosts}{2}{subsection.3.1}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Aufgabe 2: Hinzufügen einer Multicast-Gruppe}{3}{subsection.3.2}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Diskussion und nächste Schritte}{3}{subsection.3.3}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {4}P4 Beispiel\,(3): Learning Layer 2 Switch}{3}{section.4}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Aufgabe 1: Starten des Controllers}{4}{subsection.4.1}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Aufgabe 2: Neustart der Umgebung und Betrachtung der Wirkung von Flooding \& Filtering}{4}{subsection.4.2}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Diskussion und nächste Schritte}{5}{subsection.4.3}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {5}Direkte Verwendung der P4 Tools in der VM}{5}{section.5}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {6}Weiterführende Informationen}{5}{section.6}\protected@file@percent } |
||||
|
\@writefile{toc}{\contentsline {section}{\numberline {7}Eigene VM mit P4 Toolchain}{6}{section.7}\protected@file@percent } |
@ -0,0 +1,511 @@ |
|||||
|
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (MiKTeX 20.6.29) (preloaded format=pdflatex 2020.9.16) 14 JAN 2021 12:11 |
||||
|
entering extended mode |
||||
|
**./lab5.tex |
||||
|
(lab5.tex |
||||
|
LaTeX2e <2020-02-02> patch level 5 |
||||
|
L3 programming layer <2020-07-17> |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/base\article.cls" |
||||
|
Document Class: article 2019/12/20 v1.4l Standard LaTeX document class |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/base\size12.clo" |
||||
|
File: size12.clo 2019/12/20 v1.4l Standard LaTeX file (size option) |
||||
|
) |
||||
|
\c@part=\count168 |
||||
|
\c@section=\count169 |
||||
|
\c@subsection=\count170 |
||||
|
\c@subsubsection=\count171 |
||||
|
\c@paragraph=\count172 |
||||
|
\c@subparagraph=\count173 |
||||
|
\c@figure=\count174 |
||||
|
\c@table=\count175 |
||||
|
\abovecaptionskip=\skip47 |
||||
|
\belowcaptionskip=\skip48 |
||||
|
\bibindent=\dimen134 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/babel\babel.sty" |
||||
|
Package: babel 2020/07/13 3.47 The Babel package |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/babel\babel.def" |
||||
|
File: babel.def 2020/07/13 3.47 Babel common definitions |
||||
|
\babel@savecnt=\count176 |
||||
|
\U@D=\dimen135 |
||||
|
\l@babelnohyphens=\language83 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/babel\txtbabel.def") |
||||
|
\bbl@readstream=\read2 |
||||
|
) |
||||
|
\bbl@dirlevel=\count177 |
||||
|
|
||||
|
************************************* |
||||
|
* Local config file bblopts.cfg used |
||||
|
* |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/arabi\bblopts.cfg" |
||||
|
File: bblopts.cfg 2005/09/08 v0.1 add Arabic and Farsi to "declared" options of |
||||
|
babel |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/babel-german\ngerman.ldf" |
||||
|
Language: ngerman 2018/12/08 v2.11 German support for babel (post-1996 orthogra |
||||
|
phy) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/babel-german\ngermanb.ldf" |
||||
|
Language: ngermanb 2018/12/08 v2.11 German support for babel (post-1996 orthogr |
||||
|
aphy) |
||||
|
Package babel Info: Making " an active character on input line 121. |
||||
|
))) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/base\inputenc.sty" |
||||
|
Package: inputenc 2018/08/11 v1.3c Input encoding file |
||||
|
\inpenc@prehook=\toks15 |
||||
|
\inpenc@posthook=\toks16 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/geometry\geometry.sty" |
||||
|
Package: geometry 2020/01/02 v5.9 Page Geometry |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics\keyval.sty" |
||||
|
Package: keyval 2014/10/28 v1.15 key=value parser (DPC) |
||||
|
\KV@toks@=\toks17 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/iftex\ifvtex.sty" |
||||
|
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/iftex\iftex.sty" |
||||
|
Package: iftex 2020/03/06 v1.0d TeX engine tests |
||||
|
)) |
||||
|
\Gm@cnth=\count178 |
||||
|
\Gm@cntv=\count179 |
||||
|
\c@Gm@tempcnt=\count180 |
||||
|
\Gm@bindingoffset=\dimen136 |
||||
|
\Gm@wd@mp=\dimen137 |
||||
|
\Gm@odd@mp=\dimen138 |
||||
|
\Gm@even@mp=\dimen139 |
||||
|
\Gm@layoutwidth=\dimen140 |
||||
|
\Gm@layoutheight=\dimen141 |
||||
|
\Gm@layouthoffset=\dimen142 |
||||
|
\Gm@layoutvoffset=\dimen143 |
||||
|
\Gm@dimlist=\toks18 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/geometry\geometry.cfg")) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics\graphicx.sty" |
||||
|
Package: graphicx 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics\graphics.sty" |
||||
|
Package: graphics 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics\trig.sty" |
||||
|
Package: trig 2016/01/03 v1.10 sin cos tan (DPC) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics-cfg\graphics.cfg" |
||||
|
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration |
||||
|
) |
||||
|
Package graphics Info: Driver file: pdftex.def on input line 105. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics-def\pdftex.def" |
||||
|
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex |
||||
|
)) |
||||
|
\Gin@req@height=\dimen144 |
||||
|
\Gin@req@width=\dimen145 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/caption\caption.sty" |
||||
|
Package: caption 2020/05/30 v3.4k Customizing captions (AR) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/caption\caption3.sty" |
||||
|
Package: caption3 2020/05/30 v1.12 caption3 kernel (AR) |
||||
|
Package caption3 Info: TeX engine: e-TeX on input line 61. |
||||
|
\captionmargin=\dimen146 |
||||
|
\captionmargin@=\dimen147 |
||||
|
\captionwidth=\dimen148 |
||||
|
\caption@tempdima=\dimen149 |
||||
|
\caption@indent=\dimen150 |
||||
|
\caption@parindent=\dimen151 |
||||
|
\caption@hangindent=\dimen152 |
||||
|
Package caption Info: Standard document class detected. |
||||
|
) |
||||
|
\c@caption@flags=\count181 |
||||
|
\c@continuedfloat=\count182 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/setspace\setspace.sty" |
||||
|
Package: setspace 2011/12/19 v6.7a set line spacing |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/float\float.sty" |
||||
|
Package: float 2001/11/08 v1.3d Float enhancements (AL) |
||||
|
\c@float@type=\count183 |
||||
|
\float@exts=\toks19 |
||||
|
\float@box=\box45 |
||||
|
\@float@everytoks=\toks20 |
||||
|
\@floatcapt=\box46 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/hyperref\hyperref.sty" |
||||
|
Package: hyperref 2020-05-15 v7.00e Hypertext links for LaTeX |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/ltxcmds\ltxcmds.sty" |
||||
|
Package: ltxcmds 2019/12/15 v1.24 LaTeX kernel commands for general use (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/pdftexcmds\pdftexcmds.sty" |
||||
|
Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO |
||||
|
) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/infwarerr\infwarerr.sty" |
||||
|
Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) |
||||
|
) |
||||
|
Package pdftexcmds Info: \pdf@primitive is available. |
||||
|
Package pdftexcmds Info: \pdf@ifprimitive is available. |
||||
|
Package pdftexcmds Info: \pdfdraftmode found. |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/kvsetkeys\kvsetkeys.sty" |
||||
|
Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/kvdefinekeys\kvdefinekeys.sty" |
||||
|
Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/pdfescape\pdfescape.sty" |
||||
|
Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/hycolor\hycolor.sty" |
||||
|
Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/letltxmacro\letltxmacro.sty" |
||||
|
Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/auxhook\auxhook.sty" |
||||
|
Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/kvoptions\kvoptions.sty" |
||||
|
Package: kvoptions 2019/11/29 v3.13 Key value format for package options (HO) |
||||
|
) |
||||
|
\@linkdim=\dimen153 |
||||
|
\Hy@linkcounter=\count184 |
||||
|
\Hy@pagecounter=\count185 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/hyperref\pd1enc.def" |
||||
|
File: pd1enc.def 2020-05-15 v7.00e Hyperref: PDFDocEncoding definition (HO) |
||||
|
Now handling font encoding PD1 ... |
||||
|
... no UTF-8 mapping file for font encoding PD1 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/intcalc\intcalc.sty" |
||||
|
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/etexcmds\etexcmds.sty" |
||||
|
Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO) |
||||
|
) |
||||
|
\Hy@SavedSpaceFactor=\count186 |
||||
|
Package hyperref Info: Hyper figures OFF on input line 4464. |
||||
|
Package hyperref Info: Link nesting OFF on input line 4469. |
||||
|
Package hyperref Info: Hyper index ON on input line 4472. |
||||
|
Package hyperref Info: Plain pages OFF on input line 4479. |
||||
|
Package hyperref Info: Backreferencing OFF on input line 4484. |
||||
|
Package hyperref Info: Implicit mode ON; LaTeX internals redefined. |
||||
|
Package hyperref Info: Bookmarks ON on input line 4717. |
||||
|
\c@Hy@tempcnt=\count187 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/url\url.sty" |
||||
|
\Urlmuskip=\muskip16 |
||||
|
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. |
||||
|
) |
||||
|
LaTeX Info: Redefining \url on input line 5076. |
||||
|
\XeTeXLinkMargin=\dimen154 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/bitset\bitset.sty" |
||||
|
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/bigintcalc\bigintcalc.sty" |
||||
|
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO |
||||
|
) |
||||
|
)) |
||||
|
\Fld@menulength=\count188 |
||||
|
\Field@Width=\dimen155 |
||||
|
\Fld@charsize=\dimen156 |
||||
|
Package hyperref Info: Hyper figures OFF on input line 6347. |
||||
|
Package hyperref Info: Link nesting OFF on input line 6352. |
||||
|
Package hyperref Info: Hyper index ON on input line 6355. |
||||
|
Package hyperref Info: backreferencing OFF on input line 6362. |
||||
|
Package hyperref Info: Link coloring OFF on input line 6367. |
||||
|
Package hyperref Info: Link coloring with OCG OFF on input line 6372. |
||||
|
Package hyperref Info: PDF/A mode OFF on input line 6377. |
||||
|
LaTeX Info: Redefining \ref on input line 6417. |
||||
|
LaTeX Info: Redefining \pageref on input line 6421. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/atbegshi\atbegshi.sty" |
||||
|
Package: atbegshi 2019/12/05 v1.19 At begin shipout hook (HO) |
||||
|
) |
||||
|
\Hy@abspage=\count189 |
||||
|
\c@Item=\count190 |
||||
|
\c@Hfootnote=\count191 |
||||
|
) |
||||
|
Package hyperref Info: Driver (autodetected): hpdftex. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/hyperref\hpdftex.def" |
||||
|
File: hpdftex.def 2020-05-15 v7.00e Hyperref driver for pdfTeX |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/atveryend\atveryend.sty" |
||||
|
Package: atveryend 2019-12-11 v1.11 Hooks at the very end of document (HO) |
||||
|
Package atveryend Info: \enddocument detected (standard20110627). |
||||
|
) |
||||
|
\Fld@listcount=\count192 |
||||
|
\c@bookmark@seq@number=\count193 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/rerunfilecheck\rerunfilecheck.sty" |
||||
|
Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/uniquecounter\uniquecounter.sty" |
||||
|
Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) |
||||
|
) |
||||
|
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 |
||||
|
86. |
||||
|
) |
||||
|
\Hy@SectionHShift=\skip49 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/enumitem\enumitem.sty" |
||||
|
Package: enumitem 2019/06/20 v3.9 Customized lists |
||||
|
\labelindent=\skip50 |
||||
|
\enit@outerparindent=\dimen157 |
||||
|
\enit@toks=\toks21 |
||||
|
\enit@inbox=\box47 |
||||
|
\enit@count@id=\count194 |
||||
|
\enitdp@description=\count195 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/listings\listings.sty" |
||||
|
\lst@mode=\count196 |
||||
|
\lst@gtempboxa=\box48 |
||||
|
\lst@token=\toks22 |
||||
|
\lst@length=\count197 |
||||
|
\lst@currlwidth=\dimen158 |
||||
|
\lst@column=\count198 |
||||
|
\lst@pos=\count199 |
||||
|
\lst@lostspace=\dimen159 |
||||
|
\lst@width=\dimen160 |
||||
|
\lst@newlines=\count266 |
||||
|
\lst@lineno=\count267 |
||||
|
\lst@maxwidth=\dimen161 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/listings\lstmisc.sty" |
||||
|
File: lstmisc.sty 2020/03/24 1.8d (Carsten Heinz) |
||||
|
\c@lstnumber=\count268 |
||||
|
\lst@skipnumbers=\count269 |
||||
|
\lst@framebox=\box49 |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/listings\listings.cfg" |
||||
|
File: listings.cfg 2020/03/24 1.8d listings configuration |
||||
|
)) |
||||
|
Package: listings 2020/03/24 1.8d (Carsten Heinz) |
||||
|
Package hyperref Info: Option `unicode' set `true' on input line 35. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/hyperref\puenc.def" |
||||
|
File: puenc.def 2020-05-15 v7.00e Hyperref: PDF Unicode definition (HO) |
||||
|
Now handling font encoding PU ... |
||||
|
... no UTF-8 mapping file for font encoding PU |
||||
|
) |
||||
|
Package hyperref Info: Option `colorlinks' set `true' on input line 35. |
||||
|
Package hyperref Info: Option `breaklinks' set `true' on input line 35. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/l3backend\l3backend-pdfmode.def" |
||||
|
File: l3backend-pdfmode.def 2020-06-29 L3 backend support: PDF mode |
||||
|
\l__kernel_color_stack_int=\count270 |
||||
|
\l__pdf_internal_box=\box50 |
||||
|
) |
||||
|
(lab5.aux) |
||||
|
\openout1 = `lab5.aux'. |
||||
|
|
||||
|
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 37. |
||||
|
LaTeX Font Info: ... okay on input line 37. |
||||
|
|
||||
|
*geometry* driver: auto-detecting |
||||
|
*geometry* detected driver: pdftex |
||||
|
*geometry* verbose mode - [ preamble ] result: |
||||
|
* driver: pdftex |
||||
|
* paper: a4paper |
||||
|
* layout: <same size as paper> |
||||
|
* layoutoffset:(h,v)=(0.0pt,0.0pt) |
||||
|
* modes: |
||||
|
* h-part:(L,W,R)=(85.35826pt, 455.24411pt, 56.9055pt) |
||||
|
* v-part:(T,H,B)=(56.9055pt, 731.23584pt, 56.9055pt) |
||||
|
* \paperwidth=597.50787pt |
||||
|
* \paperheight=845.04684pt |
||||
|
* \textwidth=455.24411pt |
||||
|
* \textheight=731.23584pt |
||||
|
* \oddsidemargin=13.08827pt |
||||
|
* \evensidemargin=13.08827pt |
||||
|
* \topmargin=-55.81723pt |
||||
|
* \headheight=12.0pt |
||||
|
* \headsep=28.45274pt |
||||
|
* \topskip=12.0pt |
||||
|
* \footskip=34.1433pt |
||||
|
* \marginparwidth=35.0pt |
||||
|
* \marginparsep=10.0pt |
||||
|
* \columnsep=10.0pt |
||||
|
* \skip\footins=10.8pt plus 4.0pt minus 2.0pt |
||||
|
* \hoffset=0.0pt |
||||
|
* \voffset=0.0pt |
||||
|
* \mag=1000 |
||||
|
* \@twocolumnfalse |
||||
|
* \@twosidefalse |
||||
|
* \@mparswitchfalse |
||||
|
* \@reversemarginfalse |
||||
|
* (1in=72.27pt=25.4mm, 1cm=28.453pt) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/context/base/mkii\supp-pdf.mkii" |
||||
|
[Loading MPS to PDF converter (version 2006.09.02).] |
||||
|
\scratchcounter=\count271 |
||||
|
\scratchdimen=\dimen162 |
||||
|
\scratchbox=\box51 |
||||
|
\nofMPsegments=\count272 |
||||
|
\nofMParguments=\count273 |
||||
|
\everyMPshowfont=\toks23 |
||||
|
\MPscratchCnt=\count274 |
||||
|
\MPscratchDim=\dimen163 |
||||
|
\MPnumerator=\count275 |
||||
|
\makeMPintoPDFobject=\count276 |
||||
|
\everyMPtoPDFconversion=\toks24 |
||||
|
) ("C:\Program Files\MiKTeX 2.9\tex/latex/epstopdf-pkg\epstopdf-base.sty" |
||||
|
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf |
||||
|
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 |
||||
|
85. |
||||
|
) |
||||
|
Package caption Info: Begin \AtBeginDocument code. |
||||
|
Package caption Info: float package is loaded. |
||||
|
Package caption Info: hyperref package is loaded. |
||||
|
Package caption Info: listings package is loaded. |
||||
|
Package caption Info: End \AtBeginDocument code. |
||||
|
\AtBeginShipoutBox=\box52 |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics\color.sty" |
||||
|
Package: color 2019/11/23 v1.2a Standard LaTeX Color (DPC) |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/graphics-cfg\color.cfg" |
||||
|
File: color.cfg 2016/01/02 v1.6 sample color configuration |
||||
|
) |
||||
|
Package color Info: Driver file: pdftex.def on input line 147. |
||||
|
) |
||||
|
Package hyperref Info: Link coloring ON on input line 37. |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/hyperref\nameref.sty" |
||||
|
Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section |
||||
|
|
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/refcount\refcount.sty" |
||||
|
Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) |
||||
|
) |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/generic/gettitlestring\gettitlestring.sty" |
||||
|
Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) |
||||
|
) |
||||
|
\c@section@level=\count277 |
||||
|
) |
||||
|
LaTeX Info: Redefining \ref on input line 37. |
||||
|
LaTeX Info: Redefining \pageref on input line 37. |
||||
|
LaTeX Info: Redefining \nameref on input line 37. |
||||
|
|
||||
|
(lab5.out) (lab5.out) |
||||
|
\@outlinefile=\write3 |
||||
|
\openout3 = `lab5.out'. |
||||
|
|
||||
|
\c@lstlisting=\count278 |
||||
|
|
||||
|
|
||||
|
pdfTeX warning: pdflatex.exe (file ./figures/logo.pdf): PDF inclusion: found PD |
||||
|
F version <1.6>, but at most version <1.5> allowed |
||||
|
<figures/logo.pdf, id=55, 569.0058pt x 142.3719pt> |
||||
|
File: figures/logo.pdf Graphic file (type pdf) |
||||
|
<use figures/logo.pdf> |
||||
|
Package pdftex.def Info: figures/logo.pdf used on input line 41. |
||||
|
(pdftex.def) Requested size: 284.5022pt x 71.18576pt. |
||||
|
LaTeX Font Info: External font `cmex10' loaded for size |
||||
|
(Font) <12> on input line 70. |
||||
|
LaTeX Font Info: External font `cmex10' loaded for size |
||||
|
(Font) <8> on input line 70. |
||||
|
LaTeX Font Info: External font `cmex10' loaded for size |
||||
|
(Font) <6> on input line 70. |
||||
|
|
||||
|
Package hyperref Warning: Token not allowed in a PDF string (Unicode): |
||||
|
(hyperref) removing `\leavevmode@ifvmode' on input line 76. |
||||
|
|
||||
|
|
||||
|
Package hyperref Warning: Token not allowed in a PDF string (Unicode): |
||||
|
(hyperref) \kern 1.95836pt |
||||
|
(hyperref) removed on input line 76. |
||||
|
|
||||
|
[1 |
||||
|
|
||||
|
{C:/Users/flex/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map} <./figures/lo |
||||
|
go.pdf>] |
||||
|
LaTeX Font Info: Trying to load font information for TS1+cmtt on input line |
||||
|
91. |
||||
|
("C:\Program Files\MiKTeX 2.9\tex/latex/base\ts1cmtt.fd" |
||||
|
File: ts1cmtt.fd 2019/12/16 v2.5j Standard LaTeX font definitions |
||||
|
) |
||||
|
|
||||
|
Package hyperref Warning: Token not allowed in a PDF string (Unicode): |
||||
|
(hyperref) removing `\leavevmode@ifvmode' on input line 104. |
||||
|
|
||||
|
|
||||
|
Package hyperref Warning: Token not allowed in a PDF string (Unicode): |
||||
|
(hyperref) \kern 1.95836pt |
||||
|
(hyperref) removed on input line 104. |
||||
|
|
||||
|
|
||||
|
Overfull \hbox (1.41367pt too wide) in paragraph at lines 119--120 |
||||
|
\OT1/cmr/m/n/12 F[]ugen Sie Tabellen-Eintr[]age f[]ur die MAC-Adressen der Host |
||||
|
s ein. Ta-bel-len-ein-tr[]age m[]ussen |
||||
|
[] |
||||
|
|
||||
|
[2] |
||||
|
|
||||
|
Package hyperref Warning: Token not allowed in a PDF string (Unicode): |
||||
|
(hyperref) removing `\leavevmode@ifvmode' on input line 158. |
||||
|
|
||||
|
|
||||
|
Package hyperref Warning: Token not allowed in a PDF string (Unicode): |
||||
|
(hyperref) \kern 1.95836pt |
||||
|
(hyperref) removed on input line 158. |
||||
|
|
||||
|
[3] [4] [5] |
||||
|
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 262. |
||||
|
[6] |
||||
|
Package atveryend Info: Empty hook `AfterLastShipout' on input line 262. |
||||
|
(lab5.aux) |
||||
|
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 262. |
||||
|
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 262. |
||||
|
|
||||
|
|
||||
|
Package rerunfilecheck Warning: File `lab5.out' has changed. |
||||
|
(rerunfilecheck) Rerun to get outlines right |
||||
|
(rerunfilecheck) or use package `bookmark'. |
||||
|
|
||||
|
Package rerunfilecheck Info: Checksums for `lab5.out': |
||||
|
(rerunfilecheck) Before: C44EB47BB1DAE503E0268F9A205A9424;3548 |
||||
|
(rerunfilecheck) After: ECA07524F79B385F97715583A07B7C3B;3548. |
||||
|
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 262. |
||||
|
) |
||||
|
Here is how much of TeX's memory you used: |
||||
|
12950 strings out of 481191 |
||||
|
190358 string characters out of 2912753 |
||||
|
468523 words of memory out of 3000000 |
||||
|
28339 multiletter control sequences out of 15000+200000 |
||||
|
540907 words of font info for 49 fonts, out of 3000000 for 9000 |
||||
|
1141 hyphenation exceptions out of 8191 |
||||
|
43i,7n,43p,995b,1795s stack positions out of 5000i,500n,10000p,200000b,50000s |
||||
|
{C:/Program Files/MiKTeX 2.9/fonts/enc/dvips/cm-super/cm-super-ts1.enc}<C:/Pr |
||||
|
ogram Files/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmbx12.pfb><C:/Program Fi |
||||
|
les/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmcsc10.pfb><C:/Program Files/MiK |
||||
|
TeX 2.9/fonts/type1/public/amsfonts/cm/cmr12.pfb><C:/Program Files/MiKTeX 2.9/f |
||||
|
onts/type1/public/amsfonts/cm/cmtt10.pfb><C:/Program Files/MiKTeX 2.9/fonts/typ |
||||
|
e1/public/amsfonts/cm/cmtt12.pfb><C:/Program Files/MiKTeX 2.9/fonts/type1/publi |
||||
|
c/cm-super/sfrm1200.pfb><C:/Program Files/MiKTeX 2.9/fonts/type1/public/cm-supe |
||||
|
r/sftt1000.pfb> |
||||
|
Output written on lab5.pdf (6 pages, 416975 bytes). |
||||
|
PDF statistics: |
||||
|
184 PDF objects out of 1000 (max. 8388607) |
||||
|
58 named destinations out of 1000 (max. 500000) |
||||
|
110 words of extra memory for PDF output out of 10000 (max. 10000000) |
||||
|
|
@ -0,0 +1,13 @@ |
|||||
|
\BOOKMARK [1][-]{section.1}{\376\377\000P\000r\000o\000g\000r\000a\000m\000m\000a\000b\000l\000e\000\040\000D\000a\000t\000a\000\040\000P\000l\000a\000n\000e\000\040\000u\000n\000d\000\040\000P\0004}{}% 1 |
||||
|
\BOOKMARK [1][-]{section.2}{\376\377\000P\0004\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\050\0001\000\051\000:\000\040\000R\000e\000p\000e\000a\000t\000e\000r}{}% 2 |
||||
|
\BOOKMARK [1][-]{section.3}{\376\377\000P\0004\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\050\0002\000\051\000:\000\040\000M\000i\000n\000i\000m\000a\000l\000i\000s\000t\000i\000s\000c\000h\000e\000r\000\040\000L\000a\000y\000e\000r\000\040\0002\000\040\000S\000w\000i\000t\000c\000h}{}% 3 |
||||
|
\BOOKMARK [2][-]{subsection.3.1}{\376\377\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000H\000i\000n\000z\000u\000f\000\374\000g\000e\000n\000\040\000v\000o\000n\000\040\000T\000a\000b\000e\000l\000l\000e\000n\000e\000i\000n\000t\000r\000\344\000g\000e\000n\000\040\000f\000\374\000r\000\040\000d\000i\000e\000\040\000M\000A\000C\000-\000A\000d\000r\000e\000s\000s\000e\000n\000\040\000d\000e\000r\000\040\000H\000o\000s\000t\000s}{section.3}% 4 |
||||
|
\BOOKMARK [2][-]{subsection.3.2}{\376\377\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000H\000i\000n\000z\000u\000f\000\374\000g\000e\000n\000\040\000e\000i\000n\000e\000r\000\040\000M\000u\000l\000t\000i\000c\000a\000s\000t\000-\000G\000r\000u\000p\000p\000e}{section.3}% 5 |
||||
|
\BOOKMARK [2][-]{subsection.3.3}{\376\377\000D\000i\000s\000k\000u\000s\000s\000i\000o\000n\000\040\000u\000n\000d\000\040\000n\000\344\000c\000h\000s\000t\000e\000\040\000S\000c\000h\000r\000i\000t\000t\000e}{section.3}% 6 |
||||
|
\BOOKMARK [1][-]{section.4}{\376\377\000P\0004\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\050\0003\000\051\000:\000\040\000L\000e\000a\000r\000n\000i\000n\000g\000\040\000L\000a\000y\000e\000r\000\040\0002\000\040\000S\000w\000i\000t\000c\000h}{}% 7 |
||||
|
\BOOKMARK [2][-]{subsection.4.1}{\376\377\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000S\000t\000a\000r\000t\000e\000n\000\040\000d\000e\000s\000\040\000C\000o\000n\000t\000r\000o\000l\000l\000e\000r\000s}{section.4}% 8 |
||||
|
\BOOKMARK [2][-]{subsection.4.2}{\376\377\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000N\000e\000u\000s\000t\000a\000r\000t\000\040\000d\000e\000r\000\040\000U\000m\000g\000e\000b\000u\000n\000g\000\040\000u\000n\000d\000\040\000B\000e\000t\000r\000a\000c\000h\000t\000u\000n\000g\000\040\000d\000e\000r\000\040\000W\000i\000r\000k\000u\000n\000g\000\040\000v\000o\000n\000\040\000F\000l\000o\000o\000d\000i\000n\000g\000\040\000\046\000\040\000F\000i\000l\000t\000e\000r\000i\000n\000g}{section.4}% 9 |
||||
|
\BOOKMARK [2][-]{subsection.4.3}{\376\377\000D\000i\000s\000k\000u\000s\000s\000i\000o\000n\000\040\000u\000n\000d\000\040\000n\000\344\000c\000h\000s\000t\000e\000\040\000S\000c\000h\000r\000i\000t\000t\000e}{section.4}% 10 |
||||
|
\BOOKMARK [1][-]{section.5}{\376\377\000D\000i\000r\000e\000k\000t\000e\000\040\000V\000e\000r\000w\000e\000n\000d\000u\000n\000g\000\040\000d\000e\000r\000\040\000P\0004\000\040\000T\000o\000o\000l\000s\000\040\000i\000n\000\040\000d\000e\000r\000\040\000V\000M}{}% 11 |
||||
|
\BOOKMARK [1][-]{section.6}{\376\377\000W\000e\000i\000t\000e\000r\000f\000\374\000h\000r\000e\000n\000d\000e\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n\000e\000n}{}% 12 |
||||
|
\BOOKMARK [1][-]{section.7}{\376\377\000E\000i\000g\000e\000n\000e\000\040\000V\000M\000\040\000m\000i\000t\000\040\000P\0004\000\040\000T\000o\000o\000l\000c\000h\000a\000i\000n}{}% 13 |
@ -0,0 +1,262 @@ |
|||||
|
% !TeX spellcheck = de_DE |
||||
|
\documentclass[12pt,a4paper]{article} |
||||
|
|
||||
|
\usepackage[ngerman]{babel} |
||||
|
\usepackage[utf8]{inputenc} |
||||
|
\usepackage{geometry} |
||||
|
\usepackage{graphicx} |
||||
|
\usepackage{caption} |
||||
|
\usepackage{setspace} |
||||
|
\usepackage{float} |
||||
|
\usepackage{hyperref} |
||||
|
\usepackage{enumitem} |
||||
|
\usepackage{listings} |
||||
|
\lstset{ |
||||
|
basicstyle=\ttfamily\fontsize{10}{10}\selectfont, |
||||
|
tabsize=1, |
||||
|
frame=single, |
||||
|
} |
||||
|
|
||||
|
\onehalfspacing |
||||
|
|
||||
|
\geometry{a4paper, top=20mm, left=30mm, right=20mm, bottom=20mm, headsep=10mm, footskip=12mm} |
||||
|
|
||||
|
\hypersetup{ |
||||
|
unicode=true, |
||||
|
pdftitle={ACN-LAB6}, |
||||
|
pdfsubject={ACN-LAB6}, |
||||
|
pdfauthor={Sebastian~Rieger,Christoph~Hardegen}, |
||||
|
pdfkeywords={}, |
||||
|
colorlinks=true, |
||||
|
urlcolor=black, |
||||
|
linkcolor=black, |
||||
|
breaklinks=true, |
||||
|
citecolor=black, |
||||
|
filecolor=black} |
||||
|
|
||||
|
\begin{document} |
||||
|
|
||||
|
\begin{figure} |
||||
|
\begin{center} |
||||
|
\includegraphics[scale=0.5]{figures/logo.pdf} |
||||
|
\end{center} |
||||
|
\end{figure} |
||||
|
|
||||
|
\begin{center} |
||||
|
\begin{Huge} |
||||
|
\textsc{Advanced Computer Networks} \\ |
||||
|
\end{Huge} |
||||
|
\vspace{.5cm} |
||||
|
\begin{large} |
||||
|
\textsc{Lab 5: Programmable Data Plane \& P4 Introduction} |
||||
|
\end{large} |
||||
|
\end{center} |
||||
|
|
||||
|
\section{Programmable Data Plane und P4} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Was verstehen Sie unter Software-Defined Networking? |
||||
|
\item Was sind die Prinzipien und Konzepte von P4? |
||||
|
Wie hängen SDN und P4 zusammen? |
||||
|
\item Was sind die Unterschiede von OpenFlow und P4? |
||||
|
\end{itemize} |
||||
|
Relevante Informationen zu P4 finden Sie auch auf den am Ende des Kapitels genannten Links zu Tutorials und verwandten Lehrveranstaltungen. \\ |
||||
|
----------------------------------------------------------------------------------------------------------------- |
||||
|
|
||||
|
Die folgenden Aufgabenstellungen/Inhalte orientieren sich an den \href{https://github.com/p4lang/tutorials}{P4 Tutorials} und am \href{https://github.com/nsg-ethz/p4-learning}{p4-learning} Repository der NSG-ETHZ. |
||||
|
Für die Bearbeitung und die Projekte innerhalb Ihrer Gruppe erhalten Sie wie schon zuvor beim Mininet/SDN-Praktikum Zugriff auf eine vorbereitete virtuelle Maschine (Firecracker microVM). Ihre VMs erreichen Sie nun über: |
||||
|
|
||||
|
\url{https://prona.informatik.hs-fulda.de/guacamole/} |
||||
|
|
||||
|
Melden Sie sich mit ihrem Gruppen-Account an der VM mit der Endung P4 an (User: acn-groupXY, Passwort: netlab, VM: GruppeXY\_P4). |
||||
|
|
||||
|
Greifen Sie über den "learn-sdn-hub" Link auf dem Desktop auf die web-basierte P4-Umgebung für das Praktikum zu und loggen Sie sich mit Username: p4 und Password: p4 ein. |
||||
|
|
||||
|
\section{P4 Beispiel\,(1): Repeater} |
||||
|
Deployen Sie das Example1 und starten Sie das Assignment. Lassen Sie kurz das Repeater-Beispiel aus den Folien Revue passieren, indem Sie den P4 Code des Assignments anschauen und dann unter Terminals im BASH Terminal einen ping von h1 zu h2 starten: |
||||
|
\begin{lstlisting} |
||||
|
mininet> h1 ping h2 |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item An welcher Stelle im Programm wird die Logik des Repeaters umgesetzt? |
||||
|
\end{itemize} |
||||
|
|
||||
|
Überprüfen Sie Ihre Vermutung, indem Sie den Code verändern und anschließend auf Deploy klicken, um die Änderungen in der Umgebung zu speichern. Staren Sie danach mininet neu mit: |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
mininet> exit |
||||
|
p4@gruppeXY:~/p4-boilerplate/Example1-Repeater$ make clean |
||||
|
p4@gruppeXY:~/p4-boilerplate/Example1-Repeater$ make |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Hierbei wird ein Makefile in Anlehnung an die P4 tutorials verwendet, das Sie ebenfalls in einem Tab des Editors geöffnet haben. Das Makefile verwendet die Topologie in topology.json für die Anlegung der Hosts, Switches und Links dazwischen in mininet. Die Initialisierung des Switches erfolgt in s1-runtime.json und ist im Repeater Beispiel weitgehend leer. Sie können die Dateien auch im Terminal sehen, z.B. wenn Sie im BASH2 Terminal ls verwenden: |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
p4@gruppeXY:~/p4-boilerplate/Example1-Repeater$ ls |
||||
|
Makefile Makefile~ build logs pcaps pod-topo prona-repeater.p4 |
||||
|
p4@gruppeXY:~/p4-boilerplate/Example1-Repeater$ ls pod-topo |
||||
|
s1-runtime.json topology.json |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
\section{P4 Beispiel\,(2): Minimalistischer Layer 2 Switch} |
||||
|
Klicken Sie in der Menüleiste auf Assignments, deployen Sie das Example2 und starten Sie das Assignment. Lassen Sie kurz das Minimalistic-Switch-Beispiel aus den Folien Revue passieren, indem Sie den P4 Code des Assignments anschauen und dann unter Terminals im BASH Terminal einen ping von h1 zu h2 starten: |
||||
|
\begin{lstlisting} |
||||
|
mininet> h1 ping h2 |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Warum funktioniert der Ping nicht? |
||||
|
\item Was fehlt noch, obwohl der P4 Code für den Switch vollständig ist? |
||||
|
\item Wir beheben das Problem in Aufgabe 1 und 2. |
||||
|
\end{itemize} |
||||
|
|
||||
|
\subsection{Aufgabe 1: Hinzufügen von Tabelleneinträgen für die MAC-Adressen der Hosts} |
||||
|
|
||||
|
Fügen Sie Tabellen-Einträge für die MAC-Adressen der Hosts ein. Tabelleneinträge müssen zur Laufzeit (P4Runtime) z.B. durch die Control Plane (per CLI, Python API, gRPC) hinzugefügt werden. Sie können hierfür die simple\_switch\_CLI im BASH2 Terminal verwenden. |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
p4@gruppeXY:./Example2-MinimalisticSwitch$ simple_switch_CLI |
||||
|
RuntimeCmd: ? |
||||
|
RuntimeCmd: help table_add |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Beenden können Sie die simple\_switch\_CLI mit CTRL+C. |
||||
|
Fügen Sie in der Tabelle MyIngress.dstMacAddr für jeden Host einen Eintrag hinzu, und geben Sie eine Action (forward) und Parameter (egress port) an. Sie können mit TAB vervollständigen. Die MAC-Adressen der Hosts sehen Sie im Editor unter topology.json. Alternativ können Sie diese auch in mininet auf den Hosts nachschauen (z.B. "h1 ifconfig eth0"). Die erforderlichen Befehle stehen auch auf den Folien zur Lehrveranstaltung. |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
RuntimeCmd: table_add ... |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Testen Sie danach erneut den Ping. |
||||
|
|
||||
|
\subsection{Aufgabe 2: Hinzufügen einer Multicast-Gruppe} |
||||
|
|
||||
|
Fügen Sie auf dem Switch eines Multicast-Gruppe hinzu, um auch Broad- und Multicasts zu unterstützen. Erzeugen Sie die Multicast-Gruppe 1 (std\_meta.mcast\_grp = 1). Standardmäßig weiß der Switch nicht welche Ports zu welcher Broadcast Domain (z.B., VLAN) gehören sollen. Die erforderlichen Befehle stehen auch auf den Folien zur Lehrveranstaltung. |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
RuntimeCmd: help mc_mgrp_create |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Erzeugen Sie einen Node 0 und fügen Sie alle Ports (1, 2) zu ihm hinzu. Assoziieren Sie anschließend den Node mit der zuvor angelegten Multicast-Gruppe 1. |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
RuntimeCmd: help mc_node_create |
||||
|
RuntimeCmd: help mc_node_associate |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Nachdem Sie die Multicast-Gruppe den Node und die Assoziation angelegt haben, können Sie alle Einträge aus der Tabelle dstMacAddr entfernen, und der Ping sollte nun trotzdem noch funktionieren, da unbekannte MAC-Adressen per Default als broadcast gesendet werden (default\_action der Tabelle dstMacAddr). |
||||
|
|
||||
|
\subsection{Diskussion und nächste Schritte} |
||||
|
Der Ping von h1 zu h2 funktioniert und wir haben einen static Layer 2 switch realisiert. Neben Flooding (per Broadcast) kann dieser durch statische Einträge für die MAC-Addressen der Hosts auch Filtering für das Forwarding in der Data Plane umsetzen. |
||||
|
|
||||
|
Wie können wir ein dynamisches Lernen und Füllen der MAC-Adresstabelle erreichen und so die Funktion eines typischen realen Layer 2 Switches (flood \& filter) implementieren? |
||||
|
|
||||
|
\section{P4 Beispiel\,(3): Learning Layer 2 Switch} |
||||
|
Klicken Sie in der Menüleiste auf Assignments, deployen Sie das Example3 und starten Sie das Assignment. Lassen Sie kurz das Learning-Switch-Beispiel aus den Folien Revue passieren, indem Sie den P4 Code des Assignments anschauen und dann unter Terminals im BASH Terminal einen ping von h1 zu h2 starten: |
||||
|
\begin{lstlisting} |
||||
|
mininet> h1 ping h2 |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Warum funktioniert der Ping nicht? |
||||
|
\item Was fehlt noch, obwohl der P4 Code für den Switch vollständig ist? |
||||
|
\item Wir beheben das Problem in Aufgabe 1 und 2. |
||||
|
\end{itemize} |
||||
|
|
||||
|
\subsection{Aufgabe 1: Starten des Controllers} |
||||
|
|
||||
|
Starten Sie den Controller im BASH2 Terminal. |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
p4@gruppeXY:./Example3-LearningSwitch$ \ |
||||
|
sudo python learning_switch_controller_app.py s1 |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Sie finden den Code des Controllers im Editor Tab learning\_switch\_controller\_app.py. Der Parameter s1 gibt den |
||||
|
Namen des Switches an den der Controller verwalten soll. |
||||
|
Beobachten Sie im Terminal BASH2 die Aktionen, die der Controller auf |
||||
|
dem Switch s1 durchführt. |
||||
|
|
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Wie hängt dies mit Ihrer Verwendung von simple\_switch\_CLI beim Minimalistic-Switch zusammen? |
||||
|
\item Welche Vorteile entstehen hier im Vergleich zur Verwendung von simple\_switch\_CLI? |
||||
|
\end{itemize} |
||||
|
|
||||
|
\subsection{Aufgabe 2: Neustart der Umgebung und Betrachtung der Wirkung von Flooding \& Filtering} |
||||
|
|
||||
|
Stoppen Sie mininet im BASH Terminal und starten Sie die Umgebung neu: |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
mininet> exit |
||||
|
p4@gruppeXY:./Example3-LearningSwitch$ sudo p4run |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Starten Sie anschließend den Controller im BASH2 Terminal erneut: |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
p4@gruppeXY:./Example3-LearningSwitch$ \ |
||||
|
sudo python learning_switch_controller_app.py s1 |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Starten Sie im BASH3 Terminal tcpdump (simple Alternative zu Wireshark auf der CLI) auf h3. Der Befehl mx ist eine praktische Erweiterung aus der p4-learning Umgebung der ETHZ. Damit können Sie direkt im Terminal Befehle auf den Hosts im laufenden mininet ausführen. Die Umgebung bietet auch noch mxexec zum Ausführen von Befehlen in mininet. |
||||
|
|
||||
|
\begin{lstlisting} |
||||
|
p4@gruppeXY:./Example3-LearningSwitch$ mx h3 tcpdump |
||||
|
\end{lstlisting} |
||||
|
|
||||
|
Starten Sie in mininet im BASH Terminal einen Ping von h1 zu h2. |
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Welche Pakete vom Ping zwischen h1 und h2 sehen Sie auch an h3 im tcpdump im BASH3 Terminal? Warum? |
||||
|
\end{itemize} |
||||
|
|
||||
|
\subsection{Diskussion und nächste Schritte} |
||||
|
|
||||
|
Der Switch leitet Layer 2 Frames basierend auf ihrer Destination-MAC-Adresse weiter. Die Lösung implementiert die typische "flood \& filter" Funktion eines realen Layer 2 Switches. Broadcasts und Frames an unbekannte MAC-Adressen (unknown unicast) werden an alle Ports geflutet, außer dem Port über den das Frame am Switch empfangen wurde (einfache Vermeidung von Loops). Sie können die table\_add Zeilen im Controller auskommentieren, den Controller neu starten und sehen, dass dann alle Frames geflutet werden. Das Gleiche passiert, wenn die Tabelle voll ist, und deren default\_action greift. Genau das Gleiche passiert auch bei realen Switches. Frames an gelernte Ziel-MAC-Adressen werden vom Switch nur an die Ports weitergeleitet auf denen diese MAC-Adressen zuvor als Quelle gesehen wurde. |
||||
|
|
||||
|
Die Implementierung ist noch immer stark vereinfacht. Z.B. wird in der Lösung kein Aging bzw. Vergessen von MAC-Adressen unterstützt. Außerdem keine VLANs, kein STP usw. Trotzdem haben wir die essentiellen Bestandteile der Implementierung der Data Plane und Control Plane eines Layer 2 Switches explorativ kennengelernt. Basierend darauf können Sie fortgeschrittenere Network Elements und deren Funktionen implementieren. Sie können dafür z.B. die in Example1 und Example2 verwendete Umgebung der P4 Tutorials verwenden. Oder die p4-learning Umgebung, die in Example3 verwendet wurde. Eine umfassende integrierte P4-Entwicklungsumgebung bietet auch das p4environment, das im Example-p4env verwendet wird. |
||||
|
|
||||
|
\section{Direkte Verwendung der P4 Tools in der VM} |
||||
|
|
||||
|
Wir haben die web-basierte Umgebung learn-sdn-hub verwendet, um uns der Entwicklung von P4 Code anzunähern. Die Umgebung kapselt und abstrahiert die Entwicklung von P4 Code und die Verbindung per SSH zu einem Target Host, der über die erforderliche P4 Toolchain verfügt, um den Einstieg zu vereinfachen. Sie können für Ihre weiteren Experimente auch direkt, ohne die Web-Oberfläche, arbeiten. Auf dem Desktop finden Sie einen Link zu einem Terminal als Benutzer p4 (Passwort: p4). In ~/p4-boilerplate (bzw. /home/p4-boilerplate) wurden die o.g. Example1, Example2 und Example3 ausgeführt. In ~/tutorials finden Sie die kompletten Beispiele des offiziellen P4 Tutorials von p4lang. In ~/p4-learning ist die komplette p4-learning Umgebung der NSG der ETHZ zu finden. In ~/p4environment finden Sie das p4environment der Hochschule Fulda. Unter ~/p4-guide finden Sie den P4 Guide. Weiterführende Links hierzu finden Sie im nächsten Abschnitt des Übungsblatts. |
||||
|
|
||||
|
\section{Weiterführende Informationen} |
||||
|
\begin{itemize}[leftmargin=*] |
||||
|
\setlength\itemsep{.1em} |
||||
|
\item Verwendete Code-Beispiele (ProNA P4 boilerplate): |
||||
|
|
||||
|
\url{https://github.com/prona-p4-learning-platform/p4-boilerplate} |
||||
|
\item Verwendete Plattform (ProNA learn-sdn-hub): |
||||
|
|
||||
|
\url{https://github.com/prona-p4-learning-platform/learn-sdn-hub} |
||||
|
\item P4 Guide: |
||||
|
|
||||
|
\url{https://github.com/jafingerhut/p4-guide} |
||||
|
\item P4 Tutorials: |
||||
|
|
||||
|
\url{https://github.com/p4lang/tutorials} |
||||
|
\item p4-learning Umgebung der NSG der ETHZ: |
||||
|
|
||||
|
\url{https://github.com/nsg-ethz/p4-learning} |
||||
|
\item p4environment des NetLab der Hochschule Fulda: |
||||
|
|
||||
|
\url{https://gitlab.cs.hs-fulda.de/flow-routing/cnsm2020/p4environment} |
||||
|
\end{itemize} |
||||
|
|
||||
|
\section{Eigene VM mit P4 Toolchain} |
||||
|
Sie können auch eine eigene Linux VM installieren, die alle für die Entwicklung von P4 erforderlichen Tools (p4c, bmv2, pi, p4runtime) beinhaltet. Hierfür können Sie z.B. die Install-Skripte aus dem P4-Guide zusammen mit Ubuntu 18.04 verwenden: |
||||
|
\url{https://github.com/jafingerhut/p4-guide/blob/master/bin}. |
||||
|
|
||||
|
Wir empfehlen aktuell die Verwendung der v2: |
||||
|
\url{https://github.com/jafingerhut/p4-guide/blob/master/bin/install-p4dev-v2.sh} |
||||
|
|
||||
|
Alternativ finden Sie im Web zahlreiche Anleitungen und Tutorials sowie VMs, wie z.B. |
||||
|
bei den P4 Tutorials \url{https://github.com/p4lang/tutorials} (siehe Abschnitt ``Obtaining required software") oder p4-learning \url{https://github.com/nsg-ethz/p4-learning} (siehe Abschnitt ``Required Software"). |
||||
|
|
||||
|
\end{document} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue