From 8d7e0074ad0e6bc8e36eb80d90a0237ae3856579 Mon Sep 17 00:00:00 2001 From: Umar Farooq Date: Thu, 27 Oct 2016 17:47:13 +0200 Subject: [PATCH] =?UTF-8?q?Initial=20test=20and=20addition=20of=20queue=20?= =?UTF-8?q?s=C3=ADze=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etc/gtnet-skt/test5.conf | 62 ++++++++++++++++++++++++++++++++++++++++ lib/queue.c | 12 ++++++-- 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 etc/gtnet-skt/test5.conf diff --git a/etc/gtnet-skt/test5.conf b/etc/gtnet-skt/test5.conf new file mode 100644 index 000000000..582cf6604 --- /dev/null +++ b/etc/gtnet-skt/test5.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 = "134.130.169.31:12002", # Local ip:port, use '*' for random port + remote = "134.130.169.98:12001", + header = "gtnet-skt:fake", # '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/queue.c b/lib/queue.c index 1d1b797bd..4f8e8079c 100644 --- a/lib/queue.c +++ b/lib/queue.c @@ -37,9 +37,15 @@ int queue_init(struct queue *q, size_t size, const struct memtype *mem) { /* Queue size must be 2 exponent */ - if ((size < 2) || ((size & (size - 1)) != 0)) - return -1; - + /* If that's not the case, round up the size to next power of 2 */ + if ((size < 2) || ((size & (size - 1)) != 0)) { + size_t temp_size = 1; + while(temp_size < size) + temp_size = temp_size << 1; + size = temp_size; + //return -1; + } + q->mem = mem; q->buffer_mask = size - 1; q->buffer = memory_alloc(q->mem, sizeof(q->buffer[0]) * size);