% !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{tikz}
\usepackage{listings}
\lstset{
	basicstyle=\ttfamily\fontsize{10}{10}\selectfont,
	tabsize=1,
	frame=single,
}

\onehalfspacing

\geometry{a4paper, top=25mm, left=30mm, right=25mm, bottom=25mm, headsep=10mm, footskip=12mm}

\hypersetup{
	unicode=true,
	pdftitle={ACN-PA2},
	pdfsubject={ACN-PA2},
	pdfauthor={Sebastian~Rieger,Christoph~Hardegen},
	pdfkeywords={}, 
	colorlinks=true,
	urlcolor=black,
	linkcolor=black,
	breaklinks=true,
	citecolor=black, 
	filecolor=black}

\addto\extrasngerman{%
	\def\subsectionautorefname{Abschnitt}%
}

\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}
	\textsc{Programming Assignment 2: Programmable Data Plane mit P4} \\
	Zeitraum: 21.01.2021 bis 31.03.2021
\end{center}

\section{Einleitung}
P4 ermöglicht es, die durch SDN realisierte Programmierbarkeit von Netzen tiefer in Richtung der Data Plane zu bringen. Dadurch können eigene Netzelemente und -funktionen realisiert werden, anstatt in Bezug auf die Data Plane von den Vorgaben der Netzwerkhersteller (fixed function) abhängig zu sein.

\section{Aufgabenbeschreibung und Anforderungen}
Das Ziel von Programming Assignment 2 ist die praktische und exemplarische Realisierung einer Programmable Data Plane mit P4.
%Sie sollen (1) einen SDN-basierten Switch und (2) einen Router jeweilig als Controller-Applikation entwickeln, sodass beide Funktionen innerhalb der Topologie durch den SDN-Controller bestimmt werden.
Sie sollen eine Anwendung für eine programmierbare Data Plane (P4 App) und ggf. zugehöriger Control Plane implementieren (P4 Runtime), die die grundlegende Funktionen eines der folgenden Netzelemente realisiert:

\begin{itemize}[leftmargin=*]
	\setlength\itemsep{.1em}
	\item (a) Router
	\item (b) NAT
	\item (c) Firewall
	\item (d) Load Balancer
\end{itemize}

Auch andere Netzwerkfunktionen sind möglich und können vorgeschlagen werden.
Sie sollten ausgehend von dem Beispiel in der Lehrveranstaltung zunächst
überlegen welche Grundfunktionalität Sie implementieren müssen, um die
Kernaufgabe ihres gewählten Netzelements zu erbringen. Sie sollten dann
mit einer minimalistischen Implementierung dieser Funktionalität als P4 App
und ggf. erforderlicher App auf der Control Plane starten. Dabei können Sie auf der Control Plane auch Teile der Anwendung aus Assignment 1 wiederverwenden, sofern dies für Ihre Anwendung sinnvoll und möglich ist.

Für die Realisierung der Grundfunktionalität gibt es max. 2 Punkte.
Für die Realisierung der einer erweiterten Funktionalität gibt es max. 2 Punkte.
Für die Realisierung einer passenden Funktion über die Aufgabenstellung hinaus gibt es max. einen weiteren Punkt.

\section{Setup}
Im Rahmen von Programming Assignment 2 können Sie die bereitgestellte VM verwenden, die alle für die P4-Entwicklung erforderlichen Tools bereits vorinstalliert hat. Alternativ können Sie auch, wie im Übungsblatt zu P4 beschrieben, eine eigene VM aufsetzen und für Ihr Projekt verwenden. Die entwickelte Lösung muss allerdings später in der bereitgestellten Umgebung präsentiert werden können. Als Basis für Ihre Entwicklung können Sie Umgebung aus den P4 Tutorials, p4-learning oder das p4environment verwenden, wie in der P4 Übung vorgestellt.
Die Anforderungspakete sind darin als P4 Code, ggf. Control Plane Code (vgl. z.B. Beispiel des Python-basierten Controllers des Learning Switch in der Lehrveranstaltung) sowie Umgebung in der Ihre Anwendung zum Einsatz kommt (z.B. Mininet-Topologie) zu implementieren.
Informationen zum Einstieg in P4 finden Sie in den Materialien zur Lehrveranstaltung. Außerdem finden Sie im Netz sowie z.B. auf GitHub Beispiele für in P4 realisierte Netzelemente. Selbstverständlich sind auch andere Quellen hilfreich und zulässig. Sie dürfen auch auf Code aus fremden Quellen aufbauen bzw. zurückgreifen, müssen dies aber wie üblich auch in den Assignments kenntlich machen (Nennung der Quelle/Zitation).

\section{Topologien}
Für die genannten Beispiele für Netzelemente benötigen Sie mindestens die folgende Topologie. Sie können diese anhand des bereitgestellten Codes für eine P4-Umgebung z.B. als Mininet Topologie erweitern. 

\subsection{Beispiel-Topologie}
\begin{figure}[H]
	\centering
	\begin{tikzpicture}
		\node[shape=circle,draw=black,minimum size=1.35cm] (H1) at (0,0) {$H_1$};
		\node[shape=circle,draw=black,minimum size=1.35cm] (H2) at (0,-2) {$H_2$};

		\node[shape=circle,draw=black,minimum size=1.35cm] (S1) at (3,-1) {$S_1$};

		\node[shape=circle,draw=black,minimum size=1.35cm] (H3) at (6,-1) {$H_3$};
		
	    \path [-] (H1) edge node[left] {} (S1);
	    \path [-] (H2) edge node[left] {} (S1);
	    
	    \path [-] (H3) edge node[left] {} (S1);
	\end{tikzpicture}
	\caption[Beispiel-Topologie (1)]{Beispiel für eine Minimal-Topologie in Mininet}
	\label{fig:topo1}
