[tarantool-patches] [PATCH 4/5] swim: allow to omit host in URI

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Wed May 1 01:31:26 MSK 2019


Before the patch swim.cfg() was returning an error on an attempt
to use URI like 'port', without a host. But it would be useful,
easy, and short to allow that, and use '127.0.0.1' host by
default. Compare:

    swim:cfg({uri = 1234})
            vs
    swim:cfg({uri = '127.0.0.1:1234'})

It is remarkable that box.cfg{listen} also allows to omit host.

Note, that use '0.0.0.0' (INADDR_ANY) is forbidden. Otherwise

    1) Different instances interacting with this one via not the
       same interfaces would see different source IP addresses.
       It would mess member tables;

    2) This instance would not be able to encode its IP address
       in the meta section, because it has no a fixed IP. At the
       same time omission of it and usage of UDP header source
       address is not possible as well, because UDP header is not
       encrypted and therefore is not safe to look at.

Part of #3234
---
 src/lib/swim/swim.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/lib/swim/swim.c b/src/lib/swim/swim.c
index 22dfc3d2a..b2b4901b1 100644
--- a/src/lib/swim/swim.c
+++ b/src/lib/swim/swim.c
@@ -1696,7 +1696,9 @@ swim_uri_to_addr(const char *uri, struct sockaddr_in *addr,
 		return -1;
 	}
 	*addr = *((struct sockaddr_in *) &storage);
-	if (addr->sin_addr.s_addr == 0) {
+	if (is_host_empty) {
+		addr->sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+	} else if (addr->sin_addr.s_addr == 0) {
 		diag_set(IllegalParams, "%s INADDR_ANY is not supported",
 			 prefix);
 		return -1;
-- 
2.20.1 (Apple Git-117)





More information about the Tarantool-patches mailing list