\chapter{Motivation}\label{ch:motivation}

%First, we need to further specify, what Birdvisu should be. This section
%describes what is the missing project and why such project would be useful.

In this chapter we explore existing solutions for visualising and monitoring
network systems and describe the requirements of network administrators. From
this we derive a set of properties Birdvisu should fulfil.

\section{Existing approaches to network monitoring}

Several approaches to network monitoring and status visualisation already exist.
These can be approximately split into several types: visualisation of existing
data, traffic visualisation, host monitoring systems and integrated system
management platforms. Here we introduce them shortly and explain their
potential disadvantages, compared to visualisation of routing information.

\subsection{Visualisation of existing data}

Tools in this category do not collect any data on their own, rather only
focusing on visualising data from other tools. These projects are often small,
can be easy to run and allow visualisation of various data, but they require
other infrastructure to provide the data. For example, the Network
Weathermap~\cite{weathermap} project can be used to provide overview based on
data in Cacti or other tools. Grafana~\cite{grafana} provides many different
methods of visualising data from various databases.

This does not seem to be usable for visualising OSPF state, because we are not
aware of any collectors of OSPF state data.

\subsection{Traffic visualisation}

Various software packages can collect and graph utilisation of network links.
This often provides information about link state, but requires collection of
data on all hosts. Also, in some cases, this might not provide accurate data of
the system state, as we will see in section~\ref{s:net-split}.

These projects usually store a time series of utilisation and therefore need to
be deployed on some central server as long-running services.

Examples of this approach include Cacti~\cite{cacti} and Munin~\cite{munin}.
Although both mentioned projects can graph other data, plugins for data
collection are available, so this differentiates them from the previous group.

\subsection{Host monitoring systems}

Projects in this category do not necessarily consider the whole network system,
but check state of individual hosts. It is possible for them to run locally, as
is the case for Plotnetcfg~\cite{plotnetcfg}, or check the host over the network
(CaLStats~\cite{calstats}, Icinga~\cite{icinga}), but they do not provide
overall picture. The capabilities of these tools also differ, from just
checking reachability (CaLStats) to being able to retrieve various details from
the hosts (Icinga, plotnetcfg).

This approach can also miss some issues with the system, as described in the
section~\ref{s:net-split}.

\subsection{Integrated system management platforms}

Some network administrators have created platforms for managing the hosts
across the network system. These systems usually know various aspects of the
system and may provide features like configuration generation or topology
visualisation~\cite{nodewatcher-paper}. However, many of these are tailored for
the specific system and are therefore not reusable in other environments.

Also, since large number of people need to access such platforms, they are
usually server based with web interface~\cite{nodewatcher-paper}.

\subsection{Topolograph}

We are aware of only one project that would allow visualisation of OSPF
topology, Topolograph~\cite{topolograph}. While it does not collect its own
data, its companion project, Ospfwatcher~\cite{ospfwatcher}, is able to retrieve
current topology data from a Quagga~\cite{quagga} routing daemon. The deployment
involves setting up Logstash~\cite{logstash}, so this is only suitable to be run
on a server.

Also, we find the interface of Topolograph impractical to use (tested in
Firefox version 116.0b2).

\subsection{Summary of existing tools}

As we have seen, various projects are available, but they often have some
important disadvantages. Table~\ref{t:comparison1} summarizes known approaches.

\bgroup
\def\yes{\checkmark}
\def\no{\texttimes}
\def\maybe{?}
\begin{table}[h]
	\centering
	\begin{tabular}{lccccc}\hline
		Approach                  & CD   & RS     & CoH    & EoD    & T    \\\hline
		Only visualisation        & \no  & \maybe & \no    & \maybe & \no  \\
		Traffic visualisation     & \yes & \yes   & \yes   & \no    & \no  \\
		Host monitoring           & \yes & \maybe & \yes   & \maybe & \no  \\
		Integrated management     & \yes & \yes   & \maybe & \no    & \yes \\
		Topolograph + Ospfwatcher & \yes & \yes   & \no    & \no    & \yes \\\hline
		Ideal state               & \yes & \no    & \no    & \yes   & \yes \\
	\hline\end{tabular}
	\caption{Comparison of current approaches. CD: Can collect data on its own,
	RS: Requires to be deployed on a server, CoH: Collects data on individual
	hosts, EoD: Easy to deploy, T: Understands the topology of the system.}
	\label{t:comparison1}
\end{table}
\egroup

\section{Target group of users}

Birdvisu aims to be a rather simple tool for small to medium-sized network
systems, where it is impractical to deploy complex monitoring and visualisation
infrastructure. We want to especially help in homelabs and community wireless
networks, but any OSPF deployment should be able to make use of our
project.

Also, since we do not require any server apart from a routing daemon, which can
be running on any laptop, Birdvisu might also be a helpful tool for admins in
the field trying to fix broken infrastructure.

The primary motivation for implementing Birdvisu was the need of the author,
who has a dynamically routed system that switches uplinks depending on which of them
currently work. % Pls don't tell the dorms :-)

\section{Goals of Birdvisu}

We want Birdvisu to:

\begin{itemize}
	\item Be a simple tool, easy to run on a regular laptop,
	\item Leverage the knowledge of topology, which is common in the system,
		without needing to collect data from other hosts,
	\item Help administrator quickly recognise issues in the network,
	\item Allow to be enhanced by other data and to export own data to other
		projects, in the future.
\end{itemize}
