blob: 5b298301d42e46544fe4024c50c0f1447f06b0ad [file] [log] [blame]
Neels Hofmeyrbfa88782016-05-20 21:38:32 +02001#pragma once
2
3#include <stdbool.h>
Neels Hofmeyra1756f32016-05-20 21:59:55 +02004#include <stdint.h>
5
6#include <osmocom/core/linuxlist.h>
7#include <osmocom/gsm/gsm48.h>
8
9#include <openbsc/common.h>
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020010
11struct sgsn_pdp_ctx;
12struct msgb;
Neels Hofmeyra1756f32016-05-20 21:59:55 +020013struct osmo_sccp_link;
14struct gsm_auth_tuple;
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020015
16struct RANAP_RAB_SetupOrModifiedItemIEs_s;
17struct RANAP_GlobalRNC_ID;
Neels Hofmeyra1756f32016-05-20 21:59:55 +020018struct RANAP_Cause;
19
20/* Debugging switches from asn1c and osmo-iuh */
21extern int asn_debug;
22extern int asn1_xer_print;
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020023
24struct ue_conn_ctx {
25 struct llist_head list;
26 struct osmo_sccp_link *link;
27 uint32_t conn_id;
28 int integrity_active;
29 struct gprs_ra_id ra_id;
Neels Hofmeyra1756f32016-05-20 21:59:55 +020030 enum nsap_addr_enc rab_assign_addr_enc;
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020031};
32
33enum iu_event_type {
34 IU_EVENT_RAB_ASSIGN,
35 IU_EVENT_SECURITY_MODE_COMPLETE,
36 IU_EVENT_IU_RELEASE, /* An actual Iu Release message was received */
37 IU_EVENT_LINK_INVALIDATED, /* A SUA link was lost or closed down */
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020038};
39
40extern const struct value_string iu_event_type_names[];
41static inline const char *iu_event_type_str(enum iu_event_type e)
42{
43 return get_value_string(iu_event_type_names, e);
44}
45
46/* Implementations of iu_recv_cb_t shall find the ue_conn_ctx in msg->dst. */
47typedef int (* iu_recv_cb_t )(struct msgb *msg, struct gprs_ra_id *ra_id,
Neels Hofmeyrbfa88782016-05-20 21:38:32 +020048 uint16_t *sai);
49
50typedef int (* iu_event_cb_t )(struct ue_conn_ctx *ue_ctx,
51 enum iu_event_type type, void *data);
52
53typedef int (* iu_rab_ass_resp_cb_t )(struct ue_conn_ctx *ue_ctx, uint8_t rab_id,
54 struct RANAP_RAB_SetupOrModifiedItemIEs_s *setup_ies);
55
56int iu_init(void *ctx, const char *listen_addr, uint16_t listen_port,
57 iu_recv_cb_t iu_recv_cb, iu_event_cb_t iu_event_cb);
58
59void iu_link_del(struct osmo_sccp_link *link);
60
61int iu_tx(struct msgb *msg, uint8_t sapi);
62
63int iu_page_cs(const char *imsi, const uint32_t *tmsi, uint16_t lac);
64int iu_page_ps(const char *imsi, const uint32_t *ptmsi, uint16_t lac, uint8_t rac);
65
66int iu_rab_act(struct ue_conn_ctx *ue_ctx, struct msgb *msg);
67int iu_rab_deact(struct ue_conn_ctx *ue_ctx, uint8_t rab_id);
68int iu_tx_sec_mode_cmd(struct ue_conn_ctx *uectx, struct gsm_auth_tuple *tp,
69 int send_ck, int new_key);
Neels Hofmeyra1756f32016-05-20 21:59:55 +020070int iu_tx_common_id(struct ue_conn_ctx *ue_ctx, const char *imsi);
71int iu_tx_release(struct ue_conn_ctx *ctx, const struct RANAP_Cause *cause);
Neels Hofmeyr9bc42ec2016-08-29 13:02:12 +020072
Neels Hofmeyra1756f32016-05-20 21:59:55 +020073void iu_vty_init(int iu_parent_node, enum nsap_addr_enc *rab_assign_addr_enc);
74int iu_vty_config_write(struct vty *vty, const char *indent);