<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-abis/+/16014">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  osmith: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ipa: Allow setting local addr and port for struct ipa_client_conn<br><br>Change-Id: I3133c6b01647506a5b9c67e4699bcad3ff59f843<br>---<br>M TODO-RELEASE<br>M include/osmocom/abis/ipa.h<br>M src/input/ipa.c<br>M src/input/ipaccess.c<br>M src/ipa_proxy.c<br>5 files changed, 41 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index d0852fc..4fe42c6 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -7,3 +7,5 @@</span><br><span> # If any interfaces have been added since the last public release: c:r:a + 1.</span><br><span> # If any interfaces have been removed or changed since the last public release: c:r:0.</span><br><span> #library    what            description / commit summary line</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-abis struct ipa_client_conn          Fields added at the end (no ABI break because instance is created through API func)</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-abis       ipa_client_conn_create2()       New API added</span><br><span>diff --git a/include/osmocom/abis/ipa.h b/include/osmocom/abis/ipa.h</span><br><span>index ff00697..4764a95 100644</span><br><span>--- a/include/osmocom/abis/ipa.h</span><br><span>+++ b/include/osmocom/abis/ipa.h</span><br><span>@@ -78,6 +78,8 @@</span><br><span>       int (*write_cb)(struct ipa_client_conn *link);</span><br><span>       void                            *data;</span><br><span>       struct msgb                     *pending_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ const char                      *local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint16_t                        local_port;</span><br><span> };</span><br><span> </span><br><span> struct ipa_client_conn *</span><br><span>@@ -86,7 +88,16 @@</span><br><span>                       void (*updown)(struct ipa_client_conn *link, int),</span><br><span>                   int (*read_cb)(struct ipa_client_conn *link, struct msgb *msgb),</span><br><span>                     int (*write_cb)(struct ipa_client_conn *link),</span><br><span style="color: hsl(0, 100%, 40%);">-                  void *data);</span><br><span style="color: hsl(120, 100%, 40%);">+                  void *data) OSMO_DEPRECATED("Use ipa_client_conn_create2() instead");</span><br><span style="color: hsl(120, 100%, 40%);">+struct ipa_client_conn *</span><br><span style="color: hsl(120, 100%, 40%);">+ipa_client_conn_create2(void *ctx, struct e1inp_ts *ts,</span><br><span style="color: hsl(120, 100%, 40%);">+                   int priv_nr, const char *loc_addr, uint16_t loc_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                 const char *rem_addr, uint16_t rem_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                      void (*updown_cb)(struct ipa_client_conn *link, int up),</span><br><span style="color: hsl(120, 100%, 40%);">+                      int (*read_cb)(struct ipa_client_conn *link,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 struct msgb *msgb),</span><br><span style="color: hsl(120, 100%, 40%);">+                    int (*write_cb)(struct ipa_client_conn *link),</span><br><span style="color: hsl(120, 100%, 40%);">+                void *data);</span><br><span> void ipa_client_conn_destroy(struct ipa_client_conn *link);</span><br><span> </span><br><span> int ipa_client_conn_open(struct ipa_client_conn *link);</span><br><span>diff --git a/src/input/ipa.c b/src/input/ipa.c</span><br><span>index b4dbcb0..0f67dca 100644</span><br><span>--- a/src/input/ipa.c</span><br><span>+++ b/src/input/ipa.c</span><br><span>@@ -155,6 +155,20 @@</span><br><span>                   int (*write_cb)(struct ipa_client_conn *link),</span><br><span>                       void *data)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+       return ipa_client_conn_create2(ctx, ts, priv_nr, NULL, 0, addr, port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                updown_cb, read_cb, write_cb, data);</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%);">+struct ipa_client_conn *</span><br><span style="color: hsl(120, 100%, 40%);">+ipa_client_conn_create2(void *ctx, struct e1inp_ts *ts,</span><br><span style="color: hsl(120, 100%, 40%);">+                  int priv_nr, const char *loc_addr, uint16_t loc_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                 const char *rem_addr, uint16_t rem_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                      void (*updown_cb)(struct ipa_client_conn *link, int up),</span><br><span style="color: hsl(120, 100%, 40%);">+                      int (*read_cb)(struct ipa_client_conn *link,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 struct msgb *msgb),</span><br><span style="color: hsl(120, 100%, 40%);">+                    int (*write_cb)(struct ipa_client_conn *link),</span><br><span style="color: hsl(120, 100%, 40%);">+                void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span>        struct ipa_client_conn *ipa_link;</span><br><span> </span><br><span>        ipa_link = talloc_zero(ctx, struct ipa_client_conn);</span><br><span>@@ -181,8 +195,10 @@</span><br><span>  ipa_link->ofd->data = ipa_link;</span><br><span>        ipa_link->ofd->fd = -1;</span><br><span>        ipa_link->state = IPA_CLIENT_LINK_STATE_CONNECTING;</span><br><span style="color: hsl(0, 100%, 40%);">-  ipa_link->addr = talloc_strdup(ipa_link, addr);</span><br><span style="color: hsl(0, 100%, 40%);">-      ipa_link->port = port;</span><br><span style="color: hsl(120, 100%, 40%);">+     ipa_link->local_addr = talloc_strdup(ipa_link, loc_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+  ipa_link->local_port = loc_port;</span><br><span style="color: hsl(120, 100%, 40%);">+   ipa_link->addr = talloc_strdup(ipa_link, rem_addr);</span><br><span style="color: hsl(120, 100%, 40%);">+        ipa_link->port = rem_port;</span><br><span>        ipa_link->updown_cb = updown_cb;</span><br><span>  ipa_link->read_cb = read_cb;</span><br><span>      /* default to generic write callback if not set. */</span><br><span>@@ -209,9 +225,10 @@</span><br><span>   int ret;</span><br><span> </span><br><span>         link->state = IPA_CLIENT_LINK_STATE_CONNECTING;</span><br><span style="color: hsl(0, 100%, 40%);">-      ret = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP,</span><br><span style="color: hsl(120, 100%, 40%);">+       ret = osmo_sock_init2(AF_INET, SOCK_STREAM, IPPROTO_TCP,</span><br><span style="color: hsl(120, 100%, 40%);">+                           link->local_addr, link->local_port,</span><br><span>                            link->addr, link->port,</span><br><span style="color: hsl(0, 100%, 40%);">-                           OSMO_SOCK_F_CONNECT|OSMO_SOCK_F_NONBLOCK);</span><br><span style="color: hsl(120, 100%, 40%);">+                            OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT|OSMO_SOCK_F_NONBLOCK);</span><br><span>     if (ret < 0)</span><br><span>              return ret;</span><br><span>  link->ofd->fd = ret;</span><br><span>diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c</span><br><span>index 474bfb4..0f8e2d5 100644</span><br><span>--- a/src/input/ipaccess.c</span><br><span>+++ b/src/input/ipaccess.c</span><br><span>@@ -896,9 +896,10 @@</span><br><span>                    "OML connecting to %s:%u\n", line->ops->cfg.ipa.addr,</span><br><span>                IPA_TCP_PORT_OML);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-             link = ipa_client_conn_create(tall_ipa_ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+           link = ipa_client_conn_create2(tall_ipa_ctx,</span><br><span>                                               e1inp_line_ipa_oml_ts(line),</span><br><span>                                         E1INP_SIGN_OML,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       NULL, 0,</span><br><span>                                             line->ops->cfg.ipa.addr,</span><br><span>                                               IPA_TCP_PORT_OML,</span><br><span>                                            ipaccess_bts_updown_cb,</span><br><span>@@ -946,9 +947,10 @@</span><br><span>                 return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rsl_link = ipa_client_conn_create(tall_ipa_ctx,</span><br><span style="color: hsl(120, 100%, 40%);">+       rsl_link = ipa_client_conn_create2(tall_ipa_ctx,</span><br><span>                                       e1inp_line_ipa_rsl_ts(line, trx_nr),</span><br><span>                                         E1INP_SIGN_RSL+trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        NULL, 0,</span><br><span>                                     rem_addr, rem_port,</span><br><span>                                          ipaccess_bts_updown_cb,</span><br><span>                                      ipaccess_bts_read_cb,</span><br><span>diff --git a/src/ipa_proxy.c b/src/ipa_proxy.c</span><br><span>index 44f5baf..980add7 100644</span><br><span>--- a/src/ipa_proxy.c</span><br><span>+++ b/src/ipa_proxy.c</span><br><span>@@ -184,7 +184,8 @@</span><br><span> </span><br><span>   LOGP(DLINP, LOGL_NOTICE, "now trying to connect to destination\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       conn->dst = ipa_client_conn_create(NULL, NULL, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+  conn->dst = ipa_client_conn_create2(NULL, NULL, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    NULL, 0,</span><br><span>                                     route->shared->dst.inst->net.addr,</span><br><span>                                          route->shared->dst.inst->net.port,</span><br><span>                                          NULL,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-abis/+/16014">change 16014</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-abis/+/16014"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-abis </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3133c6b01647506a5b9c67e4699bcad3ff59f843 </div>
<div style="display:none"> Gerrit-Change-Number: 16014 </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-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>