aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/include
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-05-20 21:38:32 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-08-27 13:29:30 +0200
commitbfa8878a0799c2d6bf29740ee10e84a69a938749 (patch)
treec27ee6a293e33bda8023c02f24360f7c603bd7dd /openbsc/include
parent4ac3aee711ae88280c35c996b75bfff1f2415e87 (diff)
add libiu
Co-Authored by dwillmann, laforge, nhofmeyr Change-Id: Iffc26f9c73cb15463948f7435b72ac1747aabdb3
Diffstat (limited to 'openbsc/include')
-rw-r--r--openbsc/include/openbsc/Makefile.am3
-rw-r--r--openbsc/include/openbsc/iu.h60
2 files changed, 62 insertions, 1 deletions
diff --git a/openbsc/include/openbsc/Makefile.am b/openbsc/include/openbsc/Makefile.am
index ce5f768e9..90aa36455 100644
--- a/openbsc/include/openbsc/Makefile.am
+++ b/openbsc/include/openbsc/Makefile.am
@@ -18,7 +18,8 @@ noinst_HEADERS = abis_nm.h abis_rsl.h db.h gsm_04_08.h gsm_data.h \
gprs_gb_parse.h smpp.h meas_feed.h \
gprs_gsup_client.h bsc_msg_filter.h \
oap.h oap_messages.h \
- gtphub.h gprs_llc_xid.h gprs_sndcp.h
+ gtphub.h gprs_llc_xid.h gprs_sndcp.h \
+ iu.h
openbsc_HEADERS = gsm_04_08.h meas_rep.h bsc_api.h
openbscdir = $(includedir)/openbsc
diff --git a/openbsc/include/openbsc/iu.h b/openbsc/include/openbsc/iu.h
new file mode 100644
index 000000000..d0ab54027
--- /dev/null
+++ b/openbsc/include/openbsc/iu.h
@@ -0,0 +1,60 @@
+#pragma once
+
+#include <stdbool.h>
+
+struct sgsn_pdp_ctx;
+struct msgb;
+struct gprs_ra_id;
+
+struct RANAP_RAB_SetupOrModifiedItemIEs_s;
+struct RANAP_GlobalRNC_ID;
+
+struct ue_conn_ctx {
+ struct llist_head list;
+ struct osmo_sccp_link *link;
+ uint32_t conn_id;
+ int integrity_active;
+ struct gprs_ra_id ra_id;
+};
+
+enum iu_event_type {
+ IU_EVENT_RAB_ASSIGN,
+ IU_EVENT_SECURITY_MODE_COMPLETE,
+ IU_EVENT_IU_RELEASE, /* An actual Iu Release message was received */
+ IU_EVENT_LINK_INVALIDATED, /* A SUA link was lost or closed down */
+ /* FIXME: maybe IU_EVENT_IU_RELEASE and IU_EVENT_LINK_INVALIDATED
+ * should be combined to one generic event that simply means the
+ * ue_conn_ctx should no longer be used, for whatever reason. */
+};
+
+extern const struct value_string iu_event_type_names[];
+static inline const char *iu_event_type_str(enum iu_event_type e)
+{
+ return get_value_string(iu_event_type_names, e);
+}
+
+/* Implementations of iu_recv_cb_t shall find the ue_conn_ctx in msg->dst. */
+typedef int (* iu_recv_cb_t )(struct msgb *msg, struct gprs_ra_id *ra_id,
+ /* TODO "gprs_" in generic CS+PS domain ^ */
+ uint16_t *sai);
+
+typedef int (* iu_event_cb_t )(struct ue_conn_ctx *ue_ctx,
+ enum iu_event_type type, void *data);
+
+typedef int (* iu_rab_ass_resp_cb_t )(struct ue_conn_ctx *ue_ctx, uint8_t rab_id,
+ struct RANAP_RAB_SetupOrModifiedItemIEs_s *setup_ies);
+
+int iu_init(void *ctx, const char *listen_addr, uint16_t listen_port,
+ iu_recv_cb_t iu_recv_cb, iu_event_cb_t iu_event_cb);
+
+void iu_link_del(struct osmo_sccp_link *link);
+
+int iu_tx(struct msgb *msg, uint8_t sapi);
+
+int iu_page_cs(const char *imsi, const uint32_t *tmsi, uint16_t lac);
+int iu_page_ps(const char *imsi, const uint32_t *ptmsi, uint16_t lac, uint8_t rac);
+
+int iu_rab_act(struct ue_conn_ctx *ue_ctx, struct msgb *msg);
+int iu_rab_deact(struct ue_conn_ctx *ue_ctx, uint8_t rab_id);
+int iu_tx_sec_mode_cmd(struct ue_conn_ctx *uectx, struct gsm_auth_tuple *tp,
+ int send_ck, int new_key);