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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Set TCP NODELAY sockopt to GSUP cli and srv connections<br><br>GSUP is message based on top of IPA, and hence TCP. We don't want to<br>have Nagle algorithm enabled, since we are interested in having messages<br>sent as quickly as possible and there's no need for lower layers to wait<br>for more data (because we send all the message data at once).<br><br>Related: OS#4499<br>Change-Id: I4653b95ef0d4e1184f81f28408e9eb5d665206ec<br>---<br>M src/gsup_server.c<br>M src/gsupclient/gsup_client.c<br>2 files changed, 33 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gsup_server.c b/src/gsup_server.c</span><br><span>index 830a5a7..756473a 100644</span><br><span>--- a/src/gsup_server.c</span><br><span>+++ b/src/gsup_server.c</span><br><span>@@ -18,6 +18,8 @@</span><br><span>  */</span><br><span> </span><br><span> #include <errno.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <netinet/tcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <netinet/in.h></span><br><span> </span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/core/logging.h></span><br><span>@@ -352,6 +354,19 @@</span><br><span>  llist_add(&conn->list, &prev_conn->list);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void update_fd_settings(int fd)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int ret;</span><br><span style="color: hsl(120, 100%, 40%);">+      int val;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /*TODO: Set keepalive settings here. See OS#4312 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ val = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+      ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));</span><br><span style="color: hsl(120, 100%, 40%);">+        if (ret < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DLGSUP, LOGL_ERROR, "Failed to set TCP_NODELAY: %s\n", strerror(errno));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* a client has connected to the server socket and we have accept()ed it */</span><br><span> static int osmo_gsup_server_accept_cb(struct ipa_server_link *link, int fd)</span><br><span> {</span><br><span>@@ -376,6 +391,8 @@</span><br><span>        LOGP(DLGSUP, LOGL_INFO, "New GSUP client %s:%d (IND=%u)\n",</span><br><span>             conn->conn->addr, conn->conn->port, conn->auc_3g_ind);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        update_fd_settings(fd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* request the identity of the client */</span><br><span>     rc = ipa_ccm_send_id_req(fd);</span><br><span>        if (rc < 0)</span><br><span>diff --git a/src/gsupclient/gsup_client.c b/src/gsupclient/gsup_client.c</span><br><span>index 4f76efc..4041366 100644</span><br><span>--- a/src/gsupclient/gsup_client.c</span><br><span>+++ b/src/gsupclient/gsup_client.c</span><br><span>@@ -31,6 +31,8 @@</span><br><span> </span><br><span> #include <errno.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <netinet/tcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <netinet/in.h></span><br><span> </span><br><span> static void start_test_procedure(struct osmo_gsup_client *gsupc);</span><br><span> </span><br><span>@@ -129,6 +131,19 @@</span><br><span>      client_send(gsupc, IPAC_PROTO_EXT_OAP, msg_tx);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void update_fd_settings(int fd)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int ret;</span><br><span style="color: hsl(120, 100%, 40%);">+      int val;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /*TODO: Set keepalive settings here. See OS#4312 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ val = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+      ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));</span><br><span style="color: hsl(120, 100%, 40%);">+        if (ret < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DLGSUP, LOGL_ERROR, "Failed to set TCP_NODELAY: %s\n", strerror(errno));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void gsup_client_updown_cb(struct ipa_client_conn *link, int up)</span><br><span> {</span><br><span>         struct osmo_gsup_client *gsupc = link->data;</span><br><span>@@ -139,6 +154,7 @@</span><br><span>        gsupc->is_connected = up;</span><br><span> </span><br><span>     if (up) {</span><br><span style="color: hsl(120, 100%, 40%);">+             update_fd_settings(link->ofd->fd);</span><br><span>             start_test_procedure(gsupc);</span><br><span> </span><br><span>             if (gsupc->oap_state.state == OSMO_OAP_INITIALIZED)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-hlr/+/20577">change 20577</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/osmo-hlr/+/20577"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-hlr </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4653b95ef0d4e1184f81f28408e9eb5d665206ec </div>
<div style="display:none"> Gerrit-Change-Number: 20577 </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: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>