<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/19880">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Fix change in ss7 server default listen addr, keeps backward-compatibility behavior<br><br>Previous commit changed the default bind/listen address of the server<br>from NULL (0.0.0.0) to 127.0.0.1, hence breaking some setups where no<br>"local-ip" was defined and hence from then on were only listening on<br>localhost by default.<br><br>Let's instead bind to "::" if IPv6 is available, which covers any IPv6<br>and/or IPv4 address. If not available, keep binding to 0.0.0.0.<br>Similarly, if IPv6 is available set default remote to both ::1 and<br>127.0.0.1 to allow it working against processes listening on IPv4 or<br>IPv6 addresses.<br><br>Change-Id: Id4718267df2390f70cec519042dc12bac0cd2876<br>---<br>M src/osmo_ss7_vty.c<br>1 file changed, 39 insertions(+), 4 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/80/19880/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c</span><br><span>index 4591156..3035844 100644</span><br><span>--- a/src/osmo_ss7_vty.c</span><br><span>+++ b/src/osmo_ss7_vty.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #include <stdint.h></span><br><span> #include <string.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <netdb.h></span><br><span> #include <arpa/inet.h></span><br><span> </span><br><span> #include <osmocom/vty/vty.h></span><br><span>@@ -1801,6 +1802,32 @@</span><br><span>            osmo_sccp_vty_write_cs7_node(vty, " ", inst->sccp);</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> </span><br><span> int osmo_ss7_vty_go_parent(struct vty *vty)</span><br><span> {</span><br><span>@@ -1814,11 +1841,19 @@</span><br><span>       case L_CS7_ASP_NODE:</span><br><span>                 asp = vty->index;</span><br><span>                 /* 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%);">-                        osmo_ss7_asp_peer_add_host(&asp->cfg.local, asp, "localhost");</span><br><span style="color: hsl(120, 100%, 40%);">+               if (!asp->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_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%);">+         }</span><br><span>            /* 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, "localhost");</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%);">+            }</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></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/19880">change 19880</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/+/19880"/><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: Id4718267df2390f70cec519042dc12bac0cd2876 </div>
<div style="display:none"> Gerrit-Change-Number: 19880 </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>