blob: 8cf830ef01035732e4c19e90040315d0c8856b11 [file] [log] [blame]
Neels Hofmeyrbfa88782016-05-20 21:38:32 +02001#pragma once
2
3#include <stdbool.h>
4
5struct sgsn_pdp_ctx;
6struct msgb;
7struct gprs_ra_id;
8
9struct RANAP_RAB_SetupOrModifiedItemIEs_s;
10struct RANAP_GlobalRNC_ID;
11
12struct ue_conn_ctx {
13 struct llist_head list;
14 struct osmo_sccp_link *link;
15 uint32_t conn_id;
16 int integrity_active;
17 struct gprs_ra_id ra_id;
18};
19
20enum iu_event_type {
21 IU_EVENT_RAB_ASSIGN,
22 IU_EVENT_SECURITY_MODE_COMPLETE,
23 IU_EVENT_IU_RELEASE, /* An actual Iu Release message was received */
24 IU_EVENT_LINK_INVALIDATED, /* A SUA link was lost or closed down */
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020025};
26
27extern const struct value_string iu_event_type_names[];
28static inline const char *iu_event_type_str(enum iu_event_type e)
29{
30 return get_value_string(iu_event_type_names, e);
31}
32
33/* Implementations of iu_recv_cb_t shall find the ue_conn_ctx in msg->dst. */
34typedef int (* iu_recv_cb_t )(struct msgb *msg, struct gprs_ra_id *ra_id,
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020035 uint16_t *sai);
36
37typedef int (* iu_event_cb_t )(struct ue_conn_ctx *ue_ctx,
38 enum iu_event_type type, void *data);
39
40typedef int (* iu_rab_ass_resp_cb_t )(struct ue_conn_ctx *ue_ctx, uint8_t rab_id,
41 struct RANAP_RAB_SetupOrModifiedItemIEs_s *setup_ies);
42
43int iu_init(void *ctx, const char *listen_addr, uint16_t listen_port,
44 iu_recv_cb_t iu_recv_cb, iu_event_cb_t iu_event_cb);
45
46void iu_link_del(struct osmo_sccp_link *link);
47
48int iu_tx(struct msgb *msg, uint8_t sapi);
49
50int iu_page_cs(const char *imsi, const uint32_t *tmsi, uint16_t lac);
51int iu_page_ps(const char *imsi, const uint32_t *ptmsi, uint16_t lac, uint8_t rac);
52
53int iu_rab_act(struct ue_conn_ctx *ue_ctx, struct msgb *msg);
54int iu_rab_deact(struct ue_conn_ctx *ue_ctx, uint8_t rab_id);
55int iu_tx_sec_mode_cmd(struct ue_conn_ctx *uectx, struct gsm_auth_tuple *tp,
56 int send_ck, int new_key);
Neels Hofmeyr9bc42ec2016-08-29 13:02:12 +020057
58void iu_vty_init(int *asn_debug_p);