blob: 964e282b5526da96eb81b7f04608f70ccbb184ae [file] [log] [blame]
Harald Welte52b1f982008-12-23 20:25:15 +00001/* GSM Radio Signalling Link messages on the A-bis interface
2 * 3GPP TS 08.58 version 8.6.0 Release 1999 / ETSI TS 100 596 V8.6.0 */
3
4/* (C) 2008 by Harald Welte <laforge@gnumonks.org>
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
Harald Welte9af6ddf2011-01-01 15:25:50 +01008 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
Harald Welte52b1f982008-12-23 20:25:15 +000010 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Harald Welte9af6ddf2011-01-01 15:25:50 +010015 * GNU Affero General Public License for more details.
Harald Welte52b1f982008-12-23 20:25:15 +000016 *
Harald Welte9af6ddf2011-01-01 15:25:50 +010017 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
Harald Welte52b1f982008-12-23 20:25:15 +000019 *
20 */
21
22#ifndef _RSL_H
23#define _RSL_H
24
Harald Weltebaaf3e22016-11-17 20:54:04 +010025#include <stdbool.h>
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +010026#include <osmocom/gsm/protocol/gsm_08_58.h>
Neels Hofmeyrd3b7fa82016-07-23 20:08:41 +020027#include <osmocom/gsm/gsm_utils.h>
Max8b1a2f82017-06-15 14:59:20 +020028#include <osmocom/gsm/sysinfo.h>
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +010029#include <osmocom/core/msgb.h>
Neels Hofmeyrf0ea05e2017-11-27 22:30:47 +010030#include <osmocom/bsc/gsm_data.h>
Harald Welte52b1f982008-12-23 20:25:15 +000031
Sylvain Munaut3f16da22010-12-01 22:25:40 +010032struct gsm_bts;
33struct gsm_lchan;
Holger Hans Peter Freyther54146272011-01-06 13:47:04 +010034struct gsm_bts_trx_ts;
Sylvain Munaut3f16da22010-12-01 22:25:40 +010035
Max5fa7e362016-04-15 16:04:45 +020036#define GSM48_LEN2PLEN(a) (((a) << 2) | 1)
Sylvain Munaut3f16da22010-12-01 22:25:40 +010037
Max5695f4b2018-11-07 12:18:25 +010038const char *ip_to_a(uint32_t ip);
39
Max8b1a2f82017-06-15 14:59:20 +020040int rsl_bcch_info(const struct gsm_bts_trx *trx, enum osmo_sysinfo_type si_type, const uint8_t *data, int len);
Holger Hans Peter Freytherc42ad8b2011-04-18 17:04:00 +020041int rsl_sacch_filling(struct gsm_bts_trx *trx, uint8_t type,
42 const uint8_t *data, int len);
Neels Hofmeyr31f525e2018-05-14 18:14:15 +020043int rsl_tx_chan_activ(struct gsm_lchan *lchan, uint8_t act_type, uint8_t ho_ref);
Harald Welteda783762009-02-18 03:29:53 +000044int rsl_chan_mode_modify_req(struct gsm_lchan *ts);
Harald Welte08d91a52009-08-30 15:37:11 +090045int rsl_encryption_cmd(struct msgb *msg);
Neels Hofmeyra87646c2020-05-29 03:53:59 +020046int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group,
47 const struct osmo_mobile_identity *mi,
48 uint8_t chan_needed, bool is_gprs);
Holger Hans Peter Freytherc42ad8b2011-04-18 17:04:00 +020049int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val);
Neels Hofmeyr31f525e2018-05-14 18:14:15 +020050int rsl_tx_imm_assignment(struct gsm_lchan *lchan);
51int rsl_tx_imm_ass_rej(struct gsm_bts *bts, struct gsm48_req_ref *rqd_ref);
52int gsm48_send_rr_ass_cmd(struct gsm_lchan *dest_lchan, struct gsm_lchan *lchan, uint8_t power_command);
Harald Welte52b1f982008-12-23 20:25:15 +000053
Holger Hans Peter Freytherc42ad8b2011-04-18 17:04:00 +020054int rsl_data_request(struct msgb *msg, uint8_t link_id);
55int rsl_establish_request(struct gsm_lchan *lchan, uint8_t link_id);
56int rsl_relase_request(struct gsm_lchan *lchan, uint8_t link_id);
Harald Welte8470bf22008-12-25 23:28:35 +000057
Alexander Couzens16dcf2a2016-12-02 05:21:45 +010058/* Ericcson vendor specific RSL extensions */
59int rsl_ericsson_imm_assign_cmd(struct gsm_bts *bts, uint32_t tlli, uint8_t len, uint8_t *val);
60
Harald Welte67fa91b2009-08-10 09:51:40 +020061/* Siemens vendor-specific RSL extensions */
Harald Welte31c48932009-08-10 10:07:33 +020062int rsl_siemens_mrpci(struct gsm_lchan *lchan, struct rsl_mrpci *mrpci);
Harald Welte67fa91b2009-08-10 09:51:40 +020063
Martin Haukea29affd2019-11-13 22:10:41 +010064/* ip.access specific RSL extensions */
Maxc43e8712018-11-07 12:26:18 +010065struct msgb *rsl_make_ipacc_mdcx(const struct gsm_lchan *lchan, uint32_t dest_ip, uint16_t dest_port);
Max1bcdd732018-11-07 12:22:23 +010066int rsl_tx_ipacc_crcx(const struct gsm_lchan *lchan);
67int rsl_tx_ipacc_mdcx(const struct gsm_lchan *lchan);
Harald Weltea72273e2009-12-20 16:51:09 +010068int rsl_ipacc_mdcx_to_rtpsock(struct gsm_lchan *lchan);
Harald Welte53cd7ac2010-12-23 12:59:52 +010069int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act);
Harald Welte75099262009-02-16 21:12:08 +000070
Harald Welte8470bf22008-12-25 23:28:35 +000071int abis_rsl_rcvmsg(struct msgb *msg);
72
Holger Hans Peter Freyther5ca825e2012-12-06 12:01:38 +010073int rsl_release_request(struct gsm_lchan *lchan, uint8_t link_id,
74 enum rsl_rel_mode release_mode);
Holger Freyther2976c402009-02-04 01:09:20 +000075
Holger Hans Peter Freyther454140e2014-12-28 12:08:28 +010076int rsl_lchan_mark_broken(struct gsm_lchan *lchan, const char *broken);
Holger Hans Peter Freyther74419492010-04-10 00:12:31 +020077
Harald Welte8470bf22008-12-25 23:28:35 +000078/* to be provided by external code */
Harald Welteae0f2362009-07-19 18:36:49 +020079int rsl_deact_sacch(struct gsm_lchan *lchan);
Harald Welte52b1f982008-12-23 20:25:15 +000080
Holger Freytherb0155442009-02-03 23:24:04 +000081/* BCCH related code */
82int rsl_ccch_conf_to_bs_cc_chans(int ccch_conf);
83int rsl_ccch_conf_to_bs_ccch_sdcch_comb(int ccch_conf);
Holger Freytherb0155442009-02-03 23:24:04 +000084
Holger Hans Peter Freytherc42ad8b2011-04-18 17:04:00 +020085int rsl_sacch_info_modify(struct gsm_lchan *lchan, uint8_t type,
86 const uint8_t *data, int len);
Harald Welte18b590d2011-01-13 00:08:17 +010087
Harald Weltefcd24452009-06-20 18:15:19 +020088int rsl_chan_bs_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int db);
Pau Espin Pedrol7950e5d2019-10-31 15:59:49 +010089int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan);
Harald Weltefcd24452009-06-20 18:15:19 +020090
Holger Hans Peter Freyther8cb4a0f2010-07-21 15:54:32 +080091/* SMSCB functionality */
92int rsl_sms_cb_command(struct gsm_bts *bts, uint8_t chan_number,
Harald Welte30f1f372014-12-28 15:00:45 +010093 struct rsl_ie_cb_cmd_type cb_command,
Harald Welteae466852019-05-21 23:25:30 +020094 bool use_extended_cbch, const uint8_t *data, int len);
Harald Welte7d888442019-09-06 23:18:27 +020095int rsl_etws_pn_command(struct gsm_bts *bts, uint8_t chan_nr, const uint8_t *data, int len);
Holger Hans Peter Freyther8cb4a0f2010-07-21 15:54:32 +080096
Dieter Spaar16646022011-07-28 00:01:50 +020097/* some Nokia specific stuff */
98int rsl_nokia_si_begin(struct gsm_bts_trx *trx);
99int rsl_nokia_si_end(struct gsm_bts_trx *trx);
100
101/* required for Nokia BTS power control */
102int rsl_bs_power_control(struct gsm_bts_trx *trx, uint8_t channel, uint8_t reduction);
103
Holger Hans Peter Freyther85825352011-12-27 22:24:17 +0100104
105int rsl_release_sapis_from(struct gsm_lchan *lchan, int start,
106 enum rsl_rel_mode release_mode);
Holger Hans Peter Freytherb3489392011-12-28 16:21:05 +0100107int rsl_start_t3109(struct gsm_lchan *lchan);
Holger Hans Peter Freyther85825352011-12-27 22:24:17 +0100108
Holger Hans Peter Freyther006e3d82012-12-25 23:45:14 +0100109int rsl_direct_rf_release(struct gsm_lchan *lchan);
110
Neels Hofmeyr31f525e2018-05-14 18:14:15 +0200111int rsl_tx_dyn_ts_pdch_act_deact(struct gsm_bts_trx_ts *ts, bool activate);
112
113int rsl_forward_layer3_info(struct gsm_lchan *lchan, const uint8_t *l3_info, uint8_t l3_info_len);
114
115int ipacc_speech_mode(enum gsm48_chan_mode tch_mode, enum gsm_chan_t type);
116void ipacc_speech_mode_set_direction(uint8_t *speech_mode, bool send);
117int ipacc_payload_type(enum gsm48_chan_mode tch_mode, enum gsm_chan_t type);
118
119int rsl_tx_rf_chan_release(struct gsm_lchan *lchan);
Neels Hofmeyrb8afb5f2016-06-02 01:18:02 +0200120
Philipp Maiercc6d35d2020-08-21 22:40:23 +0200121void abis_rsl_chan_rqd_queue_poll(struct gsm_bts *bts);
Philipp Maier1482ec42020-09-10 20:40:35 +0200122void abis_rsl_chan_rqd_queue_flush(struct gsm_bts *bts);
Philipp Maiercc6d35d2020-08-21 22:40:23 +0200123
Harald Welte52b1f982008-12-23 20:25:15 +0000124#endif /* RSL_MT_H */
125