summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2016-05-01 10:59:12 +0200
committerHarald Welte <laforge@gnumonks.org>2016-05-01 15:35:52 +0200
commit3b922064a478f3a403d3a40d3f22c9a5675390fa (patch)
tree4dc1ebe04dcb343ce606925762bae300f2c4f9a8
parent5b3fd465d16547f1175b211dd5366123f260fedb (diff)
SGSN: Use PDP Context NSAPI as RAB ID
As Dieter has pointed out, the RANAP spec requires the RAB ID to be equal to the NSAPI of the PDP context for which it is established.
-rw-r--r--openbsc/include/openbsc/gprs_sgsn.h2
-rw-r--r--openbsc/src/gprs/gprs_gmm.c4
-rw-r--r--openbsc/src/gprs/gprs_sgsn.c6
-rw-r--r--openbsc/src/gprs/sgsn_libgtp.c6
4 files changed, 2 insertions, 16 deletions
diff --git a/openbsc/include/openbsc/gprs_sgsn.h b/openbsc/include/openbsc/gprs_sgsn.h
index 2bab4c2c2..495836be7 100644
--- a/openbsc/include/openbsc/gprs_sgsn.h
+++ b/openbsc/include/openbsc/gprs_sgsn.h
@@ -150,7 +150,6 @@ struct sgsn_mm_ctx {
/* Voice Support Match Indicator */
struct ue_conn_ctx *ue_ctx;
struct service_info service;
- uint8_t rab_id;
} iu;
/* VLR number */
uint32_t new_sgsn_addr;
@@ -227,7 +226,6 @@ struct sgsn_mm_ctx *sgsn_mm_ctx_by_tlli(uint32_t tlli,
struct sgsn_mm_ctx *sgsn_mm_ctx_by_ptmsi(uint32_t tmsi);
struct sgsn_mm_ctx *sgsn_mm_ctx_by_imsi(const char *imsi);
struct sgsn_mm_ctx *sgsn_mm_ctx_by_ue_ctx(const void *uectx);
-uint8_t rab_id_from_mm_ctx(struct sgsn_mm_ctx *mm);
/* look-up by matching TLLI and P-TMSI (think twice before using this) */
struct sgsn_mm_ctx *sgsn_mm_ctx_by_tlli_and_ptmsi(uint32_t tlli,
diff --git a/openbsc/src/gprs/gprs_gmm.c b/openbsc/src/gprs/gprs_gmm.c
index 208faa93a..d734df014 100644
--- a/openbsc/src/gprs/gprs_gmm.c
+++ b/openbsc/src/gprs/gprs_gmm.c
@@ -709,10 +709,8 @@ void activate_pdp_rabs(struct sgsn_mm_ctx *ctx)
{
/* Send RAB activation requests for all PDP contexts */
struct sgsn_pdp_ctx *pdp;
- uint8_t rab_id;
llist_for_each_entry(pdp, &ctx->pdp_list, list) {
- rab_id = rab_id_from_mm_ctx(ctx);
- iu_rab_act_ps(rab_id, pdp, 1);
+ iu_rab_act_ps(pdp->nsapi, pdp, 1);
}
}
diff --git a/openbsc/src/gprs/gprs_sgsn.c b/openbsc/src/gprs/gprs_sgsn.c
index 76ddd9199..70b0358e6 100644
--- a/openbsc/src/gprs/gprs_sgsn.c
+++ b/openbsc/src/gprs/gprs_sgsn.c
@@ -105,11 +105,6 @@ struct sgsn_mm_ctx *sgsn_mm_ctx_by_ue_ctx(const void *uectx)
return NULL;
}
-uint8_t rab_id_from_mm_ctx(struct sgsn_mm_ctx *mm)
-{
- return mm->iu.rab_id++;
-}
-
/* look-up a SGSN MM context based on TLLI + RAI */
struct sgsn_mm_ctx *sgsn_mm_ctx_by_tlli(uint32_t tlli,
const struct gprs_ra_id *raid)
@@ -208,7 +203,6 @@ struct sgsn_mm_ctx *sgsn_mm_ctx_alloc_iu(void *uectx)
ctx->ran_type = MM_CTX_T_UTRAN_Iu;
ctx->iu.ue_ctx = uectx;
- ctx->iu.rab_id = 1;
ctx->iu.new_key = 1;
ctx->mm_state = GMM_DEREGISTERED;
ctx->auth_triplet.key_seq = GSM_KEY_SEQ_INVAL;
diff --git a/openbsc/src/gprs/sgsn_libgtp.c b/openbsc/src/gprs/sgsn_libgtp.c
index 9277a5dcc..214859948 100644
--- a/openbsc/src/gprs/sgsn_libgtp.c
+++ b/openbsc/src/gprs/sgsn_libgtp.c
@@ -370,10 +370,7 @@ static int create_pdp_conf(struct pdp_t *pdp, void *cbp, int cause)
return send_act_pdp_cont_acc(pctx);
} else {
/* Activate a radio bearer */
- uint8_t rab_id;
-
- rab_id = rab_id_from_mm_ctx(pctx);
- iu_rab_act_ps(rab_id, pctx, 1);
+ iu_rab_act_ps(pdp->nsapi, pctx, 1);
return 0;
}
@@ -454,7 +451,6 @@ static int delete_pdp_conf(struct pdp_t *pdp, void *cbp, int cause)
sndcp_sm_deactivate_ind(&pctx->mm->gb.llme->lle[pctx->sapi], pctx->nsapi);
} else {
/* Dectivate a radio bearer */
- /* TODO: Save and use rab_id */
iu_rab_deact(pctx->mm->iu.ue_ctx, 1);
}