Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 1 | /* 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 Welte | 9af6ddf | 2011-01-01 15:25:50 +0100 | [diff] [blame] | 8 | * 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 Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 10 | * (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 Welte | 9af6ddf | 2011-01-01 15:25:50 +0100 | [diff] [blame] | 15 | * GNU Affero General Public License for more details. |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 16 | * |
Harald Welte | 9af6ddf | 2011-01-01 15:25:50 +0100 | [diff] [blame] | 17 | * 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 Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 19 | * |
| 20 | */ |
| 21 | |
| 22 | #ifndef _RSL_H |
| 23 | #define _RSL_H |
| 24 | |
Harald Welte | baaf3e2 | 2016-11-17 20:54:04 +0100 | [diff] [blame] | 25 | #include <stdbool.h> |
Pablo Neira Ayuso | 136f453 | 2011-03-22 16:47:59 +0100 | [diff] [blame] | 26 | #include <osmocom/gsm/protocol/gsm_08_58.h> |
Neels Hofmeyr | d3b7fa8 | 2016-07-23 20:08:41 +0200 | [diff] [blame] | 27 | #include <osmocom/gsm/gsm_utils.h> |
Max | 8b1a2f8 | 2017-06-15 14:59:20 +0200 | [diff] [blame] | 28 | #include <osmocom/gsm/sysinfo.h> |
Pablo Neira Ayuso | 136f453 | 2011-03-22 16:47:59 +0100 | [diff] [blame] | 29 | #include <osmocom/core/msgb.h> |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 30 | |
Sylvain Munaut | 3f16da2 | 2010-12-01 22:25:40 +0100 | [diff] [blame] | 31 | struct gsm_bts; |
| 32 | struct gsm_lchan; |
Holger Hans Peter Freyther | 5414627 | 2011-01-06 13:47:04 +0100 | [diff] [blame] | 33 | struct gsm_bts_trx_ts; |
Sylvain Munaut | 3f16da2 | 2010-12-01 22:25:40 +0100 | [diff] [blame] | 34 | |
Max | 5fa7e36 | 2016-04-15 16:04:45 +0200 | [diff] [blame] | 35 | #define GSM48_LEN2PLEN(a) (((a) << 2) | 1) |
Sylvain Munaut | 3f16da2 | 2010-12-01 22:25:40 +0100 | [diff] [blame] | 36 | |
Max | 8b1a2f8 | 2017-06-15 14:59:20 +0200 | [diff] [blame] | 37 | int rsl_bcch_info(const struct gsm_bts_trx *trx, enum osmo_sysinfo_type si_type, const uint8_t *data, int len); |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 38 | int rsl_sacch_filling(struct gsm_bts_trx *trx, uint8_t type, |
| 39 | const uint8_t *data, int len); |
| 40 | int rsl_chan_activate(struct gsm_bts_trx *trx, uint8_t chan_nr, |
| 41 | uint8_t act_type, |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 42 | struct rsl_ie_chan_mode *chan_mode, |
| 43 | struct rsl_ie_chan_ident *chan_ident, |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 44 | uint8_t bs_power, uint8_t ms_power, |
| 45 | uint8_t ta); |
| 46 | int rsl_chan_activate_lchan(struct gsm_lchan *lchan, uint8_t act_type, |
Andreas Eversberg | 723a751 | 2013-10-11 12:55:35 +0200 | [diff] [blame] | 47 | uint8_t ho_ref); |
Harald Welte | da78376 | 2009-02-18 03:29:53 +0000 | [diff] [blame] | 48 | int rsl_chan_mode_modify_req(struct gsm_lchan *ts); |
Harald Welte | 08d91a5 | 2009-08-30 15:37:11 +0900 | [diff] [blame] | 49 | int rsl_encryption_cmd(struct msgb *msg); |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 50 | int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group, uint8_t len, |
Harald Welte | baaf3e2 | 2016-11-17 20:54:04 +0100 | [diff] [blame] | 51 | uint8_t *ms_ident, uint8_t chan_needed, bool is_gprs); |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 52 | int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val); |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 53 | |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 54 | int rsl_data_request(struct msgb *msg, uint8_t link_id); |
| 55 | int rsl_establish_request(struct gsm_lchan *lchan, uint8_t link_id); |
| 56 | int rsl_relase_request(struct gsm_lchan *lchan, uint8_t link_id); |
Harald Welte | 8470bf2 | 2008-12-25 23:28:35 +0000 | [diff] [blame] | 57 | |
Alexander Couzens | 16dcf2a | 2016-12-02 05:21:45 +0100 | [diff] [blame] | 58 | /* Ericcson vendor specific RSL extensions */ |
| 59 | int rsl_ericsson_imm_assign_cmd(struct gsm_bts *bts, uint32_t tlli, uint8_t len, uint8_t *val); |
| 60 | |
Harald Welte | 67fa91b | 2009-08-10 09:51:40 +0200 | [diff] [blame] | 61 | /* Siemens vendor-specific RSL extensions */ |
Harald Welte | 31c4893 | 2009-08-10 10:07:33 +0200 | [diff] [blame] | 62 | int rsl_siemens_mrpci(struct gsm_lchan *lchan, struct rsl_mrpci *mrpci); |
Harald Welte | 67fa91b | 2009-08-10 09:51:40 +0200 | [diff] [blame] | 63 | |
Harald Welte | 7509926 | 2009-02-16 21:12:08 +0000 | [diff] [blame] | 64 | /* ip.access specfic RSL extensions */ |
Holger Hans Peter Freyther | 231163d | 2009-11-18 21:06:12 +0100 | [diff] [blame] | 65 | int rsl_ipacc_crcx(struct gsm_lchan *lchan); |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 66 | int rsl_ipacc_mdcx(struct gsm_lchan *lchan, uint32_t ip, |
| 67 | uint16_t port, uint8_t rtp_payload2); |
Harald Welte | a72273e | 2009-12-20 16:51:09 +0100 | [diff] [blame] | 68 | int rsl_ipacc_mdcx_to_rtpsock(struct gsm_lchan *lchan); |
Harald Welte | 53cd7ac | 2010-12-23 12:59:52 +0100 | [diff] [blame] | 69 | int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act); |
Harald Welte | 7509926 | 2009-02-16 21:12:08 +0000 | [diff] [blame] | 70 | |
Harald Welte | 8470bf2 | 2008-12-25 23:28:35 +0000 | [diff] [blame] | 71 | int abis_rsl_rcvmsg(struct msgb *msg); |
| 72 | |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 73 | uint64_t str_to_imsi(const char *imsi_str); |
Holger Hans Peter Freyther | 5ca825e | 2012-12-06 12:01:38 +0100 | [diff] [blame] | 74 | int rsl_release_request(struct gsm_lchan *lchan, uint8_t link_id, |
| 75 | enum rsl_rel_mode release_mode); |
Holger Freyther | 2976c40 | 2009-02-04 01:09:20 +0000 | [diff] [blame] | 76 | |
Holger Hans Peter Freyther | 7441949 | 2010-04-10 00:12:31 +0200 | [diff] [blame] | 77 | int rsl_lchan_set_state(struct gsm_lchan *lchan, int); |
Holger Hans Peter Freyther | 454140e | 2014-12-28 12:08:28 +0100 | [diff] [blame] | 78 | int rsl_lchan_mark_broken(struct gsm_lchan *lchan, const char *broken); |
Holger Hans Peter Freyther | 7441949 | 2010-04-10 00:12:31 +0200 | [diff] [blame] | 79 | |
Harald Welte | 8470bf2 | 2008-12-25 23:28:35 +0000 | [diff] [blame] | 80 | /* to be provided by external code */ |
Harald Welte | ae0f236 | 2009-07-19 18:36:49 +0200 | [diff] [blame] | 81 | int rsl_deact_sacch(struct gsm_lchan *lchan); |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 82 | |
Holger Freyther | b015544 | 2009-02-03 23:24:04 +0000 | [diff] [blame] | 83 | /* BCCH related code */ |
| 84 | int rsl_ccch_conf_to_bs_cc_chans(int ccch_conf); |
| 85 | int rsl_ccch_conf_to_bs_ccch_sdcch_comb(int ccch_conf); |
Holger Freyther | b015544 | 2009-02-03 23:24:04 +0000 | [diff] [blame] | 86 | |
Holger Hans Peter Freyther | c42ad8b | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 87 | int rsl_sacch_info_modify(struct gsm_lchan *lchan, uint8_t type, |
| 88 | const uint8_t *data, int len); |
Harald Welte | 18b590d | 2011-01-13 00:08:17 +0100 | [diff] [blame] | 89 | |
Harald Welte | fcd2445 | 2009-06-20 18:15:19 +0200 | [diff] [blame] | 90 | int rsl_chan_bs_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int db); |
| 91 | int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int dbm); |
| 92 | |
Holger Hans Peter Freyther | 8cb4a0f | 2010-07-21 15:54:32 +0800 | [diff] [blame] | 93 | /* SMSCB functionality */ |
| 94 | int rsl_sms_cb_command(struct gsm_bts *bts, uint8_t chan_number, |
Harald Welte | 30f1f37 | 2014-12-28 15:00:45 +0100 | [diff] [blame] | 95 | struct rsl_ie_cb_cmd_type cb_command, |
| 96 | const uint8_t *data, int len); |
Holger Hans Peter Freyther | 8cb4a0f | 2010-07-21 15:54:32 +0800 | [diff] [blame] | 97 | |
Dieter Spaar | 1664602 | 2011-07-28 00:01:50 +0200 | [diff] [blame] | 98 | /* some Nokia specific stuff */ |
| 99 | int rsl_nokia_si_begin(struct gsm_bts_trx *trx); |
| 100 | int rsl_nokia_si_end(struct gsm_bts_trx *trx); |
| 101 | |
| 102 | /* required for Nokia BTS power control */ |
| 103 | int rsl_bs_power_control(struct gsm_bts_trx *trx, uint8_t channel, uint8_t reduction); |
| 104 | |
Holger Hans Peter Freyther | 8582535 | 2011-12-27 22:24:17 +0100 | [diff] [blame] | 105 | |
| 106 | int rsl_release_sapis_from(struct gsm_lchan *lchan, int start, |
| 107 | enum rsl_rel_mode release_mode); |
Holger Hans Peter Freyther | b348939 | 2011-12-28 16:21:05 +0100 | [diff] [blame] | 108 | int rsl_start_t3109(struct gsm_lchan *lchan); |
Holger Hans Peter Freyther | 8582535 | 2011-12-27 22:24:17 +0100 | [diff] [blame] | 109 | |
Holger Hans Peter Freyther | 006e3d8 | 2012-12-25 23:45:14 +0100 | [diff] [blame] | 110 | int rsl_direct_rf_release(struct gsm_lchan *lchan); |
| 111 | |
Neels Hofmeyr | d3b7fa8 | 2016-07-23 20:08:41 +0200 | [diff] [blame] | 112 | void dyn_ts_init(struct gsm_bts_trx_ts *ts); |
Neels Hofmeyr | b74a2c8 | 2016-08-24 16:57:31 +0200 | [diff] [blame] | 113 | int dyn_ts_switchover_start(struct gsm_bts_trx_ts *ts, |
Neels Hofmeyr | d3b7fa8 | 2016-07-23 20:08:41 +0200 | [diff] [blame] | 114 | enum gsm_phys_chan_config to_pchan); |
Neels Hofmeyr | b8afb5f | 2016-06-02 01:18:02 +0200 | [diff] [blame] | 115 | |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 116 | #endif /* RSL_MT_H */ |
| 117 | |