aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmocom/ranap/iu_client.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/osmocom/ranap/iu_client.h')
-rw-r--r--include/osmocom/ranap/iu_client.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/include/osmocom/ranap/iu_client.h b/include/osmocom/ranap/iu_client.h
new file mode 100644
index 0000000..873b2d2
--- /dev/null
+++ b/include/osmocom/ranap/iu_client.h
@@ -0,0 +1,74 @@
+#pragma once
+
+#include <stdbool.h>
+
+#include <osmocom/core/linuxlist.h>
+#include <osmocom/gsm/gsm48.h>
+#include <osmocom/sigtran/sccp_sap.h>
+
+struct msgb;
+struct osmo_auth_vector;
+
+struct RANAP_RAB_SetupOrModifiedItemIEs_s;
+struct RANAP_Cause;
+
+struct ranap_iu_rnc;
+
+/* Debugging switches from asn1c and osmo-iuh */
+extern int asn_debug;
+extern int asn1_xer_print;
+
+enum ranap_nsap_addr_enc {
+ RANAP_NSAP_ADDR_ENC_X213,
+ RANAP_NSAP_ADDR_ENC_V4RAW,
+};
+
+struct ranap_ue_conn_ctx {
+ struct llist_head list;
+ struct ranap_iu_rnc *rnc;
+ uint32_t conn_id;
+ int integrity_active;
+ struct gprs_ra_id ra_id;
+ enum ranap_nsap_addr_enc rab_assign_addr_enc;
+};
+
+enum ranap_iu_event_type {
+ RANAP_IU_EVENT_RAB_ASSIGN,
+ RANAP_IU_EVENT_SECURITY_MODE_COMPLETE,
+ RANAP_IU_EVENT_IU_RELEASE, /* An actual Iu Release message was received */
+ RANAP_IU_EVENT_LINK_INVALIDATED, /* A SUA link was lost or closed down */
+};
+
+extern const struct value_string ranap_iu_event_type_names[];
+static inline const char *ranap_iu_event_type_str(enum ranap_iu_event_type e)
+{
+ return get_value_string(ranap_iu_event_type_names, e);
+}
+
+/* Implementations of iu_recv_cb_t shall find the ranap_ue_conn_ctx in msg->dst. */
+typedef int (* ranap_iu_recv_cb_t )(struct msgb *msg, struct gprs_ra_id *ra_id,
+ uint16_t *sai);
+
+typedef int (* ranap_iu_event_cb_t )(struct ranap_ue_conn_ctx *ue_ctx,
+ enum ranap_iu_event_type type, void *data);
+
+typedef int (* ranap_iu_rab_ass_resp_cb_t )(struct ranap_ue_conn_ctx *ue_ctx, uint8_t rab_id,
+ struct RANAP_RAB_SetupOrModifiedItemIEs_s *setup_ies);
+
+int ranap_iu_init(void *ctx, int log_subsystem, const char *sccp_user_name, struct osmo_sccp_instance *sccp,
+ ranap_iu_recv_cb_t iu_recv_cb, ranap_iu_event_cb_t iu_event_cb);
+
+int ranap_iu_tx(struct msgb *msg, uint8_t sapi);
+
+int ranap_iu_page_cs(const char *imsi, const uint32_t *tmsi, uint16_t lac);
+int ranap_iu_page_ps(const char *imsi, const uint32_t *ptmsi, uint16_t lac, uint8_t rac);
+
+int ranap_iu_rab_act(struct ranap_ue_conn_ctx *ue_ctx, struct msgb *msg);
+int ranap_iu_rab_deact(struct ranap_ue_conn_ctx *ue_ctx, uint8_t rab_id);
+int ranap_iu_tx_sec_mode_cmd(struct ranap_ue_conn_ctx *uectx, struct osmo_auth_vector *vec,
+ int send_ck, int new_key);
+int ranap_iu_tx_common_id(struct ranap_ue_conn_ctx *ue_ctx, const char *imsi);
+int ranap_iu_tx_release(struct ranap_ue_conn_ctx *ctx, const struct RANAP_Cause *cause);
+
+void ranap_iu_vty_init(int iu_parent_node, enum ranap_nsap_addr_enc *rab_assign_addr_enc);
+int ranap_iu_vty_config_write(struct vty *vty, const char *indent);