summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/core/sockaddr_str.h1
-rw-r--r--include/osmocom/core/utils.h2
-rw-r--r--src/sockaddr_str.c74
-rw-r--r--tests/sockaddr_str/sockaddr_str_test.c26
-rw-r--r--tests/sockaddr_str/sockaddr_str_test.ok575
5 files changed, 678 insertions, 0 deletions
diff --git a/include/osmocom/core/sockaddr_str.h b/include/osmocom/core/sockaddr_str.h
index 6dd428c7..d7a8cdf6 100644
--- a/include/osmocom/core/sockaddr_str.h
+++ b/include/osmocom/core/sockaddr_str.h
@@ -70,6 +70,7 @@ struct osmo_sockaddr_str {
bool osmo_sockaddr_str_is_set(const struct osmo_sockaddr_str *sockaddr_str);
bool osmo_sockaddr_str_is_nonzero(const struct osmo_sockaddr_str *sockaddr_str);
+int osmo_sockaddr_str_cmp(const struct osmo_sockaddr_str *a, const struct osmo_sockaddr_str *b);
int osmo_sockaddr_str_from_str(struct osmo_sockaddr_str *sockaddr_str, const char *ip, uint16_t port);
diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h
index 601bb565..c4e6f5fc 100644
--- a/include/osmocom/core/utils.h
+++ b/include/osmocom/core/utils.h
@@ -21,6 +21,8 @@
#define OSMO_MAX(a, b) ((a) >= (b) ? (a) : (b))
/*! Return the minimum of two specified values */
#define OSMO_MIN(a, b) ((a) >= (b) ? (b) : (a))
+/*! Return a typical cmp result for comparable entities a and b. */
+#define OSMO_CMP(a, b) ((a) < (b)? -1 : ((a) > (b)? 1 : 0))
/*! Stringify the name of a macro x, e.g. an FSM event name.
* Note: if nested within another preprocessor macro, this will
* stringify the value of x instead of its name. */
diff --git a/src/sockaddr_str.c b/src/sockaddr_str.c
index f523050c..5c548b40 100644
--- a/src/sockaddr_str.c
+++ b/src/sockaddr_str.c
@@ -95,6 +95,80 @@ bool osmo_sockaddr_str_is_nonzero(const struct osmo_sockaddr_str *sockaddr_str)
}
}
+/*! Compare two osmo_sockaddr_str instances by string comparison.
+ * Compare by strcmp() for the address and compare port numbers, ignore the AF_INET/AF_INET6 value.
+ * \param[in] a left side of comparison.
+ * \param[in] b right side of comparison.
+ * \return -1 if a < b, 0 if a == b, 1 if a > b.
+ */
+static int osmo_sockaddr_str_cmp_by_string(const struct osmo_sockaddr_str *a, const struct osmo_sockaddr_str *b)
+{
+ int cmp;
+ if (a == b)
+ return 0;
+ if (!a)
+ return -1;
+ if (!b)
+ return 1;
+ cmp = strncmp(a->ip, b->ip, sizeof(a->ip));
+ if (cmp)
+ return cmp;
+ return OSMO_CMP(a->port, b->port);
+}
+
+/*! Compare two osmo_sockaddr_str instances by resulting IP address.
+ * Compare IP versions (AF_INET vs AF_INET6), compare resulting IP address bytes and compare port numbers.
+ * If the IP address strings cannot be parsed successfully / if the 'af' is neither AF_INET nor AF_INET6, fall back to
+ * pure string comparison of the ip address.
+ * \param[in] a left side of comparison.
+ * \param[in] b right side of comparison.
+ * \return -1 if a < b, 0 if a == b, 1 if a > b.
+ */
+int osmo_sockaddr_str_cmp(const struct osmo_sockaddr_str *a, const struct osmo_sockaddr_str *b)
+{
+ int cmp;
+ uint32_t ipv4_a, ipv4_b;
+ struct in6_addr ipv6_a = {}, ipv6_b = {};
+
+ if (a == b)
+ return 0;
+ if (!a)
+ return -1;
+ if (!b)
+ return 1;
+ cmp = OSMO_CMP(a->af, b->af);
+ if (cmp)
+ return cmp;
+ switch (a->af) {
+ case AF_INET:
+ if (osmo_sockaddr_str_to_32(a, &ipv4_a)
+ || osmo_sockaddr_str_to_32(b, &ipv4_b))
+ goto fallback_to_strcmp;
+ cmp = OSMO_CMP(ipv4_a, ipv4_b);
+ break;
+
+ case AF_INET6:
+ if (osmo_sockaddr_str_to_in6_addr(a, &ipv6_a)
+ || osmo_sockaddr_str_to_in6_addr(b, &ipv6_b))
+ goto fallback_to_strcmp;
+ cmp = memcmp(&ipv6_a, &ipv6_b, sizeof(ipv6_a));
+ break;
+
+ default:
+ goto fallback_to_strcmp;
+ }
+ if (cmp)
+ return cmp;
+
+ cmp = OSMO_CMP(a->port, b->port);
+ if (cmp)
+ return cmp;
+ return 0;
+
+fallback_to_strcmp:
+ return osmo_sockaddr_str_cmp_by_string(a, b);
+}
+
/*! Distinguish between valid IPv4 and IPv6 strings.
* This does not verify whether the string is a valid IP address; it assumes that the input is a valid IP address, and
* on that premise returns whether it is an IPv4 or IPv6 string, by looking for '.' and ':' characters. It is safe to
diff --git a/tests/sockaddr_str/sockaddr_str_test.c b/tests/sockaddr_str/sockaddr_str_test.c
index bf7d7380..7d8fe4f3 100644
--- a/tests/sockaddr_str/sockaddr_str_test.c
+++ b/tests/sockaddr_str/sockaddr_str_test.c
@@ -55,6 +55,7 @@ struct osmo_sockaddr_str oip_data[] = {
{ .af = AF_INET6, .ip = "::1:10.9.8.7", .port = 1 },
{ .af = AF_INET, .ip = "0.0.0.0", .port = 5 },
{ .af = AF_INET6, .ip = "::", .port = 5 },
+ { .af = AF_INET6, .ip = "0::", .port = 5 },
};
const char *af_name(int af)
@@ -236,9 +237,34 @@ void sockaddr_str_test_conversions()
}
+static void test_osmo_sockaddr_str_cmp()
+{
+ int i;
+ printf("\n\n%s\n", __func__);
+ for (i = 0; i < ARRAY_SIZE(oip_data); i++) {
+ /* use a copy to not hit the pointer comparison in osmo_sockaddr_str_cmp(). */
+ struct osmo_sockaddr_str _a = oip_data[i];
+ struct osmo_sockaddr_str *a = &_a;
+ int j;
+ printf("[%2d]\n", i);
+
+ for (j = 0; j < ARRAY_SIZE(oip_data); j++) {
+ struct osmo_sockaddr_str *b = &oip_data[j];
+ int ip_rc = osmo_sockaddr_str_cmp(a, b);
+ printf(" osmo_sockaddr_str_cmp(): " OSMO_SOCKADDR_STR_FMT "%s %s " OSMO_SOCKADDR_STR_FMT "%s\n",
+ OSMO_SOCKADDR_STR_FMT_ARGS(a),
+ osmo_sockaddr_str_is_nonzero(a) ? "" : "(zero)",
+ ip_rc < 0? "<" : (ip_rc == 0 ? "==" : ">" ),
+ OSMO_SOCKADDR_STR_FMT_ARGS(b),
+ osmo_sockaddr_str_is_nonzero(b) ? "" : "(zero)");
+ }
+ }
+}
+
int main(int argc, char **argv)
{
sockaddr_str_test_conversions();
+ test_osmo_sockaddr_str_cmp();
return 0;
}
diff --git a/tests/sockaddr_str/sockaddr_str_test.ok b/tests/sockaddr_str/sockaddr_str_test.ok
index bc18225d..31f630f7 100644
--- a/tests/sockaddr_str/sockaddr_str_test.ok
+++ b/tests/sockaddr_str/sockaddr_str_test.ok
@@ -362,3 +362,578 @@
osmo_sockaddr_str_to_sockaddr() rc == 0 sockaddr_storage=0a00000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-> osmo_sockaddr_str_from_sockaddr() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }
osmo_sockaddr_str_from_str() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }
+
+
+{ .af = AF_INET6, .ip = "0::", .port = 5 }
+ OSMO_SOCKADDR_STR_FMT: '[0::]:5'
+ osmo_sockaddr_str_is_set() = true
+ osmo_sockaddr_str_is_nonzero() = false
+ osmo_sockaddr_str_to_in_addr() rc < 0 in_addr=00000000
+ osmo_sockaddr_str_to_in6_addr() rc == 0 in6_addr=00000000000000000000000000000000
+ -> osmo_sockaddr_str_from_in6_addr() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }
+ DIFFERS!
+ osmo_sockaddr_str_to_32() rc < 0 uint32_t=0x0
+ osmo_sockaddr_str_to_32n() rc < 0 uint32_t=0x0
+ osmo_sockaddr_str_to_sockaddr_in() rc < 0 sockaddr_in=00000000000000000000000000000000
+ osmo_sockaddr_str_to_sockaddr_in6() rc == 0 sockaddr_in6=0a000005000000000000000000000000000000000000000000000000
+ -> osmo_sockaddr_str_from_sockaddr_in6() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }
+ DIFFERS!
+ osmo_sockaddr_str_to_sockaddr() rc == 0 sockaddr_storage=0a00000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ -> osmo_sockaddr_str_from_sockaddr() rc == 0 { .af = AF_INET6, .ip = "::", .port = 5 }
+ DIFFERS!
+ osmo_sockaddr_str_from_str() rc == 0 { .af = AF_INET6, .ip = "0::", .port = 5 }
+
+
+test_osmo_sockaddr_str_cmp
+[ 0]
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 == 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 > :5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < []:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5 < [0::]:5(zero)
+[ 1]
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) == 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:0(zero) < [0::]:5(zero)
+[ 2]
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 == 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > :5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < []:5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 255.255.255.255:65535 < [0::]:5(zero)
+[ 3]
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) == 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.256:1(zero) < [0::]:5(zero)
+[ 4]
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) == not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): not an ip address:1(zero) < [0::]:5(zero)
+[ 5]
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 == [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > :5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > []:5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [1:2:3::4]:5 > [0::]:5(zero)
+[ 6]
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [::]:0(zero) == [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > []:5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [::]:0(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [::]:0(zero) < [0::]:5(zero)
+[ 7]
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) == [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > []:5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [::1]:0(zero) > [0::]:5(zero)
+[ 8]
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 == [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 == [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > :5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > []:5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 > [0::]:5(zero)
+[ 9]
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 == [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 == [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > :5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > []:5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 > [0::]:5(zero)
+[10]
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) == [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > []:5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [::fffff]:1(zero) > [0::]:5(zero)
+[11]
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) == [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > []:5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [not an ip address]:1(zero) > [0::]:5(zero)
+[12]
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) == [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > []:5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [1.2.3.4]:5(zero) > [0::]:5(zero)
+[13]
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) == 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 1:2:3::4:5(zero) < [0::]:5(zero)
+[14]
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) == 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < :5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:5(zero) < [0::]:5(zero)
+[15]
+ osmo_sockaddr_str_cmp(): :5(zero) < 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): :5(zero) < 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): :5(zero) < 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): :5(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): :5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): :5(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) == :5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): :5(zero) < 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): :5(zero) < [0::]:5(zero)
+[16]
+ osmo_sockaddr_str_cmp(): []:5(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): []:5(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): []:5(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): []:5(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): []:5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): []:5(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) == []:5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): []:5(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): []:5(zero) < [0::]:5(zero)
+[17]
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) == 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3.4:0(zero) < [0::]:5(zero)
+[18]
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) == 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 1.2.3:4:5:0(zero) < [0::]:5(zero)
+[19]
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > [::]:0(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > :5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > []:5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 == [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > [::]:5(zero)
+ osmo_sockaddr_str_cmp(): [::1:10.9.8.7]:1 > [0::]:5(zero)
+[20]
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < 1.2.3.4:5
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) > 0.0.0.0:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < 255.255.255.255:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < 0.0.0.256:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < not an ip address:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [1:2:3::4]:5
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [::]:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [::1]:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [::fffff]:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [not an ip address]:1(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [1.2.3.4]:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < 1:2:3::4:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) > 1.2.3.4:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) > :5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < []:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < 1.2.3.4:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < 1.2.3:4:5:0(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [::1:10.9.8.7]:1
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) == 0.0.0.0:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [::]:5(zero)
+ osmo_sockaddr_str_cmp(): 0.0.0.0:5(zero) < [0::]:5(zero)