<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13422">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Autofill LCLS parameters for A-interface transactions<br><br>That's experimental patch to facilitate testing of BSC implementation of<br>LCLS.<br><br>Change-Id: I35ae6b6ca04925c8d300bc1a0269af00eac727f3<br>---<br>M include/osmocom/msc/debug.h<br>M include/osmocom/msc/transaction.h<br>M src/libmsc/a_iface.c<br>M src/libmsc/transaction.c<br>4 files changed, 62 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/22/13422/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/debug.h b/include/osmocom/msc/debug.h</span><br><span>index 28ba482..3d3f5e6 100644</span><br><span>--- a/include/osmocom/msc/debug.h</span><br><span>+++ b/include/osmocom/msc/debug.h</span><br><span>@@ -8,6 +8,7 @@</span><br><span>     DCC,</span><br><span>         DMM,</span><br><span>         DRR,</span><br><span style="color: hsl(120, 100%, 40%);">+  DLCLS,</span><br><span>       DMNCC,</span><br><span>       DPAG,</span><br><span>        DMSC,</span><br><span>diff --git a/include/osmocom/msc/transaction.h b/include/osmocom/msc/transaction.h</span><br><span>index 830328b..eb5a0d0 100644</span><br><span>--- a/include/osmocom/msc/transaction.h</span><br><span>+++ b/include/osmocom/msc/transaction.h</span><br><span>@@ -108,6 +108,8 @@</span><br><span>                                          const struct vlr_subscr *vsub,</span><br><span>                                       uint8_t sm_rp_mr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_lcls *trans_fill_lcls(const struct gsm_trans *trans, bool use_lac);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct gsm_trans *trans_alloc(struct gsm_network *net,</span><br><span>                               struct vlr_subscr *vsub,</span><br><span>                             uint8_t protocol, uint8_t trans_id,</span><br><span>diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c</span><br><span>index 91a2b6a..b707b59 100644</span><br><span>--- a/src/libmsc/a_iface.c</span><br><span>+++ b/src/libmsc/a_iface.c</span><br><span>@@ -425,7 +425,11 @@</span><br><span>        memset(&rtp_addr, 0, sizeof(rtp_addr));</span><br><span>  memcpy(&rtp_addr, &rtp_addr_in, sizeof(rtp_addr_in));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       msg = gsm0808_create_ass(&ct, NULL, &rtp_addr, &scl, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGPCONN(conn, LOGL_NOTICE, "Preparing LCLS...\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ bool use_lac = true;</span><br><span style="color: hsl(120, 100%, 40%);">+  msg = gsm0808_create_ass2(&ct, NULL, &rtp_addr, &scl, NULL, NULL, trans_fill_lcls(trans, use_lac));</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGPCONN(conn, LOGL_DEBUG, "N-DATA.req(%s)\n", msgb_hexdump_l2(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    return a_iface_tx_bssap(conn, msg);</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/libmsc/transaction.c b/src/libmsc/transaction.c</span><br><span>index 66126e6..8aa81c6 100644</span><br><span>--- a/src/libmsc/transaction.c</span><br><span>+++ b/src/libmsc/transaction.c</span><br><span>@@ -93,6 +93,60 @@</span><br><span>       return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_lcls *trans_fill_lcls(const struct gsm_trans *trans, bool use_lac)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct osmo_ss7_instance *ss7 = osmo_sccp_get_ss7(trans->net->a.sccp);//FIXME: ensure that a interface is in use for this transaction</span><br><span style="color: hsl(120, 100%, 40%);">+   struct osmo_lcls *lcls;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t w = osmo_ss7_pc_width(&ss7->cfg.pc_fmt);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if(!trans->vsub->vlr->cfg.lcls_enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGP(DCC, LOGL_NOTICE, "LCLS disabled globally\n");</span><br><span style="color: hsl(120, 100%, 40%);">+         return 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%);">+   if(!trans) {</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGP(DCC, LOGL_ERROR, "LCLS: unable to fill parameters for unallocated transaction\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             return 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%);">+   if(!trans->conn) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGP(DCC, LOGL_ERROR, "LCLS: unable to fill parameters for transaction without connection\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              return 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%);">+   if (trans->conn->via_ran != OSMO_RAT_GERAN_A) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGP(DCC, LOGL_ERROR, "LCLS: only A interface is supported at the moment\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               return 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%);">+   lcls = talloc_zero(trans, struct osmo_lcls);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!lcls) {</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGP(DCC, LOGL_ERROR, "LCLS: failed to allocate osmo_lcls\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              return 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%);">+   LOGP(DCC, LOGL_INFO, "LCLS: using %u bits (%u bytes) for node ID\n", w, w / 8);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   lcls->gcr.net_len = 3;</span><br><span style="color: hsl(120, 100%, 40%);">+     lcls->gcr.node = ss7->cfg.primary_pc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_plmn_to_bcd(lcls->gcr.net, &trans->net->plmn); /* net id from Q.1902.3 3-5 bytes, this function gives 3 bytes exactly */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_store32be(trans->callref, lcls->gcr.cr);</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_store16be(use_lac ? trans->conn->lac : trans->conn->ci, lcls->gcr.cr + 3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGP(DCC, LOGL_INFO, "LCLS: allocated %s-based CR-ID %s\n", use_lac ? "LAC" : "CI", osmo_hexdump(lcls->gcr.cr, 5));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        lcls->config = GSM0808_LCLS_CFG_BOTH_WAY;</span><br><span style="color: hsl(120, 100%, 40%);">+  lcls->control = GSM0808_LCLS_CSC_CONNECT;</span><br><span style="color: hsl(120, 100%, 40%);">+  lcls->corr_needed = true;</span><br><span style="color: hsl(120, 100%, 40%);">+  lcls->gcr_available = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGP(DCC, LOGL_INFO, "Filled %s, %s\n", osmo_lcls_dump(lcls), osmo_gcr_dump(lcls));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return lcls;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Allocate a new transaction and add it to network list</span><br><span>  *  \param[in] net Netwokr in which we allocate transaction</span><br><span>  *  \param[in] subscr Subscriber for which we allocate transaction</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13422">change 13422</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/13422"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I35ae6b6ca04925c8d300bc1a0269af00eac727f3 </div>
<div style="display:none"> Gerrit-Change-Number: 13422 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>