blob: ffcebd353d04ff8ef5570f27de2951a47c853bf5 [file] [log] [blame]
Harald Welte75827d62010-05-18 11:07:34 +02001#ifndef _GPRS_GMM_H
2#define _GPRS_GMM_H
3
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +01004#include <osmocom/core/msgb.h>
Neels Hofmeyr396f2e62017-09-04 15:13:25 +02005#include <osmocom/sgsn/gprs_sgsn.h>
Harald Welte807a5d82010-06-01 11:53:01 +02006
Max82040102016-07-06 11:59:18 +02007#include <stdbool.h>
8
Pau Espin Pedrol89895b02018-07-13 15:14:15 +02009int gsm48_tx_gsm_deact_pdp_req(struct sgsn_pdp_ctx *pdp, uint8_t sm_cause, bool teardown);
Harald Welte75827d62010-05-18 11:07:34 +020010int gsm48_tx_gsm_act_pdp_rej(struct sgsn_mm_ctx *mm, uint8_t tid,
11 uint8_t cause, uint8_t pco_len, uint8_t *pco_v);
Harald Welte75827d62010-05-18 11:07:34 +020012int gsm48_tx_gsm_act_pdp_acc(struct sgsn_pdp_ctx *pdp);
Harald Welte77289c22010-05-18 14:32:29 +020013int gsm48_tx_gsm_deact_pdp_acc(struct sgsn_pdp_ctx *pdp);
Alexander Couzensd4788cd2018-05-02 22:32:19 +020014int gsm48_tx_gmm_auth_ciph_req(struct sgsn_mm_ctx *mm,
15 const struct osmo_auth_vector *vec,
16 uint8_t key_seq, bool force_standby);
Harald Welte77289c22010-05-18 14:32:29 +020017
Max82040102016-07-06 11:59:18 +020018int gsm0408_gprs_rcvmsg_gb(struct msgb *msg, struct gprs_llc_llme *llme,
19 bool drop_cipherable);
Daniel Willmann6292c8d2016-05-21 17:35:57 +020020int gsm0408_gprs_rcvmsg_iu(struct msgb *msg, struct gprs_ra_id *ra_id,
21 uint16_t *sai);
Jacob Erlbeckabdf02b2014-10-31 12:20:49 +010022int gsm0408_gprs_force_reattach(struct sgsn_mm_ctx *mmctx);
Maxb997f842016-07-06 15:57:01 +020023int gsm0408_gprs_force_reattach_oldmsg(struct msgb *msg,
24 struct gprs_llc_llme *llme);
Jacob Erlbeck423f8bf2014-10-24 18:09:54 +020025void gsm0408_gprs_access_granted(struct sgsn_mm_ctx *mmctx);
Jacob Erlbeckaf3d5c52015-01-05 17:51:17 +010026void gsm0408_gprs_access_denied(struct sgsn_mm_ctx *mmctx, int gmm_cause);
27void gsm0408_gprs_access_cancelled(struct sgsn_mm_ctx *mmctx, int gmm_cause);
Jacob Erlbeck4adb1362014-12-02 09:47:26 +010028void gsm0408_gprs_authenticate(struct sgsn_mm_ctx *mmctx);
Harald Welte75827d62010-05-18 11:07:34 +020029
Harald Welte5bfe4992010-06-09 11:22:47 +020030int gprs_gmm_rx_suspend(struct gprs_ra_id *raid, uint32_t tlli);
31int gprs_gmm_rx_resume(struct gprs_ra_id *raid, uint32_t tlli,
32 uint8_t suspend_ref);
33
Jacob Erlbeck81ffb742015-01-23 11:33:51 +010034time_t gprs_max_time_to_idle(void);
35
Neels Hofmeyr2188a772016-05-20 21:59:55 +020036int iu_rab_act_ps(uint8_t rab_id, struct sgsn_pdp_ctx *pdp);
Daniel Willmann6b7b3192016-05-21 00:53:42 +020037
Alexander Couzensd4788cd2018-05-02 22:32:19 +020038int gsm48_tx_gmm_id_req(struct sgsn_mm_ctx *mm, uint8_t id_type);
39int gsm48_tx_gmm_att_rej(struct sgsn_mm_ctx *mm,
40 uint8_t gmm_cause);
41int gsm48_tx_gmm_att_ack(struct sgsn_mm_ctx *mm);
42
Alexander Couzensf7198d72018-05-22 18:29:14 +020043int gprs_gmm_attach_req_ies(struct msgb *a, struct msgb *b);
44
Alexander Couzens8007be42018-05-14 06:48:24 +020045/* TODO: move extract_subscr_* when gsm48_gmm_authorize() got removed */
46void extract_subscr_msisdn(struct sgsn_mm_ctx *ctx);
47void extract_subscr_hlr(struct sgsn_mm_ctx *ctx);
Pau Espin Pedrol8c7d2592018-07-09 20:44:17 +020048
49void pdp_ctx_detach_mm_ctx(struct sgsn_pdp_ctx *pdp);
Harald Welte75827d62010-05-18 11:07:34 +020050#endif /* _GPRS_GMM_H */