<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/25689">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">osmo_sccp_simple_client_on_ss7_id(): Allow set internally proper IPv4/v6 default hosts<br><br>Allow user apps to relay the decision of proper default local/remote<br>hosts values to the library. Proper configuration of these addresses can<br>be quite cumbersome to get correctly, or confusing at least. That's due<br>to the multi-homing feature of SCTP where both IPv4 and IPv6 are<br>involved.<br><br>We were already doing this kind of automatic setup in<br>osmo_ss7_vty_go_parent(), where we do validations and assign addresses<br>based on IPv6 availability.<br>On the other hand, apps using osmo_sccp_simple_client_on_ss7_id() API<br>usually pass  "localhost" as default address. In Linux, when IPv6 is enabled<br>localhost is resolved as "::1", and "127.0.0.1" when IPv6 is disabled.<br><br>Let's instead allow apps to relay the setup to the lib, so same addresses<br>can be applied both during VTY command as well as if there was no VTY<br>setup at all.<br><br>Related: OS#5186<br>Change-Id: I82e203612571b7651d758d8148661f706a1642ba<br>---<br>M src/Makefile.am<br>M src/osmo_ss7.c<br>M src/osmo_ss7_vty.c<br>M src/sccp_user.c<br>A src/ss7_internal.h<br>5 files changed, 104 insertions(+), 65 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/89/25689/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/Makefile.am b/src/Makefile.am</span><br><span>index aee7fd5..9d5e9a3 100644</span><br><span>--- a/src/Makefile.am</span><br><span>+++ b/src/Makefile.am</span><br><span>@@ -2,7 +2,7 @@</span><br><span> AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) \</span><br><span>                 $(LIBOSMONETIF_CFLAGS)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-noinst_HEADERS = sccp_internal.h xua_asp_fsm.h xua_as_fsm.h xua_internal.h</span><br><span style="color: hsl(120, 100%, 40%);">+noinst_HEADERS = sccp_internal.h ss7_internal.h xua_asp_fsm.h xua_as_fsm.h xua_internal.h</span><br><span> </span><br><span> # Legacy static libs</span><br><span> </span><br><span>diff --git a/src/osmo_ss7.c b/src/osmo_ss7.c</span><br><span>index ebed9cf..749e987 100644</span><br><span>--- a/src/osmo_ss7.c</span><br><span>+++ b/src/osmo_ss7.c</span><br><span>@@ -1225,6 +1225,73 @@</span><br><span>        return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static bool ipv6_sctp_supported(const char *host, bool bind)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct addrinfo hints;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct addrinfo *result;</span><br><span style="color: hsl(120, 100%, 40%);">+      memset(&hints, 0, sizeof(struct addrinfo));</span><br><span style="color: hsl(120, 100%, 40%);">+       hints.ai_family = AF_INET6;</span><br><span style="color: hsl(120, 100%, 40%);">+   hints.ai_socktype = SOCK_STREAM;</span><br><span style="color: hsl(120, 100%, 40%);">+      hints.ai_flags = AI_NUMERICHOST;</span><br><span style="color: hsl(120, 100%, 40%);">+      hints.ai_protocol = 0; /* Any protocol */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (bind)  /* For wildcard IP address */</span><br><span style="color: hsl(120, 100%, 40%);">+              hints.ai_flags |= AI_PASSIVE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* man getaddrinfo: Either node or service, but not both, may be NULL. */</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(host);</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = getaddrinfo(host, NULL, &hints, &result);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (rc != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGP(DLSS7, LOGL_NOTICE, "Default IPv6 address %s not supported: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  host, gai_strerror(rc));</span><br><span style="color: hsl(120, 100%, 40%);">+         return false;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              freeaddrinfo(result);</span><br><span style="color: hsl(120, 100%, 40%);">+         return true;</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%);">+/* Set default values for local and remote peer hosts if they are not yet set.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] asp ASP for which to set default hosts.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns true if values where changed, false oterwise.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * If the ASP is already started, osmo_ss7_asp_restart() must be called</span><br><span style="color: hsl(120, 100%, 40%);">+ * afterwards in order to apply the new settings.</span><br><span style="color: hsl(120, 100%, 40%);">+ * This API is internal, hence doesn't appear in osmo_ss7.h</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_ss7_asp_set_default_peer_hosts(struct osmo_ss7_asp *asp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       bool changed = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* If no local addr was set */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!asp->cfg.local.host_cnt) {</span><br><span style="color: hsl(120, 100%, 40%);">+            bool rem_has_v4 = false, rem_has_v6 = false;</span><br><span style="color: hsl(120, 100%, 40%);">+          int i;</span><br><span style="color: hsl(120, 100%, 40%);">+                for (i = 0; i < asp->cfg.remote.host_cnt; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (osmo_ip_str_type(asp->cfg.remote.host[i]) == AF_INET6)</span><br><span style="color: hsl(120, 100%, 40%);">+                         rem_has_v6 = true;</span><br><span style="color: hsl(120, 100%, 40%);">+                    else</span><br><span style="color: hsl(120, 100%, 40%);">+                          rem_has_v4 = true;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+             /* "::" Covers both IPv4 and IPv6, but if only IPv4</span><br><span style="color: hsl(120, 100%, 40%);">+          * address are set on the remote side, IPv4 on the local</span><br><span style="color: hsl(120, 100%, 40%);">+               * side must be set too */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (ipv6_sctp_supported("::", true) && !(rem_has_v4 && !rem_has_v6))</span><br><span style="color: hsl(120, 100%, 40%);">+                        osmo_ss7_asp_peer_add_host(&asp->cfg.local, asp, "::");</span><br><span style="color: hsl(120, 100%, 40%);">+              else</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_ss7_asp_peer_add_host(&asp->cfg.local, asp, "0.0.0.0");</span><br><span style="color: hsl(120, 100%, 40%);">+         changed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* If no remote addr was set */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!asp->cfg.remote.host_cnt) {</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_ss7_asp_peer_add_host(&asp->cfg.remote, asp, "127.0.0.1");</span><br><span style="color: hsl(120, 100%, 40%);">+              if (ipv6_sctp_supported("::1", false))</span><br><span style="color: hsl(120, 100%, 40%);">+                      osmo_ss7_asp_peer_add_host(&asp->cfg.remote, asp, "::1");</span><br><span style="color: hsl(120, 100%, 40%);">+            changed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return changed;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct osmo_ss7_asp *</span><br><span> osmo_ss7_asp_find_by_name(struct osmo_ss7_instance *inst, const char *name)</span><br><span> {</span><br><span>@@ -2171,6 +2238,20 @@</span><br><span>   return osmo_stream_srv_link_set_addrs(xs->server, (const char **)xs->cfg.local.host, xs->cfg.local.host_cnt);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_ss7_xua_server_set_default_local_hosts(struct osmo_xua_server *oxs)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     /* If no local addr was set, or erased after _create(): */</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!oxs->cfg.local.host_cnt) {</span><br><span style="color: hsl(120, 100%, 40%);">+            /* "::" Covers both IPv4 and IPv6 */</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ipv6_sctp_supported("::", true))</span><br><span style="color: hsl(120, 100%, 40%);">+                        osmo_ss7_xua_server_set_local_host(oxs, "::");</span><br><span style="color: hsl(120, 100%, 40%);">+              else</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_ss7_xua_server_set_local_host(oxs, "0.0.0.0");</span><br><span style="color: hsl(120, 100%, 40%);">+         return true;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     return false;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void osmo_ss7_xua_server_destroy(struct osmo_xua_server *xs)</span><br><span> {</span><br><span>      struct osmo_ss7_asp *asp, *asp2;</span><br><span>diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c</span><br><span>index 3b39a61..8ee3087 100644</span><br><span>--- a/src/osmo_ss7_vty.c</span><br><span>+++ b/src/osmo_ss7_vty.c</span><br><span>@@ -45,8 +45,7 @@</span><br><span> #include "xua_internal.h"</span><br><span> #include <osmocom/sigtran/sccp_sap.h></span><br><span> #include "sccp_internal.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "sccp_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> </span><br><span> #define XUA_VAR_STR     "(sua|m3ua|ipa)"</span><br><span> </span><br><span>@@ -1937,33 +1936,6 @@</span><br><span>              osmo_sccp_vty_write_cs7_node(vty, " ", inst->sccp);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static bool ipv6_sctp_supported(const char *host, bool bind)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  int rc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct addrinfo hints;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct addrinfo *result;</span><br><span style="color: hsl(0, 100%, 40%);">-        memset(&hints, 0, sizeof(struct addrinfo));</span><br><span style="color: hsl(0, 100%, 40%);">- hints.ai_family = AF_INET6;</span><br><span style="color: hsl(0, 100%, 40%);">-     hints.ai_socktype = SOCK_STREAM;</span><br><span style="color: hsl(0, 100%, 40%);">-        hints.ai_flags = AI_NUMERICHOST;</span><br><span style="color: hsl(0, 100%, 40%);">-        hints.ai_protocol = 0; /* Any protocol */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (bind)  /* For wildcard IP address */</span><br><span style="color: hsl(0, 100%, 40%);">-                hints.ai_flags |= AI_PASSIVE;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* man getaddrinfo: Either node or service, but not both, may be NULL. */</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_ASSERT(host);</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = getaddrinfo(host, NULL, &hints, &result);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGP(DLSS7, LOGL_NOTICE, "Default IPv6 address %s not supported: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    host, gai_strerror(rc));</span><br><span style="color: hsl(0, 100%, 40%);">-           return false;</span><br><span style="color: hsl(0, 100%, 40%);">-   } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                freeaddrinfo(result);</span><br><span style="color: hsl(0, 100%, 40%);">-           return true;</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%);">-</span><br><span> int osmo_ss7_vty_go_parent(struct vty *vty)</span><br><span> {</span><br><span>       struct osmo_ss7_as *as;</span><br><span>@@ -1975,30 +1947,8 @@</span><br><span>     switch (vty->node) {</span><br><span>      case L_CS7_ASP_NODE:</span><br><span>                 asp = vty->index;</span><br><span style="color: hsl(0, 100%, 40%);">-            /* If no local addr was set */</span><br><span style="color: hsl(0, 100%, 40%);">-          if (!asp->cfg.local.host_cnt) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      bool rem_has_v4 = false, rem_has_v6 = false;</span><br><span style="color: hsl(0, 100%, 40%);">-                    int i;</span><br><span style="color: hsl(0, 100%, 40%);">-                  for (i = 0; i < asp->cfg.remote.host_cnt; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          if (osmo_ip_str_type(asp->cfg.remote.host[i]) == AF_INET6)</span><br><span style="color: hsl(0, 100%, 40%);">-                                   rem_has_v6 = true;</span><br><span style="color: hsl(0, 100%, 40%);">-                              else</span><br><span style="color: hsl(0, 100%, 40%);">-                                    rem_has_v4 = true;</span><br><span style="color: hsl(0, 100%, 40%);">-                      }</span><br><span style="color: hsl(0, 100%, 40%);">-                       /* "::" Covers both IPv4 and IPv6, but if only IPv4</span><br><span style="color: hsl(0, 100%, 40%);">-                    * address are set on the remote side, IPv4 on the local</span><br><span style="color: hsl(0, 100%, 40%);">-                         * side must be set too */</span><br><span style="color: hsl(0, 100%, 40%);">-                      if (ipv6_sctp_supported("::", true) && !(rem_has_v4 && !rem_has_v6))</span><br><span style="color: hsl(0, 100%, 40%);">-                          osmo_ss7_asp_peer_add_host(&asp->cfg.local, asp, "::");</span><br><span style="color: hsl(0, 100%, 40%);">-                        else</span><br><span style="color: hsl(0, 100%, 40%);">-                            osmo_ss7_asp_peer_add_host(&asp->cfg.local, asp, "0.0.0.0");</span><br><span style="color: hsl(0, 100%, 40%);">-           }</span><br><span style="color: hsl(0, 100%, 40%);">-               /* If no remote addr was set */</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!asp->cfg.remote.host_cnt) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_ss7_asp_peer_add_host(&asp->cfg.remote, asp, "127.0.0.1");</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (ipv6_sctp_supported("::1", false))</span><br><span style="color: hsl(0, 100%, 40%);">-                                osmo_ss7_asp_peer_add_host(&asp->cfg.remote, asp, "::1");</span><br><span style="color: hsl(0, 100%, 40%);">-              }</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Make sure proper defaults values are set */</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_ss7_asp_set_default_peer_hosts(asp);</span><br><span>            osmo_ss7_asp_restart(asp);</span><br><span>           vty->node = L_CS7_NODE;</span><br><span>           vty->index = asp->inst;</span><br><span>@@ -2016,13 +1966,7 @@</span><br><span>       case L_CS7_XUA_NODE:</span><br><span>                 oxs = vty->index;</span><br><span>                 /* If no local addr was set, or erased after _create(): */</span><br><span style="color: hsl(0, 100%, 40%);">-              if (!oxs->cfg.local.host_cnt) {</span><br><span style="color: hsl(0, 100%, 40%);">-                      /* "::" Covers both IPv4 and IPv6 */</span><br><span style="color: hsl(0, 100%, 40%);">-                  if (ipv6_sctp_supported("::", true))</span><br><span style="color: hsl(0, 100%, 40%);">-                          osmo_ss7_xua_server_set_local_host(oxs, "::");</span><br><span style="color: hsl(0, 100%, 40%);">-                        else</span><br><span style="color: hsl(0, 100%, 40%);">-                            osmo_ss7_xua_server_set_local_host(oxs, "0.0.0.0");</span><br><span style="color: hsl(0, 100%, 40%);">-           }</span><br><span style="color: hsl(120, 100%, 40%);">+             osmo_ss7_xua_server_set_default_local_hosts(oxs);</span><br><span>            if (osmo_ss7_xua_server_bind(oxs) < 0)</span><br><span>                    vty_out(vty, "%% Unable to bind xUA server to IP(s)%s", VTY_NEWLINE);</span><br><span>              vty->node = L_CS7_NODE;</span><br><span>diff --git a/src/sccp_user.c b/src/sccp_user.c</span><br><span>index a654cc6..ade9487 100644</span><br><span>--- a/src/sccp_user.c</span><br><span>+++ b/src/sccp_user.c</span><br><span>@@ -38,6 +38,7 @@</span><br><span> </span><br><span> #include "sccp_internal.h"</span><br><span> #include "xua_internal.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "ss7_internal.h"</span><br><span> </span><br><span> /*! \brief Find a SCCP User registered for given PC+SSN or SSN only</span><br><span>  * First search all users with a valid PC for a full PC+SSN match.</span><br><span>@@ -476,9 +477,9 @@</span><br><span>  *  \param[in] default_pc pointcode to be used on missing VTY setting</span><br><span>  *  \param[in] prot protocol to be used (e.g OSMO_SS7_ASP_PROT_M3UA)</span><br><span>  *  \param[in] default_local_port local port to be used on missing VTY setting</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] default_local_ip local IP-address to be used on missing VTY setting</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] default_local_ip local IP-address to be used on missing VTY setting (NULL: use library own defaults)</span><br><span>  *  \param[in] default_remote_port remote port to be used on missing VTY setting</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] default_remote_ip remote IP-address to be used on missing VTY setting</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] default_remote_ip remote IP-address to be used on missing VTY setting (NULL: use library own defaults)</span><br><span>  *  \returns callee-allocated SCCP instance on success; NULL on error */</span><br><span> </span><br><span> struct osmo_sccp_instance *</span><br><span>@@ -618,8 +619,12 @@</span><br><span>                        if (!asp)</span><br><span>                            goto out_rt;</span><br><span>                         asp_created = true;</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_ss7_asp_peer_set_hosts(&asp->cfg.local, asp, &default_local_ip, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_ss7_asp_peer_set_hosts(&asp->cfg.remote, asp, &default_remote_ip, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (default_local_ip)</span><br><span style="color: hsl(120, 100%, 40%);">+                         osmo_ss7_asp_peer_set_hosts(&asp->cfg.local, asp, &default_local_ip, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (default_remote_ip)</span><br><span style="color: hsl(120, 100%, 40%);">+                                osmo_ss7_asp_peer_set_hosts(&asp->cfg.remote, asp, &default_remote_ip, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* Make sure proper defaults are applied if app didn't provide specific default values */</span><br><span style="color: hsl(120, 100%, 40%);">+                 osmo_ss7_asp_set_default_peer_hosts(asp);</span><br><span>                    asp->simple_client_allocated = true;</span><br><span>              }</span><br><span> </span><br><span>diff --git a/src/ss7_internal.h b/src/ss7_internal.h</span><br><span>new file mode 100644</span><br><span>index 0000000..28e239c</span><br><span>--- /dev/null</span><br><span>+++ b/src/ss7_internal.h</span><br><span>@@ -0,0 +1,9 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Internal header used by libosmo-sccp, not available publicly for lib users */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdbool.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sigtran/osmo_ss7.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_ss7_asp_set_default_peer_hosts(struct osmo_ss7_asp *asp);</span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_ss7_xua_server_set_default_local_hosts(struct osmo_xua_server *oxs);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/25689">change 25689</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/libosmo-sccp/+/25689"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-sccp </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I82e203612571b7651d758d8148661f706a1642ba </div>
<div style="display:none"> Gerrit-Change-Number: 25689 </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>