diff --git a/etc/gtnet_test1.conf b/etc/gtnet_test1.conf new file mode 100644 index 000000000..3e5d147b3 --- /dev/null +++ b/etc/gtnet_test1.conf @@ -0,0 +1,62 @@ +# 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: +# +# ./signal --PIPE--> ./pipe --UDP--> ./node --UDP--> ./pipe +# +# 1. Start server: +# +# $ ./node etc/loopback.conf +# +# 2. Send random data to server: +# +# $ ./signal random -r 10 -v 4 | ./pipe etc/loopback.conf node1 +# +# 3. Receive data from server: +# +# $ ./pipe etc/loopback.conf node2 +# +# Author: Steffen Vogel +# Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC +## + +stats = 1; +debug = 10; + +nodes = { + node1 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12002", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "villas", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1, # Number of samples to fetch per iteration from the socket + netem = { + enabled = false, + delay = 1000000, # In micro seconds! + jitter = 300000, + distribution = "normal" + } + }, + node2 = { + type = "socket", + layer = "udp", + local = "*:12004", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12005", + header = "villas", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1 # Number of samples to fetch per iteration from the socket + } +}; + +paths = ( + { + in = "node1", # Name of the node we listen to (see above) + out = "node1", # And we loop back to the origin + hook = ["print"] + } +); diff --git a/etc/gtnet_test2.conf b/etc/gtnet_test2.conf new file mode 100644 index 000000000..1c40c3dd4 --- /dev/null +++ b/etc/gtnet_test2.conf @@ -0,0 +1,62 @@ +# 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: +# +# ./signal --PIPE--> ./pipe --UDP--> ./node --UDP--> ./pipe +# +# 1. Start server: +# +# $ ./node etc/loopback.conf +# +# 2. Send random data to server: +# +# $ ./signal random -r 10 -v 4 | ./pipe etc/loopback.conf node1 +# +# 3. Receive data from server: +# +# $ ./pipe etc/loopback.conf node2 +# +# Author: Steffen Vogel +# Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC +## + +stats = 1; +debug = 10; + +nodes = { + node1 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12002", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "villas", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1, # Number of samples to fetch per iteration from the socket + netem = { + enabled = false, + delay = 1000000, # In micro seconds! + jitter = 300000, + distribution = "normal" + } + }, + node2 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12004", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "villas", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1 # Number of samples to fetch per iteration from the socket + } +}; + +paths = ( + { + in = "node1", # Name of the node we listen to (see above) + out = "node2", # And we loop back to the origin + hook = ["print"] + } +); diff --git a/etc/gtnet_test3.conf b/etc/gtnet_test3.conf new file mode 100644 index 000000000..9470160ec --- /dev/null +++ b/etc/gtnet_test3.conf @@ -0,0 +1,62 @@ +# 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: +# +# ./signal --PIPE--> ./pipe --UDP--> ./node --UDP--> ./pipe +# +# 1. Start server: +# +# $ ./node etc/loopback.conf +# +# 2. Send random data to server: +# +# $ ./signal random -r 10 -v 4 | ./pipe etc/loopback.conf node1 +# +# 3. Receive data from server: +# +# $ ./pipe etc/loopback.conf node2 +# +# Author: Steffen Vogel +# Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC +## + +stats = 1; +debug = 10; + +nodes = { + node1 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12002", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "gtnet-skt", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1, # Number of samples to fetch per iteration from the socket + netem = { + enabled = false, + delay = 1000000, # In micro seconds! + jitter = 300000, + distribution = "normal" + } + }, + node2 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12004", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "gtnet-skt", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1 # Number of samples to fetch per iteration from the socket + } +}; + +paths = ( + { + in = "node1", # Name of the node we listen to (see above) + out = "node2", # And we loop back to the origin + hook = ["print"] + } +); diff --git a/etc/gtnet_test4.conf b/etc/gtnet_test4.conf new file mode 100644 index 000000000..b80cbd41d --- /dev/null +++ b/etc/gtnet_test4.conf @@ -0,0 +1,62 @@ +# 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: +# +# ./signal --PIPE--> ./pipe --UDP--> ./node --UDP--> ./pipe +# +# 1. Start server: +# +# $ ./node etc/loopback.conf +# +# 2. Send random data to server: +# +# $ ./signal random -r 10 -v 4 | ./pipe etc/loopback.conf node1 +# +# 3. Receive data from server: +# +# $ ./pipe etc/loopback.conf node2 +# +# Author: Steffen Vogel +# Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC +## + +stats = 1; +debug = 10; + +nodes = { + node1 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12002", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "gtnet-skt", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1, # Number of samples to fetch per iteration from the socket + netem = { + enabled = false, + delay = 1000000, # In micro seconds! + jitter = 300000, + distribution = "normal" + } + }, + node2 = { + type = "socket", + layer = "udp", + local = "192.168.88.128:12004", # Local ip:port, use '*' for random port + remote = "192.168.88.129:12001", + header = "gtnet-skt", # 'gtnet-skt' or 'villas'. If not provided, 'villas' header will be used + vectorize = 1 # Number of samples to fetch per iteration from the socket + } +}; + +paths = ( + { + in = "node1", # Name of the node we listen to (see above) + out = "node1", # And we loop back to the origin + hook = ["print"] + } +); diff --git a/lib/kernel/kernel.c b/lib/kernel/kernel.c index 8474faf5a..6548dbf49 100644 --- a/lib/kernel/kernel.c +++ b/lib/kernel/kernel.c @@ -184,6 +184,7 @@ int kernel_irq_setaffinity(unsigned irq, uintmax_t new, uintmax_t *old) { char fn[64]; FILE *f; + int ret = 0; snprintf(fn, sizeof(fn), "/proc/irq/%u/smp_affinity", irq); @@ -192,10 +193,10 @@ int kernel_irq_setaffinity(unsigned irq, uintmax_t new, uintmax_t *old) return -1; /* IRQ does not exist */ if (old) - fscanf(f, "%jx", old); + ret = fscanf(f, "%jx", old); fprintf(f, "%jx", new); fclose(f); - return 0; + return ret; } diff --git a/lib/path.c b/lib/path.c index c032e41fa..1e6d26bb9 100644 --- a/lib/path.c +++ b/lib/path.c @@ -111,7 +111,7 @@ static void * path_run(void *arg) debug(DBG_PATH | 5, "Current pool status for path %s: used=%zu avail=%zu", path_name(p), p->pool.stack.size, p->pool.stack.avail); /* Fill smps[] free sample blocks from the pool */ - ready += pool_get_many(&p->pool, (void **) smps, cnt - ready); + ready += sample_get_many(&p->pool, smps, cnt - ready); if (ready != cnt) warn("Pool underrun for path %s", path_name(p));