<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/17443">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: 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;">osmo-bts-virtual: Add "virtual-um ttl <0-255>" VTY option<br><br>This can be used to determine the multicast TTL packet and hence<br>how far the packet will propagate in the network.  If you want to<br>operate the virtual Um only on your own machine, a TTL of 0 would<br>prevent the packets from ever being transmitted on your local<br>ethernet segment.<br><br>Change-Id: I18a9f93b764aee4e1dc68a1c6ac4d078e52ca61d<br>Related: OS#2966<br>---<br>M include/osmo-bts/phy_link.h<br>M src/osmo-bts-virtual/l1_if.c<br>M src/osmo-bts-virtual/main.c<br>M src/osmo-bts-virtual/virtual_um.c<br>M src/osmo-bts-virtual/virtual_um.h<br>M src/osmo-bts-virtual/virtualbts_vty.c<br>6 files changed, 39 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/phy_link.h b/include/osmo-bts/phy_link.h</span><br><span>index 69c6bd6..116297b 100644</span><br><span>--- a/include/osmo-bts/phy_link.h</span><br><span>+++ b/include/osmo-bts/phy_link.h</span><br><span>@@ -53,6 +53,7 @@</span><br><span>               } osmotrx;</span><br><span>           struct {</span><br><span>                     char *mcast_dev;                /* Network device for multicast */</span><br><span style="color: hsl(120, 100%, 40%);">+                    int ttl;                        /* TTL of transmitted udp multicast */</span><br><span>                       char *bts_mcast_group;          /* BTS are listening to this group */</span><br><span>                        uint16_t bts_mcast_port;</span><br><span>                     char *ms_mcast_group;           /* MS are listening to this group */</span><br><span>diff --git a/src/osmo-bts-virtual/l1_if.c b/src/osmo-bts-virtual/l1_if.c</span><br><span>index b6a3507..3128012 100644</span><br><span>--- a/src/osmo-bts-virtual/l1_if.c</span><br><span>+++ b/src/osmo-bts-virtual/l1_if.c</span><br><span>@@ -204,7 +204,7 @@</span><br><span> </span><br><span>  plink->u.virt.virt_um = virt_um_init(plink, plink->u.virt.ms_mcast_group, plink->u.virt.ms_mcast_port,</span><br><span>                                           plink->u.virt.bts_mcast_group, plink->u.virt.bts_mcast_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                                      virt_um_rcv_cb);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      plink->u.virt.ttl, virt_um_rcv_cb);</span><br><span>  if (!plink->u.virt.virt_um) {</span><br><span>             phy_link_state_set(plink, PHY_LINK_SHUTDOWN);</span><br><span>                return -1;</span><br><span>diff --git a/src/osmo-bts-virtual/main.c b/src/osmo-bts-virtual/main.c</span><br><span>index 02b7ae9..a6fc290 100644</span><br><span>--- a/src/osmo-bts-virtual/main.c</span><br><span>+++ b/src/osmo-bts-virtual/main.c</span><br><span>@@ -123,6 +123,7 @@</span><br><span>    plink->u.virt.bts_mcast_port = DEFAULT_BTS_MCAST_PORT;</span><br><span>    plink->u.virt.ms_mcast_group = talloc_strdup(plink, DEFAULT_MS_MCAST_GROUP);</span><br><span>      plink->u.virt.ms_mcast_port = DEFAULT_MS_MCAST_PORT;</span><br><span style="color: hsl(120, 100%, 40%);">+       plink->u.virt.ttl = -1; /* initialize to -1 to prevent us setting the TTL */</span><br><span> }</span><br><span> </span><br><span> void bts_model_phy_instance_set_defaults(struct phy_instance *pinst)</span><br><span>diff --git a/src/osmo-bts-virtual/virtual_um.c b/src/osmo-bts-virtual/virtual_um.c</span><br><span>index 752e4b6..cf5d6cd 100644</span><br><span>--- a/src/osmo-bts-virtual/virtual_um.c</span><br><span>+++ b/src/osmo-bts-virtual/virtual_um.c</span><br><span>@@ -62,10 +62,12 @@</span><br><span> }</span><br><span> </span><br><span> struct virt_um_inst *virt_um_init(void *ctx, char *tx_mcast_group, uint16_t tx_mcast_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                            char *rx_mcast_group, uint16_t rx_mcast_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 char *rx_mcast_group, uint16_t rx_mcast_port, int ttl,</span><br><span>                               void (*recv_cb)(struct virt_um_inst *vui, struct msgb *msg))</span><br><span> {</span><br><span>  struct virt_um_inst *vui = talloc_zero(ctx, struct virt_um_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+     int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    vui->mcast_sock = mcast_bidir_sock_setup(ctx, tx_mcast_group, tx_mcast_port,</span><br><span>                                               rx_mcast_group, rx_mcast_port, 1, virt_um_fd_cb, vui);</span><br><span>      if (!vui->mcast_sock) {</span><br><span>@@ -75,6 +77,17 @@</span><br><span>      }</span><br><span>    vui->recv_cb = recv_cb;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* -1 means default, i.e. no TTL explicitly configured in VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (ttl >= 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            rc = osmo_sock_mcast_ttl_set(vui->mcast_sock->tx_ofd.fd, ttl);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      perror("Cannot set TTL of Virtual Um transmit socket");</span><br><span style="color: hsl(120, 100%, 40%);">+                     mcast_bidir_sock_close(vui->mcast_sock);</span><br><span style="color: hsl(120, 100%, 40%);">+                   talloc_free(vui);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return NULL;</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 vui;</span><br><span> </span><br><span> }</span><br><span>diff --git a/src/osmo-bts-virtual/virtual_um.h b/src/osmo-bts-virtual/virtual_um.h</span><br><span>index ac098dd..7841c33 100644</span><br><span>--- a/src/osmo-bts-virtual/virtual_um.h</span><br><span>+++ b/src/osmo-bts-virtual/virtual_um.h</span><br><span>@@ -23,7 +23,7 @@</span><br><span> </span><br><span> struct virt_um_inst *virt_um_init(</span><br><span>                 void *ctx, char *tx_mcast_group, uint16_t tx_mcast_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                char *rx_mcast_group, uint16_t rx_mcast_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                char *rx_mcast_group, uint16_t rx_mcast_port, int ttl,</span><br><span>                 void (*recv_cb)(struct virt_um_inst *vui, struct msgb *msg));</span><br><span> </span><br><span> void virt_um_destroy(struct virt_um_inst *vui);</span><br><span>diff --git a/src/osmo-bts-virtual/virtualbts_vty.c b/src/osmo-bts-virtual/virtualbts_vty.c</span><br><span>index 323222b..875e682 100644</span><br><span>--- a/src/osmo-bts-virtual/virtualbts_vty.c</span><br><span>+++ b/src/osmo-bts-virtual/virtualbts_vty.c</span><br><span>@@ -69,6 +69,9 @@</span><br><span>    if (plink->u.virt.mcast_dev)</span><br><span>              vty_out(vty, " virtual-um net-device %s%s",</span><br><span>                        plink->u.virt.mcast_dev, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (plink->u.virt.ttl != -1)</span><br><span style="color: hsl(120, 100%, 40%);">+               vty_out(vty, " virtual-um ttl %d%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                        plink->u.virt.ttl, VTY_NEWLINE);</span><br><span>  if (strcmp(plink->u.virt.ms_mcast_group, DEFAULT_BTS_MCAST_GROUP))</span><br><span>                vty_out(vty, " virtual-um ms-multicast-group %s%s",</span><br><span>                        plink->u.virt.ms_mcast_group, VTY_NEWLINE);</span><br><span>@@ -171,6 +174,23 @@</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_phy_mcast_ttl, cfg_phy_mcast_ttl_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "virtual-um ttl <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+     VUM_STR "Configure the TTL for transmitted multicast GSMTAP packets\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct phy_link *plink = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (plink->state != PHY_LINK_SHUTDOWN) {</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "Can only reconfigure a PHY link that is down%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                      VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</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%);">+   plink->u.virt.ttl = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+</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> int bts_model_vty_init(struct gsm_bts *bts)</span><br><span> {</span><br><span>         vty_bts = bts;</span><br><span>@@ -180,6 +200,7 @@</span><br><span>         install_element(PHY_NODE, &cfg_phy_bts_mcast_group_cmd);</span><br><span>         install_element(PHY_NODE, &cfg_phy_bts_mcast_port_cmd);</span><br><span>  install_element(PHY_NODE, &cfg_phy_mcast_dev_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        install_element(PHY_NODE, &cfg_phy_mcast_ttl_cmd);</span><br><span> </span><br><span>   return 0;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/17443">change 17443</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-bts/+/17443"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I18a9f93b764aee4e1dc68a1c6ac4d078e52ca61d </div>
<div style="display:none"> Gerrit-Change-Number: 17443 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>