1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

Merge branch 'bug_fixes' into 'develop'

Bug fixes for #44

This fixes #44

See merge request !3
This commit is contained in:
Steffen Vogel 2016-10-12 02:00:54 +02:00
commit a5aaab1820
6 changed files with 252 additions and 3 deletions

62
etc/gtnet_test1.conf Normal file
View file

@ -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 <stvogel@eonerc.rwth-aachen.de>
# 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"]
}
);

62
etc/gtnet_test2.conf Normal file
View file

@ -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 <stvogel@eonerc.rwth-aachen.de>
# 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"]
}
);

62
etc/gtnet_test3.conf Normal file
View file

@ -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 <stvogel@eonerc.rwth-aachen.de>
# 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"]
}
);

62
etc/gtnet_test4.conf Normal file
View file

@ -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 <stvogel@eonerc.rwth-aachen.de>
# 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"]
}
);

View file

@ -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;
}

View file

@ -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));