<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18126">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">om2k: Wait for OM TRX links to stabilize before trying to bring up TRX<br><br>The OM2K link "per-trx" only comes up after MCTR is setup. So that means<br>we need to wait for it before trying to boot the TRX itself.<br><br>He we simply apply a "dumb" 5 sec timeout as this is the most reliable<br>way I found to get this working reliably.<br><br>Tracking the link state proved difficult and unreliable:<br><br> - Multiple TRX can be present with their link coming up in random<br> order.<br><br> - They can already be up at the start (BTS already initialized from<br> a previous boot) and so the link may actually come up, down, and<br> up again.<br><br> - All of theses transitions might happens before/after we get to the<br> OM2K_BTS_S_WAIT_TRX state depending on how the LAPD timeout<br> expire, if the BTS config was actually changed or not and how much<br> time it takes to apply the new config.<br><br>So all in all, what we must do is wait for the link to stabilize ...<br>hence just waiting 5 second.<br><br>Signed-off-by: Sylvain Munaut <tnt@246tNt.com><br>Change-Id: I55a06e08b9c52ff6e97e8c72f2d55770809eba51<br>---<br>M src/osmo-bsc/abis_om2000.c<br>1 file changed, 31 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/abis_om2000.c b/src/osmo-bsc/abis_om2000.c</span><br><span>index ae36ff2..c696557 100644</span><br><span>--- a/src/osmo-bsc/abis_om2000.c</span><br><span>+++ b/src/osmo-bsc/abis_om2000.c</span><br><span>@@ -76,6 +76,7 @@</span><br><span> #define OM_HEADROOM_SIZE 128</span><br><span> </span><br><span> #define OM2K_TIMEOUT 10</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRX_LAPD_TIMEOUT 5</span><br><span> #define TRX_FSM_TIMEOUT 60</span><br><span> #define BTS_FSM_TIMEOUT 60</span><br><span> </span><br><span>@@ -2297,6 +2298,7 @@</span><br><span> OM2K_BTS_EVT_CON_DONE,</span><br><span> OM2K_BTS_EVT_TF_DONE,</span><br><span> OM2K_BTS_EVT_MCTR_DONE,</span><br><span style="color: hsl(120, 100%, 40%);">+ OM2K_BTS_EVT_TRX_LAPD_UP,</span><br><span> OM2K_BTS_EVT_TRX_DONE,</span><br><span> OM2K_BTS_EVT_STOP,</span><br><span> };</span><br><span>@@ -2308,6 +2310,7 @@</span><br><span> { OM2K_BTS_EVT_CON_DONE, "CON-DONE" },</span><br><span> { OM2K_BTS_EVT_TF_DONE, "TF-DONE" },</span><br><span> { OM2K_BTS_EVT_MCTR_DONE, "MCTR-DONE" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { OM2K_BTS_EVT_TRX_LAPD_UP, "TRX-LAPD-UP" },</span><br><span> { OM2K_BTS_EVT_TRX_DONE, "TRX-DONE" },</span><br><span> { OM2K_BTS_EVT_STOP, "STOP" },</span><br><span> { 0, NULL }</span><br><span>@@ -2320,6 +2323,7 @@</span><br><span> OM2K_BTS_S_WAIT_CON,</span><br><span> OM2K_BTS_S_WAIT_TF,</span><br><span> OM2K_BTS_S_WAIT_MCTR,</span><br><span style="color: hsl(120, 100%, 40%);">+ OM2K_BTS_S_WAIT_TRX_LAPD,</span><br><span> OM2K_BTS_S_WAIT_TRX,</span><br><span> OM2K_BTS_S_DONE,</span><br><span> OM2K_BTS_S_ERROR,</span><br><span>@@ -2394,21 +2398,25 @@</span><br><span> om2k_mo_fsm_start(fi, OM2K_BTS_EVT_MCTR_DONE, bts->c0,</span><br><span> &bts->rbs2000.mctr.om2k_mo);</span><br><span> } else {</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_bts_trx *trx;</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_WAIT_TRX,</span><br><span style="color: hsl(0, 100%, 40%);">- BTS_FSM_TIMEOUT, 0);</span><br><span style="color: hsl(0, 100%, 40%);">- obfp->next_trx_nr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- trx = gsm_bts_trx_num(obfp->bts, obfp->next_trx_nr++);</span><br><span style="color: hsl(0, 100%, 40%);">- om2k_trx_fsm_start(fi, trx, OM2K_BTS_EVT_TRX_DONE);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_WAIT_TRX_LAPD,</span><br><span style="color: hsl(120, 100%, 40%);">+ TRX_LAPD_TIMEOUT, 0);</span><br><span> }</span><br><span> }</span><br><span> </span><br><span> static void om2k_bts_s_wait_mctr(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(event == OM2K_BTS_EVT_MCTR_DONE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_WAIT_TRX_LAPD,</span><br><span style="color: hsl(120, 100%, 40%);">+ TRX_LAPD_TIMEOUT, 0);</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 om2k_bts_s_wait_trx_lapd(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span> struct om2k_bts_fsm_priv *obfp = fi->priv;</span><br><span> struct gsm_bts_trx *trx;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(event == OM2K_BTS_EVT_MCTR_DONE);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(event == OM2K_BTS_EVT_TRX_LAPD_UP);</span><br><span> </span><br><span> osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_WAIT_TRX,</span><br><span> BTS_FSM_TIMEOUT, 0);</span><br><span>@@ -2469,17 +2477,23 @@</span><br><span> .in_event_mask = S(OM2K_BTS_EVT_IS_DONE),</span><br><span> .out_state_mask = S(OM2K_BTS_S_ERROR) |</span><br><span> S(OM2K_BTS_S_WAIT_MCTR) |</span><br><span style="color: hsl(0, 100%, 40%);">- S(OM2K_BTS_S_WAIT_TRX),</span><br><span style="color: hsl(120, 100%, 40%);">+ S(OM2K_BTS_S_WAIT_TRX_LAPD),</span><br><span> .name = "WAIT-IS",</span><br><span> .action = om2k_bts_s_wait_is,</span><br><span> },</span><br><span> [OM2K_BTS_S_WAIT_MCTR] = {</span><br><span> .in_event_mask = S(OM2K_BTS_EVT_MCTR_DONE),</span><br><span> .out_state_mask = S(OM2K_BTS_S_ERROR) |</span><br><span style="color: hsl(0, 100%, 40%);">- S(OM2K_BTS_S_WAIT_TRX),</span><br><span style="color: hsl(120, 100%, 40%);">+ S(OM2K_BTS_S_WAIT_TRX_LAPD),</span><br><span> .name = "WAIT-MCTR",</span><br><span> .action = om2k_bts_s_wait_mctr,</span><br><span> },</span><br><span style="color: hsl(120, 100%, 40%);">+ [OM2K_BTS_S_WAIT_TRX_LAPD] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ .in_event_mask = S(OM2K_BTS_EVT_TRX_LAPD_UP),</span><br><span style="color: hsl(120, 100%, 40%);">+ .out_state_mask = S(OM2K_BTS_S_WAIT_TRX),</span><br><span style="color: hsl(120, 100%, 40%);">+ .name = "WAIT-TRX-LAPD",</span><br><span style="color: hsl(120, 100%, 40%);">+ .action = om2k_bts_s_wait_trx_lapd,</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span> [OM2K_BTS_S_WAIT_TRX] = {</span><br><span> .in_event_mask = S(OM2K_BTS_EVT_TRX_DONE),</span><br><span> .out_state_mask = S(OM2K_BTS_S_ERROR) |</span><br><span>@@ -2498,7 +2512,14 @@</span><br><span> </span><br><span> static int om2k_bts_timer_cb(struct osmo_fsm_inst *fi)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_ERROR, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (fi->state) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case OM2K_BTS_S_WAIT_TRX_LAPD:</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_fsm_inst_dispatch(fi, OM2K_BTS_EVT_TRX_LAPD_UP, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ default:</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_fsm_inst_state_chg(fi, OM2K_BTS_S_ERROR, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> return 0;</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/+/18126">change 18126</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/+/18126"/><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: I55a06e08b9c52ff6e97e8c72f2d55770809eba51 </div>
<div style="display:none"> Gerrit-Change-Number: 18126 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: tnt <tnt@246tNt.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: tnt <tnt@246tNt.com> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>