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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mobile: add audio config, with unused audio loopback setting<br><br>The aim is to add configurable audio loopback to mobile. An existing patch on a<br>branch from fixeria [1] adds the audio config section. Add a reduced version of<br>this audio config to be compatible with the future merge.<br><br>Add the audio loopback setting, so far without functionality.<br>Subsequent patch adds the actual loopback.<br><br>[1] osmocom-bb branch fixeria/audio,<br>    patch "mobile/vty_interface.c: add new 'audio' section"<br>    Change-id I62cd5ef22ca2290fcafe65c78537ddbcb39fb8c6<br><br>Change-Id: Ie03e4a6c6f81ea3925266dd22e87506d722a6e1a<br>---<br>M doc/examples/mobile/default.cfg<br>M doc/examples/mobile/multi_ms.cfg<br>M src/host/layer23/include/osmocom/bb/mobile/settings.h<br>M src/host/layer23/include/osmocom/bb/mobile/vty.h<br>M src/host/layer23/src/mobile/settings.c<br>M src/host/layer23/src/mobile/vty_interface.c<br>6 files changed, 90 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/examples/mobile/default.cfg b/doc/examples/mobile/default.cfg</span><br><span>index cc81630..f14e900 100644</span><br><span>--- a/doc/examples/mobile/default.cfg</span><br><span>+++ b/doc/examples/mobile/default.cfg</span><br><span>@@ -59,4 +59,6 @@</span><br><span>   ki comp128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span><br><span>   no barred-access</span><br><span>   rplmn 001 01</span><br><span style="color: hsl(120, 100%, 40%);">+ audio</span><br><span style="color: hsl(120, 100%, 40%);">+  io-handler none</span><br><span>  no shutdown</span><br><span>diff --git a/doc/examples/mobile/multi_ms.cfg b/doc/examples/mobile/multi_ms.cfg</span><br><span>index bef2406..c72817f 100644</span><br><span>--- a/doc/examples/mobile/multi_ms.cfg</span><br><span>+++ b/doc/examples/mobile/multi_ms.cfg</span><br><span>@@ -59,6 +59,8 @@</span><br><span>   ki comp128 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span><br><span>   no barred-access</span><br><span>   rplmn 001 01</span><br><span style="color: hsl(120, 100%, 40%);">+ audio</span><br><span style="color: hsl(120, 100%, 40%);">+  io-handler none</span><br><span>  no shutdown</span><br><span> !</span><br><span> ms two</span><br><span>@@ -109,4 +111,6 @@</span><br><span>   ki comp128 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff</span><br><span>   no barred-access</span><br><span>   rplmn 001 01</span><br><span style="color: hsl(120, 100%, 40%);">+ audio</span><br><span style="color: hsl(120, 100%, 40%);">+  io-handler none</span><br><span>  no shutdown</span><br><span>diff --git a/src/host/layer23/include/osmocom/bb/mobile/settings.h b/src/host/layer23/include/osmocom/bb/mobile/settings.h</span><br><span>index 4e5d5a1..57f23ee 100644</span><br><span>--- a/src/host/layer23/include/osmocom/bb/mobile/settings.h</span><br><span>+++ b/src/host/layer23/include/osmocom/bb/mobile/settings.h</span><br><span>@@ -3,10 +3,29 @@</span><br><span> </span><br><span> #define MOB_C7_DEFLT_ANY_TIMEOUT 30</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* TCH frame I/O handler */</span><br><span style="color: hsl(120, 100%, 40%);">+enum audio_io_handler {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* No handler, drop frames */</span><br><span style="color: hsl(120, 100%, 40%);">+ AUDIO_IOH_NONE = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Return to sender */</span><br><span style="color: hsl(120, 100%, 40%);">+        AUDIO_IOH_LOOPBACK,</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%);">+extern const struct value_string audio_io_handler_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+static inline const char *audio_io_handler_name(enum audio_io_handler val)</span><br><span style="color: hsl(120, 100%, 40%);">+{ return get_value_string(audio_io_handler_names, val); }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct audio_settings {</span><br><span style="color: hsl(120, 100%, 40%);">+       enum audio_io_handler   io_handler;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct gsm_settings {</span><br><span>   char                    layer2_socket_path[128];</span><br><span>     char                    sap_socket_path[128];</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /* Audio settings */</span><br><span style="color: hsl(120, 100%, 40%);">+  struct audio_settings   audio;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     /* IMEI */</span><br><span>   char                    imei[16];</span><br><span>    char                    imeisv[17];</span><br><span>diff --git a/src/host/layer23/include/osmocom/bb/mobile/vty.h b/src/host/layer23/include/osmocom/bb/mobile/vty.h</span><br><span>index 3bec113..d066804 100644</span><br><span>--- a/src/host/layer23/include/osmocom/bb/mobile/vty.h</span><br><span>+++ b/src/host/layer23/include/osmocom/bb/mobile/vty.h</span><br><span>@@ -10,6 +10,7 @@</span><br><span>         MS_NODE = _LAST_OSMOVTY_NODE + 1,</span><br><span>    TESTSIM_NODE,</span><br><span>        SUPPORT_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+ AUDIO_NODE,</span><br><span> };</span><br><span> </span><br><span> int ms_vty_go_parent(struct vty *vty);</span><br><span>diff --git a/src/host/layer23/src/mobile/settings.c b/src/host/layer23/src/mobile/settings.c</span><br><span>index 388c754..9742b1d 100644</span><br><span>--- a/src/host/layer23/src/mobile/settings.c</span><br><span>+++ b/src/host/layer23/src/mobile/settings.c</span><br><span>@@ -41,6 +41,9 @@</span><br><span>     strcpy(set->layer2_socket_path, layer2_socket_path);</span><br><span>      strcpy(set->sap_socket_path, sap_socket_path);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Audio settings: drop TCH frames by default */</span><br><span style="color: hsl(120, 100%, 40%);">+      set->audio.io_handler = AUDIO_IOH_NONE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* network search */</span><br><span>         set->plmn_mode = PLMN_MODE_AUTO;</span><br><span> </span><br><span>@@ -194,3 +197,8 @@</span><br><span>        return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string audio_io_handler_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+    { AUDIO_IOH_NONE,       "none" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { AUDIO_IOH_LOOPBACK,   "loopback" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0x00, NULL}</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c</span><br><span>index 70ee703..073303c 100644</span><br><span>--- a/src/host/layer23/src/mobile/vty_interface.c</span><br><span>+++ b/src/host/layer23/src/mobile/vty_interface.c</span><br><span>@@ -65,6 +65,12 @@</span><br><span>      1</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct cmd_node audio_node = {</span><br><span style="color: hsl(120, 100%, 40%);">+   AUDIO_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+   "%s(audio)# ",</span><br><span style="color: hsl(120, 100%, 40%);">+      1</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void print_vty(void *priv, const char *fmt, ...)</span><br><span> {</span><br><span>      char buffer[1000];</span><br><span>@@ -1526,6 +1532,10 @@</span><br><span>          vty_out(vty, " c7-any-timeout %d%s",</span><br><span>                       set->any_timeout, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        vty_out(vty, " audio%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!hide_default || set->audio.io_handler != AUDIO_IOH_NONE)</span><br><span style="color: hsl(120, 100%, 40%);">+              vty_out(vty, "  io-handler %s%s", audio_io_handler_name(set->audio.io_handler), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* no shutdown must be written to config, because shutdown is default */</span><br><span>     vty_out(vty, " %sshutdown%s", (ms->shutdown != MS_SHUTDOWN_NONE) ? "" : "no ",</span><br><span>              VTY_NEWLINE);</span><br><span>@@ -2727,6 +2737,46 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* per audio config */</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_ms_audio, cfg_ms_audio_cmd, "audio",</span><br><span style="color: hsl(120, 100%, 40%);">+        "Configure audio settings")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      vty->node = AUDIO_NODE;</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 style="color: hsl(120, 100%, 40%);">+static int set_audio_io_handler(struct vty *vty, enum audio_io_handler val)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct osmocom_ms *ms = (struct osmocom_ms *) vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_settings *set = &ms->settings;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Don't restart on unchanged value */</span><br><span style="color: hsl(120, 100%, 40%);">+    if (val == set->audio.io_handler)</span><br><span style="color: hsl(120, 100%, 40%);">+          return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   set->audio.io_handler = val;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Restart required */</span><br><span style="color: hsl(120, 100%, 40%);">+        vty_restart_if_started(vty, ms);</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 style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_ms_audio_io_handler, cfg_ms_audio_io_handler_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "io-handler (loopback|none)",</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set TCH frame I/O handler\n"</span><br><span style="color: hsl(120, 100%, 40%);">+       "Return TCH frame payload back to sender\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "No handler, drop TCH frames (default)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ int val = get_string_value(audio_io_handler_names, argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+  return set_audio_io_handler(vty, val);</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%);">+DEFUN(cfg_ms_audio_no_io_handler, cfg_ms_audio_no_io_handler_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+        "no io-handler", NO_STR "Disable TCH frame processing")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        return set_audio_io_handler(vty, AUDIO_IOH_NONE);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(cfg_no_shutdown, cfg_ms_no_shutdown_cmd, "no shutdown",</span><br><span>    NO_STR "Activate and run MS")</span><br><span> {</span><br><span>@@ -2807,6 +2857,7 @@</span><br><span>                 break;</span><br><span>       case TESTSIM_NODE:</span><br><span>   case SUPPORT_NODE:</span><br><span style="color: hsl(120, 100%, 40%);">+    case AUDIO_NODE:</span><br><span>             vty->node = MS_NODE;</span><br><span>              break;</span><br><span>       default:</span><br><span>@@ -2918,6 +2969,7 @@</span><br><span>     install_element(MS_NODE, &cfg_ms_abbrev_cmd);</span><br><span>    install_element(MS_NODE, &cfg_ms_no_abbrev_cmd);</span><br><span>         install_element(MS_NODE, &cfg_ms_testsim_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element(MS_NODE, &cfg_ms_audio_cmd);</span><br><span>     install_element(MS_NODE, &cfg_ms_neighbour_cmd);</span><br><span>         install_element(MS_NODE, &cfg_ms_no_neighbour_cmd);</span><br><span>      install_element(MS_NODE, &cfg_ms_any_timeout_cmd);</span><br><span>@@ -2995,6 +3047,10 @@</span><br><span>      install_element(MS_NODE, &cfg_ms_script_load_run_cmd);</span><br><span>   install_element(MS_NODE, &cfg_ms_no_script_load_run_cmd);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     install_node(&audio_node, config_write_dummy);</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element(AUDIO_NODE, &cfg_ms_audio_io_handler_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        install_element(AUDIO_NODE, &cfg_ms_audio_no_io_handler_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* Register the talloc context introspection command */</span><br><span>      osmo_talloc_vty_add_cmds();</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmocom-bb/+/17593">change 17593</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/osmocom-bb/+/17593"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie03e4a6c6f81ea3925266dd22e87506d722a6e1a </div>
<div style="display:none"> Gerrit-Change-Number: 17593 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </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: neels <nhofmeyr@sysmocom.de> </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>