59 lines
1.7 KiB
C
59 lines
1.7 KiB
C
#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 */
|
|
};
|
|
|
|
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,
|
|
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);
|
|
|
|
void iu_vty_init(int *asn_debug_p);
|