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
This commit is contained in:
Harald Welte 2011-01-14 23:18:59 +01:00
parent fd355a3c6f
commit 26d7907b02
4 changed files with 12 additions and 5 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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 */

View File

@ -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