blob: 1e5ffced66250aba3f2c8464cc39f9c281cf015c [file] [log] [blame]
Harald Welte52b1f982008-12-23 20:25:15 +00001#ifndef _GSM_04_08_H
2#define _GSM_04_08_H
3
Harald Welte3c7dc6e2009-11-29 19:07:28 +01004#include <openbsc/meas_rep.h>
5
Harald Welte13f52972010-02-20 18:56:00 +01006#include <osmocore/protocol/gsm_04_08.h>
Harald Welte474d19f2010-03-02 23:18:30 +01007#include <osmocore/gsm48.h>
Holger Hans Peter Freyther1494a762009-08-01 07:26:59 +02008
Harald Welte8470bf22008-12-25 23:28:35 +00009struct msgb;
10struct gsm_bts;
Harald Welte0932d1e2009-02-16 22:53:52 +000011struct gsm_subscriber;
Harald Welte4bfdfe72009-06-10 23:11:52 +080012struct gsm_network;
Harald Welte39e2ead2009-07-23 21:13:03 +020013struct gsm_trans;
Holger Hans Peter Freytherf6fb3ef2010-06-15 13:16:52 +080014struct gsm_subscriber_connection;
Harald Welte8470bf22008-12-25 23:28:35 +000015
Harald Welte3c69a4c2010-05-01 14:22:44 +020016#define GSM48_ALLOC_SIZE 1024
17#define GSM48_ALLOC_HEADROOM 128
18
19static inline struct msgb *gsm48_msgb_alloc(void)
20{
21 return msgb_alloc_headroom(GSM48_ALLOC_SIZE, GSM48_ALLOC_HEADROOM,
22 "GSM 04.08");
23}
24
Holger Freythere97f7fb2008-12-31 18:52:11 +000025/* config options controlling the behaviour of the lower leves */
Holger Freyther89824fc2008-12-30 16:18:18 +000026void gsm0408_allow_everyone(int allow);
Holger Hans Peter Freytherf6fb3ef2010-06-15 13:16:52 +080027void gsm0408_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause);
Holger Freythere97f7fb2008-12-31 18:52:11 +000028
Harald Welte (local)daef6062009-08-14 11:41:12 +020029int gsm0408_rcvmsg(struct msgb *msg, u_int8_t link_id);
Holger Hans Peter Freytherf7d752f2009-11-16 17:12:38 +010030enum gsm_chan_t get_ctype_by_chreq(struct gsm_bts *bts, u_int8_t ra, int neci);
31enum gsm_chreq_reason_t get_reason_by_chreq(struct gsm_bts *bts, u_int8_t ra, int neci);
Harald Welte8470bf22008-12-25 23:28:35 +000032
Holger Hans Peter Freyther91401742010-06-15 14:16:02 +080033int gsm48_tx_mm_info(struct gsm_subscriber_connection *conn);
Sylvain Munautbd55a6d2009-12-24 00:23:46 +010034int gsm48_tx_mm_auth_req(struct gsm_lchan *lchan, u_int8_t *rand, int key_seq);
Harald Welte7984d5c2009-08-12 22:56:50 +020035int gsm48_tx_mm_auth_rej(struct gsm_lchan *lchan);
Holger Freythere64a7a32009-02-06 21:55:37 +000036int gsm48_send_rr_release(struct gsm_lchan *lchan);
Holger Hans Peter Freytherca6bc1d2009-10-05 14:00:14 +020037int gsm48_send_rr_ciph_mode(struct gsm_lchan *lchan, int want_imeisv);
Harald Welte (local)6eef5642009-08-15 23:32:44 +020038int gsm48_send_rr_app_info(struct gsm_lchan *lchan, u_int8_t apdu_id,
Holger Hans Peter Freyther8b77a342009-10-22 15:42:19 +020039 u_int8_t apdu_len, const u_int8_t *apdu);
Holger Hans Peter Freyther550197f2010-01-28 09:43:49 +010040int gsm48_send_rr_ass_cmd(struct gsm_lchan *dest_lchan, struct gsm_lchan *lchan, u_int8_t power_class);
Harald Welte7a7a0d52009-12-17 00:25:18 +010041int gsm48_send_ho_cmd(struct gsm_lchan *old_lchan, struct gsm_lchan *new_lchan,
42 u_int8_t power_command, u_int8_t ho_ref);
Harald Welte8470bf22008-12-25 23:28:35 +000043
Harald Welte4bfdfe72009-06-10 23:11:52 +080044int bsc_upqueue(struct gsm_network *net);
45
46int mncc_send(struct gsm_network *net, int msg_type, void *arg);
47
Harald Welte0932d1e2009-02-16 22:53:52 +000048/* convert a ASCII phone number to call-control BCD */
49int encode_bcd_number(u_int8_t *bcd_lv, u_int8_t max_len,
Harald Welte0c389302009-06-10 12:08:54 +080050 int h_len, const char *input);
51int decode_bcd_number(char *output, int output_len, const u_int8_t *bcd_lv,
52 int h_len);
Harald Welte0932d1e2009-02-16 22:53:52 +000053
Holger Hans Peter Freytheradc14782009-08-21 04:57:35 +020054int send_siemens_mrpci(struct gsm_lchan *lchan, u_int8_t *classmark2_lv);
Holger Hans Peter Freytherb7b9c1d2010-05-16 01:07:20 +080055int gsm48_extract_mi(uint8_t *classmark2, int length, char *mi_string, uint8_t *mi_type);
Holger Hans Peter Freytherf6903de2010-05-16 01:51:14 +080056int gsm48_paging_extract_mi(struct gsm48_pag_resp *pag, int length, char *mi_string, u_int8_t *mi_type);
Holger Hans Peter Freyther3ee5d3e2009-08-21 05:18:21 +020057int gsm48_handle_paging_resp(struct msgb *msg, struct gsm_subscriber *subscr);
Holger Hans Peter Freytheradc14782009-08-21 04:57:35 +020058
Holger Hans Peter Freytherea528022009-11-18 22:57:02 +010059int gsm48_lchan_modify(struct gsm_lchan *lchan, u_int8_t lchan_mode);
Holger Hans Peter Freytherf520e642009-10-22 15:23:11 +020060int gsm48_rx_rr_modif_ack(struct msgb *msg);
Harald Welte3c7dc6e2009-11-29 19:07:28 +010061int gsm48_parse_meas_rep(struct gsm_meas_rep *rep, struct msgb *msg);
62
Holger Hans Peter Freytherff3f2602009-10-22 15:13:00 +020063
Harald Welte52b1f982008-12-23 20:25:15 +000064#endif