From a54358879f1ab928659568ebd6547fc65265f662 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 1 May 2016 12:43:21 +0200 Subject: Identify PDP context by RAB ID, not TEI When receiving an RAB-Assignment response from the RNC, we should use the RAB ID (=NSAPI) to resolve the PDP context. We cannot use the TEID, as the TEID chosen by the RNC for this RAB has no relationship to the TEID we were using for the RAB-Assignment request. TEIDs are local to each of the peer, like UDP port numbers. --- openbsc/src/gprs/gprs_sgsn.c | 13 ------------- openbsc/src/gprs/sgsn_libgtp.c | 8 ++------ 2 files changed, 2 insertions(+), 19 deletions(-) (limited to 'openbsc/src/gprs') diff --git a/openbsc/src/gprs/gprs_sgsn.c b/openbsc/src/gprs/gprs_sgsn.c index 70b0358e6..c34620183 100644 --- a/openbsc/src/gprs/gprs_sgsn.c +++ b/openbsc/src/gprs/gprs_sgsn.c @@ -311,19 +311,6 @@ struct sgsn_pdp_ctx *sgsn_pdp_ctx_by_tid(const struct sgsn_mm_ctx *mm, return NULL; } -/* look up PDP context by MM context and gtp TEI */ -struct sgsn_pdp_ctx *sgsn_pdp_ctx_by_tei(const struct sgsn_mm_ctx *mm, - uint32_t tei) -{ - struct sgsn_pdp_ctx *pdp; - - llist_for_each_entry(pdp, &mm->pdp_list, list) { - if (pdp->lib->teid_own == tei) - return pdp; - } - return NULL; -} - /* you don't want to use this directly, call sgsn_create_pdp_ctx() */ struct sgsn_pdp_ctx *sgsn_pdp_ctx_alloc(struct sgsn_mm_ctx *mm, uint8_t nsapi) diff --git a/openbsc/src/gprs/sgsn_libgtp.c b/openbsc/src/gprs/sgsn_libgtp.c index 214859948..4205fbc14 100644 --- a/openbsc/src/gprs/sgsn_libgtp.c +++ b/openbsc/src/gprs/sgsn_libgtp.c @@ -400,17 +400,13 @@ int sgsn_ranap_rab_ass_resp(struct sgsn_mm_ctx *ctx, RANAP_RAB_SetupOrModifiedIt { uint8_t rab_id; 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]; - if (item->iuTransportAssociation->present == RANAP_IuTransportAssociation_PR_gTP_TEI) { - gtp_tei = asn1str_to_u32(&item->iuTransportAssociation->choice.gTP_TEI); - pdp = sgsn_pdp_ctx_by_tei(ctx, gtp_tei); - } - + pdp = sgsn_pdp_ctx_by_nsapi(ctx, rab_id); if (!pdp) { + LOGP(DRANAP, LOGL_ERROR, "RAB Assignment Response for unknown RAB/NSAPI=%u\n", rab_id); return -1; } -- cgit v1.2.3