pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-bts/+/32240 )


Change subject: Move GPRS NSE under BTS SiteMgr
......................................................................

Move GPRS NSE under BTS SiteMgr

As per ipaccess expectancies and following TS 12.21.

Change-Id: If44d8f256cab7b2660900cedfb0ed9fe67eb3420
---
M include/osmo-bts/bts.h
M include/osmo-bts/bts_sm.h
M src/common/bts.c
M src/common/bts_sm.c
M src/common/nm_bts_sm_fsm.c
M src/common/nm_gprs_cell_fsm.c
M src/common/nm_gprs_nse_fsm.c
M src/common/nm_gprs_nsvc_fsm.c
M src/common/oml.c
M src/common/pcu_sock.c
M src/common/vty.c
11 files changed, 89 insertions(+), 65 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/40/32240/1

diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h
index b792fe9..6b5fe6f 100644
--- a/include/osmo-bts/bts.h
+++ b/include/osmo-bts/bts.h
@@ -119,27 +119,6 @@
        } pf;
 };

-/* GPRS NSVC; ip.access specific NM Object */
-struct gsm_gprs_nse;
-struct gsm_gprs_nsvc {
-       struct gsm_abis_mo mo;
-       struct gsm_gprs_nse *nse;
-       /* data read via VTY config file, to configure the BTS
-        * via OML from BSC */
-       int id;
-       uint16_t nsvci;
-       struct osmo_sockaddr local;     /* on the BTS */
-       struct osmo_sockaddr remote;    /* on the SGSN */
-};
-
-/* GPRS NSE; ip.access specific NM Object */
-struct gsm_gprs_nse {
-       struct gsm_abis_mo mo;
-       uint16_t nsei;
-       uint8_t timer[7];
-       struct gsm_gprs_nsvc nsvc[2];
-};
-
 /* GPRS CELL; ip.access specific NM Object */
 struct gsm_gprs_cell {
        struct gsm_abis_mo mo;
@@ -236,7 +215,6 @@

        /* Not entirely sure how ip.access specific this is */
        struct {
-               struct gsm_gprs_nse nse;
                struct gsm_gprs_cell cell;
                uint8_t rac;
        } gprs;
@@ -394,11 +372,6 @@
 #define GSM_BTS_HAS_SI(bts, i) ((bts)->si_valid & (1 << i))
 #define GSM_BTS_SI(bts, i)     (void *)((bts)->si_buf[i][0])

-static inline struct gsm_bts *gsm_gprs_nse_get_bts(struct gsm_gprs_nse *nse)
-{
-       return (struct gsm_bts *)container_of(nse, struct gsm_bts, gprs.nse);
-}
-
 static inline struct gsm_bts *gsm_gprs_cell_get_bts(struct gsm_gprs_cell *cell)
 {
        return (struct gsm_bts *)container_of(cell, struct gsm_bts, gprs.cell);
diff --git a/include/osmo-bts/bts_sm.h b/include/osmo-bts/bts_sm.h
index 60ee87c..3106115 100644
--- a/include/osmo-bts/bts_sm.h
+++ b/include/osmo-bts/bts_sm.h
@@ -1,12 +1,36 @@
 #pragma once

 #include <osmocom/core/linuxlist.h>
+#include <osmocom/core/socket.h>
 #include <osmocom/gsm/gsm23003.h>

 #include <osmo-bts/oml.h>

 struct pcu_sock_state;

+/* GPRS NSVC; ip.access specific NM Object */
+struct gsm_gprs_nse;
+struct gsm_gprs_nsvc {
+       struct gsm_abis_mo mo;
+       struct gsm_gprs_nse *nse;
+       /* data read via VTY config file, to configure the BTS
+        * via OML from BSC */
+       int id;
+       uint16_t nsvci;
+       struct osmo_sockaddr local;     /* on the BTS */
+       struct osmo_sockaddr remote;    /* on the SGSN */
+};
+
+/* GPRS NSE; ip.access specific NM Object */
+struct gsm_gprs_nse {
+       struct gsm_abis_mo mo;
+       uint16_t nsei;
+       uint8_t timer[7];
+       struct gsm_gprs_nsvc nsvc[2];
+};
+
+struct gsm_bts *gsm_gprs_nse_get_bts(const struct gsm_gprs_nse *nse);
+
 /* BTS Site Manager */
 struct gsm_bts_sm {
        struct gsm_abis_mo mo;
@@ -14,6 +38,9 @@
        unsigned int num_bts;
        struct osmo_plmn_id plmn;
        struct pcu_sock_state *pcu_state;
+       struct {
+               struct gsm_gprs_nse nse;
+       } gprs;
 };

 extern struct gsm_bts_sm *g_bts_sm;
diff --git a/src/common/bts.c b/src/common/bts.c
index a7178a2..0dd830a 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -145,7 +145,6 @@
        {}
 };

-static const uint8_t bts_nse_timer_default[] = { 3, 3, 3, 3, 30, 3, 10 };
 static const uint8_t bts_cell_timer_default[] =
                                { 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 };
 static const struct gprs_rlc_cfg rlc_cfg_default = {
@@ -226,8 +225,6 @@
 struct gsm_bts *gsm_bts_alloc(struct gsm_bts_sm *bts_sm, uint8_t bts_num)
 {
        struct gsm_bts *bts = talloc_zero(bts_sm, struct gsm_bts);
-       struct gsm_gprs_nse *nse = &bts->gprs.nse;
-       int i;

        if (!bts)
                return NULL;
@@ -256,13 +253,6 @@
        osmo_fsm_inst_update_id_f(bts->mo.fi, "bts%d", bts->nr);
        gsm_mo_init(&bts->mo, bts, NM_OC_BTS, bts->nr, 0xff, 0xff);

-       /* NM GPRS NSE */
-       nse->mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts, nse,
-                                                 LOGL_INFO, NULL);
-       osmo_fsm_inst_update_id_f(nse->mo.fi, "gprs_nse%d", bts->nr);
-       gsm_mo_init(&nse->mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff);
-       memcpy(&nse->timer, bts_nse_timer_default, sizeof(nse->timer));
-
        /* NM GPRS CELL */
        bts->gprs.cell.mo.fi = osmo_fsm_inst_alloc(&nm_gprs_cell_fsm, bts, 
&bts->gprs.cell,
                                                  LOGL_INFO, NULL);
@@ -271,18 +261,6 @@
        memcpy(&bts->gprs.cell.rlc_cfg, &rlc_cfg_default, 
sizeof(bts->gprs.cell.rlc_cfg));
        memcpy(&bts->gprs.cell.timer, bts_cell_timer_default, 
sizeof(bts->gprs.cell.timer));

-       /* NM GPRS NSVCs */
-       for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) {
-               struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i];
-               nsvc->nse = nse;
-               nsvc->id = i;
-               nsvc->mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nsvc_fsm, bts, nsvc,
-                                                LOGL_INFO, NULL);
-               osmo_fsm_inst_update_id_f(nsvc->mo.fi, "gprs_nsvc%d-%d",
-                                         nse->mo.obj_inst.bts_nr, i);
-               gsm_mo_init(&nsvc->mo, bts, NM_OC_GPRS_NSVC, 
nse->mo.obj_inst.bts_nr, i, 0xff);
-       }
-
        /* create our primary TRX. It will be initialized during bts_init() */
        bts->c0 = gsm_bts_trx_alloc(bts);
        if (!bts->c0) {
@@ -371,12 +349,7 @@

        /* Start with the BTS */
        oml_mo_state_init(&bts->mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);
-       oml_mo_state_init(&bts->gprs.nse.mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);
        oml_mo_state_init(&bts->gprs.cell.mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);
-       for (i = 0; i < ARRAY_SIZE(bts->gprs.nse.nsvc); i++) {
-               struct gsm_gprs_nsvc *nsvc = &bts->gprs.nse.nsvc[i];
-               oml_mo_state_init(&nsvc->mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);
-       }

        /* allocate a talloc pool for ORTP to ensure it doesn't have to go back
         * to the libc malloc all the time */
diff --git a/src/common/bts_sm.c b/src/common/bts_sm.c
index a5ddd3a..4450cba 100644
--- a/src/common/bts_sm.c
+++ b/src/common/bts_sm.c
@@ -29,6 +29,13 @@

 struct gsm_bts_sm *g_bts_sm;

+static const uint8_t nse_timer_default[] = { 3, 3, 3, 3, 30, 3, 10 };
+
+struct gsm_bts *gsm_gprs_nse_get_bts(const struct gsm_gprs_nse *nse)
+{
+       return gsm_bts_num(g_bts_sm, nse->mo.obj_inst.bts_nr);
+}
+
 static int gsm_bts_sm_talloc_destructor(struct gsm_bts_sm *bts_sm)
 {
        struct gsm_bts *bts;
@@ -47,6 +54,8 @@
 struct gsm_bts_sm *gsm_bts_sm_alloc(void *talloc_ctx)
 {
        struct gsm_bts_sm *bts_sm = talloc_zero(talloc_ctx, struct gsm_bts_sm);
+       struct gsm_gprs_nse *nse = &bts_sm->gprs.nse;
+       unsigned int i;

        if (!bts_sm)
                return NULL;
@@ -60,8 +69,28 @@
                                            LOGL_INFO, "bts_sm");
        gsm_mo_init(&bts_sm->mo, NULL, NM_OC_SITE_MANAGER,
                    0xff, 0xff, 0xff);
-
        oml_mo_state_init(&bts_sm->mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);

+       /* NM GPRS NSE */
+       nse->mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts_sm, nse,
+                                                 LOGL_INFO, NULL);
+       osmo_fsm_inst_update_id_f(nse->mo.fi, "gprs_nse%d", 0);
+       gsm_mo_init(&nse->mo, NULL, NM_OC_GPRS_NSE, 0, 0xff, 0xff);
+       oml_mo_state_init(&nse->mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);
+       memcpy(&nse->timer, nse_timer_default, sizeof(nse->timer));
+
+       /* NM GPRS NSVCs */
+       for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) {
+               struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i];
+               nsvc->nse = nse;
+               nsvc->id = i;
+               nsvc->mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nsvc_fsm, bts_sm, 
nsvc,
+                                                LOGL_INFO, NULL);
+               osmo_fsm_inst_update_id_f(nsvc->mo.fi, "gprs_nsvc%d-%d",
+                                         nse->mo.obj_inst.bts_nr, i);
+               gsm_mo_init(&nsvc->mo, NULL, NM_OC_GPRS_NSVC, 
nse->mo.obj_inst.bts_nr, i, 0xff);
+               oml_mo_state_init(&nsvc->mo, NM_OPSTATE_DISABLED, 
NM_AVSTATE_NOT_INSTALLED);
+       }
+
        return bts_sm;
 }
