<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11248">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">layer23/common: move GSMTAP handling to L23SAP<br><br>L1CTL implementation (i.e. l1ctl.c) is also not a good place for<br>GSMTAP handling, let's move it to L23SAP.<br><br>Change-Id: Ie143b9e839d944a7a7eebf5529798a49b8e175d7<br>---<br>M src/host/layer23/include/osmocom/bb/common/l23sap.h<br>M src/host/layer23/src/common/l1ctl.c<br>M src/host/layer23/src/common/l23sap.c<br>3 files changed, 66 insertions(+), 20 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/48/11248/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/layer23/include/osmocom/bb/common/l23sap.h b/src/host/layer23/include/osmocom/bb/common/l23sap.h</span><br><span>index 814fb7d..eaa62c1 100644</span><br><span>--- a/src/host/layer23/include/osmocom/bb/common/l23sap.h</span><br><span>+++ b/src/host/layer23/include/osmocom/bb/common/l23sap.h</span><br><span>@@ -10,6 +10,9 @@</span><br><span> #define CHAN_IS_SACCH(link_id) \</span><br><span>    ((link_id & 0xc0) == LID_SACCH)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int l23sap_gsmtap_data_ind(struct osmocom_ms *ms, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+int l23sap_gsmtap_data_req(struct osmocom_ms *ms, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int l23sap_data_ind(struct osmocom_ms *ms, struct msgb *msg);</span><br><span> int l23sap_data_conf(struct osmocom_ms *ms, struct msgb *msg);</span><br><span> int l23sap_rach_conf(struct osmocom_ms *ms, struct msgb *msg);</span><br><span>diff --git a/src/host/layer23/src/common/l1ctl.c b/src/host/layer23/src/common/l1ctl.c</span><br><span>index e78f8be..60039c9 100644</span><br><span>--- a/src/host/layer23/src/common/l1ctl.c</span><br><span>+++ b/src/host/layer23/src/common/l1ctl.c</span><br><span>@@ -36,8 +36,6 @@</span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/gsm/tlv.h></span><br><span> #include <osmocom/gsm/gsm_utils.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/core/gsmtap_util.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/core/gsmtap.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_08.h></span><br><span> #include <osmocom/gsm/protocol/gsm_08_58.h></span><br><span> #include <osmocom/gsm/rsl.h></span><br><span>@@ -48,8 +46,6 @@</span><br><span> #include <osmocom/bb/common/l1l2_interface.h></span><br><span> #include <osmocom/bb/common/logging.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-extern struct gsmtap_inst *gsmtap_inst;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static struct msgb *osmo_l1_alloc(uint8_t msg_type)</span><br><span> {</span><br><span>         struct l1ctl_hdr *l1h;</span><br><span>@@ -131,7 +127,6 @@</span><br><span>         struct l1ctl_data_ind *ccch;</span><br><span>         struct rx_meas_stat *meas = &ms->meas;</span><br><span>        uint8_t chan_type, chan_ts, chan_ss;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t gsmtap_chan_type;</span><br><span>    struct gsm_time tm;</span><br><span> </span><br><span>      if (msgb_l1len(msg) < sizeof(*dl)) {</span><br><span>@@ -216,12 +211,6 @@</span><br><span>               return 0;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* send CCCH data via GSMTAP */</span><br><span style="color: hsl(0, 100%, 40%);">- gsmtap_chan_type = chantype_rsl2gsmtap(chan_type, dl->link_id);</span><br><span style="color: hsl(0, 100%, 40%);">-      gsmtap_send(gsmtap_inst, ntohs(dl->band_arfcn), chan_ts,</span><br><span style="color: hsl(0, 100%, 40%);">-                 gsmtap_chan_type, chan_ss, tm.fn, dl->rx_level-110,</span><br><span style="color: hsl(0, 100%, 40%);">-                  dl->snr, ccch->data, sizeof(ccch->data));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       /* Send it up towards LAPDm via L23SAP */</span><br><span>    return l23sap_data_ind(ms, msg);</span><br><span> }</span><br><span>@@ -246,8 +235,6 @@</span><br><span> {</span><br><span>     struct l1ctl_hdr *l1h;</span><br><span>       struct l1ctl_info_ul *l1i_ul;</span><br><span style="color: hsl(0, 100%, 40%);">-   uint8_t chan_type, chan_ts, chan_ss;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint8_t gsmtap_chan_type;</span><br><span> </span><br><span>        DEBUGP(DL1C, "(%s)\n", osmo_hexdump(msg->l2h, msgb_l2len(msg)));</span><br><span> </span><br><span>@@ -258,18 +245,15 @@</span><br><span>            return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* send copy via GSMTAP */</span><br><span style="color: hsl(0, 100%, 40%);">-      rsl_dec_chan_nr(chan_nr, &chan_type, &chan_ss, &chan_ts);</span><br><span style="color: hsl(0, 100%, 40%);">-   gsmtap_chan_type = chantype_rsl2gsmtap(chan_type, link_id);</span><br><span style="color: hsl(0, 100%, 40%);">-     gsmtap_send(gsmtap_inst, 0|0x4000, chan_ts, gsmtap_chan_type,</span><br><span style="color: hsl(0, 100%, 40%);">-               chan_ss, 0, 127, 255, msg->l2h, msgb_l2len(msg));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>     /* prepend uplink info header */</span><br><span>     l1i_ul = (struct l1ctl_info_ul *) msgb_push(msg, sizeof(*l1i_ul));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+    msg->l1h = (uint8_t *) l1i_ul;</span><br><span>    l1i_ul->chan_nr = chan_nr;</span><br><span>        l1i_ul->link_id = link_id;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /* Send to GSMTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+  l23sap_gsmtap_data_req(ms, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* prepend l1 header */</span><br><span>      msg->l1h = msgb_push(msg, sizeof(*l1h));</span><br><span>  l1h = (struct l1ctl_hdr *) msg->l1h;</span><br><span>diff --git a/src/host/layer23/src/common/l23sap.c b/src/host/layer23/src/common/l23sap.c</span><br><span>index b07265a..d034b27 100644</span><br><span>--- a/src/host/layer23/src/common/l23sap.c</span><br><span>+++ b/src/host/layer23/src/common/l23sap.c</span><br><span>@@ -26,19 +26,75 @@</span><br><span> #include <errno.h></span><br><span> #include <stdint.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdbool.h></span><br><span> </span><br><span> #include <arpa/inet.h></span><br><span> #include <l1ctl_proto.h></span><br><span> </span><br><span> #include <osmocom/core/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/gsmtap_util.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/gsmtap.h></span><br><span> #include <osmocom/core/prim.h></span><br><span> #include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <osmocom/gsm/lapdm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/rsl.h></span><br><span> </span><br><span> #include <osmocom/bb/common/osmocom_data.h></span><br><span> #include <osmocom/bb/common/logging.h></span><br><span> #include <osmocom/bb/common/l23sap.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+extern struct gsmtap_inst *gsmtap_inst;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int l23sap_gsmtap_data_ind(struct osmocom_ms *ms, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct l1ctl_info_dl *dl = (struct l1ctl_info_dl *) msg->l1h;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t chan_type, chan_ts, chan_ss;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t gsmtap_chan_type;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t band_arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+  int8_t signal_dbm;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t fn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* FDMA / TDMA info indicated by L1 */</span><br><span style="color: hsl(120, 100%, 40%);">+        band_arfcn = ntohs(dl->band_arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+        signal_dbm = dl->rx_level - 110;</span><br><span style="color: hsl(120, 100%, 40%);">+   fn = ntohl(dl->frame_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Logical channel info */</span><br><span style="color: hsl(120, 100%, 40%);">+    rsl_dec_chan_nr(dl->chan_nr, &chan_type, &chan_ss, &chan_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+  gsmtap_chan_type = chantype_rsl2gsmtap(chan_type, dl->link_id);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Send to GSMTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+  return gsmtap_send(gsmtap_inst, band_arfcn, chan_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+          gsmtap_chan_type, chan_ss, fn, signal_dbm,</span><br><span style="color: hsl(120, 100%, 40%);">+            dl->snr, msg->l2h, msgb_l2len(msg));</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%);">+int l23sap_gsmtap_data_req(struct osmocom_ms *ms, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       struct l1ctl_info_ul *ul = (struct l1ctl_info_ul *) msg->l1h;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t chan_type, chan_ts, chan_ss;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t gsmtap_chan_type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* send copy via GSMTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+    rsl_dec_chan_nr(ul->chan_nr, &chan_type, &chan_ss, &chan_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+  gsmtap_chan_type = chantype_rsl2gsmtap(chan_type, ul->link_id);</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%);">+    * Send to GSMTAP</span><br><span style="color: hsl(120, 100%, 40%);">+      *</span><br><span style="color: hsl(120, 100%, 40%);">+     * FIXME: neither FDMA, not TDMA info is known here.</span><br><span style="color: hsl(120, 100%, 40%);">+   * As a possible solution, we can store an UL frame</span><br><span style="color: hsl(120, 100%, 40%);">+    * until RTS (TX confirmation) is received from PHY.</span><br><span style="color: hsl(120, 100%, 40%);">+   * This would also require to add some reference</span><br><span style="color: hsl(120, 100%, 40%);">+       * info to both UL/DL info headers. This is similar</span><br><span style="color: hsl(120, 100%, 40%);">+    * to how SIM-card related messages are handled.</span><br><span style="color: hsl(120, 100%, 40%);">+       */</span><br><span style="color: hsl(120, 100%, 40%);">+   return gsmtap_send(gsmtap_inst, 0 | 0x4000, chan_ts,</span><br><span style="color: hsl(120, 100%, 40%);">+          gsmtap_chan_type, chan_ss, 0, 127, 255,</span><br><span style="color: hsl(120, 100%, 40%);">+               msg->l2h, msgb_l2len(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int l23sap_data_ind(struct osmocom_ms *ms, struct msgb *msg)</span><br><span> {</span><br><span>     struct l1ctl_info_dl *dl = (struct l1ctl_info_dl *) msg->l1h;</span><br><span>@@ -57,6 +113,9 @@</span><br><span>        else</span><br><span>                 le = &ms->lapdm_channel.lapdm_dcch;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* Send to GSMTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+  l23sap_gsmtap_data_ind(ms, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* Send it up into LAPDm */</span><br><span>  return lapdm_phsap_up(&pp.oph, le);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11248">change 11248</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/11248"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ie143b9e839d944a7a7eebf5529798a49b8e175d7 </div>
<div style="display:none"> Gerrit-Change-Number: 11248 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>