<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/23965">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgw: Add support for setting socket priority from VTY<br><br>This is useful for affecting the 802.1Q PCP value without any separate<br>external packet filter rules for classification.<br><br>Change-Id: I69136c6dd114c24b1dace034e75dba5157bac37e<br>Depends: libosmocore.git I89abffcd125e6d073338a5c6437b9433220e1823<br>---<br>M include/osmocom/mgcp/mgcp.h<br>M src/libosmo-mgcp/mgcp_network.c<br>M src/libosmo-mgcp/mgcp_osmux.c<br>M src/libosmo-mgcp/mgcp_vty.c<br>4 files changed, 30 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/65/23965/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/mgcp.h b/include/osmocom/mgcp/mgcp.h</span><br><span>index e0aeb83..1de579a 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp.h</span><br><span>@@ -143,6 +143,7 @@</span><br><span> </span><br><span>        struct mgcp_port_range net_ports;</span><br><span>    int endp_dscp;</span><br><span style="color: hsl(120, 100%, 40%);">+        int endp_priority;</span><br><span> </span><br><span>       int force_ptime;</span><br><span> </span><br><span>@@ -208,5 +209,6 @@</span><br><span> int mgcp_send_reset_all(struct mgcp_config *cfg);</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port, uint8_t dscp);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port, uint8_t dscp,</span><br><span style="color: hsl(120, 100%, 40%);">+               uint8_t prio);</span><br><span> int mgcp_udp_send(int fd, struct osmo_sockaddr *addr, int port, char *buf, int len);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c</span><br><span>index 76fe730..6a30165 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -1518,13 +1518,17 @@</span><br><span>  *  \param[in] source_addr source (local) address to bind on.</span><br><span>  *  \param[in] fd associated file descriptor.</span><br><span>  *  \param[in] port to bind on.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] dscp IP DSCP value to use.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] prio socket priority to use.</span><br><span>  *  \returns 0 on success, -1 on ERROR. */</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port, uint8_t dscp)</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_create_bind(const char *source_addr, struct osmo_fd *fd, int port, uint8_t dscp,</span><br><span style="color: hsl(120, 100%, 40%);">+              uint8_t prio)</span><br><span> {</span><br><span>      int rc;</span><br><span> </span><br><span>  rc = osmo_sock_init2(AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP, source_addr, port,</span><br><span style="color: hsl(0, 100%, 40%);">-                          NULL, 0, OSMO_SOCK_F_BIND | OSMO_SOCK_F_DSCP(dscp));</span><br><span style="color: hsl(120, 100%, 40%);">+                          NULL, 0, OSMO_SOCK_F_BIND | OSMO_SOCK_F_DSCP(dscp) |</span><br><span style="color: hsl(120, 100%, 40%);">+                          OSMO_SOCK_F_PRIO(prio));</span><br><span>        if (rc < 0) {</span><br><span>             LOGP(DRTP, LOGL_ERROR, "failed to bind UDP port (%s:%i).\n",</span><br><span>                    source_addr, port);</span><br><span>@@ -1543,14 +1547,16 @@</span><br><span>   /* NOTE: The port that is used for RTCP is the RTP port incremented by one</span><br><span>    * (e.g. RTP-Port = 16000 ==> RTCP-Port = 16001) */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (mgcp_create_bind(source_addr, &rtp_end->rtp, rtp_end->local_port, cfg->endp_dscp) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (mgcp_create_bind(source_addr, &rtp_end->rtp, rtp_end->local_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                            cfg->endp_dscp, cfg->endp_priority) != 0) {</span><br><span>               LOGPENDP(endp, DRTP, LOGL_ERROR,</span><br><span>                      "failed to create RTP port: %s:%d\n",</span><br><span>                      source_addr, rtp_end->local_port);</span><br><span>               goto cleanup0;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (mgcp_create_bind(source_addr, &rtp_end->rtcp, rtp_end->local_port + 1, cfg->endp_dscp) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (mgcp_create_bind(source_addr, &rtp_end->rtcp, rtp_end->local_port + 1,</span><br><span style="color: hsl(120, 100%, 40%);">+                       cfg->endp_dscp, cfg->endp_priority) != 0) {</span><br><span>               LOGPENDP(endp, DRTP, LOGL_ERROR,</span><br><span>                      "failed to create RTCP port: %s:%d\n",</span><br><span>                     source_addr, rtp_end->local_port + 1);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>index 62a6720..bb85735 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>@@ -418,7 +418,8 @@</span><br><span> </span><br><span>        osmo_fd_setup(&osmux_fd, -1, OSMO_FD_READ, osmux_read_fd_cb, cfg, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ret = mgcp_create_bind(cfg->osmux_addr, &osmux_fd, cfg->osmux_port, cfg->endp_dscp);</span><br><span style="color: hsl(120, 100%, 40%);">+     ret = mgcp_create_bind(cfg->osmux_addr, &osmux_fd, cfg->osmux_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                         cfg->endp_dscp, cfg->endp_priority);</span><br><span>   if (ret < 0) {</span><br><span>            LOGP(DLMGCP, LOGL_ERROR, "cannot bind OSMUX socket to %s:%u\n",</span><br><span>                 cfg->osmux_addr, cfg->osmux_port);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>index e8aeab1..6aa0387 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_vty.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>@@ -83,6 +83,8 @@</span><br><span>   else</span><br><span>                 vty_out(vty, " no rtp ip-probing%s", VTY_NEWLINE);</span><br><span>         vty_out(vty, " rtp ip-dscp %d%s", g_cfg->endp_dscp, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (g_cfg->endp_priority)</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, " rtp priority %d%s", g_cfg->endp_priority, VTY_NEWLINE);</span><br><span>  if (trunk->keepalive_interval == MGCP_KEEPALIVE_ONCE)</span><br><span>             vty_out(vty, " rtp keep-alive once%s", VTY_NEWLINE);</span><br><span>       else if (trunk->keepalive_interval)</span><br><span>@@ -588,6 +590,18 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_USRATTR(cfg_mgcp_rtp_priority,</span><br><span style="color: hsl(120, 100%, 40%);">+          cfg_mgcp_rtp_priority_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+            X(MGW_CMD_ATTR_NEWCONN),</span><br><span style="color: hsl(120, 100%, 40%);">+              "rtp priority <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+       RTP_STR</span><br><span style="color: hsl(120, 100%, 40%);">+       "socket priority (values > 6 require CAP_NET_ADMIN)\n" "socket priority value\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     int prio = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+     g_cfg->endp_priority = prio;</span><br><span style="color: hsl(120, 100%, 40%);">+       return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define FORCE_PTIME_STR "Force a fixed ptime for packets sent"</span><br><span> DEFUN_USRATTR(cfg_mgcp_rtp_force_ptime,</span><br><span>            cfg_mgcp_rtp_force_ptime_cmd,</span><br><span>@@ -1618,6 +1632,7 @@</span><br><span>  install_element(MGCP_NODE, &cfg_mgcp_rtp_net_bind_ip_probing_cmd);</span><br><span>       install_element(MGCP_NODE, &cfg_mgcp_rtp_no_net_bind_ip_probing_cmd);</span><br><span>    install_element(MGCP_NODE, &cfg_mgcp_rtp_ip_dscp_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element(MGCP_NODE, &cfg_mgcp_rtp_priority_cmd);</span><br><span>  install_element(MGCP_NODE, &cfg_mgcp_rtp_force_ptime_cmd);</span><br><span>       install_element(MGCP_NODE, &cfg_mgcp_no_rtp_force_ptime_cmd);</span><br><span>    install_element(MGCP_NODE, &cfg_mgcp_rtp_keepalive_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/23965">change 23965</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-mgw/+/23965"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I69136c6dd114c24b1dace034e75dba5157bac37e </div>
<div style="display:none"> Gerrit-Change-Number: 23965 </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>