# This is an example for a minimal loopback configuration.
#
# All messages will be sent back to the origin using UDP packets.
#
# You can use this configuration in conjunction with the 'send', 'receive' and 'random'
# utilities as shown below (run all three steps in parallel).
#
# 0. Overview:
#
#    villas signal --PIPE--> ./pipe  --UDP--> ./node --UDP--> ./pipe
#
# 1. Start server:
#
#    $ villas node etc/loopback.conf
#
# 2. Send random data to server:
#
#    $ villas signal random -r 10 -v 4 | villas pipe etc/loopback.conf node1
#
# 3. Receive data from server:
#
#    $ villas pipe etc/loopback.conf node2
#
# The syntax of this file is similar to JSON.
# A detailed description of the format can be found here:
#   http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-Files
#
# Author: Steffen Vogel <post@steffenvogel.de>
# SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0

nodes = {
    node1 = {
        type = "socket"
        layer = "udp"

        in = {
            address = "127.0.0.1:12000"			# Local ip:port, use '*' for random port
        }
        out = {
            address = "127.0.0.1:12001"

            netem = {
                enabled = false
                delay = 1000000		# In micro seconds!
                jitter = 300000
                distribution = "normal"
            }
        }
    },
    node2 = {
        type = "socket"
        layer = "udp"
        in = {
            address = "127.0.0.1:12001"			# Local ip:port, use '*' for random port
        }
        out = {
            address = "127.0.0.1:12002"
        }
    },
    node3 = {
        type = "socket"
        layer = "udp"
        in = {
            address = "127.0.0.1:12002"			# Local ip:port, use '*' for random port
        }
        out = {
            address = "127.0.0.1:12000"
        }
    },
    loopback = {
        type = "socket"
        layer = "udp"
        in = {
            address = "127.0.0.1:12003"			# Local ip:port, use '*' for random port
        }
        out = {
            address = "127.0.0.1:12003"
        }
    }
}

paths = (
    {
        in = "node1"				# Name of the node we listen to (see above)
        out = "node2"				# And we loop back to the origin

        hooks = (
            {
                type = "print"
            }
        )
    }
)
