# Example configuration file for the S2SS server # # This example includes all valid configuration options for the server. # Please note, that using all options at the same time does not really # makes sense. The purpose of this example is to serve as a reference. # # 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 # Copyright: 2015, Institute for Automation of Complex Power Systems, EONERC ## ############ Global Options ############ affinity = 0x02; # Mask of cores the server should run on # This also maps the NIC interrupts to those cores! priority = 50; # Priority for the server tasks. # Usually the server is using a real-time FIFO # scheduling algorithm debug = 5; # The level of verbosity for debug messages # Higher number => increased verbosity stats = 3; # The interval in seconds to print path statistics. # A value of 0 disables the statistics. ############ Dictionary of nodes ############ nodes = { udp_node = { # The dictionary is indexed by the name of the node. type = "udp", # Type can be one of: # udp Send / recv UDP packets # tcp Send / recv TCP packets # ip Send / recv IP packets # ieee802.3 Send / recv raw Ethernet frames # opal Read / write via libOpalAsyncApi # gtfpga Read / write to memory mapped PCIe card local = "127.0.0.1:12001", # This node only received messages on this IP:Port pair remote = "127.0.0.1:12000" # This node sents outgoing messages to this IP:Port pair combine = 30 # Receive and sent 30 samples per message (multiplexing). }, tcp_node = { type = "tcp", # See above. local = "*:12002", # It's possible to use an '*' for both the port and address # in UDP / TCP and IP modes. # This will choose a random port. # And listen on all available interfaces. remote = "127.0.0.1:12003", # Currently IPv6 is not supported! netem = { # Network emulation settings # Those settings can be specified for each node invidually! delay = 100000, # Additional latency in microseconds jitter = 30000, # Jitter in uS distribution = "normal", # Distribution of delay: uniform, normal, pareto, paretonormal loss = 10 # Packet loss in percent duplicate = 10, # Duplication in percent corrupt = 10 # Corruption in percent } }, opal_node = { # The server can be started as an Asynchronous process type = "opal", # from within an OPAL-RT model. send_id = 1, # It's possible to have multiple send / recv Icons per model recv_id = 1, # Specify the ID here. reply = true }, file_node = { type = "file", mode = "w+", in = "./" # These options specify the path prefix where the the files are stored out = "" }, gtfpga_node = { } }; ############ List of paths ############ paths = ( { enabled = true, # Enable this path (default: true) reverse = true, # Setup a path in the reverse direction as well (default: false) in = "acs", # Name of the node we receive messages from (see node dictionary) out = "sintef", # Name of the node we send messages to. rate = 100, # Send message over this path with a fixed (constant) rate (default: 0). # Setting this value to 0 will disable this feature. hook = "print", # Register custom hook funktion (see src/hooks.c) poolsize = 30 # The amount of samples which are kept in a circular buffer. # This number must be larger than the 'combine' settings of all # associated input and output nodes! }, { enabled = false, reverse = false, in = "opal_node", # There's only a single source node allowed! out = ["udp_node", "tcp_node"], # Multiple destination nodes are supported too. hook = [ "print", "decimate" ] # Same is true for hooks. # Multipe hook functions are executed in the order they are specified here. } );