aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-01-14 23:18:59 +0100
committerHarald Welte <laforge@gnumonks.org>2011-03-04 13:44:12 +0100
commit26d7907b0229f982a65bd709c86b849eb6fef2ce (patch)
tree85516016e837efe8de3830436d9612bf48ebd88c /openbsc/src
parentfd355a3c6feccca5b774c0b3291a6066d0459067 (diff)
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
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/libabis/input/hsl.c8
-rw-r--r--openbsc/src/libbsc/abis_rsl.c3
-rw-r--r--openbsc/src/libbsc/bsc_init.c2
-rw-r--r--openbsc/src/libbsc/bts_hsl_femtocell.c4
4 files changed, 12 insertions, 5 deletions
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