aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-virtual/bts_model.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osmo-bts-virtual/bts_model.c')
-rw-r--r--src/osmo-bts-virtual/bts_model.c65
1 files changed, 43 insertions, 22 deletions
diff --git a/src/osmo-bts-virtual/bts_model.c b/src/osmo-bts-virtual/bts_model.c
index 1eea26b1..fbeafa3c 100644
--- a/src/osmo-bts-virtual/bts_model.c
+++ b/src/osmo-bts-virtual/bts_model.c
@@ -22,6 +22,7 @@
#include <osmocom/core/talloc.h>
#include <osmocom/core/utils.h>
+#include <osmocom/codec/codec.h>
#include <osmo-bts/gsm_data.h>
#include <osmo-bts/phy_link.h>
@@ -34,6 +35,20 @@
#include <osmo-bts/handover.h>
#include <osmo-bts/l1sap.h>
+// TODO: check if dummy method is sufficient, else implement
+int bts_model_lchan_deactivate(struct gsm_lchan *lchan)
+{
+ return -1;
+}
+
+// TODO: check if dummy method is sufficient, else implement
+int osmo_amr_rtp_dec(const uint8_t *rtppayload, int payload_len, uint8_t *cmr,
+ int8_t *cmi, enum osmo_amr_type *ft,
+ enum osmo_amr_quality *bfi, int8_t *sti)
+{
+ return -1;
+}
+
int bts_model_trx_close(struct gsm_bts_trx *trx)
{
return 0;
@@ -45,14 +60,29 @@ int bts_model_adjst_ms_pwr(struct gsm_lchan *lchan)
}
int bts_model_check_oml(struct gsm_bts *bts, uint8_t msg_type,
- struct tlv_parsed *old_attr, struct tlv_parsed *new_attr,
- void *obj)
+ struct tlv_parsed *old_attr,
+ struct tlv_parsed *new_attr, void *obj)
{
return 0;
}
static uint8_t vbts_set_bts(struct gsm_bts *bts)
{
+ struct gsm_bts_trx *trx;
+ uint8_t tn;
+
+ llist_for_each_entry(trx, &bts->trx_list, list)
+ {
+ oml_mo_state_chg(&trx->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OK);
+ oml_mo_state_chg(&trx->bb_transc.mo, -1, NM_AVSTATE_OK);
+ for (tn = 0; tn < TRX_NR_TS; tn++) {
+ oml_mo_state_chg(&trx->ts[tn].mo, NM_OPSTATE_DISABLED,
+ NM_AVSTATE_DEPENDENCY);
+ }
+ // report availability of trx to the bts. this will trigger the rsl connection
+ oml_mo_tx_sw_act_rep(&trx->mo);
+ oml_mo_tx_sw_act_rep(&trx->bb_transc.mo);
+ }
return 0;
}
@@ -74,51 +104,43 @@ static uint8_t vbts_set_ts(struct gsm_bts_trx_ts *ts)
}
int bts_model_apply_oml(struct gsm_bts *bts, struct msgb *msg,
- struct tlv_parsed *new_attr, int kind, void *obj)
+ struct tlv_parsed *new_attr, int kind, void *obj)
{
struct abis_om_fom_hdr *foh = msgb_l3(msg);
int cause = 0;
switch (foh->msg_type) {
- case NM_MT_SET_BTS_ATTR:
+ case NM_MT_SET_BTS_ATTR: // 0x41
cause = vbts_set_bts(obj);
break;
case NM_MT_SET_RADIO_ATTR:
- cause = vbts_set_trx(obj);
+ cause = vbts_set_trx(obj); // 0x44
break;
- case NM_MT_SET_CHAN_ATTR:
+ case NM_MT_SET_CHAN_ATTR: // 0x47
cause = vbts_set_ts(obj);
break;
}
return oml_fom_ack_nack(msg, cause);
}
-int bts_model_opstart(struct gsm_bts *bts, struct gsm_abis_mo *mo,
- void *obj)
+// mo: the maintenance object
+int bts_model_opstart(struct gsm_bts *bts, struct gsm_abis_mo *mo, void *obj)
{
int rc;
switch (mo->obj_class) {
case NM_OC_RADIO_CARRIER:
case NM_OC_CHANNEL:
+ case NM_OC_SITE_MANAGER:
+ case NM_OC_BASEB_TRANSC:
+ case NM_OC_BTS:
oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK);
rc = oml_mo_opstart_ack(mo);
break;
- case NM_OC_BTS:
- case NM_OC_SITE_MANAGER:
- case NM_OC_BASEB_TRANSC:
+ // TODO: gprs support
case NM_OC_GPRS_NSE:
case NM_OC_GPRS_CELL:
case NM_OC_GPRS_NSVC:
- oml_mo_state_chg(mo, NM_OPSTATE_ENABLED, -1);
- rc = oml_mo_opstart_ack(mo);
- if (mo->obj_class == NM_OC_BTS) {
- oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_OK);
- oml_mo_state_chg(&bts->gprs.nse.mo, -1, NM_AVSTATE_OK);
- oml_mo_state_chg(&bts->gprs.cell.mo, -1, NM_AVSTATE_OK);
- oml_mo_state_chg(&bts->gprs.nsvc[0].mo, -1, NM_AVSTATE_OK);
- }
- break;
default:
rc = oml_mo_opstart_nack(mo, NM_NACK_OBJCLASS_NOTSUPP);
}
@@ -126,7 +148,7 @@ int bts_model_opstart(struct gsm_bts *bts, struct gsm_abis_mo *mo,
}
int bts_model_chg_adm_state(struct gsm_bts *bts, struct gsm_abis_mo *mo,
- void *obj, uint8_t adm_state)
+ void *obj, uint8_t adm_state)
{
mo->nm_state.administrative = adm_state;
return oml_mo_statechg_ack(mo);
@@ -137,7 +159,6 @@ int bts_model_trx_deact_rf(struct gsm_bts_trx *trx)
return 0;
}
-
int bts_model_change_power(struct gsm_bts_trx *trx, int p_trxout_mdBm)
{
return 0;