<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass[11pt]{article}

% Packages
\usepackage{fullpage}
\usepackage{minted}
\usepackage{booktabs}
\usepackage{xspace}
\usepackage{graphicx}
\usepackage{makecell}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{svg}
\usepackage[most]{tcolorbox}

% Packages setups
\graphicspath{{./assets}}

% Commands
\newcommand{\stateoff}{"\textit{off}"\xspace}
\newcommand{\stateon}{"\textit{on}"\xspace}
\newcommand{\version}{\InputIfFileExists{version}{}{version}}
\newcommand*{\addsource}[2]{\vspace{0.3cm}\begin{tcolorbox}[breakable,enhanced,arc=1.4mm,arc is angular,title=\textbf{\small#1}]\inputminted[breaklines,fontsize=\scriptsize]{#2}{#1}\end{tcolorbox}}
\newenvironment{tabminted}[1]
               {\VerbatimEnvironment\begin{minipage}{2.65in}\begin{tcolorbox}[frame empty]\begin{minted}{#1}}
               {\end{minted}\end{tcolorbox}\end{minipage}}

% Document
\begin{document}

% Title page
\makeatletter
\begin{titlepage}
  \begin{center}
    \Huge
    \textbf{\fontsize{90}{60}\selectfont User Manual\\}
    \vspace{0.6cm}
    \textbf{\LARGE --- ESDS v\version --- \\}
    {\Large \today}
    \vspace{2cm}
    
    {\includesvg[scale=0.8]{../icon.svg}}
    \vspace{1.5cm}
    
    \LARGE
    \textbf{ESDS an Extensible Simulator for Distributed Systems\\}
    \vspace{1cm}
    \textit{Written by Loic Guegan and Issam Raïs}
  \end{center}
\end{titlepage}
\pagebreak


\section{Architecture of ESDS}

\begin{figure}[!h]
\centering
\includegraphics[scale=0.5]{components.pdf}
\caption{Simulation architecture used by ESDS}
\label{architecture}
\end{figure}

ESDS simulator comprises two major components: 1) The Simulation Orchestrator (SO) 2) The Simulated
Nodes (SN). This architecture is depicted in Figure \ref{architecture}. The SO is the main process
in charge of implementing the simulation main loop. It instantiates the network (e.g bandwidths and
latencies), collects and processes the events (e.g communications,turn on/off). On the other hand,
nodes are threads that implement the node behaviors.

\section{Getting started}

To run a simulation, at least 2 files are required: 1) a platform file 2) a node implementation
source code. The platform file defines the simulated network platform (network links and
performances etc.)  and sets various simulation parameters. The node implementation source code
provides the logic of the simulated nodes.

\subsection{Platform file}
\label{sec:firstsimulation:platform}

Platform files are written in YAML and contains 3 sections namely: 1) \textit{general} 2)
\textit{nodes} 3) \textit{interfaces}. The \textit{general} section is optional but all the other
sections must be present. Here is an example of a simple platform file to simulate 2 wireless nodes:
\addsource{assets/platform.yaml}{yaml}

\subsection{Node implementation file}

Nodes implementations are written using python. Here is the implementation of the node mentioned in
the last \verb|platform.yaml| file:
\addsource{assets/node.py}{python}

\subsection{Execution}
\label{sec:firstsimulation:execution}

To execute our first simulation, the following command should be executed from the same folder
that contains \verb|platform.yaml| and \verb|node.py|:
\begin{verbatim}
  &gt; esds run platform.yaml
\end{verbatim}
Here is the output of the simulation:
\verbatiminput{assets/output.txt}
In this case, simulation tooks $0.002s$ and $10$ bytes were sent on the wlan0 interface from node 0
(src=n0) to node 1 (src=n1).

\subsection{Custom orchestrator instantiation}

Instead of using a \verb|platform.yaml| file, it is possible to instantiate manually the esds
orchestrator. To do so, you need to implement that procedure in a python file. Here is and example
that performs the exact same simulation presented in Section \ref{sec:firstsimulation:execution} but
with a custom instantiation of the orchestrator:
\addsource{assets/orchestrator.py}{python}
Next we can run the simulation:
\begin{verbatim}
  &gt; ./orchestrator.py
\end{verbatim}

\section{Platform file}

As explain in Section \ref{sec:firstsimulation:platform}, esds platform files comprise 3 sections:
\begin{enumerate}
\item \textbf{general:} to settings up esds
\item \textbf{nodes:} to configure the simulated nodes
\item \textbf{interfaces:} to create network the interfaces available for each nodes
\end{enumerate}
Lets see in details the format of each section.

\subsection{General}
This section is used to settings up the overall parameters of esds. Table \ref{keywords:general} reference all the keywords for this section of the platform file.

\begin{table}[]
  \centering
  \begin{tabular}{m{0.25\textwidth}m{0.3\textwidth}p{0.4\textwidth}}
    \toprule
    \textbf{Keyword} &amp; \textbf{Description} &amp; \textbf{Example} \\ \midrule

    \textbf{interferences} &amp; Turn on/off interferences detection during wireless communications &amp;
    \begin{tabminted}{yaml}
interferences: on
    \end{tabminted}
    \\ \cmidrule{1-3}
    
    \textbf{debug} &amp; Turn on/off esds debugging mode (generate a debug file) &amp;
    \begin{tabminted}{yaml}
debug: on
    \end{tabminted}
    \\ \cmidrule{1-3}

    \textbf{debug\_file} &amp; Specify the file to use as output for the debugging &amp;
    \begin{tabminted}{yaml}
debug_file: "./myfile.txt"
    \end{tabminted}
    \\ \cmidrule{1-3}
    
    \textbf{breakpoints} &amp; Specify a list of simulated time (in seconds) at which esds should interrupt and call the specified callback &amp;
    \begin{tabminted}{yaml}
breakpoints: [5, 6, 7]
    \end{tabminted}
    \\ \cmidrule{1-3}
    
    \textbf{breakpoints\_every} &amp; Specify an interval of time (in seconds) at which esds will interrupt and call the specified callback &amp;
    \begin{tabminted}{yaml}
breakpoints_every: 5
    \end{tabminted}
    \\ \cmidrule{1-3}
    
    \textbf{breakpoints\_callback} &amp; Tell esds where how to reach the callback used during breakpoints &amp;
    \begin{tabminted}{yaml}
breakpoints_callback:
  file: "platform_callback.py"
  callback: "callback"
    \end{tabminted}
    \\ \bottomrule
\end{tabular}
  \caption{Usable keywords in the general section of a esds platform file.}
  \label{keywords:general}
\end{table}


\end{document}


</pre></body></html>