<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/10805">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">layer23: Use osmo_sock_unix_init_ofd() from libosmocore<br><br>We don't need to hand-code unix domain socket initialization but<br>can simply use our library function for it.  As an added benefit,<br>the library code already contains corner case handling for non-NUL<br>terminated unix domain socket path.<br><br>Change-Id: I57c724c78dbbbce0546ebe914e370f32c8c89703<br>---<br>M src/host/layer23/src/common/l1l2_interface.c<br>M src/host/layer23/src/common/sap_interface.c<br>M src/host/layer23/src/mobile/mncc_sock.c<br>3 files changed, 11 insertions(+), 105 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/layer23/src/common/l1l2_interface.c b/src/host/layer23/src/common/l1l2_interface.c</span><br><span>index 3e9cee4..e21b07e 100644</span><br><span>--- a/src/host/layer23/src/common/l1l2_interface.c</span><br><span>+++ b/src/host/layer23/src/common/l1l2_interface.c</span><br><span>@@ -1,7 +1,7 @@</span><br><span> /* Layer 1 socket interface of layer2/3 stack */</span><br><span> </span><br><span> /* (C) 2010 by Holger Hans Peter Freyther</span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2010 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2010,2018 by Harald Welte <laforge@gnumonks.org></span><br><span>  *</span><br><span>  * All Rights Reserved</span><br><span>  *</span><br><span>@@ -27,6 +27,7 @@</span><br><span> #include <osmocom/bb/common/l1l2_interface.h></span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/socket.h></span><br><span> </span><br><span> #include <sys/socket.h></span><br><span> #include <sys/un.h></span><br><span>@@ -105,39 +106,18 @@</span><br><span> int layer2_open(struct osmocom_ms *ms, const char *socket_path)</span><br><span> {</span><br><span>  int rc;</span><br><span style="color: hsl(0, 100%, 40%);">- struct sockaddr_un local;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ms->l2_wq.bfd.fd = socket(AF_UNIX, SOCK_STREAM, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ms->l2_wq.bfd.fd < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-               fprintf(stderr, "Failed to create unix domain socket.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            return ms->l2_wq.bfd.fd;</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%);">-       local.sun_family = AF_UNIX;</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_strlcpy(local.sun_path, socket_path, sizeof(local.sun_path));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = connect(ms->l2_wq.bfd.fd, (struct sockaddr *) &local,</span><br><span style="color: hsl(0, 100%, 40%);">-                    sizeof(local));</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = osmo_sock_unix_init_ofd(&ms->l2_wq.bfd, SOCK_STREAM, 0, socket_path, OSMO_SOCK_F_CONNECT);</span><br><span>       if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                fprintf(stderr, "Failed to connect to '%s': %s\n", local.sun_path,</span><br><span style="color: hsl(0, 100%, 40%);">-                    strerror(errno));</span><br><span style="color: hsl(0, 100%, 40%);">-               close(ms->l2_wq.bfd.fd);</span><br><span style="color: hsl(120, 100%, 40%);">+           fprintf(stderr, "Failed to create unix domain socket.\n");</span><br><span>                 return rc;</span><br><span>   }</span><br><span> </span><br><span>        osmo_wqueue_init(&ms->l2_wq, 100);</span><br><span>    ms->l2_wq.bfd.data = ms;</span><br><span style="color: hsl(0, 100%, 40%);">-     ms->l2_wq.bfd.when = BSC_FD_READ;</span><br><span>         ms->l2_wq.read_cb = layer2_read;</span><br><span>  ms->l2_wq.write_cb = layer2_write;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       rc = osmo_fd_register(&ms->l2_wq.bfd);</span><br><span style="color: hsl(0, 100%, 40%);">-   if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          fprintf(stderr, "Failed to register fd.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          close(ms->l2_wq.bfd.fd);</span><br><span style="color: hsl(0, 100%, 40%);">-             return rc;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    return 0;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/host/layer23/src/common/sap_interface.c b/src/host/layer23/src/common/sap_interface.c</span><br><span>index e18bb31..da03c0f 100644</span><br><span>--- a/src/host/layer23/src/common/sap_interface.c</span><br><span>+++ b/src/host/layer23/src/common/sap_interface.c</span><br><span>@@ -1,7 +1,7 @@</span><br><span> /* BTSAP socket interface of layer2/3 stack */</span><br><span> </span><br><span> /* (C) 2010 by Holger Hans Peter Freyther</span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2010 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2010,2018 by Harald Welte <laforge@gnumonks.org></span><br><span>  * (C) 2010 by Andreas Eversberg <jolly@eversberg.eu></span><br><span>  * (C) 2011 by Nico Golde <nico@ngolde.de></span><br><span>  *</span><br><span>@@ -29,6 +29,7 @@</span><br><span> </span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/socket.h></span><br><span> </span><br><span> #include <sys/socket.h></span><br><span> #include <sys/un.h></span><br><span>@@ -499,37 +500,19 @@</span><br><span> int sap_open(struct osmocom_ms *ms, const char *socket_path)</span><br><span> {</span><br><span>   ssize_t rc;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct sockaddr_un local;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ms->sap_wq.bfd.fd = socket(AF_UNIX, SOCK_STREAM, 0);</span><br><span style="color: hsl(0, 100%, 40%);">- if (ms->sap_wq.bfd.fd < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-              fprintf(stderr, "Failed to create unix domain socket.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            return ms->sap_wq.bfd.fd;</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%);">-       local.sun_family = AF_UNIX;</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_strlcpy(local.sun_path, socket_path, sizeof(local.sun_path));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = connect(ms->sap_wq.bfd.fd, (struct sockaddr *) &local, sizeof(local));</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = osmo_sock_unix_init_ofd(&ms->sap_wq.bfd, SOCK_STREAM, 0, socket_path, OSMO_SOCK_F_CONNECT);</span><br><span>      if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                fprintf(stderr, "Failed to connect to '%s'\n", local.sun_path);</span><br><span style="color: hsl(120, 100%, 40%);">+             fprintf(stderr, "Failed to create unix domain socket.\n");</span><br><span>                 ms->sap_entity.sap_state = SAP_SOCKET_ERROR;</span><br><span style="color: hsl(0, 100%, 40%);">-         close(ms->sap_wq.bfd.fd);</span><br><span>                 return rc;</span><br><span>   }</span><br><span> </span><br><span>        osmo_wqueue_init(&ms->sap_wq, 100);</span><br><span>   ms->sap_wq.bfd.data = ms;</span><br><span style="color: hsl(0, 100%, 40%);">-    ms->sap_wq.bfd.when = BSC_FD_READ;</span><br><span>        ms->sap_wq.read_cb = sap_read;</span><br><span>    ms->sap_wq.write_cb = sap_write;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- rc = osmo_fd_register(&ms->sap_wq.bfd);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          fprintf(stderr, "Failed to register fd.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          return rc;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    sap_connect(ms);</span><br><span> </span><br><span>         return 0;</span><br><span>diff --git a/src/host/layer23/src/mobile/mncc_sock.c b/src/host/layer23/src/mobile/mncc_sock.c</span><br><span>index 39eb7bc..d7d56cc 100644</span><br><span>--- a/src/host/layer23/src/mobile/mncc_sock.c</span><br><span>+++ b/src/host/layer23/src/mobile/mncc_sock.c</span><br><span>@@ -1,6 +1,6 @@</span><br><span> /* mncc_sock.c: Tie the MNCC interface to a unix domain socket */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* (C) 2008-2010 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2008-2011,2018 by Harald Welte <laforge@gnumonks.org></span><br><span>  * (C) 2009,2011 by Andreas Eversberg <andreas@eversberg.eu></span><br><span>  * All Rights Reserved</span><br><span>  *</span><br><span>@@ -34,6 +34,7 @@</span><br><span> #include <osmocom/core/select.h></span><br><span> #include <osmocom/core/timer.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/socket.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_08.h></span><br><span> </span><br><span> #include <osmocom/bb/common/logging.h></span><br><span>@@ -80,9 +81,6 @@</span><br><span>     state->conn_bfd.when |= BSC_FD_WRITE;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* FIXME: move this to libosmocore */</span><br><span style="color: hsl(0, 100%, 40%);">-int osmo_unixsock_listen(struct osmo_fd *bfd, int type, const char *path);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void mncc_sock_close(struct mncc_sock_state *state)</span><br><span> {</span><br><span>  struct osmo_fd *bfd = &state->conn_bfd;</span><br><span>@@ -268,7 +266,7 @@</span><br><span> </span><br><span>     bfd = &state->listen_bfd;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    rc = osmo_unixsock_listen(bfd, SOCK_SEQPACKET, name);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = osmo_sock_unix_init_ofd(bfd, SOCK_SEQPACKET, 0, name, OSMO_SOCK_F_BIND);</span><br><span>        if (rc < 0) {</span><br><span>             LOGP(DMNCC, LOGL_ERROR, "Could not create unix socket: %s\n",</span><br><span>                      strerror(errno));</span><br><span>@@ -276,18 +274,9 @@</span><br><span>             return NULL;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   bfd->when = BSC_FD_READ;</span><br><span>  bfd->cb = mncc_sock_accept;</span><br><span>       bfd->data = state;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       rc = osmo_fd_register(bfd);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DMNCC, LOGL_ERROR, "Could not register listen fd: %d\n", rc);</span><br><span style="color: hsl(0, 100%, 40%);">-            close(bfd->fd);</span><br><span style="color: hsl(0, 100%, 40%);">-              talloc_free(state);</span><br><span style="color: hsl(0, 100%, 40%);">-             return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    return state;</span><br><span> }</span><br><span> </span><br><span>@@ -299,49 +288,3 @@</span><br><span>        close(state->listen_bfd.fd);</span><br><span>      talloc_free(state);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* FIXME: move this to libosmocore */</span><br><span style="color: hsl(0, 100%, 40%);">-int osmo_unixsock_listen(struct osmo_fd *bfd, int type, const char *path)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct sockaddr_un local;</span><br><span style="color: hsl(0, 100%, 40%);">-       unsigned int namelen;</span><br><span style="color: hsl(0, 100%, 40%);">-   int rc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- bfd->fd = socket(AF_UNIX, type, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if (bfd->fd < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                fprintf(stderr, "Failed to create Unix Domain Socket.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            return -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%);">-       local.sun_family = AF_UNIX;</span><br><span style="color: hsl(0, 100%, 40%);">-     osmo_strlcpy(local.sun_path, path, sizeof(local.sun_path));</span><br><span style="color: hsl(0, 100%, 40%);">-     local.sun_path[sizeof(local.sun_path) - 1] = '\0';</span><br><span style="color: hsl(0, 100%, 40%);">-      unlink(local.sun_path);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* we use the same magic that X11 uses in Xtranssock.c for</span><br><span style="color: hsl(0, 100%, 40%);">-       * calculating the proper length of the sockaddr */</span><br><span style="color: hsl(0, 100%, 40%);">-#if defined(BSD44SOCKETS) || defined(__UNIXWARE__)</span><br><span style="color: hsl(0, 100%, 40%);">-   local.sun_len = strlen(local.sun_path);</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-#if defined(BSD44SOCKETS) || defined(SUN_LEN)</span><br><span style="color: hsl(0, 100%, 40%);">-      namelen = SUN_LEN(&local);</span><br><span style="color: hsl(0, 100%, 40%);">-#else</span><br><span style="color: hsl(0, 100%, 40%);">-     namelen = strlen(local.sun_path) +</span><br><span style="color: hsl(0, 100%, 40%);">-                offsetof(struct sockaddr_un, sun_path);</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- rc = bind(bfd->fd, (struct sockaddr *) &local, namelen);</span><br><span style="color: hsl(0, 100%, 40%);">- if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          fprintf(stderr, "Failed to bind the unix domain socket. '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                      local.sun_path);</span><br><span style="color: hsl(0, 100%, 40%);">-                return -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%);">-       if (listen(bfd->fd, 0) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-               fprintf(stderr, "Failed to listen.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-               return -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%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10805">change 10805</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/10805"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I57c724c78dbbbce0546ebe914e370f32c8c89703 </div>
<div style="display:none"> Gerrit-Change-Number: 10805 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-CC: Vadim Yanitskiy <axilirator@gmail.com> </div>