<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/15835">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add osmo_sockaddr_str_is_nonzero()<br><br>Often, an IP address of 0.0.0.0 is considered an unset value (for clients<br>requiring a server address; not for listening on "any").<br><br>osmo_sockaddr_str_is_set() does return false when the port is 0, but there is<br>no simple way to tell whether the IP address is actually set to a server<br>address.<br><br>Add osmo_sockaddr_str_is_nonzero() to return false if:<br>- the port is zero, or<br>- the IP address is zero (0.0.0.0 or ::0), or<br>- the IP address cannot be parsed.<br><br>Change-Id: I73cbcab90cffcdc9a5f8d5281c57c1f87b2c3550<br>---<br>M include/osmocom/core/sockaddr_str.h<br>M src/sockaddr_str.c<br>M tests/sockaddr_str/sockaddr_str_test.c<br>M tests/sockaddr_str/sockaddr_str_test.ok<br>4 files changed, 87 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/35/15835/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/sockaddr_str.h b/include/osmocom/core/sockaddr_str.h</span><br><span>index d16dc86..d47b2a4 100644</span><br><span>--- a/include/osmocom/core/sockaddr_str.h</span><br><span>+++ b/include/osmocom/core/sockaddr_str.h</span><br><span>@@ -65,6 +65,7 @@</span><br><span> #define OSMO_SOCKADDR_STR_FMT_ARGS(R) ((R)? (R)->ip : "NULL"), ((R)? (R)->port : 0)</span><br><span> </span><br><span> bool osmo_sockaddr_str_is_set(const struct osmo_sockaddr_str *sockaddr_str);</span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_sockaddr_str_is_nonzero(const struct osmo_sockaddr_str *sockaddr_str);</span><br><span> </span><br><span> int osmo_sockaddr_str_from_str(struct osmo_sockaddr_str *sockaddr_str, const char *ip, uint16_t port);</span><br><span> </span><br><span>diff --git a/src/sockaddr_str.c b/src/sockaddr_str.c</span><br><span>index d683c7d..f523050 100644</span><br><span>--- a/src/sockaddr_str.c</span><br><span>+++ b/src/sockaddr_str.c</span><br><span>@@ -66,6 +66,35 @@</span><br><span>                 && (sockaddr_str->af == AF_INET || sockaddr_str->af == AF_INET6);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Return true if IP and port are valid and nonzero.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] sockaddr_str  The instance to examine.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return True iff ip can be converted to a nonzero IP address, and port is not 0.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_sockaddr_str_is_nonzero(const struct osmo_sockaddr_str *sockaddr_str)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   uint32_t ipv4;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct in6_addr ipv6_zero = {};</span><br><span style="color: hsl(120, 100%, 40%);">+       struct in6_addr ipv6;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!osmo_sockaddr_str_is_set(sockaddr_str))</span><br><span style="color: hsl(120, 100%, 40%);">+          return false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       switch (sockaddr_str->af) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case AF_INET:</span><br><span style="color: hsl(120, 100%, 40%);">+         if (osmo_sockaddr_str_to_32(sockaddr_str, &ipv4))</span><br><span style="color: hsl(120, 100%, 40%);">+                 return false;</span><br><span style="color: hsl(120, 100%, 40%);">+         return ipv4 != 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   case AF_INET6:</span><br><span style="color: hsl(120, 100%, 40%);">+                if (osmo_sockaddr_str_to_in6_addr(sockaddr_str, &ipv6))</span><br><span style="color: hsl(120, 100%, 40%);">+                   return false;</span><br><span style="color: hsl(120, 100%, 40%);">+         return memcmp(&ipv6, &ipv6_zero, sizeof(ipv6)) != 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Distinguish between valid IPv4 and IPv6 strings.</span><br><span>  * This does not verify whether the string is a valid IP address; it assumes that the input is a valid IP address, and</span><br><span>  * on that premise returns whether it is an IPv4 or IPv6 string, by looking for '.' and ':' characters.  It is safe to</span><br><span>diff --git a/tests/sockaddr_str/sockaddr_str_test.c b/tests/sockaddr_str/sockaddr_str_test.c</span><br><span>index d2e7944..4284387 100644</span><br><span>--- a/tests/sockaddr_str/sockaddr_str_test.c</span><br><span>+++ b/tests/sockaddr_str/sockaddr_str_test.c</span><br><span>@@ -53,6 +53,8 @@</span><br><span>  { .af = AF_INET, .ip = "1.2.3.4", .port = 0 },</span><br><span>     { .af = AF_INET, .ip = "1.2.3:4:5", .port = 0 },</span><br><span>   { .af = AF_INET6, .ip = "::1:10.9.8.7", .port = 1 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { .af = AF_INET, .ip = "0.0.0.0", .port = 5 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { .af = AF_INET6, .ip = "::", .port = 5 },</span><br><span> };</span><br><span> </span><br><span> const char *af_name(int af)</span><br><span>@@ -106,6 +108,7 @@</span><br><span>          dump_oip(x);</span><br><span> </span><br><span>             printf("  osmo_sockaddr_str_is_set() = %s\n", osmo_sockaddr_str_is_set(x) ? "true" : "false");</span><br><span style="color: hsl(120, 100%, 40%);">+          printf("  osmo_sockaddr_str_is_nonzero() = %s\n", osmo_sockaddr_str_is_nonzero(x) ? "true" : "false");</span><br><span> </span><br><span>             {</span><br><span>                    struct in_addr a = {};</span><br><span>diff --git a/tests/sockaddr_str/sockaddr_str_test.ok b/tests/sockaddr_str/sockaddr_str_test.ok</span><br><span>index d69314d..781e9d1 100644</span><br><span>--- a/tests/sockaddr_str/sockaddr_str_test.ok</span><br><span>+++ b/tests/sockaddr_str/sockaddr_str_test.ok</span><br><span>@@ -2,6 +2,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "1.2.3.4", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = true</span><br><span>   osmo_sockaddr_str_to_in_addr() rc == 0 in_addr=01020304</span><br><span>    -> osmo_sockaddr_str_from_in_addr() rc == 0 { .af = AF_INET, .ip = "1.2.3.4", .port = 5 }</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>@@ -19,6 +20,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "0.0.0.0", .port = 0 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc == 0 in_addr=00000000</span><br><span>    -> osmo_sockaddr_str_from_in_addr() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 0 }</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>@@ -36,6 +38,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "255.255.255.255", .port = 65535 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = true</span><br><span>   osmo_sockaddr_str_to_in_addr() rc == 0 in_addr=ffffffff</span><br><span>    -> osmo_sockaddr_str_from_in_addr() rc == 0 { .af = AF_INET, .ip = "255.255.255.255", .port = 65535 }</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>@@ -53,6 +56,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "0.0.0.256", .port = 1 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -65,6 +69,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "not an ip address", .port = 1 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -77,6 +82,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "1:2:3::4", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = true</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=00010002000300000000000000000004</span><br><span>    -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "1:2:3::4", .port = 5 }</span><br><span>@@ -92,6 +98,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "::", .port = 0 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=00000000000000000000000000000000</span><br><span>    -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "::", .port = 0 }</span><br><span>@@ -107,6 +114,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "::1", .port = 0 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=00000000000000000000000000000001</span><br><span>    -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "::1", .port = 0 }</span><br><span>@@ -122,6 +130,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", .port = 65535 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = true</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=ffffffffffffffffffffffffffffffff</span><br><span>    -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", .port = 65535 }</span><br><span>@@ -137,6 +146,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", .port = 65535 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = true</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=ffffffffffffffffffffffffffffffff</span><br><span>    -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", .port = 65535 }</span><br><span>@@ -155,6 +165,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "::fffff", .port = 1 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -167,6 +178,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "not an ip address", .port = 1 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -179,6 +191,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "1.2.3.4", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -192,6 +205,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "1:2:3::4", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -205,6 +219,7 @@</span><br><span> </span><br><span> { .af = AF_UNSPEC, .ip = "1.2.3.4", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -218,6 +233,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -230,6 +246,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "", .port = 5 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -242,6 +259,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "1.2.3.4", .port = 0 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc == 0 in_addr=01020304</span><br><span>    -> osmo_sockaddr_str_from_in_addr() rc == 0 { .af = AF_INET, .ip = "1.2.3.4", .port = 0 }</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>@@ -259,6 +277,7 @@</span><br><span> </span><br><span> { .af = AF_INET, .ip = "1.2.3:4:5", .port = 0 }</span><br><span>   osmo_sockaddr_str_is_set() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span>   osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span>@@ -272,6 +291,7 @@</span><br><span> </span><br><span> { .af = AF_INET6, .ip = "::1:10.9.8.7", .port = 1 }</span><br><span>   osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = true</span><br><span>   osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span>   osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=0000000000000000000000010a090807</span><br><span>    -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "::1:a09:807", .port = 1 }</span><br><span>@@ -286,3 +306,37 @@</span><br><span>    -> osmo_sockaddr_str_from_sockaddr() rc == 0 { .af = AF_INET6, .ip = "::1:a09:807", .port = 1 }</span><br><span>       DIFFERS!</span><br><span>   osmo_sockaddr_str_from_str() rc == 0 { .af = AF_INET6, .ip = "::1:10.9.8.7", .port = 1 }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+{ .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_in_addr() rc == 0 in_addr=00000000</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_in_addr() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_in6_addr() rc < 0 in6_addr=00000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_32() rc == 0 uint32_t=0x0</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_32() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_32n() rc == 0 uint32_t=0x0</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_32n() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_sockaddr_in() rc == 0 sockaddr_in=02000005000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_sockaddr_in() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_sockaddr_in6() rc < 0 sockaddr_in6=00000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_sockaddr() rc == 0 sockaddr_storage=0200000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_sockaddr() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_from_str() rc == 0 { .af = AF_INET, .ip = "0.0.0.0", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+{ .af = AF_INET6, .ip = "::", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_set() = true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_is_nonzero() = false</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=00000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_32n() rc < 0 uint32_t=0x0</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_sockaddr_in() rc < 0 sockaddr_in=00000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_sockaddr_in6() rc == 0 sockaddr_in6=0a000005000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_sockaddr_in6() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_to_sockaddr() rc == 0 sockaddr_storage=0a00000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+   -> osmo_sockaddr_str_from_sockaddr() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_from_str() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/15835">change 15835</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/15835"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I73cbcab90cffcdc9a5f8d5281c57c1f87b2c3550 </div>
<div style="display:none"> Gerrit-Change-Number: 15835 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>