[E1 input] proper config error reporting
This commit is contained in:
parent
019130dd2a
commit
a8497829a7
|
@ -1219,9 +1219,11 @@ int bsc_bootstrap_network(int (*mncc_recv)(struct gsm_network *, struct msgb *),
|
||||||
if (!is_ipaccess_bts(bts))
|
if (!is_ipaccess_bts(bts))
|
||||||
rc = e1_reconfig_bts(bts);
|
rc = e1_reconfig_bts(bts);
|
||||||
|
|
||||||
if (rc < 0)
|
if (rc < 0) {
|
||||||
|
fprintf(stderr, "Error in E1 input driver setup\n");
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* initialize nanoBTS support omce */
|
/* initialize nanoBTS support omce */
|
||||||
rc = ipaccess_setup(bsc_gsmnet);
|
rc = ipaccess_setup(bsc_gsmnet);
|
||||||
|
|
|
@ -48,12 +48,19 @@ int e1_reconfig_ts(struct gsm_bts_trx_ts *ts)
|
||||||
|
|
||||||
DEBUGP(DMI, "e1_reconfig_ts(%u,%u,%u)\n", ts->trx->bts->nr, ts->trx->nr, ts->nr);
|
DEBUGP(DMI, "e1_reconfig_ts(%u,%u,%u)\n", ts->trx->bts->nr, ts->trx->nr, ts->nr);
|
||||||
|
|
||||||
if (!e1_link->e1_ts)
|
if (!e1_link->e1_ts) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "TS (%u/%u/%u) without E1 timeslot?\n",
|
||||||
|
ts->nr, ts->trx->nr, ts->trx->bts->nr);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
line = e1inp_line_get(e1_link->e1_nr);
|
line = e1inp_line_get(e1_link->e1_nr);
|
||||||
if (!line)
|
if (!line) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "TS (%u/%u/%u) referring to "
|
||||||
|
"non-existing E1 line %u\n", ts->nr, ts->trx->nr,
|
||||||
|
ts->trx->bts->nr, e1_link->e1_nr);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
switch (ts->pchan) {
|
switch (ts->pchan) {
|
||||||
case GSM_PCHAN_TCH_F:
|
case GSM_PCHAN_TCH_F:
|
||||||
|
@ -77,19 +84,29 @@ int e1_reconfig_trx(struct gsm_bts_trx *trx)
|
||||||
struct e1inp_sign_link *rsl_link;
|
struct e1inp_sign_link *rsl_link;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!e1_link->e1_ts)
|
if (!e1_link->e1_ts) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "TRX (%u/%u) RSL link without "
|
||||||
|
"timeslot?\n", trx->bts->nr, trx->nr);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
/* RSL Link */
|
/* RSL Link */
|
||||||
line = e1inp_line_get(e1_link->e1_nr);
|
line = e1inp_line_get(e1_link->e1_nr);
|
||||||
if (!line)
|
if (!line) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "TRX (%u/%u) RSL link referring "
|
||||||
|
"to non-existing E1 line %u\n", trx->bts->nr,
|
||||||
|
trx->nr, e1_link->e1_nr);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
sign_ts = &line->ts[e1_link->e1_ts-1];
|
sign_ts = &line->ts[e1_link->e1_ts-1];
|
||||||
e1inp_ts_config(sign_ts, line, E1INP_TS_TYPE_SIGN);
|
e1inp_ts_config(sign_ts, line, E1INP_TS_TYPE_SIGN);
|
||||||
rsl_link = e1inp_sign_link_create(sign_ts, E1INP_SIGN_RSL,
|
rsl_link = e1inp_sign_link_create(sign_ts, E1INP_SIGN_RSL,
|
||||||
trx, trx->rsl_tei, SAPI_RSL);
|
trx, trx->rsl_tei, SAPI_RSL);
|
||||||
if (!rsl_link)
|
if (!rsl_link) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "TRX (%u/%u) RSL link creation "
|
||||||
|
"failed\n", trx->bts->nr, trx->nr);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
if (trx->rsl_link)
|
if (trx->rsl_link)
|
||||||
e1inp_sign_link_destroy(trx->rsl_link);
|
e1inp_sign_link_destroy(trx->rsl_link);
|
||||||
trx->rsl_link = rsl_link;
|
trx->rsl_link = rsl_link;
|
||||||
|
@ -110,19 +127,28 @@ int e1_reconfig_bts(struct gsm_bts *bts)
|
||||||
|
|
||||||
DEBUGP(DMI, "e1_reconfig_bts(%u)\n", bts->nr);
|
DEBUGP(DMI, "e1_reconfig_bts(%u)\n", bts->nr);
|
||||||
|
|
||||||
if (!e1_link->e1_ts)
|
if (!e1_link->e1_ts) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "BTS %u OML link without timeslot?\n",
|
||||||
|
bts->nr);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
/* OML link */
|
/* OML link */
|
||||||
line = e1inp_line_get(e1_link->e1_nr);
|
line = e1inp_line_get(e1_link->e1_nr);
|
||||||
if (!line)
|
if (!line) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "BTS %u OML link referring to "
|
||||||
|
"non-existing E1 line %u\n", bts->nr, e1_link->e1_nr);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
sign_ts = &line->ts[e1_link->e1_ts-1];
|
sign_ts = &line->ts[e1_link->e1_ts-1];
|
||||||
e1inp_ts_config(sign_ts, line, E1INP_TS_TYPE_SIGN);
|
e1inp_ts_config(sign_ts, line, E1INP_TS_TYPE_SIGN);
|
||||||
oml_link = e1inp_sign_link_create(sign_ts, E1INP_SIGN_OML,
|
oml_link = e1inp_sign_link_create(sign_ts, E1INP_SIGN_OML,
|
||||||
bts->c0, bts->oml_tei, SAPI_OML);
|
bts->c0, bts->oml_tei, SAPI_OML);
|
||||||
if (!oml_link)
|
if (!oml_link) {
|
||||||
|
LOGP(DINP, LOGL_ERROR, "BTS %u OML link creation failed\n",
|
||||||
|
bts->nr);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
if (bts->oml_link)
|
if (bts->oml_link)
|
||||||
e1inp_sign_link_destroy(bts->oml_link);
|
e1inp_sign_link_destroy(bts->oml_link);
|
||||||
bts->oml_link = oml_link;
|
bts->oml_link = oml_link;
|
||||||
|
|
Loading…
Reference in New Issue