From ce49258a12019d2c7cb53d07e3c9b4ffbc20f561 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 15 Nov 2016 22:59:24 +0100 Subject: OM2000: Send ALTCRQ for SuperChannel after receiving IS Enable Req Ack When the BTS is configured to use a SuperChannel and it is using a unix domain socket based transport towards the L2TP daemon, then we must instruct the L2TP daemon to instruct the SIU to change the Abis Lower Transport Mode using the ALTCRQ / ALTCRP L2TP signalling. Change-Id: I672bfaa09c42fbeb0c8459f24b2222b952de954b --- openbsc/include/openbsc/gsm_data_shared.h | 1 + openbsc/src/libbsc/abis_om2000.c | 4 ++++ openbsc/src/libbsc/abis_om2000_vty.c | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h index e697cb87d..06fa8dd76 100644 --- a/openbsc/include/openbsc/gsm_data_shared.h +++ b/openbsc/include/openbsc/gsm_data_shared.h @@ -729,6 +729,7 @@ struct gsm_bts { struct om2k_mo om2k_mo; struct gsm_abis_mo mo; } tf; + uint32_t use_superchannel:1; } rbs2000; struct { uint8_t bts_type; diff --git a/openbsc/src/libbsc/abis_om2000.c b/openbsc/src/libbsc/abis_om2000.c index 1fb768957..9bf0fe2b9 100644 --- a/openbsc/src/libbsc/abis_om2000.c +++ b/openbsc/src/libbsc/abis_om2000.c @@ -1654,6 +1654,7 @@ static void om2k_mo_st_wait_cfg_res(struct osmo_fsm_inst *fi, uint32_t event, vo static void om2k_mo_st_wait_enable_accept(struct osmo_fsm_inst *fi, uint32_t event, void *data) { + struct om2k_mo_fsm_priv *omfp = fi->priv; struct om2k_decoded_msg *omd = data; switch (omd->msg_type) { @@ -1661,6 +1662,9 @@ static void om2k_mo_st_wait_enable_accept(struct osmo_fsm_inst *fi, uint32_t eve osmo_fsm_inst_state_chg(fi, OM2K_ST_ERROR, 0, 0); break; case OM2K_MSGT_ENABLE_REQ_ACK: + if (omfp->mo->addr.class == OM2K_MO_CLS_IS && + omfp->trx->bts->rbs2000.use_superchannel) + e1inp_ericsson_set_altc(omfp->trx->bts->oml_link->ts->line, 1); osmo_fsm_inst_state_chg(fi, OM2K_ST_WAIT_ENABLE_RES, OM2K_TIMEOUT, 0); } diff --git a/openbsc/src/libbsc/abis_om2000_vty.c b/openbsc/src/libbsc/abis_om2000_vty.c index 060fb8bc7..a6bc4c78c 100644 --- a/openbsc/src/libbsc/abis_om2000_vty.c +++ b/openbsc/src/libbsc/abis_om2000_vty.c @@ -417,6 +417,29 @@ DEFUN(cfg_om2k_con_path_conc, cfg_om2k_con_path_conc_cmd, return CMD_SUCCESS; } +DEFUN(cfg_bts_alt_mode, cfg_bts_alt_mode_cmd, + "abis-lower-transport (single-timeslot|super-channel)", + "Configure thee Abis Lower Transport\n" + "Single Timeslot (classic Abis)\n" + "SuperChannel (Packet Abis)\n") +{ + struct gsm_bts *bts = vty->index; + struct con_group *cg; + + if (bts->type != GSM_BTS_TYPE_RBS2000) { + vty_out(vty, "%% Command only works for RBS2000%s", + VTY_NEWLINE); + return CMD_WARNING; + } + + if (!strcmp(argv[0], "super-channel")) + bts->rbs2000.use_superchannel = 1; + else + bts->rbs2000.use_superchannel = 0; + + return CMD_SUCCESS; +} + DEFUN(cfg_bts_is_conn_list, cfg_bts_is_conn_list_cmd, "is-connection-list (add|del) <0-2047> <0-2047> <0-255>", "Interface Switch Connection List\n" @@ -548,6 +571,9 @@ void abis_om2k_config_write_bts(struct vty *vty, struct gsm_bts *bts) VTY_NEWLINE); dump_con_group(vty, cgrp); } + if (bts->rbs2000.use_superchannel) + vty_out(vty, " abis-lower-transport super-channel%s", + VTY_NEWLINE); } int abis_om2k_vty_init(void) @@ -575,6 +601,7 @@ int abis_om2k_vty_init(void) install_element(OM2K_CON_GROUP_NODE, &cfg_om2k_con_path_conc_cmd); install_element(BTS_NODE, &cfg_bts_is_conn_list_cmd); + install_element(BTS_NODE, &cfg_bts_alt_mode_cmd); install_element(BTS_NODE, &cfg_om2k_con_group_cmd); install_element(BTS_NODE, &del_om2k_con_group_cmd); -- cgit v1.2.3