blob: 3a931199120b38d8ffb5d6a1ddfffaf6004b4043 [file] [log] [blame]
Holger Hans Peter Freytherec32b582010-03-23 07:40:46 +01001/* GSM 08.08 like API for OpenBSC */
2
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +08003#ifndef OPENBSC_BSC_API_H
4#define OPENBSC_BSC_API_H
5
Holger Hans Peter Freytherec32b582010-03-23 07:40:46 +01006#include "gsm_data.h"
7
Holger Hans Peter Freyther97643312010-06-17 16:41:25 +08008#define BSC_API_CONN_POL_ACCEPT 0
9#define BSC_API_CONN_POL_REJECT 1
10
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +080011struct bsc_api {
Harald Welteca86dd52011-09-13 00:09:20 +010012 /*! \brief BTS->MSC: tell MSC a SAPI was not established */
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +080013 void (*sapi_n_reject)(struct gsm_subscriber_connection *conn, int dlci);
Harald Welteca86dd52011-09-13 00:09:20 +010014 /*! \brief MS->MSC: Tell MSC that ciphering has been enabled */
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +080015 void (*cipher_mode_compl)(struct gsm_subscriber_connection *conn,
Holger Hans Peter Freytherc702b752010-07-23 17:10:44 +080016 struct msgb *msg, uint8_t chosen_encr);
Harald Welteca86dd52011-09-13 00:09:20 +010017 /*! \brief MS->MSC: New MM context with L3 payload */
Holger Hans Peter Freyther97643312010-06-17 16:41:25 +080018 int (*compl_l3)(struct gsm_subscriber_connection *conn,
19 struct msgb *msg, uint16_t chosen_channel);
Harald Welteca86dd52011-09-13 00:09:20 +010020 /*! \brief MS->BSC/MSC: Um L3 message */
Holger Hans Peter Freyther46caa302010-11-04 12:18:00 +010021 void (*dtap)(struct gsm_subscriber_connection *conn, uint8_t link_id,
22 struct msgb *msg);
Harald Welteca86dd52011-09-13 00:09:20 +010023 /*! \brief BSC->MSC: Assignment of lchan successful */
Holger Hans Peter Freytherc354de82010-07-23 16:49:38 +080024 void (*assign_compl)(struct gsm_subscriber_connection *conn,
Holger Hans Peter Freytherb0941712010-11-04 12:06:57 +010025 uint8_t rr_cause, uint8_t chosen_channel,
26 uint8_t encr_alg_id, uint8_t speech_mode);
Harald Welteca86dd52011-09-13 00:09:20 +010027 /*! \brief BSC->MSC: Assignment of lchan failed */
Holger Hans Peter Freytherc354de82010-07-23 16:49:38 +080028 void (*assign_fail)(struct gsm_subscriber_connection *conn,
Holger Hans Peter Freyther45b575f2010-11-05 10:37:17 +010029 uint8_t cause, uint8_t *rr_cause);
Harald Welteca86dd52011-09-13 00:09:20 +010030 /*! \brief BSC->MSC: RR conn has been cleared */
Holger Hans Peter Freyther05c68842010-11-03 19:01:58 +010031 int (*clear_request)(struct gsm_subscriber_connection *conn,
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +080032 uint32_t cause);
Harald Welte95e862c2012-01-23 10:28:35 +010033 /*! \brief BSC->MSC: Classmark Update */
34 void (*classmark_chg)(struct gsm_subscriber_connection *conn,
35 const uint8_t *cm2, uint8_t cm2_len,
36 const uint8_t *cm3, uint8_t cm3_len);
Holger Hans Peter Freyther25aa7492011-08-06 07:00:52 +020037
38 /**
39 * Configure the multirate setting on this channel. If it is
40 * not implemented AMR5.9 will be used.
41 */
42 void (*mr_config)(struct gsm_subscriber_connection *conn,
Holger Hans Peter Freyther7a77d012015-09-24 16:26:01 +020043 struct gsm_lchan *lchan, int full_rate);
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +080044};
Holger Hans Peter Freytherec32b582010-03-23 07:40:46 +010045
Holger Hans Peter Freytherabcddf12010-06-14 18:20:15 +080046int bsc_api_init(struct gsm_network *network, struct bsc_api *api);
Holger Hans Peter Freytherafa0ad12012-04-18 18:58:36 +020047int gsm0808_submit_dtap(struct gsm_subscriber_connection *conn, struct msgb *msg, int link_id, int allow_sacch);
Holger Hans Peter Freyther2603c1f2010-11-10 10:01:20 +010048int gsm0808_assign_req(struct gsm_subscriber_connection *conn, int chan_mode, int full_rate);
Holger Hans Peter Freytherdbc62db2010-07-23 16:55:24 +080049int gsm0808_cipher_mode(struct gsm_subscriber_connection *conn, int cipher,
Holger Hans Peter Freyther2f169d62010-11-10 09:42:50 +010050 const uint8_t *key, int len, int include_imeisv);
Holger Hans Peter Freyther77008462010-06-16 14:10:45 +080051int gsm0808_page(struct gsm_bts *bts, unsigned int page_group,
52 unsigned int mi_len, uint8_t *mi, int chan_type);
Holger Hans Peter Freyther40494552010-06-28 17:09:29 +080053int gsm0808_clear(struct gsm_subscriber_connection *conn);
Holger Hans Peter Freyther05a379b2010-06-14 15:50:35 +080054
55#endif