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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">log: set L1 SAPI log context<br><br>Add a new common L1 SAPI enum, to unify all the BTS specific SAPIs.<br>Translate to this enum, and set the context for uplink messages in<br>each BTS specific implementation.<br><br>Set the context for downlink messages in the common l1sap code, by<br>converting the osmo_phsap_prim back to the SAPI value (mostly looking at<br>chan_nr). The new functions for doing this conversion,<br>get_common_sapi_by_trx_prim() and get_common_sapi_ph_data(), are based<br>on the existing to_gsmtap() and gsmtap_ph_data() functions.<br><br>Note that we can't set the uplink SAPI context in the common code,<br>because then we can't set it as early as possible. In this patch, the<br>SAPI context is set for the PHYs where the SAPI is readily available.<br>With additional conversion from the RSL channel, the SAPI context could<br>be set for osmo-bts-trx in a follow up patch.<br><br>Related: OS#2356<br>Depends: (libosmocore) I814cb3328d99faca9220adb5a80ffb934f219d7d<br>Change-Id: I6b7bb2e1d61502b61214f854a4ec5cbb7267545b<br>---<br>M include/osmo-bts/l1sap.h<br>M src/common/l1sap.c<br>M src/osmo-bts-litecell15/l1_if.c<br>M src/osmo-bts-oc2g/l1_if.c<br>M src/osmo-bts-octphy/l1_if.c<br>M src/osmo-bts-sysmo/l1_if.c<br>6 files changed, 293 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/l1sap.h b/include/osmo-bts/l1sap.h</span><br><span>index 7ae5d38..1883869 100644</span><br><span>--- a/include/osmo-bts/l1sap.h</span><br><span>+++ b/include/osmo-bts/l1sap.h</span><br><span>@@ -96,6 +96,37 @@</span><br><span> int l1sap_chan_deact_sacch(struct gsm_bts_trx *trx, uint8_t chan_nr);</span><br><span> int l1sap_chan_modify(struct gsm_bts_trx *trx, uint8_t chan_nr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum l1sap_common_sapi {</span><br><span style="color: hsl(120, 100%, 40%);">+ L1SAP_COMMON_SAPI_UNKNOWN,</span><br><span style="color: hsl(120, 100%, 40%);">+    /* alphabetic order */</span><br><span style="color: hsl(120, 100%, 40%);">+        L1SAP_COMMON_SAPI_AGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_BCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_FACCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+    L1SAP_COMMON_SAPI_FACCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+    L1SAP_COMMON_SAPI_FCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_IDLE,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_NCH,</span><br><span style="color: hsl(120, 100%, 40%);">+        L1SAP_COMMON_SAPI_PACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_PAGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_PBCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_PCH,</span><br><span style="color: hsl(120, 100%, 40%);">+        L1SAP_COMMON_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_PNCH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_PPCH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_PRACH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_PTCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+       L1SAP_COMMON_SAPI_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_SCH,</span><br><span style="color: hsl(120, 100%, 40%);">+        L1SAP_COMMON_SAPI_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_TCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+      L1SAP_COMMON_SAPI_TCH_H,</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 uint16_t l1sap_log_ctx_sapi;</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct value_string l1sap_common_sapi_names[];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> extern const struct value_string gsmtap_sapi_names[];</span><br><span> extern struct gsmtap_inst *gsmtap;</span><br><span> extern uint32_t gsmtap_sapi_mask;</span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index 2008f0e..7c54380 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -257,6 +257,85 @@</span><br><span>   return check_for_ciph_cmd(msg, lchan, chan_nr);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+uint16_t l1sap_log_ctx_sapi;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct value_string l1sap_common_sapi_names[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+     { L1SAP_COMMON_SAPI_UNKNOWN,    "UNKNOWN" },</span><br><span style="color: hsl(120, 100%, 40%);">+        /* alphabetic order */</span><br><span style="color: hsl(120, 100%, 40%);">+        { L1SAP_COMMON_SAPI_AGCH,       "AGCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_BCCH,       "BCCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_CBCH,       "CBCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_FACCH_F,    "FACCH/F" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { L1SAP_COMMON_SAPI_FACCH_H,    "FACCH/H" },</span><br><span style="color: hsl(120, 100%, 40%);">+        { L1SAP_COMMON_SAPI_FCCH,       "FCCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_IDLE,       "IDLE" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_NCH,        "NCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { L1SAP_COMMON_SAPI_PACCH,      "PACCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_PAGCH,      "PAGCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_PBCCH,      "PBCCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_PCH,        "PCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { L1SAP_COMMON_SAPI_PDTCH,      "PDTCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_PNCH,       "PNCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_PPCH,       "PPCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_PRACH,      "PRACH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_PTCCH,      "PTCCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_RACH,       "RACH" },</span><br><span style="color: hsl(120, 100%, 40%);">+   { L1SAP_COMMON_SAPI_SACCH,      "SACCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_SCH,        "SCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { L1SAP_COMMON_SAPI_SDCCH,      "SDCCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_TCH_F,      "TCH/F" },</span><br><span style="color: hsl(120, 100%, 40%);">+  { L1SAP_COMMON_SAPI_TCH_H,      "TCH/H" },</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 enum l1sap_common_sapi get_common_sapi_ph_data(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t link_id = l1sap->u.data.link_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t chan_nr = l1sap->u.data.chan_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint32_t u32Fn = l1sap->u.data.fn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (L1SAP_IS_CHAN_TCHF(chan_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+              return L1SAP_COMMON_SAPI_TCH_F;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (L1SAP_IS_CHAN_TCHH(chan_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+              return L1SAP_COMMON_SAPI_TCH_H;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (L1SAP_IS_CHAN_SDCCH4(chan_nr) || L1SAP_IS_CHAN_SDCCH8(chan_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+           return L1SAP_COMMON_SAPI_SDCCH;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (L1SAP_IS_CHAN_BCCH(chan_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+              return L1SAP_COMMON_SAPI_BCCH;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (L1SAP_IS_CHAN_AGCH_PCH(chan_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+          /* The sapi depends on DSP configuration, not on the actual SYSTEM INFORMATION 3. */</span><br><span style="color: hsl(120, 100%, 40%);">+          return ((l1sap_fn2ccch_block(u32Fn) >= num_agch(trx, "PH-DATA-REQ"))</span><br><span style="color: hsl(120, 100%, 40%);">+                     ? L1SAP_COMMON_SAPI_PCH</span><br><span style="color: hsl(120, 100%, 40%);">+                       : L1SAP_COMMON_SAPI_AGCH);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (L1SAP_IS_CHAN_CBCH(chan_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+              return L1SAP_COMMON_SAPI_CBCH;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (L1SAP_IS_LINK_SACCH(link_id))</span><br><span style="color: hsl(120, 100%, 40%);">+             return L1SAP_COMMON_SAPI_SACCH;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return L1SAP_COMMON_SAPI_UNKNOWN;</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 enum l1sap_common_sapi get_common_sapi_by_trx_prim(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Only downlink prims are relevant */</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (OSMO_PRIM_HDR(&l1sap->oph)) {</span><br><span style="color: hsl(120, 100%, 40%);">+  case OSMO_PRIM(PRIM_PH_DATA, PRIM_OP_REQUEST):</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ts_is_pdch(&trx->ts[L1SAP_CHAN2TS(l1sap->u.data.chan_nr)]))</span><br><span style="color: hsl(120, 100%, 40%);">+                     return ((L1SAP_IS_PTCCH(l1sap->u.data.fn))</span><br><span style="color: hsl(120, 100%, 40%);">+                         ? L1SAP_COMMON_SAPI_PTCCH</span><br><span style="color: hsl(120, 100%, 40%);">+                             : L1SAP_COMMON_SAPI_PDTCH);</span><br><span style="color: hsl(120, 100%, 40%);">+           return get_common_sapi_ph_data(trx, l1sap);</span><br><span style="color: hsl(120, 100%, 40%);">+   default:</span><br><span style="color: hsl(120, 100%, 40%);">+              return L1SAP_COMMON_SAPI_UNKNOWN;</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 gsmtap_inst *gsmtap = NULL;</span><br><span> uint32_t gsmtap_sapi_mask = 0;</span><br><span> uint8_t gsmtap_sapi_acch = 0;</span><br><span>@@ -1455,6 +1534,9 @@</span><br><span> /* any L1 prim sent to bts model */</span><br><span> static int l1sap_down(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+  l1sap_log_ctx_sapi = get_common_sapi_by_trx_prim(trx, l1sap);</span><br><span style="color: hsl(120, 100%, 40%);">+ log_set_context(LOG_CTX_L1_SAPI, &l1sap_log_ctx_sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         if (OSMO_PRIM_HDR(&l1sap->oph) ==</span><br><span>                              OSMO_PRIM(PRIM_PH_DATA, PRIM_OP_REQUEST))</span><br><span>           to_gsmtap(trx, l1sap);</span><br><span>diff --git a/src/osmo-bts-litecell15/l1_if.c b/src/osmo-bts-litecell15/l1_if.c</span><br><span>index 2ac0b7a..d7e0cde 100644</span><br><span>--- a/src/osmo-bts-litecell15/l1_if.c</span><br><span>+++ b/src/osmo-bts-litecell15/l1_if.c</span><br><span>@@ -795,6 +795,45 @@</span><br><span>       return (cbits << 3) | u8Tn;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const enum l1sap_common_sapi common_sapi_by_sapi_t[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   [GsmL1_Sapi_Idle]       = L1SAP_COMMON_SAPI_IDLE,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Fcch]       = L1SAP_COMMON_SAPI_FCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Sch]        = L1SAP_COMMON_SAPI_SCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Sacch]      = L1SAP_COMMON_SAPI_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Sdcch]      = L1SAP_COMMON_SAPI_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Bcch]       = L1SAP_COMMON_SAPI_BCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Pch]        = L1SAP_COMMON_SAPI_PCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Agch]       = L1SAP_COMMON_SAPI_AGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Cbch]       = L1SAP_COMMON_SAPI_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Rach]       = L1SAP_COMMON_SAPI_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_TchF]       = L1SAP_COMMON_SAPI_TCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_FacchF]     = L1SAP_COMMON_SAPI_FACCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+  [GsmL1_Sapi_TchH]       = L1SAP_COMMON_SAPI_TCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_FacchH]     = L1SAP_COMMON_SAPI_FACCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+  [GsmL1_Sapi_Nch]        = L1SAP_COMMON_SAPI_NCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Pdtch]      = L1SAP_COMMON_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pacch]      = L1SAP_COMMON_SAPI_PACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pbcch]      = L1SAP_COMMON_SAPI_PBCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pagch]      = L1SAP_COMMON_SAPI_PAGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Ppch]       = L1SAP_COMMON_SAPI_PPCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Pnch]       = L1SAP_COMMON_SAPI_PNCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Ptcch]      = L1SAP_COMMON_SAPI_PTCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Prach]      = L1SAP_COMMON_SAPI_PRACH,</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 enum l1sap_common_sapi get_common_sapi(GsmL1_Sapi_t sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (sapi >= GsmL1_Sapi_NUM)</span><br><span style="color: hsl(120, 100%, 40%);">+                return L1SAP_COMMON_SAPI_UNKNOWN;</span><br><span style="color: hsl(120, 100%, 40%);">+     return common_sapi_by_sapi_t[sapi];</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 set_log_ctx_sapi(GsmL1_Sapi_t sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  l1sap_log_ctx_sapi = get_common_sapi(sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_context(LOG_CTX_L1_SAPI, &l1sap_log_ctx_sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int handle_ph_readytosend_ind(struct lc15l1_hdl *fl1,</span><br><span>                                   GsmL1_PhReadyToSendInd_t *rts_ind,</span><br><span>                                   struct msgb *l1p_msg)</span><br><span>@@ -811,6 +850,8 @@</span><br><span>     uint8_t chan_nr, link_id;</span><br><span>    uint32_t fn;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      set_log_ctx_sapi(rts_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* check if primitive should be handled by common part */</span><br><span>    chan_nr = chan_nr_by_sapi(&trx->ts[rts_ind->u8Tn], rts_ind->sapi,</span><br><span>               rts_ind->subCh, rts_ind->u8Tn, rts_ind->u32Fn);</span><br><span>@@ -933,6 +974,8 @@</span><br><span>       int rc = 0;</span><br><span>  int8_t rssi;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      set_log_ctx_sapi(data_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       chan_nr = chan_nr_by_sapi(&trx->ts[data_ind->u8Tn], data_ind->sapi,</span><br><span>             data_ind->subCh, data_ind->u8Tn, data_ind->u32Fn);</span><br><span>  fn = data_ind->u32Fn;</span><br><span>@@ -1002,6 +1045,7 @@</span><br><span>     int rc;</span><br><span>      struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  set_log_ctx_sapi(ra_ind->sapi);</span><br><span>   dump_meas_res(LOGL_DEBUG, &ra_ind->measParam);</span><br><span> </span><br><span>    if ((ra_ind->msgUnitParam.u8Size != 1) &&</span><br><span>diff --git a/src/osmo-bts-oc2g/l1_if.c b/src/osmo-bts-oc2g/l1_if.c</span><br><span>index d987bb5..d8be2d6 100644</span><br><span>--- a/src/osmo-bts-oc2g/l1_if.c</span><br><span>+++ b/src/osmo-bts-oc2g/l1_if.c</span><br><span>@@ -847,6 +847,45 @@</span><br><span>         return (cbits << 3) | u8Tn;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const enum l1sap_common_sapi common_sapi_by_sapi_t[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   [GsmL1_Sapi_Idle]       = L1SAP_COMMON_SAPI_IDLE,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Fcch]       = L1SAP_COMMON_SAPI_FCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Sch]        = L1SAP_COMMON_SAPI_SCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Sacch]      = L1SAP_COMMON_SAPI_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Sdcch]      = L1SAP_COMMON_SAPI_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Bcch]       = L1SAP_COMMON_SAPI_BCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Pch]        = L1SAP_COMMON_SAPI_PCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Agch]       = L1SAP_COMMON_SAPI_AGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Cbch]       = L1SAP_COMMON_SAPI_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Rach]       = L1SAP_COMMON_SAPI_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_TchF]       = L1SAP_COMMON_SAPI_TCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_FacchF]     = L1SAP_COMMON_SAPI_FACCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+  [GsmL1_Sapi_TchH]       = L1SAP_COMMON_SAPI_TCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_FacchH]     = L1SAP_COMMON_SAPI_FACCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+  [GsmL1_Sapi_Nch]        = L1SAP_COMMON_SAPI_NCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Pdtch]      = L1SAP_COMMON_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pacch]      = L1SAP_COMMON_SAPI_PACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pbcch]      = L1SAP_COMMON_SAPI_PBCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pagch]      = L1SAP_COMMON_SAPI_PAGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Ppch]       = L1SAP_COMMON_SAPI_PPCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Pnch]       = L1SAP_COMMON_SAPI_PNCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Ptcch]      = L1SAP_COMMON_SAPI_PTCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Prach]      = L1SAP_COMMON_SAPI_PRACH,</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 enum l1sap_common_sapi get_common_sapi(GsmL1_Sapi_t sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (sapi >= GsmL1_Sapi_NUM)</span><br><span style="color: hsl(120, 100%, 40%);">+                return L1SAP_COMMON_SAPI_UNKNOWN;</span><br><span style="color: hsl(120, 100%, 40%);">+     return common_sapi_by_sapi_t[sapi];</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 set_log_ctx_sapi(GsmL1_Sapi_t sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  l1sap_log_ctx_sapi = get_common_sapi(sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_context(LOG_CTX_L1_SAPI, &l1sap_log_ctx_sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int handle_ph_readytosend_ind(struct oc2gl1_hdl *fl1,</span><br><span>                                   GsmL1_PhReadyToSendInd_t *rts_ind,</span><br><span>                                   struct msgb *l1p_msg)</span><br><span>@@ -863,6 +902,8 @@</span><br><span>     uint8_t chan_nr, link_id;</span><br><span>    uint32_t fn;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      set_log_ctx_sapi(rts_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* check if primitive should be handled by common part */</span><br><span>    chan_nr = chan_nr_by_sapi(&trx->ts[rts_ind->u8Tn], rts_ind->sapi,</span><br><span>               rts_ind->subCh, rts_ind->u8Tn, rts_ind->u32Fn);</span><br><span>@@ -989,6 +1030,8 @@</span><br><span>      int rc = 0;</span><br><span>  int8_t rssi;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      set_log_ctx_sapi(data_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       chan_nr = chan_nr_by_sapi(&trx->ts[data_ind->u8Tn], data_ind->sapi,</span><br><span>             data_ind->subCh, data_ind->u8Tn, data_ind->u32Fn);</span><br><span>  fn = data_ind->u32Fn;</span><br><span>@@ -1058,6 +1101,7 @@</span><br><span>     int rc;</span><br><span>      struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  set_log_ctx_sapi(ra_ind->sapi);</span><br><span>   dump_meas_res(LOGL_DEBUG, &ra_ind->measParam);</span><br><span> </span><br><span>    if ((ra_ind->msgUnitParam.u8Size != 1) &&</span><br><span>diff --git a/src/osmo-bts-octphy/l1_if.c b/src/osmo-bts-octphy/l1_if.c</span><br><span>index 612c29a..bf2fa35 100644</span><br><span>--- a/src/osmo-bts-octphy/l1_if.c</span><br><span>+++ b/src/osmo-bts-octphy/l1_if.c</span><br><span>@@ -938,6 +938,47 @@</span><br><span>         return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* octv1_gsm_api.h does not have an end marker for CTVC1_GSM_SAPI_ENUM */</span><br><span style="color: hsl(120, 100%, 40%);">+#define _OCTVC1_GSM_SAPI_ENUM_LENGTH (cOCTVC1_GSM_SAPI_ENUM_PRACH + 1)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const enum l1sap_common_sapi common_sapi_by_oct_sapi[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_IDLE]            = L1SAP_COMMON_SAPI_IDLE,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_FCCH]            = L1SAP_COMMON_SAPI_FCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_SCH]             = L1SAP_COMMON_SAPI_SCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [cOCTVC1_GSM_SAPI_ENUM_SACCH]           = L1SAP_COMMON_SAPI_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_SDCCH]           = L1SAP_COMMON_SAPI_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_BCCH]            = L1SAP_COMMON_SAPI_BCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_PCH_AGCH]        = L1SAP_COMMON_SAPI_PCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [cOCTVC1_GSM_SAPI_ENUM_CBCH]            = L1SAP_COMMON_SAPI_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_RACH]            = L1SAP_COMMON_SAPI_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_TCHF]            = L1SAP_COMMON_SAPI_TCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_FACCHF]          = L1SAP_COMMON_SAPI_FACCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+  [cOCTVC1_GSM_SAPI_ENUM_TCHH]            = L1SAP_COMMON_SAPI_TCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_FACCHH]          = L1SAP_COMMON_SAPI_FACCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+  [cOCTVC1_GSM_SAPI_ENUM_NCH]             = L1SAP_COMMON_SAPI_NCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [cOCTVC1_GSM_SAPI_ENUM_PDTCH]           = L1SAP_COMMON_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_PACCH]           = L1SAP_COMMON_SAPI_PACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_PBCCH]           = L1SAP_COMMON_SAPI_PBCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_PAGCH]           = L1SAP_COMMON_SAPI_PAGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_PPCH]            = L1SAP_COMMON_SAPI_PPCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_PNCH]            = L1SAP_COMMON_SAPI_PNCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [cOCTVC1_GSM_SAPI_ENUM_PTCCH]           = L1SAP_COMMON_SAPI_PTCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [cOCTVC1_GSM_SAPI_ENUM_PRACH]           = L1SAP_COMMON_SAPI_PRACH,</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 enum l1sap_common_sapi get_common_sapi(tOCT_UINT8 sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   if (sapi >= _OCTVC1_GSM_SAPI_ENUM_LENGTH)</span><br><span style="color: hsl(120, 100%, 40%);">+          return L1SAP_COMMON_SAPI_UNKNOWN;</span><br><span style="color: hsl(120, 100%, 40%);">+     return common_sapi_by_oct_sapi[sapi];</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 set_log_ctx_sapi(tOCT_UINT8 sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  l1sap_log_ctx_sapi = get_common_sapi(sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_context(LOG_CTX_L1_SAPI, &l1sap_log_ctx_sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int handle_ph_readytosend_ind(struct octphy_hdl *fl1,</span><br><span>      tOCTVC1_GSM_MSG_TRX_LOGICAL_CHANNEL_READY_TO_SEND_INDICATION_EVT *evt,</span><br><span>       struct msgb *l1p_msg)</span><br><span>@@ -955,6 +996,8 @@</span><br><span>  struct msgb *resp_msg;</span><br><span>       tOCTVC1_GSM_MSG_TRX_REQUEST_LOGICAL_CHANNEL_DATA_CMD *data_req;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   set_log_ctx_sapi(evt->LchId.bySAPI);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* Retrive the data */</span><br><span>       fn = evt->ulFrameNumber;</span><br><span>  ts_num = (uint8_t) evt->LchId.byTimeslotNb;</span><br><span>@@ -1079,6 +1122,8 @@</span><br><span>       uint8_t ts_num = (uint8_t) data_ind->LchId.byTimeslotNb;</span><br><span>  uint8_t sc = (uint8_t) data_ind->LchId.bySubChannelNb;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ set_log_ctx_sapi(data_ind->LchId.bySAPI);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* Need to combine two 16bit MSB and LSB to form 32bit FN */</span><br><span>         fn = data_ind->Data.ulFrameNumber;</span><br><span> </span><br><span>@@ -1171,6 +1216,8 @@</span><br><span>    int rc;</span><br><span>      struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  set_log_ctx_sapi(ra_ind->LchId.bySAPI);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         dump_meas_res(LOGL_DEBUG, &ra_ind->MeasurementInfo);</span><br><span> </span><br><span>      if (ra_ind->ulMsgLength != 1) {</span><br><span>diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c</span><br><span>index df39e2f..199d8bd 100644</span><br><span>--- a/src/osmo-bts-sysmo/l1_if.c</span><br><span>+++ b/src/osmo-bts-sysmo/l1_if.c</span><br><span>@@ -796,6 +796,45 @@</span><br><span>       return (cbits << 3) | u8Tn;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const enum l1sap_common_sapi common_sapi_by_sapi_t[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+   [GsmL1_Sapi_Idle]       = L1SAP_COMMON_SAPI_IDLE,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Fcch]       = L1SAP_COMMON_SAPI_FCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Sch]        = L1SAP_COMMON_SAPI_SCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Sacch]      = L1SAP_COMMON_SAPI_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Sdcch]      = L1SAP_COMMON_SAPI_SDCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Bcch]       = L1SAP_COMMON_SAPI_BCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Pch]        = L1SAP_COMMON_SAPI_PCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Agch]       = L1SAP_COMMON_SAPI_AGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Cbch]       = L1SAP_COMMON_SAPI_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Rach]       = L1SAP_COMMON_SAPI_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_TchF]       = L1SAP_COMMON_SAPI_TCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_FacchF]     = L1SAP_COMMON_SAPI_FACCH_F,</span><br><span style="color: hsl(120, 100%, 40%);">+  [GsmL1_Sapi_TchH]       = L1SAP_COMMON_SAPI_TCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_FacchH]     = L1SAP_COMMON_SAPI_FACCH_H,</span><br><span style="color: hsl(120, 100%, 40%);">+  [GsmL1_Sapi_Nch]        = L1SAP_COMMON_SAPI_NCH,</span><br><span style="color: hsl(120, 100%, 40%);">+      [GsmL1_Sapi_Pdtch]      = L1SAP_COMMON_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pacch]      = L1SAP_COMMON_SAPI_PACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pbcch]      = L1SAP_COMMON_SAPI_PBCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Pagch]      = L1SAP_COMMON_SAPI_PAGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Ppch]       = L1SAP_COMMON_SAPI_PPCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Pnch]       = L1SAP_COMMON_SAPI_PNCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     [GsmL1_Sapi_Ptcch]      = L1SAP_COMMON_SAPI_PTCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+    [GsmL1_Sapi_Prach]      = L1SAP_COMMON_SAPI_PRACH,</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 enum l1sap_common_sapi get_common_sapi(GsmL1_Sapi_t sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (sapi >= GsmL1_Sapi_NUM)</span><br><span style="color: hsl(120, 100%, 40%);">+                return L1SAP_COMMON_SAPI_UNKNOWN;</span><br><span style="color: hsl(120, 100%, 40%);">+     return common_sapi_by_sapi_t[sapi];</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 set_log_ctx_sapi(GsmL1_Sapi_t sapi)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  l1sap_log_ctx_sapi = get_common_sapi(sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+   log_set_context(LOG_CTX_L1_SAPI, &l1sap_log_ctx_sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int handle_ph_readytosend_ind(struct femtol1_hdl *fl1,</span><br><span>                                  GsmL1_PhReadyToSendInd_t *rts_ind,</span><br><span>                                   struct msgb *l1p_msg)</span><br><span>@@ -812,6 +851,8 @@</span><br><span>     uint8_t chan_nr, link_id;</span><br><span>    uint32_t fn;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      set_log_ctx_sapi(rts_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* check if primitive should be handled by common part */</span><br><span>    chan_nr = chan_nr_by_sapi(&trx->ts[rts_ind->u8Tn], rts_ind->sapi,</span><br><span>               rts_ind->subCh, rts_ind->u8Tn, rts_ind->u32Fn);</span><br><span>@@ -933,6 +974,8 @@</span><br><span>       struct gsm_time g_time;</span><br><span>      int rc = 0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       set_log_ctx_sapi(data_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       chan_nr = chan_nr_by_sapi(&trx->ts[data_ind->u8Tn], data_ind->sapi,</span><br><span>             data_ind->subCh, data_ind->u8Tn, data_ind->u32Fn);</span><br><span>  if (!chan_nr) {</span><br><span>@@ -996,6 +1039,8 @@</span><br><span>       int rc;</span><br><span>      struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  set_log_ctx_sapi(ra_ind->sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         dump_meas_res(LOGL_DEBUG, &ra_ind->measParam);</span><br><span> </span><br><span>    if ((ra_ind->msgUnitParam.u8Size != 1) &&</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/15539">change 15539</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/osmo-bts/+/15539"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6b7bb2e1d61502b61214f854a4ec5cbb7267545b </div>
<div style="display:none"> Gerrit-Change-Number: 15539 </div>
<div style="display:none"> Gerrit-PatchSet: 10 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@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-CC: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>