\end{figure}

Die folgenden Beispiele geben Ihnen erste Anhaltspunkte für die Realisierung. Sie können aber auch eigene Vorschläge einbringen:

\begin{itemize}[leftmargin=*]
	\setlength\itemsep{.1em}
	\item Wenn Sie einen Router realisieren wollen, müssten sich als minimale Anforderung z.B. $H_1$ und $H_2$ in einem anderen Subnetz als $H_3$ befinden, und Ihre Anwendung eine Kommunikation zwischen den Subnetzen erlauben. Ein Router hat  allerdings in der Realität natürlich noch weitere Aufgaben.

	\item Wenn Sie eine NAT realisieren wollen, müssten sich als minimale Anforderung z.B. $H_1$ und $H_2$ in einem anderen Subnetz als $H_3$ befinden, und Ihre Anwendung eine Übersetzung zwischen Subnetzen/Transportprotokoll-Ports erlauben. Ein NAT Gateway hat allerdings in der Realität natürlich noch weitere Aufgaben.

	\item Wenn Sie eine Firewall realisieren wollen, müssten als minimale Anforderung z.B. unterschiedliche Adressen oder Anwendungen auf den Hosts realisiert werden, für die dann in Abhängigkeit der Konfiguration der Firewall Zugriff erlaubt oder geblockt wird. Eine Firewall hat allerdings in der Realität natürlich noch weitere Aufgaben.

	\item Wenn Sie einen Load Balancer realisieren wollen, müsste sich als minimale Anforderung z.B. eine Anwendung auf $H_1$ und $H_2$ befinden. Je nach Adresse oder Transportprotokoll-Port die/das $H_3$ für den Zugriff verwendet, müsste dann entweder an $H_1$ oder $H_2$ weitergeleitet werden. Ein Load Balancer hat allerdings in der Realität natürlich noch weitere Aufgaben.

\end{itemize}


%\subsection{Beispiel-Topologie (2)}
%\begin{figure}[H]
%	\centering
%	\begin{tikzpicture}
%		\node[shape=circle,draw=black,minimum size=1.35cm] (H1) at (-2,0) {$H_1$};
%		\node[shape=circle,draw=black,minimum size=1.35cm] (H2) at (-2,-2) {$H_2$};
%
%		\node[shape=circle,draw=black,minimum size=1.35cm] (S1) at (1.5,-1) {$S_1$};
%		\node[shape=circle,draw=black,minimum size=1.35cm] (S2) at (7.5,-1) {$S_2$};		
%
%		\node[shape=circle,draw=black,minimum size=1.35cm] (S3) at (4.5,0) {$S_3$};		
%		\node[shape=circle,draw=black,minimum size=1.35cm] (S4) at (4.5,-2) {$S_4$};
%
%		\node[shape=circle,draw=black,minimum size=1.35cm] (C1) at (4.5,3) {$C_1$};
%
%		\node[shape=circle,draw=black,minimum size=1.35cm] (H3) at (11,0) {$H_3$};
%		\node[shape=circle,draw=black,minimum size=1.35cm] (H4) at (11,-2) {$H_4$};
%				
%	    \path [-] (H1) edge node[left] {} (S1);
%	    \path [-] (H2) edge node[left] {} (S1);
%	    
%	    \path [-] (H3) edge node[left] {} (S2);
%	    \path [-] (H4) edge node[left] {} (S2);
%	    
%   	    \path [-] (S1) edge node[left] {} (S3);
%   	    \path [-] (S1) edge node[left] {} (S4);
%
%   	    \path [-] (S2) edge node[left] {} (S3);
%   	    \path [-] (S2) edge node[left] {} (S4);
%	    
%   	    \path [dashed] (C1) edge node[left] {} (S1);
%   	    \path [dashed] (C1) edge node[left] {} (S2);
%  	    \path [dashed] (C1) edge node[left] {} (S3);
%  	    \path [dashed,bend left=35] (C1) edge node[left] {} (S4);  	    
%	\end{tikzpicture}
%	\caption[Beispiel-Topologie (2)]{Beispiel-Topologie (2)}
%	\label{fig:topo2}
%\end{figure}
%
%Beispiel-Topologie (2) besteht im Vergleich zu Beispiel-Topologie (1) aus vier OpenFlow-Switches ($S_1$, $S_2$, $S_3$ und $S_4$), die durch den SDN- bzw. OpenFlow-Controller $C_1$ gesteuert werden.
%Zwischen den Hosts ($H_1$, $H_2$), die über $S_1$ angebunden werden, und denen ($H_3$, $H_4$), die über $S_2$ angeschlossen sind, existieren redundante Pfade.
%Ein Pfad führt hierbei über $S_3$, ein anderer über den Switch $S_4$.
%Alle Hosts befinden sich im gleichen Netzsegment bzw. IP-Subnetz (z.B. 192.168.0.0/24).

\section{Verwandte Paper}
Zur Realisierung von Routern, NAT, Firewalls und Load Balancern finden Sie zahlreiche Paper z.B. mittels Google Scholar. Sie erhalten hierzu auch Hinweise im Rahmen der Übungen und wir diskutieren die Paper, die Sie als verwandte Arbeiten ausgewählt haben.

\end{document}