diff --git a/include/osmocom/core/sockaddr_str.h b/include/osmocom/core/sockaddr_str.h index 6dd428c76..d7a8cdf66 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 601bb565a..c4e6f5fcf 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 f523050cf..5c548b403 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 bf7d73805..7d8fe4f38 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 bc18225d4..31f630f7b 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) +[21] + 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) +[22] + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 1.2.3.4:5 + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 0.0.0.0:0(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 255.255.255.255:65535 + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 0.0.0.256:1(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > not an ip address:1(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [1:2:3::4]:5 + osmo_sockaddr_str_cmp(): [0::]:5(zero) > [::]:0(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [::1]:0(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535 + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]:65535 + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [::fffff]:1(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [not an ip address]:1(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [1.2.3.4]:5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 1:2:3::4:5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 1.2.3.4:5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > :5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > []:5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 1.2.3.4:0(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 1.2.3:4:5:0(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) < [::1:10.9.8.7]:1 + osmo_sockaddr_str_cmp(): [0::]:5(zero) > 0.0.0.0:5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) == [::]:5(zero) + osmo_sockaddr_str_cmp(): [0::]:5(zero) == [0::]:5(zero)