<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/23934">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">socket: QoS support for all our socket init functions<br><br>Every socket function that can be passed a 'flags' argument now<br>supports the following two additional macros that can be or-ed in<br>with the flags:<br>* OSMO_SOCK_F_DSCP(x) -- specify the IP DSCP of the socket<br>* OSMO_SOCK_F_PRIO(x) -- specify the priority of the socket<br><br>The existing osmo_sock_set_{dscp,priority}() functions are useful,<br>but  you cannot call them in between the socket creation and the<br>connect() operation when using our socket helpers.  This means that<br>the first packet sent will have the default DSCP/priority, and only<br>later packets would have the desired values.<br><br>When using the functionality introduced by this patch, we can ensure<br>that even the very first packet of e.g. a TCP or SCTP connect()<br>will have the correct DSCP/priority applied.<br><br>Change-Id: If22988735fe05e51226c6b091a5348dcf1208cdf<br>Related: SYS#5427<br>---<br>M include/osmocom/core/socket.h<br>M src/socket.c<br>2 files changed, 30 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/34/23934/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/socket.h b/include/osmocom/core/socket.h</span><br><span>index 10e1766..a053391 100644</span><br><span>--- a/include/osmocom/core/socket.h</span><br><span>+++ b/include/osmocom/core/socket.h</span><br><span>@@ -44,6 +44,15 @@</span><br><span> /*! use SO_REUSEADDR on UDP ports (required for multicast) */</span><br><span> #define OSMO_SOCK_F_UDP_REUSEADDR (1 << 5)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! use OSMO_SOCK_F_DSCP(x) to set IP DSCP 'x' for packets transmitted on the socket */</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSMO_SOCK_F_DSCP(x)   (((x)&0x3f) << 24)</span><br><span style="color: hsl(120, 100%, 40%);">+#define GET_OSMO_SOCK_F_DSCP(f)   (((f) >> 24) & 0x3f)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! use OSMO_SOCK_F_PRIO(x) to set priority 'x' for packets transmitted on the socket */</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSMO_SOCK_F_PRIO(x) (((x)&0xff) << 16)</span><br><span style="color: hsl(120, 100%, 40%);">+#define GET_OSMO_SOCK_F_PRIO(f)   (((f) >> 16) & 0xff)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! maximum number of local or remote addresses supported by an osmo_sock instance */</span><br><span> #define OSMO_SOCK_MAX_ADDRS 32</span><br><span> </span><br><span>diff --git a/src/socket.c b/src/socket.c</span><br><span>index b44bbc6..6afe986 100644</span><br><span>--- a/src/socket.c</span><br><span>+++ b/src/socket.c</span><br><span>@@ -134,7 +134,9 @@</span><br><span> </span><br><span> static int socket_helper_tail(int sfd, unsigned int flags)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     int on = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc, on = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t dscp = GET_OSMO_SOCK_F_DSCP(flags);</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t prio = GET_OSMO_SOCK_F_PRIO(flags);</span><br><span> </span><br><span>      if (flags & OSMO_SOCK_F_NONBLOCK) {</span><br><span>              if (ioctl(sfd, FIONBIO, (unsigned char *)&on) < 0) {</span><br><span>@@ -146,6 +148,24 @@</span><br><span>           }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (dscp) {</span><br><span style="color: hsl(120, 100%, 40%);">+           rc = osmo_sock_set_dscp(sfd, dscp);</span><br><span style="color: hsl(120, 100%, 40%);">+           if (rc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGP(DLGLOBAL, LOGL_ERROR, "cannot set IP DSCP of socket to %u: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                           dscp, strerror(errno));</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* we consider this a non-fatal error */</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (prio) {</span><br><span style="color: hsl(120, 100%, 40%);">+           rc = osmo_sock_set_priority(sfd, prio);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (rc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGP(DLGLOBAL, LOGL_ERROR, "cannot set priority of socket to %u: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          prio, strerror(errno));</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* we consider this a non-fatal error */</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%);">+</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/23934">change 23934</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/libosmocore/+/23934"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If22988735fe05e51226c6b091a5348dcf1208cdf </div>
<div style="display:none"> Gerrit-Change-Number: 23934 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>