<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/19815">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tests: Split SCTP tests to its own file and run them conditionally<br><br>Some systmes (like the one avaialable in OBS) don't support creating<br>SCTP sockets, so we need to skip those tests there.<br><br>Change-Id: I1d16280674625877ec22cc60cbc5deb67868a656<br>---<br>M configure.ac<br>M debian/rules<br>M tests/Makefile.am<br>A tests/socket/socket_sctp_test.c<br>A tests/socket/socket_sctp_test.err<br>A tests/socket/socket_sctp_test.ok<br>M tests/socket/socket_test.c<br>M tests/socket/socket_test.err<br>M tests/socket/socket_test.ok<br>M tests/testsuite.at<br>10 files changed, 287 insertions(+), 208 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/15/19815/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configure.ac b/configure.ac</span><br><span>index fbdcb57..b07a3bd 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -197,6 +197,10 @@</span><br><span>      LIBS=$old_LIBS</span><br><span> ])</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+AC_ARG_ENABLE([sctp-tests], [AS_HELP_STRING([--disable-sctp-tests], [Do not run socket tests requiring system SCTP support])],</span><br><span style="color: hsl(120, 100%, 40%);">+      [ENABLE_SCTP_TESTS=$enableval], [ENABLE_SCTP_TESTS="yes"])</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CONDITIONAL(ENABLE_SCTP_TESTS, test x"$ENABLE_SCTP_TESTS" = x"yes")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> AC_ARG_ENABLE(plugin,</span><br><span>  [AS_HELP_STRING(</span><br><span>             [--disable-plugin],</span><br><span>diff --git a/debian/rules b/debian/rules</span><br><span>index a9d961c..afff17f 100755</span><br><span>--- a/debian/rules</span><br><span>+++ b/debian/rules</span><br><span>@@ -26,7 +26,7 @@</span><br><span>         dh_auto_test || (find . -name testsuite.log -exec cat {} \; ; false)</span><br><span> </span><br><span> override_dh_auto_configure:</span><br><span style="color: hsl(0, 100%, 40%);">- dh_auto_configure -- --enable-static</span><br><span style="color: hsl(120, 100%, 40%);">+  dh_auto_configure -- --enable-static --disable-sctp-tests</span><br><span> </span><br><span> override_dh_clean:</span><br><span>  dh_clean</span><br><span>diff --git a/tests/Makefile.am b/tests/Makefile.am</span><br><span>index 2a364d5..56d0ac5 100644</span><br><span>--- a/tests/Makefile.am</span><br><span>+++ b/tests/Makefile.am</span><br><span>@@ -358,6 +358,14 @@</span><br><span>          i460_mux/i460_mux_test.ok \</span><br><span>          $(NULL)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+if ENABLE_LIBSCTP</span><br><span style="color: hsl(120, 100%, 40%);">+if ENABLE_SCTP_TESTS</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST += socket/socket_sctp_test.ok socket/socket_sctp_test.err</span><br><span style="color: hsl(120, 100%, 40%);">+check_PROGRAMS += socket/socket_sctp_test</span><br><span style="color: hsl(120, 100%, 40%);">+socket_socket_sctp_test_SOURCES = socket/socket_sctp_test.c</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DISTCLEANFILES = atconfig atlocal conv/gsm0503_test_vectors.c</span><br><span> BUILT_SOURCES = conv/gsm0503_test_vectors.c</span><br><span> noinst_HEADERS = conv/conv.h</span><br><span>diff --git a/tests/socket/socket_sctp_test.c b/tests/socket/socket_sctp_test.c</span><br><span>new file mode 100644</span><br><span>index 0000000..e70b8be</span><br><span>--- /dev/null</span><br><span>+++ b/tests/socket/socket_sctp_test.c</span><br><span>@@ -0,0 +1,233 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2017 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 2 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU General Public License along</span><br><span style="color: hsl(120, 100%, 40%);">+ * with this program; if not, write to the Free Software Foundation, Inc.,</span><br><span style="color: hsl(120, 100%, 40%);">+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</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 style="color: hsl(120, 100%, 40%);">+#include <stdio.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdlib.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <unistd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <fcntl.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <sys/socket.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <arpa/inet.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <netinet/in.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/application.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/socket.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/bits.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "../config.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void *ctx = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef HAVE_LIBSCTP</span><br><span style="color: hsl(120, 100%, 40%);">+static uint16_t sock_get_local_port(int fd, bool is_v6) {</span><br><span style="color: hsl(120, 100%, 40%);">+   struct sockaddr_storage sa;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct sockaddr_in *sin = (struct sockaddr_in *)&sa;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;</span><br><span style="color: hsl(120, 100%, 40%);">+   socklen_t len = sizeof(sa);</span><br><span style="color: hsl(120, 100%, 40%);">+   int local_port;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(getsockname(fd, (struct sockaddr*)&sa, &len) == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       if(!is_v6)</span><br><span style="color: hsl(120, 100%, 40%);">+            local_port = osmo_load16be(&sin->sin_port);</span><br><span style="color: hsl(120, 100%, 40%);">+    else</span><br><span style="color: hsl(120, 100%, 40%);">+          local_port = osmo_load16be(&sin6->sin6_port);</span><br><span style="color: hsl(120, 100%, 40%);">+  //printf("Checking osmo_sock_init2_multiaddr() port: %" PRIu16 "\n", listen_port_v4);</span><br><span style="color: hsl(120, 100%, 40%);">+     return local_port;</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%);">+/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */</span><br><span style="color: hsl(120, 100%, 40%);">+static int test_sockinit2_multiaddr(const char **addrv4_loc, const char **addrv6_loc,</span><br><span style="color: hsl(120, 100%, 40%);">+                              const char **addrv4_rem, const char **addrv6_rem,</span><br><span style="color: hsl(120, 100%, 40%);">+                             size_t addrv4_size, size_t addrv6_size)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        int fd, rc;</span><br><span style="color: hsl(120, 100%, 40%);">+   int listen_fd_v4, listen_fd_v6;</span><br><span style="color: hsl(120, 100%, 40%);">+       int listen_port_v4, listen_port_v6;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      listen_fd_v4 = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addrv4_loc, addrv4_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(listen_fd_v4 >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* expect it to be blocking */</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = fcntl(listen_fd_v4, F_GETFL);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(!(rc & O_NONBLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        listen_port_v4 = sock_get_local_port(listen_fd_v4, false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      listen_fd_v6 = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                addrv6_loc, addrv6_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(listen_fd_v6 >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* expect it to be blocking */</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = fcntl(listen_fd_v6, F_GETFL);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(!(rc & O_NONBLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        listen_port_v6 = sock_get_local_port(listen_fd_v6, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK\n");</span><br><span style="color: hsl(120, 100%, 40%);">+  fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_loc, addrv4_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   NULL, 0, 0, OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* expect it to be blocking */</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = fcntl(fd, F_GETFL);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(rc & O_NONBLOCK);</span><br><span style="color: hsl(120, 100%, 40%);">+     close(fd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("Checking osmo_sock_init2_multiaddr() for invalid flags\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_loc, addrv4_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   NULL, 0, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(fd < 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_rem, addrv4_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_rem, addrv4_size, listen_port_v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addrv4_rem, addrv4_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv6_rem, addrv6_size, listen_port_v6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(fd < 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addrv6_rem, addrv6_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_rem, addrv4_size, listen_port_v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(fd < 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addrv4_rem, addrv4_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_rem, addrv4_size, listen_port_v4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addrv6_rem, addrv6_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv6_rem, addrv6_size, listen_port_v6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    close(listen_fd_v4);</span><br><span style="color: hsl(120, 100%, 40%);">+  close(listen_fd_v6);</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("Done\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</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%);">+/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */</span><br><span style="color: hsl(120, 100%, 40%);">+static int test_sockinit2_multiaddr_simple(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     const char *addrv4_loc[] = { "0.0.0.0" };</span><br><span style="color: hsl(120, 100%, 40%);">+   const char *addrv6_loc[] = { "::" };</span><br><span style="color: hsl(120, 100%, 40%);">+        const char *addrv4_rem[] = { "127.0.0.1" };</span><br><span style="color: hsl(120, 100%, 40%);">+ const char *addrv6_rem[] = { "::1" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return test_sockinit2_multiaddr(addrv4_loc, addrv6_loc,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       addrv4_rem, addrv6_rem, 1, 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%);">+/* Test API osmo_sock_init2_multiaddr with several local/remote address */</span><br><span style="color: hsl(120, 100%, 40%);">+static int test_sockinit2_multiaddr_several(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ const char *addrv4_localhost[] = { "127.0.0.1", "127.0.0.2" };</span><br><span style="color: hsl(120, 100%, 40%);">+    const char *addrv6_localhost[] = { "::1" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return test_sockinit2_multiaddr(addrv4_localhost, addrv6_localhost,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addrv4_localhost, addrv6_localhost, 2, 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%);">+/* Test API osmo_sock_init2_multiaddr with several local/remote address, using both ipv4+v6 */</span><br><span style="color: hsl(120, 100%, 40%);">+static int test_sockinit2_multiaddr_mixed(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   const char *addr_localhost[] = { "127.0.0.1", "127.0.0.2", "::1" };</span><br><span style="color: hsl(120, 100%, 40%);">+     size_t addr_size = ARRAY_SIZE(addr_localhost);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      int listen_fd, listen_port, fd;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails\n");</span><br><span style="color: hsl(120, 100%, 40%);">+    listen_fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    addr_localhost, addr_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(listen_fd < 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   listen_fd = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   addr_localhost, addr_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(listen_fd < 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       listen_fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  addr_localhost, addr_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(listen_fd >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     listen_port = sock_get_local_port(listen_fd, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addr_localhost, addr_size, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 addr_localhost, addr_size, listen_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      close(fd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  close(listen_fd);</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* ifdef HAVE_LIBSCTP */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct log_info_cat default_categories[] = {</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%);">+static struct log_info info = {</span><br><span style="color: hsl(120, 100%, 40%);">+    .cat = default_categories,</span><br><span style="color: hsl(120, 100%, 40%);">+    .num_cat = ARRAY_SIZE(default_categories),</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%);">+int main(int argc, char *argv[])</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ ctx = talloc_named_const(NULL, 0, "socket_test_sctp");</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_init_logging2(ctx, &info);</span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_use_color(osmo_stderr_target, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+     log_set_print_filename(osmo_stderr_target, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef HAVE_LIBSCTP</span><br><span style="color: hsl(120, 100%, 40%);">+   test_sockinit2_multiaddr_simple();</span><br><span style="color: hsl(120, 100%, 40%);">+    test_sockinit2_multiaddr_several();</span><br><span style="color: hsl(120, 100%, 40%);">+   test_sockinit2_multiaddr_mixed();</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* ifdef HAVE_LIBSCTP */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return EXIT_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/tests/socket/socket_sctp_test.err b/tests/socket/socket_sctp_test.err</span><br><span>new file mode 100644</span><br><span>index 0000000..996d092</span><br><span>--- /dev/null</span><br><span>+++ b/tests/socket/socket_sctp_test.err</span><br><span>@@ -0,0 +1,8 @@</span><br><span style="color: hsl(120, 100%, 40%);">+invalid: you have to specify either BIND or CONNECT flags</span><br><span style="color: hsl(120, 100%, 40%);">+Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(120, 100%, 40%);">+Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(120, 100%, 40%);">+invalid: you have to specify either BIND or CONNECT flags</span><br><span style="color: hsl(120, 100%, 40%);">+Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(120, 100%, 40%);">+Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(120, 100%, 40%);">+getaddrinfo(::1, 0) failed: Address family for hostname not supported</span><br><span style="color: hsl(120, 100%, 40%);">+getaddrinfo(127.0.0.1, 0) failed: Address family for hostname not supported</span><br><span>diff --git a/tests/socket/socket_sctp_test.ok b/tests/socket/socket_sctp_test.ok</span><br><span>new file mode 100644</span><br><span>index 0000000..7608e88</span><br><span>--- /dev/null</span><br><span>+++ b/tests/socket/socket_sctp_test.ok</span><br><span>@@ -0,0 +1,24 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() for invalid flags</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6</span><br><span style="color: hsl(120, 100%, 40%);">+Done</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() for invalid flags</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6</span><br><span style="color: hsl(120, 100%, 40%);">+Done</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds</span><br><span style="color: hsl(120, 100%, 40%);">+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span>diff --git a/tests/socket/socket_test.c b/tests/socket/socket_test.c</span><br><span>index 1d4253c..a2e103c 100644</span><br><span>--- a/tests/socket/socket_test.c</span><br><span>+++ b/tests/socket/socket_test.c</span><br><span>@@ -148,176 +148,6 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef HAVE_LIBSCTP</span><br><span style="color: hsl(0, 100%, 40%);">-static uint16_t sock_get_local_port(int fd, bool is_v6) {</span><br><span style="color: hsl(0, 100%, 40%);">-  struct sockaddr_storage sa;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct sockaddr_in *sin = (struct sockaddr_in *)&sa;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;</span><br><span style="color: hsl(0, 100%, 40%);">-     socklen_t len = sizeof(sa);</span><br><span style="color: hsl(0, 100%, 40%);">-     int local_port;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(getsockname(fd, (struct sockaddr*)&sa, &len) == 0);</span><br><span style="color: hsl(0, 100%, 40%);">- if(!is_v6)</span><br><span style="color: hsl(0, 100%, 40%);">-              local_port = osmo_load16be(&sin->sin_port);</span><br><span style="color: hsl(0, 100%, 40%);">-      else</span><br><span style="color: hsl(0, 100%, 40%);">-            local_port = osmo_load16be(&sin6->sin6_port);</span><br><span style="color: hsl(0, 100%, 40%);">-    //printf("Checking osmo_sock_init2_multiaddr() port: %" PRIu16 "\n", listen_port_v4);</span><br><span style="color: hsl(0, 100%, 40%);">-       return local_port;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */</span><br><span style="color: hsl(0, 100%, 40%);">-static int test_sockinit2_multiaddr(const char **addrv4_loc, const char **addrv6_loc,</span><br><span style="color: hsl(0, 100%, 40%);">-                                const char **addrv4_rem, const char **addrv6_rem,</span><br><span style="color: hsl(0, 100%, 40%);">-                               size_t addrv4_size, size_t addrv6_size)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    int fd, rc;</span><br><span style="color: hsl(0, 100%, 40%);">-     int listen_fd_v4, listen_fd_v6;</span><br><span style="color: hsl(0, 100%, 40%);">- int listen_port_v4, listen_port_v6;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  listen_fd_v4 = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addrv4_loc, addrv4_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(listen_fd_v4 >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      /* expect it to be blocking */</span><br><span style="color: hsl(0, 100%, 40%);">-  rc = fcntl(listen_fd_v4, F_GETFL);</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_ASSERT(!(rc & O_NONBLOCK));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    listen_port_v4 = sock_get_local_port(listen_fd_v4, false);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  listen_fd_v6 = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  addrv6_loc, addrv6_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(listen_fd_v6 >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      /* expect it to be blocking */</span><br><span style="color: hsl(0, 100%, 40%);">-  rc = fcntl(listen_fd_v6, F_GETFL);</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_ASSERT(!(rc & O_NONBLOCK));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    listen_port_v6 = sock_get_local_port(listen_fd_v6, true);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_loc, addrv4_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     NULL, 0, 0, OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK);</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-        /* expect it to be blocking */</span><br><span style="color: hsl(0, 100%, 40%);">-  rc = fcntl(fd, F_GETFL);</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMO_ASSERT(rc & O_NONBLOCK);</span><br><span style="color: hsl(0, 100%, 40%);">-       close(fd);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      printf("Checking osmo_sock_init2_multiaddr() for invalid flags\n");</span><br><span style="color: hsl(0, 100%, 40%);">-   fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_loc, addrv4_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     NULL, 0, 0, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(fd < 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT\n");</span><br><span style="color: hsl(0, 100%, 40%);">- fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_rem, addrv4_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_rem, addrv4_size, listen_port_v4,</span><br><span style="color: hsl(0, 100%, 40%);">-                                OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6\n");</span><br><span style="color: hsl(0, 100%, 40%);">- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addrv4_rem, addrv4_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv6_rem, addrv6_size, listen_port_v6,</span><br><span style="color: hsl(0, 100%, 40%);">-                                OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(fd < 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4\n");</span><br><span style="color: hsl(0, 100%, 40%);">- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addrv6_rem, addrv6_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_rem, addrv4_size, listen_port_v4,</span><br><span style="color: hsl(0, 100%, 40%);">-                                OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(fd < 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");</span><br><span style="color: hsl(0, 100%, 40%);">-     fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addrv4_rem, addrv4_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_rem, addrv4_size, listen_port_v4,</span><br><span style="color: hsl(0, 100%, 40%);">-                                OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6\n");</span><br><span style="color: hsl(0, 100%, 40%);">-     fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addrv6_rem, addrv6_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv6_rem, addrv6_size, listen_port_v6,</span><br><span style="color: hsl(0, 100%, 40%);">-                                OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        close(listen_fd_v4);</span><br><span style="color: hsl(0, 100%, 40%);">-    close(listen_fd_v6);</span><br><span style="color: hsl(0, 100%, 40%);">-    printf("Done\n");</span><br><span style="color: hsl(0, 100%, 40%);">-     return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */</span><br><span style="color: hsl(0, 100%, 40%);">-static int test_sockinit2_multiaddr_simple(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- const char *addrv4_loc[] = { "0.0.0.0" };</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *addrv6_loc[] = { "::" };</span><br><span style="color: hsl(0, 100%, 40%);">-  const char *addrv4_rem[] = { "127.0.0.1" };</span><br><span style="color: hsl(0, 100%, 40%);">-   const char *addrv6_rem[] = { "::1" };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return test_sockinit2_multiaddr(addrv4_loc, addrv6_loc,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 addrv4_rem, addrv6_rem, 1, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Test API osmo_sock_init2_multiaddr with several local/remote address */</span><br><span style="color: hsl(0, 100%, 40%);">-static int test_sockinit2_multiaddr_several(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     const char *addrv4_localhost[] = { "127.0.0.1", "127.0.0.2" };</span><br><span style="color: hsl(0, 100%, 40%);">-      const char *addrv6_localhost[] = { "::1" };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   return test_sockinit2_multiaddr(addrv4_localhost, addrv6_localhost,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addrv4_localhost, addrv6_localhost, 2, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Test API osmo_sock_init2_multiaddr with several local/remote address, using both ipv4+v6 */</span><br><span style="color: hsl(0, 100%, 40%);">-static int test_sockinit2_multiaddr_mixed(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       const char *addr_localhost[] = { "127.0.0.1", "127.0.0.2", "::1" };</span><br><span style="color: hsl(0, 100%, 40%);">-       size_t addr_size = ARRAY_SIZE(addr_localhost);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  int listen_fd, listen_port, fd;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails\n");</span><br><span style="color: hsl(0, 100%, 40%);">-      listen_fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      addr_localhost, addr_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(listen_fd < 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails\n");</span><br><span style="color: hsl(0, 100%, 40%);">-     listen_fd = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     addr_localhost, addr_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(listen_fd < 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds\n");</span><br><span style="color: hsl(0, 100%, 40%);">- listen_fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    addr_localhost, addr_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   NULL, 0, 0, OSMO_SOCK_F_BIND);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(listen_fd >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- listen_port = sock_get_local_port(listen_fd, true);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");</span><br><span style="color: hsl(0, 100%, 40%);">-     fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addr_localhost, addr_size, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   addr_localhost, addr_size, listen_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(fd >= 0);</span><br><span style="color: hsl(0, 100%, 40%);">-        close(fd);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      close(listen_fd);</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-#endif /* ifdef HAVE_LIBSCTP */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> const struct log_info_cat default_categories[] = {</span><br><span> };</span><br><span> </span><br><span>@@ -335,11 +165,6 @@</span><br><span> </span><br><span>         test_sockinit();</span><br><span>     test_sockinit2();</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef HAVE_LIBSCTP</span><br><span style="color: hsl(0, 100%, 40%);">-    test_sockinit2_multiaddr_simple();</span><br><span style="color: hsl(0, 100%, 40%);">-      test_sockinit2_multiaddr_several();</span><br><span style="color: hsl(0, 100%, 40%);">-     test_sockinit2_multiaddr_mixed();</span><br><span style="color: hsl(0, 100%, 40%);">-#endif /* ifdef HAVE_LIBSCTP */</span><br><span> </span><br><span>         return EXIT_SUCCESS;</span><br><span> }</span><br><span>diff --git a/tests/socket/socket_test.err b/tests/socket/socket_test.err</span><br><span>index e3d3903..0f0f8da 100644</span><br><span>--- a/tests/socket/socket_test.err</span><br><span>+++ b/tests/socket/socket_test.err</span><br><span>@@ -2,11 +2,3 @@</span><br><span> invalid: you have to specify either BIND or CONNECT flags</span><br><span> Unable to find a common protocol (IPv4 or IPv6) for local host: 127.0.0.1 and remote host: ::1.</span><br><span> Unable to find a common protocol (IPv4 or IPv6) for local host: ::1 and remote host: 127.0.0.1.</span><br><span style="color: hsl(0, 100%, 40%);">-invalid: you have to specify either BIND or CONNECT flags</span><br><span style="color: hsl(0, 100%, 40%);">-Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(0, 100%, 40%);">-Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(0, 100%, 40%);">-invalid: you have to specify either BIND or CONNECT flags</span><br><span style="color: hsl(0, 100%, 40%);">-Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(0, 100%, 40%);">-Invalid v4 vs v6 in local vs remote addresses</span><br><span style="color: hsl(0, 100%, 40%);">-getaddrinfo(::1, 0) failed: Address family for hostname not supported</span><br><span style="color: hsl(0, 100%, 40%);">-getaddrinfo(127.0.0.1, 0) failed: Address family for hostname not supported</span><br><span>diff --git a/tests/socket/socket_test.ok b/tests/socket/socket_test.ok</span><br><span>index 959fa84..4265be8 100644</span><br><span>--- a/tests/socket/socket_test.ok</span><br><span>+++ b/tests/socket/socket_test.ok</span><br><span>@@ -9,27 +9,3 @@</span><br><span> Checking osmo_sock_init2(AF_UNSPEC) must fail on mixed IPv6 & IPv4</span><br><span> Checking osmo_sock_init2(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span> Checking osmo_sock_init2(AF_UNSPEC) BIND + CONNECT on IPv6</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() for invalid flags</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6</span><br><span style="color: hsl(0, 100%, 40%);">-Done</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() for invalid flags</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6</span><br><span style="color: hsl(0, 100%, 40%);">-Done</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds</span><br><span style="color: hsl(0, 100%, 40%);">-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4</span><br><span>diff --git a/tests/testsuite.at b/tests/testsuite.at</span><br><span>index a4c28f9..1955800 100644</span><br><span>--- a/tests/testsuite.at</span><br><span>+++ b/tests/testsuite.at</span><br><span>@@ -313,6 +313,15 @@</span><br><span> AT_CHECK([$abs_top_builddir/tests/socket/socket_test], [0], [expout], [experr])</span><br><span> AT_CLEANUP</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+AT_SETUP([socket_sctp])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_KEYWORDS([socket_sctp])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_SKIP_IF([! test -e $abs_top_builddir/tests/socket/socket_sctp_test])</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/socket/socket_sctp_test.ok > expout</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/socket/socket_sctp_test.err > experr</span><br><span style="color: hsl(120, 100%, 40%);">+touch experr</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CHECK([$abs_top_builddir/tests/socket/socket_sctp_test], [0], [expout], [experr])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CLEANUP</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> AT_SETUP([osmo-auc-gen])</span><br><span> AT_KEYWORDS([osmo-auc-gen])</span><br><span> cat $abs_srcdir/osmo-auc-gen/osmo-auc-gen_test.ok > expout</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/19815">change 19815</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/+/19815"/><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: I1d16280674625877ec22cc60cbc5deb67868a656 </div>
<div style="display:none"> Gerrit-Change-Number: 19815 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>