Only relies on open source software libraries and the Linux kernel
Follows the Unix philosophy by providing a set of smaller command line tools
Daemon
The server simply acts as a gateway to forward simulation data from one client to another. Furthermore, it collects statistics, monitors the quality of service and handles encryption or tunneling through VPNs.
For optimal performance the server is implemented in low-level C and makes use of several Linux-specific realtime features. The primary design goal was to make the behaviour of the system as deterministic as possible. Therefore, it's advisable to run the server component on a PREEMPT_RT patched version of Linux. In our environment, we use a Fedora-based distribution which has been stripped to the bare minimum (no GUI, only a few background processes). Have a look at Tuning for ways to improve the real-time performance of your system.
Clients
There are two types of interfaces to VILLASnode:
The server handles diffrent types of nodes. The most commonly used node-type is the Sockets node-type which allows communication over network links (UDP, raw IP, raw Ethernet frames). But there are also other specialized node types to retreive or send data to equipemnt, which is directly connected to or running on the server itself. An example for such a node is the VILLASfpga node-type which directly fetches and pushes data to a PCIe card. Or the File node-type which logs or replays simulation data from the harddisk.
An other way to connect simulation equipment is by using a client-application which itself sends the data over the network to VILLASnode. In this scenario, VILLASnode uses the Sockets node-type to communicate with the client-application.
Usually, new clients / equipment should be implemented as a new node-type as part of VILLASnode. Using a dedicated client-application which communicates via the 'socket' type is deprecated because it leads to code duplication.