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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Introduce NM BTS FSM<br><br>Change-Id: Iae631bcc7acdf955296b124707e42d5e565af186<br>---<br>M include/osmo-bts/nm_common_fsm.h<br>M src/common/Makefile.am<br>M src/common/bts.c<br>A src/common/nm_bts_fsm.c<br>M src/osmo-bts-litecell15/oml.c<br>M src/osmo-bts-oc2g/oml.c<br>M src/osmo-bts-octphy/l1_oml.c<br>M src/osmo-bts-omldummy/bts_model.c<br>M src/osmo-bts-sysmo/oml.c<br>M src/osmo-bts-trx/l1_if.c<br>M src/osmo-bts-virtual/bts_model.c<br>11 files changed, 194 insertions(+), 24 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/nm_common_fsm.h b/include/osmo-bts/nm_common_fsm.h</span><br><span>index bd8f8c1..93e4bde 100644</span><br><span>--- a/include/osmo-bts/nm_common_fsm.h</span><br><span>+++ b/include/osmo-bts/nm_common_fsm.h</span><br><span>@@ -42,3 +42,11 @@</span><br><span>         NM_BTS_SM_ST_OP_ENABLED,</span><br><span> };</span><br><span> extern struct osmo_fsm nm_bts_sm_fsm;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+enum nm_bts_op_fsm_states {</span><br><span style="color: hsl(120, 100%, 40%);">+     NM_BTS_ST_OP_DISABLED_NOTINSTALLED,</span><br><span style="color: hsl(120, 100%, 40%);">+   NM_BTS_ST_OP_DISABLED_OFFLINE,</span><br><span style="color: hsl(120, 100%, 40%);">+        NM_BTS_ST_OP_ENABLED,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+extern struct osmo_fsm nm_bts_fsm;</span><br><span>diff --git a/src/common/Makefile.am b/src/common/Makefile.am</span><br><span>index 458041e..463797e 100644</span><br><span>--- a/src/common/Makefile.am</span><br><span>+++ b/src/common/Makefile.am</span><br><span>@@ -39,6 +39,7 @@</span><br><span>       ta_control.c \</span><br><span>       nm_common_fsm.c \</span><br><span>    nm_bts_sm_fsm.c \</span><br><span style="color: hsl(120, 100%, 40%);">+     nm_bts_fsm.c \</span><br><span>       $(NULL)</span><br><span> </span><br><span> libl1sched_a_SOURCES = scheduler.c</span><br><span>diff --git a/src/common/bts.c b/src/common/bts.c</span><br><span>index 0770640..6fc0cb8 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -207,6 +207,10 @@</span><br><span>                osmo_fsm_inst_free(bts->site_mgr.mo.fi);</span><br><span>          bts->site_mgr.mo.fi = NULL;</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (bts->mo.fi) {</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_fsm_inst_free(bts->mo.fi);</span><br><span style="color: hsl(120, 100%, 40%);">+            bts->mo.fi = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span>    return 0;</span><br><span> }</span><br><span> </span><br><span>@@ -236,8 +240,10 @@</span><br><span>    gsm_mo_init(&bts->site_mgr.mo, bts, NM_OC_SITE_MANAGER,</span><br><span>                   0xff, 0xff, 0xff);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      gsm_mo_init(&bts->mo, bts, NM_OC_BTS,</span><br><span style="color: hsl(0, 100%, 40%);">-                    bts->nr, 0xff, 0xff);</span><br><span style="color: hsl(120, 100%, 40%);">+      bts->mo.fi = osmo_fsm_inst_alloc(&nm_bts_fsm, bts, bts,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         LOGL_INFO, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo_fsm_inst_update_id_f(bts->mo.fi, "bts%d", bts->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+      gsm_mo_init(&bts->mo, bts, NM_OC_BTS, bts->nr, 0xff, 0xff);</span><br><span> </span><br><span>    for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) {</span><br><span>             bts->gprs.nsvc[i].bts = bts;</span><br><span>@@ -347,9 +353,9 @@</span><br><span> </span><br><span>    /* Start with the site manager */</span><br><span>    oml_mo_state_init(&bts->site_mgr.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED);</span><br><span style="color: hsl(120, 100%, 40%);">+   oml_mo_state_init(&bts->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* set BTS to dependency */</span><br><span style="color: hsl(0, 100%, 40%);">-     oml_mo_state_init(&bts->mo, -1, NM_AVSTATE_DEPENDENCY);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* set BTS attr to dependency */</span><br><span>     oml_mo_state_init(&bts->gprs.nse.mo, -1, NM_AVSTATE_DEPENDENCY);</span><br><span>      oml_mo_state_init(&bts->gprs.cell.mo, -1, NM_AVSTATE_DEPENDENCY);</span><br><span>     oml_mo_state_init(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_DEPENDENCY);</span><br><span>@@ -412,7 +418,7 @@</span><br><span> </span><br><span>        /* BTS SITE MGR becomes Offline (tx SW ACT Report), BTS is DEPENDENCY */</span><br><span>     osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_SW_ACT, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-     oml_tx_state_changed(&bts->mo);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_SW_ACT, NULL);</span><br><span> </span><br><span>       /* those should all be in DEPENDENCY */</span><br><span>      oml_tx_state_changed(&bts->gprs.nse.mo);</span><br><span>diff --git a/src/common/nm_bts_fsm.c b/src/common/nm_bts_fsm.c</span><br><span>new file mode 100644</span><br><span>index 0000000..12f1a61</span><br><span>--- /dev/null</span><br><span>+++ b/src/common/nm_bts_fsm.c</span><br><span>@@ -0,0 +1,145 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* NM BTS FSM */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2020 by sysmocom - s.m.f.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Pau Espin Pedrol <pespin@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.</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 style="color: hsl(120, 100%, 40%);">+#include <errno.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <unistd.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/fsm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/tdef.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/protocol/gsm_12_21.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/gsm_data.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/bts_model.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/bts.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/rsl.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/nm_common_fsm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/phy_link.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define X(s) (1 << (s))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define nm_bts_fsm_state_chg(fi, NEXT_STATE) \</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_fsm_inst_state_chg(fi, NEXT_STATE, 0, 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%);">+// FSM STATE ACTIONS</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 st_op_disabled_notinstalled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_bts *bts = (struct gsm_bts *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->mo.opstart_success = false;</span><br><span style="color: hsl(120, 100%, 40%);">+   oml_mo_state_chg(&bts->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED);</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 st_op_disabled_notinstalled(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gsm_bts *bts = (struct gsm_bts *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (event) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case NM_EV_SW_ACT:</span><br><span style="color: hsl(120, 100%, 40%);">+            oml_mo_tx_sw_act_rep(&bts->mo);</span><br><span style="color: hsl(120, 100%, 40%);">+                nm_bts_fsm_state_chg(fi, NM_BTS_ST_OP_DISABLED_OFFLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span style="color: hsl(120, 100%, 40%);">+       default:</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMO_ASSERT(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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void st_op_disabled_offline_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts *bts = (struct gsm_bts *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->mo.opstart_success = false;</span><br><span style="color: hsl(120, 100%, 40%);">+   oml_mo_state_chg(&bts->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE);</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 st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gsm_bts *bts = (struct gsm_bts *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (event) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case NM_EV_OPSTART_ACK:</span><br><span style="color: hsl(120, 100%, 40%);">+               bts->mo.opstart_success = true;</span><br><span style="color: hsl(120, 100%, 40%);">+            oml_mo_opstart_ack(&bts->mo);</span><br><span style="color: hsl(120, 100%, 40%);">+          nm_bts_fsm_state_chg(fi, NM_BTS_ST_OP_ENABLED);</span><br><span style="color: hsl(120, 100%, 40%);">+               break; /* check statechg below */</span><br><span style="color: hsl(120, 100%, 40%);">+     case NM_EV_OPSTART_NACK:</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->mo.opstart_success = false;</span><br><span style="color: hsl(120, 100%, 40%);">+           oml_mo_opstart_nack(&bts->mo, (int)(intptr_t)data);</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       default:</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMO_ASSERT(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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void st_op_enabled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_bts *bts = (struct gsm_bts *)fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+  oml_mo_state_chg(&bts->mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK);</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 st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data)</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 style="color: hsl(120, 100%, 40%);">+static struct osmo_fsm_state nm_bts_fsm_states[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+     [NM_BTS_ST_OP_DISABLED_NOTINSTALLED] = {</span><br><span style="color: hsl(120, 100%, 40%);">+              .in_event_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                      X(NM_EV_SW_ACT),</span><br><span style="color: hsl(120, 100%, 40%);">+              .out_state_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                     X(NM_BTS_ST_OP_DISABLED_OFFLINE),</span><br><span style="color: hsl(120, 100%, 40%);">+             .name = "DISABLED_NOTINSTALLED",</span><br><span style="color: hsl(120, 100%, 40%);">+            .onenter = st_op_disabled_notinstalled_on_enter,</span><br><span style="color: hsl(120, 100%, 40%);">+              .action = st_op_disabled_notinstalled,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+    [NM_BTS_ST_OP_DISABLED_OFFLINE] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .in_event_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                      X(NM_EV_OPSTART_ACK) |</span><br><span style="color: hsl(120, 100%, 40%);">+                        X(NM_EV_OPSTART_NACK),</span><br><span style="color: hsl(120, 100%, 40%);">+                .out_state_mask =</span><br><span style="color: hsl(120, 100%, 40%);">+                     X(NM_BTS_ST_OP_ENABLED),</span><br><span style="color: hsl(120, 100%, 40%);">+              .name = "DISABLED_OFFLINE",</span><br><span style="color: hsl(120, 100%, 40%);">+         .onenter = st_op_disabled_offline_on_enter,</span><br><span style="color: hsl(120, 100%, 40%);">+           .action = st_op_disabled_offline,</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+    [NM_BTS_ST_OP_ENABLED] = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .in_event_mask = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+           .out_state_mask = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+          .name = "ENABLED",</span><br><span style="color: hsl(120, 100%, 40%);">+          .onenter = st_op_enabled_on_enter,</span><br><span style="color: hsl(120, 100%, 40%);">+            .action = st_op_enabled,</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 style="color: hsl(120, 100%, 40%);">+struct osmo_fsm nm_bts_fsm = {</span><br><span style="color: hsl(120, 100%, 40%);">+      .name = "NM_BTS_OP",</span><br><span style="color: hsl(120, 100%, 40%);">+        .states = nm_bts_fsm_states,</span><br><span style="color: hsl(120, 100%, 40%);">+  .num_states = ARRAY_SIZE(nm_bts_fsm_states),</span><br><span style="color: hsl(120, 100%, 40%);">+  .event_names = nm_fsm_event_names,</span><br><span style="color: hsl(120, 100%, 40%);">+    .log_subsys = DOML,</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 __attribute__((constructor)) void nm_bts_fsm_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(osmo_fsm_register(&nm_bts_fsm) == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/osmo-bts-litecell15/oml.c b/src/osmo-bts-litecell15/oml.c</span><br><span>index 6ae0492..03f787b 100644</span><br><span>--- a/src/osmo-bts-litecell15/oml.c</span><br><span>+++ b/src/osmo-bts-litecell15/oml.c</span><br><span>@@ -1891,13 +1891,15 @@</span><br><span>  case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            rc = trx_init(obj);</span><br><span>          break;</span><br><span>       case NM_OC_CHANNEL:</span><br><span>          rc = ts_opstart(obj);</span><br><span>                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case NM_OC_BTS:</span><br><span>      case NM_OC_BASEB_TRANSC:</span><br><span>     case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>diff --git a/src/osmo-bts-oc2g/oml.c b/src/osmo-bts-oc2g/oml.c</span><br><span>index 8dda1e9..15513d1 100644</span><br><span>--- a/src/osmo-bts-oc2g/oml.c</span><br><span>+++ b/src/osmo-bts-oc2g/oml.c</span><br><span>@@ -1900,25 +1900,25 @@</span><br><span>     case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+         oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+                oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+               oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            rc = trx_init(obj);</span><br><span>          break;</span><br><span>       case NM_OC_CHANNEL:</span><br><span>          rc = ts_opstart(obj);</span><br><span>                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case NM_OC_BTS:</span><br><span>      case NM_OC_BASEB_TRANSC:</span><br><span>     case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>        case NM_OC_GPRS_NSVC:</span><br><span>                oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, -1);</span><br><span>                rc = oml_mo_opstart_ack(mo);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (mo->obj_class == NM_OC_BTS) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-                   oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-                  oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-                 oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-              }</span><br><span>            break;</span><br><span>       default:</span><br><span>             rc = oml_mo_opstart_nack(mo, NM_NACK_OBJCLASS_NOTSUPP);</span><br><span>diff --git a/src/osmo-bts-octphy/l1_oml.c b/src/osmo-bts-octphy/l1_oml.c</span><br><span>index be84466..2062be3 100644</span><br><span>--- a/src/osmo-bts-octphy/l1_oml.c</span><br><span>+++ b/src/osmo-bts-octphy/l1_oml.c</span><br><span>@@ -1770,6 +1770,9 @@</span><br><span>         case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            rc = trx_init(obj);</span><br><span>          break;</span><br><span>@@ -1777,7 +1780,6 @@</span><br><span>               ts = (struct gsm_bts_trx_ts*) obj;</span><br><span>           rc = ts_connect_as(ts, ts->pchan, pchan_act_compl_cb, NULL);</span><br><span>              break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case NM_OC_BTS:</span><br><span>      case NM_OC_BASEB_TRANSC:</span><br><span>     case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>diff --git a/src/osmo-bts-omldummy/bts_model.c b/src/osmo-bts-omldummy/bts_model.c</span><br><span>index 6762c4e..ad007ec 100644</span><br><span>--- a/src/osmo-bts-omldummy/bts_model.c</span><br><span>+++ b/src/osmo-bts-omldummy/bts_model.c</span><br><span>@@ -130,6 +130,9 @@</span><br><span>         case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            trx = (struct gsm_bts_trx*) obj;</span><br><span>             /* Mark Dependency TS as Offline (ready to be Opstarted) */</span><br><span>@@ -144,7 +147,6 @@</span><br><span>            break;</span><br><span>       case NM_OC_CHANNEL:</span><br><span>  case NM_OC_BASEB_TRANSC:</span><br><span style="color: hsl(0, 100%, 40%);">-        case NM_OC_BTS:</span><br><span>      case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>        case NM_OC_GPRS_NSVC:</span><br><span>diff --git a/src/osmo-bts-sysmo/oml.c b/src/osmo-bts-sysmo/oml.c</span><br><span>index 7e77a99..7d9aa2a 100644</span><br><span>--- a/src/osmo-bts-sysmo/oml.c</span><br><span>+++ b/src/osmo-bts-sysmo/oml.c</span><br><span>@@ -1777,25 +1777,25 @@</span><br><span>         case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+         oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+                oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+               oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            rc = trx_init(obj);</span><br><span>          break;</span><br><span>       case NM_OC_CHANNEL:</span><br><span>          rc = ts_opstart(obj);</span><br><span>                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case NM_OC_BTS:</span><br><span>      case NM_OC_BASEB_TRANSC:</span><br><span>     case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>        case NM_OC_GPRS_NSVC:</span><br><span>                oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, -1);</span><br><span>                rc = oml_mo_opstart_ack(mo);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (mo->obj_class == NM_OC_BTS) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-                   oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-                  oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-                 oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK);</span><br><span style="color: hsl(0, 100%, 40%);">-              }</span><br><span>            break;</span><br><span>       default:</span><br><span>             rc = oml_mo_opstart_nack(mo, NM_NACK_OBJCLASS_NOTSUPP);</span><br><span>diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c</span><br><span>index 6aa77cb..916f6a2 100644</span><br><span>--- a/src/osmo-bts-trx/l1_if.c</span><br><span>+++ b/src/osmo-bts-trx/l1_if.c</span><br><span>@@ -620,12 +620,14 @@</span><br><span>         case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            /* activate transceiver */</span><br><span>           rc = trx_init(obj);</span><br><span>          break;</span><br><span>       case NM_OC_CHANNEL:</span><br><span style="color: hsl(0, 100%, 40%);">-     case NM_OC_BTS:</span><br><span>      case NM_OC_BASEB_TRANSC:</span><br><span>     case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>diff --git a/src/osmo-bts-virtual/bts_model.c b/src/osmo-bts-virtual/bts_model.c</span><br><span>index 4aedff4..9ba632c 100644</span><br><span>--- a/src/osmo-bts-virtual/bts_model.c</span><br><span>+++ b/src/osmo-bts-virtual/bts_model.c</span><br><span>@@ -147,6 +147,9 @@</span><br><span>     case NM_OC_SITE_MANAGER:</span><br><span>             rc = osmo_fsm_inst_dispatch(bts->site_mgr.mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NM_OC_BTS:</span><br><span style="color: hsl(120, 100%, 40%);">+               rc = osmo_fsm_inst_dispatch(bts->mo.fi, NM_EV_OPSTART_ACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span>       case NM_OC_RADIO_CARRIER:</span><br><span>            trx = (struct gsm_bts_trx*) obj;</span><br><span>             /* Mark Dependency TS as Offline (ready to be Opstarted) */</span><br><span>@@ -161,7 +164,6 @@</span><br><span>            break;</span><br><span>       case NM_OC_CHANNEL:</span><br><span>  case NM_OC_BASEB_TRANSC:</span><br><span style="color: hsl(0, 100%, 40%);">-        case NM_OC_BTS:</span><br><span>      case NM_OC_GPRS_NSE:</span><br><span>         case NM_OC_GPRS_CELL:</span><br><span>        case NM_OC_GPRS_NSVC:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/20409">change 20409</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/+/20409"/><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: Iae631bcc7acdf955296b124707e42d5e565af186 </div>
<div style="display:none"> Gerrit-Change-Number: 20409 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </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-MessageType: merged </div>