diff --git a/src/common/nm_bts_sm_fsm.c b/src/common/nm_bts_sm_fsm.c
index 586cfb1..01f5f99 100644
--- a/src/common/nm_bts_sm_fsm.c
+++ b/src/common/nm_bts_sm_fsm.c
@@ -46,8 +46,8 @@
 static void ev_dispatch_children(struct gsm_bts_sm *site_mgr, uint32_t event)
 {
        struct gsm_bts *bts;
+       osmo_fsm_inst_dispatch(site_mgr->gprs.nse.mo.fi, event, NULL);
        llist_for_each_entry(bts, &site_mgr->bts_list, list) {
-               osmo_fsm_inst_dispatch(bts->gprs.nse.mo.fi, event, NULL);
                osmo_fsm_inst_dispatch(bts->mo.fi, event, NULL);
        }
 }
diff --git a/src/common/nm_gprs_cell_fsm.c b/src/common/nm_gprs_cell_fsm.c
index 036df3e..aaebe59 100644
--- a/src/common/nm_gprs_cell_fsm.c
+++ b/src/common/nm_gprs_cell_fsm.c
@@ -32,6 +32,7 @@
 #include <osmo-bts/gsm_data.h>
 #include <osmo-bts/bts_model.h>
 #include <osmo-bts/bts.h>
