aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-04-05 17:11:19 +0200
committerpespin <pespin@sysmocom.de>2023-04-06 10:28:22 +0000
commit9c4b472179715ba64e71fda8d76d774ee023c43e (patch)
tree38ded045985092a4b40c1de52b55f1886aa9afef
parent10d5499d0375f596b8b1cea0d8e571512fb2fb2b (diff)
Move NSVC structs to be part of NSE
The NSVCs exist inside an NSE. Rearrange data model to have proper relations. Change-Id: I1cfe9366594836c622673d461ab8b2edd1a2b58a
-rw-r--r--include/osmo-bts/bts.h7
-rw-r--r--src/common/bts.c28
-rw-r--r--src/common/oml.c10
-rw-r--r--src/common/pcu_sock.c12
-rw-r--r--src/common/vty.c9
5 files changed, 35 insertions, 31 deletions
diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h
index 03a29e4e..6a4d23e2 100644
--- a/include/osmo-bts/bts.h
+++ b/include/osmo-bts/bts.h
@@ -125,9 +125,10 @@ struct gsm_bts_sm {
};
/* GPRS NSVC; ip.access specific NM Object */
-struct gsm_bts_gprs_nsvc {
+struct gsm_gprs_nse;
+struct gsm_gprs_nsvc {
struct gsm_abis_mo mo;
- struct gsm_bts *bts;
+ struct gsm_gprs_nse *nse;
/* data read via VTY config file, to configure the BTS
* via OML from BSC */
int id;
@@ -141,6 +142,7 @@ 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 */
@@ -241,7 +243,6 @@ struct gsm_bts {
struct {
struct gsm_gprs_nse nse;
struct gsm_gprs_cell cell;
- struct gsm_bts_gprs_nsvc nsvc[2];
uint8_t rac;
} gprs;
diff --git a/src/common/bts.c b/src/common/bts.c
index 5845fb28..23e4456f 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -232,6 +232,7 @@ static int gsm_bts_talloc_destructor(struct gsm_bts *bts)
struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num)
{
struct gsm_bts *bts = talloc_zero(ctx, struct gsm_bts);
+ struct gsm_gprs_nse *nse = &bts->gprs.nse;
int i;
if (!bts)
@@ -264,12 +265,11 @@ struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num)
gsm_mo_init(&bts->mo, bts, NM_OC_BTS, bts->nr, 0xff, 0xff);
/* NM GPRS NSE */
- bts->gprs.nse.mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts, &bts->gprs.nse,
+ nse->mo.fi = osmo_fsm_inst_alloc(&nm_gprs_nse_fsm, bts, nse,
LOGL_INFO, NULL);
- osmo_fsm_inst_update_id_f(bts->gprs.nse.mo.fi, "gprs_nse%d", bts->nr);
- gsm_mo_init(&bts->gprs.nse.mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff);
- memcpy(&bts->gprs.nse.timer, bts_nse_timer_default,
- sizeof(bts->gprs.nse.timer));
+ 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,
@@ -279,11 +279,11 @@ struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num)
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));
- for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) {
- bts->gprs.nsvc[i].bts = bts;
- bts->gprs.nsvc[i].id = i;
- gsm_mo_init(&bts->gprs.nsvc[i].mo, bts, NM_OC_GPRS_NSVC,
- bts->nr, i, 0xff);
+ for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) {
+ struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i];
+ nsvc->nse = nse;
+ nsvc->id = 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() */
@@ -384,8 +384,8 @@ int bts_init(struct gsm_bts *bts)
oml_mo_state_init(&bts->gprs.cell.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED);
/* set BTS attr to dependency */
- oml_mo_state_init(&bts->gprs.nsvc[0].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY);
- oml_mo_state_init(&bts->gprs.nsvc[1].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY);
+ oml_mo_state_init(&bts->gprs.nse.nsvc[0].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY);
+ oml_mo_state_init(&bts->gprs.nse.nsvc[1].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY);
/* allocate a talloc pool for ORTP to ensure it doesn't have to go back
* to the libc malloc all the time */
@@ -460,8 +460,8 @@ int bts_link_estab(struct gsm_bts *bts)
osmo_fsm_inst_dispatch(bts->gprs.nse.mo.fi, NM_EV_SW_ACT, NULL);
/* those should all be in DEPENDENCY */
- oml_tx_state_changed(&bts->gprs.nsvc[0].mo);
- oml_tx_state_changed(&bts->gprs.nsvc[1].mo);
+ oml_tx_state_changed(&bts->gprs.nse.nsvc[0].mo);
+ oml_tx_state_changed(&bts->gprs.nse.nsvc[1].mo);
/* All other objects start off-line until the BTS Model code says otherwise */
for (i = 0; i < bts->num_trx; i++) {
diff --git a/src/common/oml.c b/src/common/oml.c
index e23a0876..fd8c22c2 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -1373,7 +1373,7 @@ static int oml_ipa_mo_set_attr_cell(void *obj,
return 0;
}
-static int oml_ipa_mo_set_attr_nsvc(struct gsm_bts_gprs_nsvc *nsvc,
+static int oml_ipa_mo_set_attr_nsvc(struct gsm_gprs_nsvc *nsvc,
const struct tlv_parsed *tp)
{
if (TLVP_PRES_LEN(tp, NM_ATT_IPACC_NSVCI, 2))
@@ -1746,9 +1746,9 @@ gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
mo = &bts->gprs.cell.mo;
break;
case NM_OC_GPRS_NSVC:
- if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
+ if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nse.nsvc))
return NULL;
- mo = &bts->gprs.nsvc[obj_inst->trx_nr].mo;
+ mo = &bts->gprs.nse.nsvc[obj_inst->trx_nr].mo;
break;
}
return mo;
@@ -1813,9 +1813,9 @@ gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
obj = &bts->gprs.cell;
break;
case NM_OC_GPRS_NSVC:
- if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
+ if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nse.nsvc))
return NULL;
- obj = &bts->gprs.nsvc[obj_inst->trx_nr];
+ obj = &bts->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 5e4b06b7..bce067a4 100644
--- a/src/common/pcu_sock.c
+++ b/src/common/pcu_sock.c
@@ -239,11 +239,13 @@ int pcu_tx_info_ind(void)
struct gprs_rlc_cfg *rlcc;
struct gsm_bts_trx *trx;
int i;
+ struct gsm_gprs_nse *nse;
LOGP(DPCU, LOGL_INFO, "Sending info\n");
/* FIXME: allow multiple BTS */
bts = llist_entry(net->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);
@@ -271,8 +273,8 @@ int pcu_tx_info_ind(void)
info_ind->rac = bts->gprs.rac;
/* NSE */
- info_ind->nsei = bts->gprs.nse.nsei;
- memcpy(info_ind->nse_timer, bts->gprs.nse.timer, 7);
+ info_ind->nsei = nse->nsei;
+ memcpy(info_ind->nse_timer, nse->timer, 7);
memcpy(info_ind->cell_timer, bts->gprs.cell.timer, 11);
/* cell attributes */
@@ -323,8 +325,8 @@ int pcu_tx_info_ind(void)
info_ind->initial_mcs = rlcc->initial_mcs;
/* NSVC */
- for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) {
- const struct gsm_bts_gprs_nsvc *nsvc = &bts->gprs.nsvc[i];
+ for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) {
+ const struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i];
info_ind->nsvci[i] = nsvc->nsvci;
/* PCUIF beauty: the NSVC addresses are sent in the network byte order,
* while the port numbers need to be send in the host order. Sigh. */
@@ -363,7 +365,7 @@ static int pcu_if_signal_cb(unsigned int subsys, unsigned int signal,
void *hdlr_data, void *signal_data)
{
struct gsm_network *net = &bts_gsmnet;
- struct gsm_bts_gprs_nsvc *nsvc;
+ struct gsm_gprs_nsvc *nsvc;
struct gsm_bts *bts;
struct gsm48_system_information_type_3 *si3;
int id;
diff --git a/src/common/vty.c b/src/common/vty.c
index 1ef79f06..bc2afb65 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -1361,21 +1361,22 @@ DEFUN(show_bts, show_bts_cmd, "show bts [<0-255>]",
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;
/* GPRS parameters received from the BSC */
vty_out(vty, "BTS %u, RAC %u, NSEI %u, BVCI %u%s",
bts->nr, bts->gprs.rac,
- bts->gprs.nse.nsei,
+ nse->nsei,
bts->gprs.cell.bvci,
VTY_NEWLINE);
vty_out(vty, " Cell NM state: ");
net_dump_nmstate(vty, &bts->gprs.cell.mo.nm_state);
vty_out(vty, " NSE NM state: ");
- net_dump_nmstate(vty, &bts->gprs.nse.mo.nm_state);
+ net_dump_nmstate(vty, &nse->mo.nm_state);
- for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) {
- const struct gsm_bts_gprs_nsvc *nsvc = &bts->gprs.nsvc[i];
+ for (i = 0; i < ARRAY_SIZE(nse->nsvc); i++) {
+ const struct gsm_gprs_nsvc *nsvc = &nse->nsvc[i];
vty_out(vty, " NSVC%u (NSVCI %u) NM state: ", i, nsvc->nsvci);
net_dump_nmstate(vty, &nsvc->mo.nm_state);