<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24461">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">update the lchan name to always reflect VAMOS shadowness<br><br>Change gsm_lchan_name_compute() to a function that in-place updates the<br>lchan->name. That allows calling it numerous times with the talloc<br>handled internally. Rename it to lchan_update_name().<br><br>Add 'shadow' to lchan_update_name() and lchan_fsm_update_id() for VAMOS<br>shadow lchans, and also print the lchan index that it is a shadow for,<br>instead of the index in the lchan array.<br><br>When set_pchan_is() updates the VAMOSness of the lchans, call<br>lchan_fsm_update_id(). From lchan_fsm_update_id() also call<br>lchan_update_name().<br><br>This is a bit convoluted for legacy reasons. There are utility programs<br>and C tests using bts_trx.c but not lchan_fsm.c. lchan_update_name()<br>lives in gsm_data.c for that reason. This patch calls<br>lchan_update_name() from lchan_fsm_update_id() and not vice versa to<br>avoid having to add stubbed lchan_fsm_update_id() functions to all<br>utility programs and C tests.<br><br>We can't easily unify the lchan->name and lchan->fi->id without lots of<br>refactoring rippling through all those little utility programs and C<br>tests.<br><br>Change-Id: I7c2bae3b895a91f1b99b4147ecc0e3009cb7439a<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M include/osmocom/bsc/lchan_fsm.h<br>M src/osmo-bsc/assignment_fsm.c<br>M src/osmo-bsc/bts_trx.c<br>M src/osmo-bsc/gsm_data.c<br>M src/osmo-bsc/lchan_fsm.c<br>M src/osmo-bsc/timeslot_fsm.c<br>7 files changed, 25 insertions(+), 12 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/61/24461/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 80fdaac..5d37013 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -1007,7 +1007,7 @@</span><br><span> const char *gsm_chreq_name(enum gsm_chreq_reason_t c);</span><br><span> char *gsm_ts_name(const struct gsm_bts_trx_ts *ts);</span><br><span> char *gsm_ts_and_pchan_name(const struct gsm_bts_trx_ts *ts);</span><br><span style="color: hsl(0, 100%, 40%);">-char *gsm_lchan_name_compute(void *ctx, const struct gsm_lchan *lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_update_name(struct gsm_lchan *lchan);</span><br><span> </span><br><span> static inline char *gsm_lchan_name(const struct gsm_lchan *lchan)</span><br><span> {</span><br><span>diff --git a/include/osmocom/bsc/lchan_fsm.h b/include/osmocom/bsc/lchan_fsm.h</span><br><span>index 74e2a96..e7a06d5 100644</span><br><span>--- a/include/osmocom/bsc/lchan_fsm.h</span><br><span>+++ b/include/osmocom/bsc/lchan_fsm.h</span><br><span>@@ -83,3 +83,4 @@</span><br><span> void lchan_forget_conn(struct gsm_lchan *lchan);</span><br><span> </span><br><span> void lchan_fsm_skip_error(struct gsm_lchan *lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_fsm_update_id(struct gsm_lchan *lchan);</span><br><span>diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c</span><br><span>index 14df76b..3f74add 100644</span><br><span>--- a/src/osmo-bsc/assignment_fsm.c</span><br><span>+++ b/src/osmo-bsc/assignment_fsm.c</span><br><span>@@ -302,14 +302,15 @@</span><br><span>             return;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_fsm_inst_update_id_f(conn->assignment.fi, "%s_%u-%u-%u-%s%s%s-%u",</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_fsm_inst_update_id_f(conn->assignment.fi, "%s_%u-%u-%u-%s%s%s-%s%u",</span><br><span>                                 conn->fi->id,</span><br><span>                                  new_lchan->ts->trx->bts->nr, new_lchan->ts->trx->nr, new_lchan->ts->nr,</span><br><span>                                   gsm_pchan_id(new_lchan->ts->pchan_on_init),</span><br><span>                            (new_lchan->ts->pchan_on_init == new_lchan->ts->pchan_is)? "" : "as",</span><br><span>                                (new_lchan->ts->pchan_on_init == new_lchan->ts->pchan_is)? ""</span><br><span>                                          : gsm_pchan_id(new_lchan->ts->pchan_is),</span><br><span style="color: hsl(0, 100%, 40%);">-                                  new_lchan->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                            new_lchan->vamos.is_secondary ? "shadow" : "",</span><br><span style="color: hsl(120, 100%, 40%);">+                                 new_lchan->nr - (new_lchan->vamos.is_secondary ? new_lchan->ts->max_primary_lchans : 0));</span><br><span> }</span><br><span> </span><br><span> static bool lchan_type_compat_with_mode(enum gsm_chan_t type, const struct channel_mode_and_rate *ch_mode_rate)</span><br><span>diff --git a/src/osmo-bsc/bts_trx.c b/src/osmo-bsc/bts_trx.c</span><br><span>index 64c7985..1f3cb0a 100644</span><br><span>--- a/src/osmo-bsc/bts_trx.c</span><br><span>+++ b/src/osmo-bsc/bts_trx.c</span><br><span>@@ -111,7 +111,7 @@</span><br><span>                       lchan->nr = l;</span><br><span>                    lchan->type = GSM_LCHAN_NONE;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                    lchan->name = gsm_lchan_name_compute(trx, lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+                  lchan_update_name(lchan);</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index 5f8b6da..dc490a5 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -334,12 +334,15 @@</span><br><span>       return ts2str;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-char *gsm_lchan_name_compute(void *ctx, const struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_update_name(struct gsm_lchan *lchan)</span><br><span> {</span><br><span>  struct gsm_bts_trx_ts *ts = lchan->ts;</span><br><span style="color: hsl(0, 100%, 40%);">-       return talloc_asprintf(ctx, "(bts=%d,trx=%d,ts=%d,ss=%d%s)",</span><br><span style="color: hsl(0, 100%, 40%);">-                         ts->trx->bts->nr, ts->trx->nr, ts->nr, lchan->nr,</span><br><span style="color: hsl(0, 100%, 40%);">-                          lchan->vamos.is_secondary ? "-VAMOS" : "");</span><br><span style="color: hsl(120, 100%, 40%);">+     if (lchan->name)</span><br><span style="color: hsl(120, 100%, 40%);">+           talloc_free(lchan->name);</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan->name = talloc_asprintf(ts->trx, "(bts=%d,trx=%d,ts=%d,ss=%s%d)",</span><br><span style="color: hsl(120, 100%, 40%);">+                                     ts->trx->bts->nr, ts->trx->nr, ts->nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      lchan->vamos.is_secondary ? "shadow" : "",</span><br><span style="color: hsl(120, 100%, 40%);">+                                     lchan->nr - (lchan->vamos.is_secondary ? ts->max_primary_lchans : 0));</span><br><span> }</span><br><span> </span><br><span> /* obtain the MO structure for a given object instance */</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 1b8812a..06bf661 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -411,11 +411,16 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void lchan_fsm_update_id(struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_fsm_update_id(struct gsm_lchan *lchan)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      osmo_fsm_inst_update_id_f(lchan->fi, "%u-%u-%u-%s-%u",</span><br><span style="color: hsl(120, 100%, 40%);">+   lchan_update_name(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!lchan->fi)</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_fsm_inst_update_id_f(lchan->fi, "%u-%u-%u-%s-%s%u",</span><br><span>                                  lchan->ts->trx->bts->nr, lchan->ts->trx->nr, lchan->ts->nr,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  gsm_pchan_id(lchan->ts->pchan_on_init), lchan->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                                  gsm_pchan_id(lchan->ts->pchan_on_init),</span><br><span style="color: hsl(120, 100%, 40%);">+                                 lchan->vamos.is_secondary ? "shadow" : "",</span><br><span style="color: hsl(120, 100%, 40%);">+                             lchan->nr - (lchan->vamos.is_secondary ? lchan->ts->max_primary_lchans : 0));</span><br><span>  if (lchan->fi_rtp)</span><br><span>                osmo_fsm_inst_update_id_f(lchan->fi_rtp, lchan->fi->id);</span><br><span> }</span><br><span>diff --git a/src/osmo-bsc/timeslot_fsm.c b/src/osmo-bsc/timeslot_fsm.c</span><br><span>index d1f49a3..e4e9d48 100644</span><br><span>--- a/src/osmo-bsc/timeslot_fsm.c</span><br><span>+++ b/src/osmo-bsc/timeslot_fsm.c</span><br><span>@@ -204,11 +204,14 @@</span><br><span>                              lchan->vamos.is_secondary = false;</span><br><span>                        else</span><br><span>                                 lchan->vamos.is_secondary = true;</span><br><span style="color: hsl(120, 100%, 40%);">+                  lchan_fsm_update_id(lchan);</span><br><span>          }</span><br><span>            break;</span><br><span>       default:</span><br><span style="color: hsl(0, 100%, 40%);">-                ts_for_n_lchans(lchan, ts, ts->max_lchans_possible)</span><br><span style="color: hsl(120, 100%, 40%);">+                ts_for_n_lchans(lchan, ts, ts->max_lchans_possible) {</span><br><span>                     lchan->vamos.is_secondary = false;</span><br><span style="color: hsl(120, 100%, 40%);">+                 lchan_fsm_update_id(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span>            break;</span><br><span>       }</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24461">change 24461</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-bsc/+/24461"/><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-Change-Id: I7c2bae3b895a91f1b99b4147ecc0e3009cb7439a </div>
<div style="display:none"> Gerrit-Change-Number: 24461 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>