<p>keith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-abis/+/24197">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add vty show function for e1d driver<br><br>Each Driver has a vty show function, this commit adds the<br>function and uses it to query the e1d daemon for timeslot<br>status.<br><br>TS status is then displayed in the application that is making<br>use of libosmo-abis. This might be useful for debugging, for example,<br>to ensure that the application has the same state as the osmo-e1d<br>itself.<br><br>Change-Id: I287c82b2c9e4b9b9b30a302e5240d5688b93240c<br>---<br>M src/input/e1d.c<br>1 file changed, 52 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/97/24197/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/input/e1d.c b/src/input/e1d.c</span><br><span>index cab219d..5936e68 100644</span><br><span>--- a/src/input/e1d.c</span><br><span>+++ b/src/input/e1d.c</span><br><span>@@ -321,11 +321,22 @@</span><br><span>        return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int e1d_daemon_connect(struct e1inp_line *line) {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Connect to daemon */</span><br><span style="color: hsl(120, 100%, 40%);">+       g_e1d = osmo_e1dp_client_create(NULL, "/tmp/osmo-e1d.ctl");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!g_e1d) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGPIL(line, DLINP, LOGL_ERROR, "Unable to connect to osmo-e1d daemon\n");</span><br><span style="color: hsl(120, 100%, 40%);">+          return -EPIPE;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int</span><br><span> e1d_line_update(struct e1inp_line *line)</span><br><span> {</span><br><span>        int ts;</span><br><span>      int ret;</span><br><span style="color: hsl(120, 100%, 40%);">+      int rc;</span><br><span> </span><br><span>  /* we use higher 4 bits for interface, lower 4 bits for line,</span><br><span>         * resulting in max. 16 interfaces with 16 lines each */</span><br><span>@@ -338,12 +349,9 @@</span><br><span>              return -EINVAL;</span><br><span> </span><br><span>  if (!g_e1d) {</span><br><span style="color: hsl(0, 100%, 40%);">-           /* Connect to daemon */</span><br><span style="color: hsl(0, 100%, 40%);">-         g_e1d = osmo_e1dp_client_create(NULL, "/tmp/osmo-e1d.ctl");</span><br><span style="color: hsl(0, 100%, 40%);">-           if (!g_e1d) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   LOGPIL(line, DLINP, LOGL_ERROR, "Unable to connect to osmo-e1d daemon\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                    return -EPIPE;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(120, 100%, 40%);">+             rc = e1d_daemon_connect(line);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (rc)</span><br><span style="color: hsl(120, 100%, 40%);">+                       return rc;</span><br><span>   }</span><br><span> </span><br><span>        LOGPIL(line, DLINP, LOGL_NOTICE, "Line update %d %d=E1D(%d:%d) %d\n", line->num, line->port_nr,</span><br><span>@@ -468,10 +476,48 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string osmo_e1dp_ts_mode_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   { E1DP_TSMODE_OFF,      "OFF" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { E1DP_TSMODE_RAW,      "RAW" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { E1DP_TSMODE_HDLCFCS,  "HDLC-FCS" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { 0, 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%);">+static void e1d_vty_show(struct vty *vty, struct e1inp_line *line)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      int ts;</span><br><span style="color: hsl(120, 100%, 40%);">+       int ret;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t e1d_intf = (line->port_nr >> 4) & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t e1d_line = line->port_nr & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct osmo_e1dp_ts_info *ts_info;</span><br><span style="color: hsl(120, 100%, 40%);">+    int num_ts_info;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!g_e1d) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (e1d_daemon_connect(line))</span><br><span style="color: hsl(120, 100%, 40%);">+                 return;</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%);">+   ret = osmo_e1dp_client_ts_query(g_e1d, &ts_info, &num_ts_info, e1d_intf, e1d_line, E1DP_INVALID);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ret < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPIL(line, DLINP, LOGL_ERROR, "Cannot query E1D for timeslot information: %d\n", ret);</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</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%);">+   for (ts=1; ts<line->num_ts; ts++) {</span><br><span style="color: hsl(120, 100%, 40%);">+             struct e1inp_ts *e1i_ts = &line->ts[ts-1];</span><br><span style="color: hsl(120, 100%, 40%);">+             struct osmo_fd *bfd = &e1i_ts->driver.e1d.fd;</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, " TS%02u: Mode %s, FD %d%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                   ts, get_value_string(osmo_e1dp_ts_mode_names, ts_info[ts].cfg.mode),</span><br><span style="color: hsl(120, 100%, 40%);">+                  bfd->fd, VTY_NEWLINE);</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> struct e1inp_driver e1d_driver = {</span><br><span>         .name        = "e1d",</span><br><span>      .want_write  = e1d_want_write,</span><br><span>       .line_update = e1d_line_update,</span><br><span style="color: hsl(120, 100%, 40%);">+       .vty_show    = &e1d_vty_show,</span><br><span> };</span><br><span> </span><br><span> int</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-abis/+/24197">change 24197</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/libosmo-abis/+/24197"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-abis </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I287c82b2c9e4b9b9b30a302e5240d5688b93240c </div>
<div style="display:none"> Gerrit-Change-Number: 24197 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: keith <keith@rhizomatica.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>