+#include <osmo-bts/bts_sm.h>
 #include <osmo-bts/rsl.h>
 #include <osmo-bts/nm_common_fsm.h>

@@ -44,7 +45,7 @@
 static bool gprs_cell_can_be_enabled(struct gsm_gprs_cell *cell)
 {
        struct gsm_bts *bts = gsm_gprs_cell_get_bts(cell);
-       return bts->gprs.nse.mo.nm_state.operational == NM_OPSTATE_ENABLED;
+       return bts->site_mgr->gprs.nse.mo.nm_state.operational == 
NM_OPSTATE_ENABLED;
 }


diff --git a/src/common/nm_gprs_nse_fsm.c b/src/common/nm_gprs_nse_fsm.c
index 4f02078..fa9c651 100644
--- a/src/common/nm_gprs_nse_fsm.c
+++ b/src/common/nm_gprs_nse_fsm.c
@@ -32,6 +32,7 @@
 #include <osmo-bts/gsm_data.h>
 #include <osmo-bts/bts_model.h>
 #include <osmo-bts/bts.h>
+#include <osmo-bts/bts_sm.h>
 #include <osmo-bts/rsl.h>
 #include <osmo-bts/nm_common_fsm.h>
 #include <osmo-bts/phy_link.h>
diff --git a/src/common/nm_gprs_nsvc_fsm.c b/src/common/nm_gprs_nsvc_fsm.c
index 5a7967d..05d7ff1 100644
--- a/src/common/nm_gprs_nsvc_fsm.c
+++ b/src/common/nm_gprs_nsvc_fsm.c
@@ -32,6 +32,7 @@
 #include <osmo-bts/gsm_data.h>
 #include <osmo-bts/bts_model.h>
 #include <osmo-bts/bts.h>
