pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmo-netif/+/35235?usp=email )


Change subject: stream_cli: Fix opening sctp client socket if no local address 
set
......................................................................

stream_cli: Fix opening sctp client socket if no local address set

Properly call osmo_sock_init2_multiaddr2() to use default binding
address if user of osmo_stream_cli didn't set one on the object
through the API.
osmo_sock_init2_multiaddr2() was also borken under that scenario until
recently (see Depends below). Until now, users of osmo_stream for SCTP
(mainly libosmo-sccp) relied on always setting a proper local address to
overcome this limitation.

Depends: libosmocore.git Change-Id I2641fbaca6f477404b094dbc53c0c1a3dd3fd2fd
Related: OS#6279
Change-Id: I0d9d0e48690c915f7b51ad09f452e551e01368b5
---
M src/stream_cli.c
1 file changed, 32 insertions(+), 4 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmo-netif refs/changes/35/35235/1

diff --git a/src/stream_cli.c b/src/stream_cli.c
index 1e7ebeb..4f2963d 100644
--- a/src/stream_cli.c
+++ b/src/stream_cli.c
@@ -838,7 +838,9 @@
  *  \return negative on error, 0 on success */
 int osmo_stream_cli_open(struct osmo_stream_cli *cli)
 {
-       int ret, fd = -1;
+       int ret, flags;
+       int fd = -1;
+       unsigned int local_addrcnt;

        /* we are reconfiguring this socket, close existing first. */
        if ((cli->flags & OSMO_STREAM_CLI_F_RECONF) && 
osmo_stream_cli_get_fd(cli) >= 0)
@@ -856,11 +858,18 @@
                switch (cli->proto) {
 #ifdef HAVE_LIBSCTP
                case IPPROTO_SCTP:
+                       local_addrcnt = cli->local_addrcnt;
+                       flags = OSMO_SOCK_F_CONNECT|OSMO_SOCK_F_NONBLOCK;
+                       if (cli->local_addrcnt > 0 || cli->local_port > 0) { /* 
explicit bind required? */
+                               flags |= OSMO_SOCK_F_BIND;
+                               /* If no local addr configured, use 
local_addr[0]=NULL by default when creating the socket. */
+                               if (cli->local_addrcnt == 0)
+                                       local_addrcnt = 1;
+                       }
                        ret = osmo_sock_init2_multiaddr2(cli->sk_domain, 
cli->sk_type, cli->proto,
-                                                       (const char 
**)cli->local_addr, cli->local_addrcnt, cli->local_port,
+                                                       (const char 
**)cli->local_addr, local_addrcnt, cli->local_port,
                                                        (const char 
**)cli->addr, cli->addrcnt, cli->port,
-                                                       
OSMO_SOCK_F_CONNECT|OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK,
-                                                       &cli->ma_pars);
+                                                       flags, &cli->ma_pars);
                        break;
 #endif
                default:

-- 
To view, visit https://gerrit.osmocom.org/c/libosmo-netif/+/35235?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmo-netif
Gerrit-Branch: master
Gerrit-Change-Id: I0d9d0e48690c915f7b51ad09f452e551e01368b5
Gerrit-Change-Number: 35235
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-MessageType: newchange

Reply via email to