<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11493">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: add 'show rejected'<br><br>Print IDs and IPs of recently rejected BTS devices. Example output:<br><br>OsmoBSC> show rejected<br>Date                Site ID BTS ID IP<br>------------------- ------- ------ ---------------<br>2018-10-25 09:36:28    1234      0    192.168.1.37<br><br>Related: OS#2841<br>Change-Id: Iba3bfe8fc9432b7ae8f819df8bd71b35b3ec507e<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/bsc_init.c<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/bts_ipaccess_nanobts.c<br>4 files changed, 95 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/93/11493/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 7c91e59..d521708 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -1129,6 +1129,16 @@</span><br><span>       uint8_t chan_load_avg; /* current channel load average in percent (0 - 100). */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* One rejected BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_bts_rejected {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* list header in net->bts_rejected */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct llist_head list;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t site_id;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t bts_id;</span><br><span style="color: hsl(120, 100%, 40%);">+      char ip[64];</span><br><span style="color: hsl(120, 100%, 40%);">+  time_t time;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> struct gsm_network *gsm_network_init(void *ctx);</span><br><span> </span><br><span>@@ -1404,6 +1414,7 @@</span><br><span> </span><br><span>     unsigned int num_bts;</span><br><span>        struct llist_head bts_list;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct llist_head bts_rejected;</span><br><span> </span><br><span>  /* shall reference gsm_network_T[] */</span><br><span>        struct T_def *T_defs;</span><br><span>diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c</span><br><span>index b1388b8..2f44b20 100644</span><br><span>--- a/src/osmo-bsc/bsc_init.c</span><br><span>+++ b/src/osmo-bsc/bsc_init.c</span><br><span>@@ -257,6 +257,7 @@</span><br><span>                 return NULL;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ INIT_LLIST_HEAD(&net->bts_rejected);</span><br><span>  gsm_net_update_ctype(net);</span><br><span> </span><br><span>       /*</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index dd540c1..cead6fc 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -541,6 +541,32 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(show_rejected, show_rejected_cmd, "show rejected",</span><br><span style="color: hsl(120, 100%, 40%);">+      SHOW_STR "Display recently rejected BTS devices\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      /* empty list */</span><br><span style="color: hsl(120, 100%, 40%);">+      struct llist_head *rejected = &gsmnet_from_vty(vty)->bts_rejected;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (llist_empty(rejected)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          vty_out(vty, "No BTS has been rejected.%s", VTY_NEWLINE);</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%);">+   /* table head */</span><br><span style="color: hsl(120, 100%, 40%);">+      vty_out(vty, "Date                Site ID BTS ID IP%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+       vty_out(vty, "------------------- ------- ------ ---------------%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* table body */</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gsm_bts_rejected *pos;</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_for_each_entry(pos, rejected, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+           /* timestamp formatted like: "2018-10-24 15:04:52" */</span><br><span style="color: hsl(120, 100%, 40%);">+               char buf[20];</span><br><span style="color: hsl(120, 100%, 40%);">+         strftime(buf, sizeof(buf), "%F %T", localtime(&pos->time));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty, "%s %7u %6u %15s%s", buf, pos->site_id, pos->bts_id, pos->ip, VTY_NEWLINE);</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> /* utility functions */</span><br><span> static void parse_e1_link(struct gsm_e1_subslot *e1_link, const char *line,</span><br><span>                     const char *ts, const char *ss)</span><br><span>@@ -4867,6 +4893,7 @@</span><br><span> </span><br><span>        install_element_ve(&bsc_show_net_cmd);</span><br><span>   install_element_ve(&show_bts_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        install_element_ve(&show_rejected_cmd);</span><br><span>  install_element_ve(&show_trx_cmd);</span><br><span>       install_element_ve(&show_ts_cmd);</span><br><span>        install_element_ve(&show_lchan_cmd);</span><br><span>diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c</span><br><span>index fec4147..bbfcb05 100644</span><br><span>--- a/src/osmo-bsc/bts_ipaccess_nanobts.c</span><br><span>+++ b/src/osmo-bsc/bts_ipaccess_nanobts.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> #include <osmocom/abis/e1_input.h></span><br><span> #include <osmocom/gsm/tlv.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/socket.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span> #include <osmocom/bsc/gsm_data.h></span><br><span> #include <osmocom/bsc/abis_nm.h></span><br><span>@@ -458,6 +459,60 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Reject BTS because of an unknown unit ID */</span><br><span style="color: hsl(120, 100%, 40%);">+static void ipaccess_sign_link_reject(const struct ipaccess_unit *dev, const struct e1inp_ts* ts)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      uint16_t site_id = dev->site_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t bts_id = dev->bts_id;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t trx_id = dev->trx_id;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Write to log and increase counter */</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGP(DLINP, LOGL_ERROR, "Unable to find BTS configuration for %u/%u/%u, disconnecting\n", site_id, bts_id,</span><br><span style="color: hsl(120, 100%, 40%);">+          trx_id);</span><br><span style="color: hsl(120, 100%, 40%);">+      rate_ctr_inc(&bsc_gsmnet->bsc_ctrs->ctr[BSC_CTR_UNKNOWN_UNIT_ID]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Get remote IP */</span><br><span style="color: hsl(120, 100%, 40%);">+   char ip[64];</span><br><span style="color: hsl(120, 100%, 40%);">+  if (osmo_sock_get_remote_ip(ts->driver.ipaccess.fd.fd, ip, sizeof(ip)))</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%);">+     /* Rejected list: unlink existing entry */</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gsm_bts_rejected *entry = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_bts_rejected *pos;</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_for_each_entry(pos, &bsc_gsmnet->bts_rejected, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (pos->site_id == site_id && pos->bts_id == bts_id && !strcmp(pos->ip, ip)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      entry = pos;</span><br><span style="color: hsl(120, 100%, 40%);">+                  llist_del(&entry->list);</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</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 style="color: hsl(120, 100%, 40%);">+   /* Allocate new entry */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!entry) {</span><br><span style="color: hsl(120, 100%, 40%);">+         entry = talloc_zero(tall_bsc_ctx, struct gsm_bts_rejected);</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!entry)</span><br><span style="color: hsl(120, 100%, 40%);">+                   return;</span><br><span style="color: hsl(120, 100%, 40%);">+               entry->site_id = site_id;</span><br><span style="color: hsl(120, 100%, 40%);">+          entry->bts_id = bts_id;</span><br><span style="color: hsl(120, 100%, 40%);">+            strncpy(entry->ip, ip, sizeof(entry->ip));</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%);">+   /* Add to beginning with current timestamp */</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_add(&entry->list, &bsc_gsmnet->bts_rejected);</span><br><span style="color: hsl(120, 100%, 40%);">+     entry->time = time(NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Cut off last (oldest) element if we have too many */</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t i=0;</span><br><span style="color: hsl(120, 100%, 40%);">+  llist_for_each_entry(pos, &bsc_gsmnet->bts_rejected, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (i >= 25) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     llist_del(&pos->list);</span><br><span style="color: hsl(120, 100%, 40%);">+                 talloc_free(pos);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+             i++;</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> /* This function is called once the OML/RSL link becomes up. */</span><br><span> static struct e1inp_sign_link *</span><br><span> ipaccess_sign_link_up(void *unit_data, struct e1inp_line *line,</span><br><span>@@ -471,10 +526,7 @@</span><br><span> </span><br><span>   bts = find_bts_by_unitid(bsc_gsmnet, dev->site_id, dev->bts_id);</span><br><span>       if (!bts) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLINP, LOGL_ERROR, "Unable to find BTS configuration for "</span><br><span style="color: hsl(0, 100%, 40%);">-                       " %u/%u/%u, disconnecting\n", dev->site_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                        dev->bts_id, dev->trx_id);</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&bsc_gsmnet->bsc_ctrs->ctr[BSC_CTR_UNKNOWN_UNIT_ID]);</span><br><span style="color: hsl(120, 100%, 40%);">+          ipaccess_sign_link_reject(dev, &line->ts[E1INP_SIGN_OML - 1]);</span><br><span>                return NULL;</span><br><span>         }</span><br><span>    DEBUGP(DLINP, "Identified BTS %u/%u/%u\n",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11493">change 11493</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/11493"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Iba3bfe8fc9432b7ae8f819df8bd71b35b3ec507e </div>
<div style="display:none"> Gerrit-Change-Number: 11493 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>