+#include <osmo-bts/bts_sm.h>
 #include <osmo-bts/rsl.h>
 #include <osmo-bts/nm_common_fsm.h>

diff --git a/src/common/oml.c b/src/common/oml.c
index 937fe73..227158c 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -1759,15 +1759,19 @@
                mo = &g_bts_sm->mo;
                break;
        case NM_OC_GPRS_NSE:
-               mo = &bts->gprs.nse.mo;
+               if (obj_inst->bts_nr > 0)
+                       return NULL;
+               mo = &g_bts_sm->gprs.nse.mo;
                break;
        case NM_OC_GPRS_CELL:
                mo = &bts->gprs.cell.mo;
                break;
        case NM_OC_GPRS_NSVC:
-               if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nse.nsvc))
+               if (obj_inst->bts_nr > 0)
                        return NULL;
-               mo = &bts->gprs.nse.nsvc[obj_inst->trx_nr].mo;
+               if (obj_inst->trx_nr >= ARRAY_SIZE(g_bts_sm->gprs.nse.nsvc))
+                       return NULL;
+               mo = &g_bts_sm->gprs.nse.nsvc[obj_inst->trx_nr].mo;
                break;
        }
        return mo;
@@ -1826,15 +1830,19 @@
                obj = g_bts_sm;
                break;
        case NM_OC_GPRS_NSE:
-               obj = &bts->gprs.nse;
+               if (obj_inst->bts_nr > 0)
+                       return NULL;
+               obj = &g_bts_sm->gprs.nse;
                break;
        case NM_OC_GPRS_CELL:
                obj = &bts->gprs.cell;
                break;
        case NM_OC_GPRS_NSVC:
-               if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nse.nsvc))
+               if (obj_inst->bts_nr > 0)
                        return NULL;
-               obj = &bts->gprs.nse.nsvc[obj_inst->trx_nr];
+               if (obj_inst->trx_nr >= ARRAY_SIZE(g_bts_sm->gprs.nse.nsvc))
+                       return NULL;
+               obj = &g_bts_sm->gprs.nse.nsvc[obj_inst->trx_nr];
                break;
        }
        return obj;
diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c
index 36520fb..2946607 100644
--- a/src/common/pcu_sock.c
+++ b/src/common/pcu_sock.c
@@ -242,9 +242,9 @@

        LOGP(DPCU, LOGL_INFO, "Sending info\n");

+       nse = &g_bts_sm->gprs.nse;
        /* FIXME: allow multiple BTS */
        bts = llist_entry(g_bts_sm->bts_list.next, struct gsm_bts, list);
-       nse = &bts->gprs.nse;
        rlcc = &bts->gprs.cell.rlc_cfg;

        msg = pcu_msgb_alloc(PCU_IF_MSG_INFO_IND, bts->nr);
diff --git a/src/common/vty.c b/src/common/vty.c
index 051ad92..fd28828 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -1352,7 +1352,7 @@
 static void gprs_dump_vty(struct vty *vty, const struct gsm_bts *bts)
 {
        unsigned int i;
-       const struct gsm_gprs_nse *nse = &bts->gprs.nse;
+       const struct gsm_gprs_nse *nse = &bts->site_mgr->gprs.nse;
 
        /* GPRS parameters received from the BSC */
        vty_out(vty, "BTS %u, RAC %u, NSEI %u, BVCI %u%s",

--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/32240
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: If44d8f256cab7b2660900cedfb0ed9fe67eb3420
Gerrit-Change-Number: 32240
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to