From d04db9d90758d2abd572336942fd7e9246d41a22 Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Wed, 16 Mar 2016 10:35:09 +0100 Subject: libiu: Replace RAB assignment response callback with a general one The new iu event callback will now be called for RAB assignment response, IU release and security mode complete --- openbsc/src/gprs/sgsn_libgtp.c | 29 +++++++++++++++++++++++++++-- openbsc/src/gprs/sgsn_main.c | 4 ++-- 2 files changed, 29 insertions(+), 4 deletions(-) (limited to 'openbsc/src/gprs') diff --git a/openbsc/src/gprs/sgsn_libgtp.c b/openbsc/src/gprs/sgsn_libgtp.c index e48c103f1..1077cce5d 100644 --- a/openbsc/src/gprs/sgsn_libgtp.c +++ b/openbsc/src/gprs/sgsn_libgtp.c @@ -393,14 +393,16 @@ reject: } /* Callback for RAB assignment response */ -int sgsn_ranap_rab_ass_resp(struct ue_conn_ctx *ctx, uint8_t rab_id, RANAP_RAB_SetupOrModifiedItemIEs_t *setup_ies) +int sgsn_ranap_rab_ass_resp(struct ue_conn_ctx *ctx, RANAP_RAB_SetupOrModifiedItemIEs_t *setup_ies) { - int rc = -1; + uint8_t rab_id; struct sgsn_mm_ctx *mm; struct sgsn_pdp_ctx *pdp = NULL; uint32_t gtp_tei; RANAP_RAB_SetupOrModifiedItem_t *item = &setup_ies->raB_SetupOrModifiedItem; + rab_id = item->rAB_ID.buf[0]; + mm = sgsn_mm_ctx_by_ue_ctx(ctx); /* XXX: Error handling */ @@ -427,6 +429,29 @@ int sgsn_ranap_rab_ass_resp(struct ue_conn_ctx *ctx, uint8_t rab_id, RANAP_RAB_S } +int sgsn_ranap_iu_event(struct ue_conn_ctx *ctx, int type, void *data) +{ + int rc = -1; + + switch (type) { + case IU_EVENT_RAB_ASSIGN: + rc = sgsn_ranap_rab_ass_resp(ctx, (RANAP_RAB_SetupOrModifiedItemIEs_t *)data); + break; + case IU_EVENT_IU_RELEASE: + /* Clean up ue_conn_ctx here */ + break; + case IU_EVENT_SECURITY_MODE_COMPLETE: + /* Continue authentication here */ + break; + default: + LOGP(DRANAP, LOGL_NOTICE, "Unknown event received: %i\n", type); + rc = -1; + break; + } + return rc; +} + + /* Confirmation of a PDP Context Delete */ static int delete_pdp_conf(struct pdp_t *pdp, void *cbp, int cause) { diff --git a/openbsc/src/gprs/sgsn_main.c b/openbsc/src/gprs/sgsn_main.c index ff9841205..01a11218e 100644 --- a/openbsc/src/gprs/sgsn_main.c +++ b/openbsc/src/gprs/sgsn_main.c @@ -305,7 +305,7 @@ static const struct log_info gprs_log_info = { int asn_debug; -int sgsn_ranap_rab_ass_resp(struct ue_conn_ctx *ctx, uint8_t rab_id, struct RANAP_RAB_SetupOrModifiedItemIEs_s *setup_ies); +int sgsn_ranap_iu_event(struct ue_conn_ctx *ctx, int type, void *data); int main(int argc, char **argv) { @@ -422,7 +422,7 @@ int main(int argc, char **argv) } asn_debug = 0; - iu_init(tall_bsc_ctx, "127.0.0.2", 14001, gsm0408_gprs_rcvmsg_iu, sgsn_ranap_rab_ass_resp); + iu_init(tall_bsc_ctx, "127.0.0.2", 14001, gsm0408_gprs_rcvmsg_iu, sgsn_ranap_iu_event); if (daemonize) { rc = osmo_daemonize(); -- cgit v1.2.3