\chapter*{Conclusion}
\phantomsection
\addcontentsline{toc}{chapter}{Conclusion}

This thesis elaborates on kernel networking along with virtualization in networks. Kernel network is the core focus of the work, as its knowledge was required for the development of emulator. First chapter discusses Linux network stack, explaining the ISO/OSI network model, needed for the correct definition of parameters of the emulator. Kernel modules utilized in the emulation are explained in depth, especially \emph{Netfilter}, which is the essential part of this work. Existence of Netfilter's hooks, present in between the transport layer of ISO/OSI model and NIC, is what allows manipulation with packets close to their raw format on lower layers of the network stack. When packet comes to appropriate Netfilter hook, it is redirected to the traffic control module, that handles it further.
Traffic control module, with its internals is examined, as every part of its functionality is used in the final application. In egress data path after packet handover from Netfilter, \emph{classifier}, \emph{scheduler} and \emph{shaper} from traffic control module interact with packet. In ingress path only \emph{policier} is applied, but due to the use of IFB, known as Intermediate Functional Block, even packets coming from ingress path can be treated the same as egress packets. 
Utilities used from traffic control module are \texttt{tc}, \texttt{tc-netem} and \texttt{tc-tbf}. All of these userspace utilities interact directly with appropriate kernel modules to modify the quality of service parameters of network traffic.

Second chapter discusses the virtualization of network in general, as it gives an overview for models, simulators and emulators. This chapter's purpose is to explain the difference between the simulator and emulator, as well as, understand, why virtualization has limitations and where are its issues.

The main goal of Master's thesis was to create a network emulator able that allows granular control over the delay, jitter, loss and others. The application name WEnux stands for WAN emulator for Linux, and was developed under GPLv3 license.
It was developed in Python3.7, initially with command line interface. In the later stages of the work, interface was changed to graphical with the use of Qt. Qt was picked due to being one of the most complete and supported graphical user interface, with good documentation. It offers native design to desktop environment that is being used, whether it is GNOME, KDE or any other Linux desktop environment. 
Graphical user interface was developed in Qt Designer and made functional with the use of PyQt5 framework.
The application itself bridges tested interfaces together to create a single point where the impairments can be applied, but it is also able to function on an individual interface, if needed. Root of the \texttt{tc qdisc} tree lies in prio qdisc, on which are filters and other qdiscs bound, creating a hierarchy that allows user to either include some networks or ports to the emulation or to exclude them altogether. 
Interface of application can be seen in figure \ref{wenux_empty}, allowing configuration of many parameters with interactive feedback from the application in form of the text window, that displays the current status of emulation.

The application was tested according to the fourth chapter, where accuracy of implementation and resource usage were evaluated. These tests were not a formal validation, but are clear indicator, that application is able to emulate the specified WAN very closely, where its accuracy is based on multiple parameters, such as kernel clock granularity, specification of the system where WEnux is running and values of aforementioned parameters. With basic methodology explained in chapter \ref{methodology}, it can be said, that application is reasonably accurate and resource efficient. 