diff --git a/include/villas/nodes/zeromq.h b/include/villas/nodes/zeromq.h index c274fb6c4..5e7d196c4 100644 --- a/include/villas/nodes/zeromq.h +++ b/include/villas/nodes/zeromq.h @@ -33,6 +33,8 @@ #include "list.h" struct zeromq { + int ipv6; + enum { ZEROMQ_PATTERN_PUBSUB, ZEROMQ_PATTERN_RADIODISH diff --git a/lib/nodes/zeromq.c b/lib/nodes/zeromq.c index e86ec04c4..1fa349f76 100644 --- a/lib/nodes/zeromq.c +++ b/lib/nodes/zeromq.c @@ -84,6 +84,9 @@ int zeromq_parse(struct node *n, config_setting_t *cfg) else cerror(cfg, "Invalid type for ZeroMQ node: %s", node_name_short(n)); } + + if (!config_setting_lookup_bool(cfg, "ipv6", &z->ipv6)) + z->ipv6 = 0; return 0; } @@ -141,10 +144,18 @@ int zeromq_start(struct node *n) z->publisher.socket = zmq_socket(context, ZMQ_PUB); break; } + + ret = zmq_setsockopt(z->publisher.socket, &z->ipv6, sizeof(z->ipv6)); + if (ret) + return ret; /* Bind subscriber socket */ if (z->subscriber.endpoint) { ret = zmq_bind(z->subscriber.socket, z->subscriber.endpoint); + ret = zmq_setsockopt(z->subscriber.socket, &z->ipv6, sizeof(z->ipv6)); + if (ret) + return ret; + if (ret) return ret; }