\documentclass{beamer}

\usetheme{Madrid}
% Ref: https://tex.stackexchange.com/a/692
\setbeamertemplate{navigation symbols}{}

% We may as well create a PDF/A, why not. (I am too lazy to invent my
% own header, instead I just pick line from the thesis' one :-))

\usepackage[a-2u]{pdfx}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\usepackage{xcolor}
\usepackage{listings}

\hypersetup{unicode}
\hypersetup{breaklinks=true}

\def\uv#1{``#1''}


\title{Visualising OSPF topology}
\subtitle{Motivation and design of Birdvisu} %FIXME?
\author{Pavel Turinský}
\date{7 September 2023}
%\date{07-09-2023} % Looks weird imho :-/

\begin{document}

\begin{frame}
	\titlepage
\end{frame}

\iffalse % Maybe drop, in that case, comment the next line.
%\else
\begin{frame}
	\frametitle{Outline}
	\begin{itemize}
		\item Introduction
			\begin{itemize}
				\item What is Birdvisu
				\item Reasons for creating Birdvisu
				\item Goals
			\end{itemize}
	% intro:
	%% what
	%% why (comparison)
	%% goals
		\item Technologies
			\begin{itemize}
				\item OSPF overview
				\item Interaction with BIRD
			\end{itemize}
	% tech stack
	%% OSPF summary + history
	%% BIRD: why and how
	%%% the dump format
	%%% note gennet
		\item Design
			\begin{itemize}
				\item Retrieving topologies
				\item Annotation
				\item Drawing
			\end{itemize}
	% design
	%% the three phases
		\item Results
			\begin{itemize}
				\item Small networks
				\item Large: czela.net
			\end{itemize}
	% results
	%% czela,net
	%%% known deficiencies

		\item Future
	% future?
		%% exports, integration
		%% saving layouts
	% gennet?
	\end{itemize}
\end{frame}
\fi

%TODO: slide about Birdvisu is, very highlevel


\begin{frame}
	\frametitle{Project goals}
	The Birdvisu project aims to present the network topology, as known
	by OSPF, to the administrator and allow them to analyse it.

	\bigskip

	Goals:
	\begin{itemize}
		\item As independent on other services as possible
		\item Easy deployment
			\begin{itemize}
				\item Runnable on admin's laptop
			\end{itemize}
		\item No changes to other hosts required
		\item It should be easy to create new analysis tools
		\item Target: administrators of homelabs to middle-sized systems
	\end{itemize}

	\medskip

	To our knowledge, there is no such application yet.

	\medskip

	Birdvisu is implemented in Python 3 and Qt 6.
\end{frame}
% \begin{frame}
% 	%\frametitle{Why visualise/analyse topologies}
% 	\frametitle{Motivation and goals}
% 	Existing analysis/monitoring tools:
% 	\begin{itemize}
% 		\item Need to collect data on individual hosts,
% 		\item do may not have accurate data (network splits)
% 		\item or need to be deployed on a server
% 	\end{itemize}
% 	\dots yet in systems routed by OSPF each router knows all of this.
% 
% 	\vfill
% 
% 	The aim of Birdvisu is to present this information to
% 	administrators.
% 	\begin{itemize}
% 		\item single-host, easy-to-run, few dependencies on services
% 		\item Target: administrators of homelabs to middle-sized systems
% 	\end{itemize}
% \end{frame}

% TODO: wanted features?

%%% design

\begin{frame}
	\frametitle{Birdvisu design}
	% uwu uwu FIXME TODO
	The program consists of three main steps:
	\begin{itemize}
		\item Obtaining the topologies
			% shenanigans?
			% non-matchability of uwu uwu.
			\begin{itemize}
				\item Reference (from file), current state
				\item Representation: weighted directed multigraph
%				\item Reference and current one merged into a single object
%				\item Extracted from BIRD or loaded from saved files
%				\item Networks can have various forms: orieiwnted weighted multigraph
			\end{itemize}
		\item Annotating
			\begin{itemize}
				\item Extending the topology with analysis results, other data, \dots
%				\item Many single-purpose annotators
%				\item e.g. compute topology differences, find shortest paths
			\end{itemize}
		\item Displaying the result
			% own try of layouting alg
			% each highlight has its StyleAnnotator
			\begin{itemize}
				\item Reduction of the topology to a simple graph
				\item Highlight relevant annotator results

				\medskip

				\item Alternatively export the annotated topology (in future)
%				\item Use Qt's features: dragging, interaction
%				\item Layout loaded from file or determined by ad-hoc
%					algorithm
%				\item Reuses Annotator design
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{OSPF}
	\begin{itemize}
		\item Link-state IGP: routers share information about the current state of the system
		\item Long evolution (1989), multiple extensions, rather complex
		\item Different versions for IPv4 and IPv6 routing
			\begin{itemize}
				\item Same idea, quite different internals
			\end{itemize}
	\end{itemize}
	
	\bigskip

	Instead of implementing OSPF ourselves, we extract the state from existing routing daemon.
\end{frame}

\begin{frame}
	\frametitle{BIRD Internet Routing Daemon}
	\begin{itemize}
		\item Originally SW project at this faculty, now maintained by CZ.NIC
		\item Experience from deployment at home, Dept{.} of Applied Mathematics
		\item One of two maintained OSPF daemons for general-purpose HW %FIXME: check BrE
			\begin{itemize}
				\item future extensions more likely to be implemented
			\end{itemize}
	\end{itemize}
	
	\bigskip
	
	\begin{itemize}
		\item Currently no machine-readable export
			\begin{itemize}
				\item The output for humans contains sufficient information
			\end{itemize}
		\item No dynamic output -- needs polling
	\end{itemize}

	% logo? snippet of output?
\end{frame}

\begin{frame}
	\frametitle{Annotators}
	\begin{itemize}
		\item Can add arbitrary$^*$ data to vertices and edges
			\begin{itemize}
				\item Exportable in future
			\end{itemize}
		\item Can depend on each other
		\item Idea: many simple and single-purpose annotators
		\item Uses: analysis, providing additional information, \dots
			\begin{itemize}
				\item e.g. comparing topologies, finding shortest path DAGs
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Visualisation}
	\begin{itemize}
		\item Reuse Annotators for styling vertices and edges
		\item Reduce topology to a simple graph by taking the most relevant edge
			\begin{itemize}
				\item lightest edge with positive cost
			\end{itemize}
		\item Layout can be loaded from a file
			\begin{itemize}
				\item New vertices placed to proximity of neighbours
			\end{itemize}
		\item Qt provides UI features: dragging, context menus
	\end{itemize}
\end{frame}

% Results and examples

\begin{frame}
	\frametitle{Small network example: Gennet}
	\begin{center}
		\includegraphics[keepaspectratio,height=0.7\textheight]{gennet.png}
		\\
		Highlighting differences from expectation on a test network (Gennet)
	\end{center}
\end{frame}

\begin{frame}
	\frametitle{Medium-sized network: Czela.net}
	Community network system in Čelákovice, 45 routers, 210 networks (incl. external), about 1600 people
	\begin{center}
		\includegraphics[keepaspectratio,height=0.6\textheight]{czmess.png}
		\\
		Our layouting approach is not great without any initial placements.
	\end{center}
\end{frame}

\begin{frame}
	\frametitle{Fixing Czela.net}
	\begin{center}
		\includegraphics[keepaspectratio,height=0.7\textheight]{czbug.png}
		\\
		Misconfiguration, found after some dragging of vertices
	\end{center}
\end{frame}

\begin{frame}
	\begin{center}
		\begin{Large}
			Thank you!
		\end{Large}
	\end{center}
\end{frame}
\end{document}
