sysmo-bts: Ignore OPSTART on the TRX until we have seen SET ATTR
This commit is contained in:
parent
4450a1530c
commit
0f827275d7
|
@ -202,14 +202,40 @@ static int trx_init_compl_cb(struct msgb *l1_msg, void *data)
|
||||||
return opstart_compl_cb(l1_msg, &trx->mo);
|
return opstart_compl_cb(l1_msg, &trx->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int gsm_abis_mo_check_attr(const struct gsm_abis_mo *mo, uint8_t *attr_ids,
|
||||||
|
unsigned int num_attr_ids)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (!mo->nm_attr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; i < num_attr_ids; i++) {
|
||||||
|
if (!TLVP_PRESENT(mo->nm_attr, attr_ids[i]))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const uint8_t trx_rqd_attr[] = { NM_ATT_RF_MAXPOWR_R };
|
||||||
|
|
||||||
/* initialize the layer1 */
|
/* initialize the layer1 */
|
||||||
static int trx_init(struct gsm_bts_trx *trx)
|
static int trx_init(struct gsm_bts_trx *trx)
|
||||||
{
|
{
|
||||||
struct msgb *msg = l1p_msgb_alloc();
|
|
||||||
struct femtol1_hdl *fl1h = trx_femtol1_hdl(trx);
|
struct femtol1_hdl *fl1h = trx_femtol1_hdl(trx);
|
||||||
|
struct msgb *msg;
|
||||||
GsmL1_MphInitReq_t *mi_req;
|
GsmL1_MphInitReq_t *mi_req;
|
||||||
GsmL1_DeviceParam_t *dev_par;
|
GsmL1_DeviceParam_t *dev_par;
|
||||||
|
|
||||||
|
if (!gsm_abis_mo_check_attr(&trx->mo, trx_rqd_attr,
|
||||||
|
ARRAY_SIZE(trx_rqd_attr))) {
|
||||||
|
/* HACK: spec says we need to decline, but openbsc
|
||||||
|
* doesn't deal with this very well */
|
||||||
|
return oml_mo_opstart_ack(&trx->mo);
|
||||||
|
//return oml_mo_opstart_nack(&trx->mo, NM_NACK_CANT_PERFORM);
|
||||||
|
}
|
||||||
|
|
||||||
|
msg = l1p_msgb_alloc();
|
||||||
mi_req = prim_init(msgb_l1prim(msg), GsmL1_PrimId_MphInitReq, fl1h);
|
mi_req = prim_init(msgb_l1prim(msg), GsmL1_PrimId_MphInitReq, fl1h);
|
||||||
dev_par = &mi_req->deviceParam;
|
dev_par = &mi_req->deviceParam;
|
||||||
dev_par->devType = GsmL1_DevType_TxdRxu;
|
dev_par->devType = GsmL1_DevType_TxdRxu;
|
||||||
|
@ -220,7 +246,7 @@ static int trx_init(struct gsm_bts_trx *trx)
|
||||||
dev_par->fRxPowerLevel = -75.f;
|
dev_par->fRxPowerLevel = -75.f;
|
||||||
dev_par->fTxPowerLevel = trx->nominal_power - trx->max_power_red;
|
dev_par->fTxPowerLevel = trx->nominal_power - trx->max_power_red;
|
||||||
LOGP(DL1C, LOGL_NOTICE, "Init TRX (ARFCN %u, TSC %u, RxPower % 2f dBm, "
|
LOGP(DL1C, LOGL_NOTICE, "Init TRX (ARFCN %u, TSC %u, RxPower % 2f dBm, "
|
||||||
"TxPower % 2.2f dBm", dev_par->u16Arfcn, dev_par->u8NbTsc,
|
"TxPower % 2.2f dBm\n", dev_par->u16Arfcn, dev_par->u8NbTsc,
|
||||||
dev_par->fRxPowerLevel, dev_par->fTxPowerLevel);
|
dev_par->fRxPowerLevel, dev_par->fTxPowerLevel);
|
||||||
|
|
||||||
/* send MPH-INIT-REQ, wait for MPH-INIT-CNF */
|
/* send MPH-INIT-REQ, wait for MPH-INIT-CNF */
|
||||||
|
|
Loading…
Reference in New Issue