<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>