From 26d7907b0229f982a65bd709c86b849eb6fef2ce Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 14 Jan 2011 23:18:59 +0100 Subject: Implement the HSL SR1.0.1 protocol It seems HSL has fixed most of their obvious issues in the SR1.0.1 release. However, this creates quite an incompatibility of the protocol, and we have to adapt accordingly --- openbsc/src/libabis/input/hsl.c | 8 +++++--- openbsc/src/libbsc/abis_rsl.c | 3 ++- openbsc/src/libbsc/bsc_init.c | 2 +- openbsc/src/libbsc/bts_hsl_femtocell.c | 4 ++++ 4 files changed, 12 insertions(+), 5 deletions(-) (limited to 'openbsc') diff --git a/openbsc/src/libabis/input/hsl.c b/openbsc/src/libabis/input/hsl.c index 12e974b34..360be32fc 100644 --- a/openbsc/src/libabis/input/hsl.c +++ b/openbsc/src/libabis/input/hsl.c @@ -228,7 +228,7 @@ static int handle_ts1_read(struct bsc_fd *bfd) } /* HSL proprietary RSL extension */ - if (hh->proto == 0 && msg->l2h[0] == 0x80) { + if (hh->proto == 0 && (msg->l2h[0] == 0x81 || msg->l2h[0] == 0x80)) { ret = process_hsl_rsl(msg, line); if (ret < 0) { /* FIXME: close connection */ @@ -238,11 +238,11 @@ static int handle_ts1_read(struct bsc_fd *bfd) return 0; /* else: continue... */ } - +#ifdef HSL_SR_1_0 /* HSL for whatever reason chose to use 0x81 instead of 0x80 for FOM */ if (hh->proto == 255 && msg->l2h[0] == (ABIS_OM_MDISC_FOM | 0x01)) msg->l2h[0] = ABIS_OM_MDISC_FOM; - +#endif link = e1inp_lookup_sign_link(e1i_ts, hh->proto, 0); if (!link) { LOGP(DINP, LOGL_ERROR, "no matching signalling link for " @@ -312,9 +312,11 @@ static int handle_ts1_write(struct bsc_fd *bfd) switch (sign_link->type) { case E1INP_SIGN_OML: proto = IPAC_PROTO_OML; +#ifdef HSL_SR_1_0 /* HSL uses 0x81 for FOM for some reason */ if (msg->data[0] == ABIS_OM_MDISC_FOM) msg->data[0] = ABIS_OM_MDISC_FOM | 0x01; +#endif break; case E1INP_SIGN_RSL: proto = IPAC_PROTO_RSL; diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index 58e2a7cd7..9a4dc5b4f 100644 --- a/openbsc/src/libbsc/abis_rsl.c +++ b/openbsc/src/libbsc/abis_rsl.c @@ -677,10 +677,11 @@ static int rsl_rf_chan_release(struct gsm_lchan *lchan, int error) rc = abis_rsl_sendmsg(msg); /* BTS will respond by RF CHAN REL ACK */ - +#ifdef HSL_SR_1_0 /* The HSL Femto seems to 'forget' sending a REL ACK for TS1...TS7 */ if (lchan->ts->trx->bts->type == GSM_BTS_TYPE_HSL_FEMTO && lchan->ts->nr != 0) rc = rsl_rx_rf_chan_rel_ack(lchan); +#endif return rc; } diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c index 0072bb6f8..37386d7e9 100644 --- a/openbsc/src/libbsc/bsc_init.c +++ b/openbsc/src/libbsc/bsc_init.c @@ -397,7 +397,7 @@ static int bootstrap_bts(struct gsm_bts *bts) if (bts->network->dtx_enabled) bts->si_common.cell_options.dtx = 0; else - bts->si_common.cell_options.dtx = 2; + bts->si_common.cell_options.dtx = 3; bts->si_common.cell_options.pwrc = 0; /* PWRC not set */ diff --git a/openbsc/src/libbsc/bts_hsl_femtocell.c b/openbsc/src/libbsc/bts_hsl_femtocell.c index 2813195b2..d5834ef7d 100644 --- a/openbsc/src/libbsc/bts_hsl_femtocell.c +++ b/openbsc/src/libbsc/bts_hsl_femtocell.c @@ -61,7 +61,11 @@ static const uint8_t conn_trau_msg2[] = { }; static uint8_t oml_arfcn_bsic[] = { +#ifdef HSL_SR_1_0 0x81, 0x80, 0x00, 10, +#else + 0x80, 0x80, 0x00, 10, +#endif NM_MT_SET_BTS_ATTR, NM_OC_BTS, 0xff, 0xff, 0xff, NM_ATT_BCCH_ARFCN, 0x03, 0x67, NM_ATT_BSIC, 0x00 -- cgit v1.2.3