SGSN: move TLLI unassignment into separate function
Change-Id: Ia4df145ab03ebcaad70a13601cff60c488a5de54 Related: OS#1582
This commit is contained in:
parent
93408ae727
commit
3955025c2a
|
@ -218,6 +218,7 @@ int gprs_llgmm_reset_oldmsg(struct msgb* oldmsg, uint8_t sapi);
|
||||||
int gprs_llgmm_assign(struct gprs_llc_llme *llme,
|
int gprs_llgmm_assign(struct gprs_llc_llme *llme,
|
||||||
uint32_t old_tlli, uint32_t new_tlli,
|
uint32_t old_tlli, uint32_t new_tlli,
|
||||||
enum gprs_ciph_algo alg, const uint8_t *kc);
|
enum gprs_ciph_algo alg, const uint8_t *kc);
|
||||||
|
int gprs_llgmm_unassign(struct gprs_llc_llme *llme);
|
||||||
|
|
||||||
int gprs_llc_init(const char *cipher_plugin_path);
|
int gprs_llc_init(const char *cipher_plugin_path);
|
||||||
int gprs_llc_vty_init(void);
|
int gprs_llc_vty_init(void);
|
||||||
|
|
|
@ -982,8 +982,7 @@ rejected:
|
||||||
if (ctx)
|
if (ctx)
|
||||||
mm_ctx_cleanup_free(ctx, "GPRS ATTACH REJ");
|
mm_ctx_cleanup_free(ctx, "GPRS ATTACH REJ");
|
||||||
else
|
else
|
||||||
/* TLLI unassignment */
|
gprs_llgmm_unassign(llme);
|
||||||
gprs_llgmm_assign(llme, llme->tlli, 0xffffffff, GPRS_ALGO_GEA0, NULL);
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
@ -1286,11 +1285,8 @@ rejected:
|
||||||
if (mmctx)
|
if (mmctx)
|
||||||
mm_ctx_cleanup_free(mmctx, "GPRS RA UPDATE REJ");
|
mm_ctx_cleanup_free(mmctx, "GPRS RA UPDATE REJ");
|
||||||
else {
|
else {
|
||||||
if (llme) {
|
if (llme)
|
||||||
/* TLLI unassignment */
|
gprs_llgmm_unassign(llme);
|
||||||
gprs_llgmm_assign(llme, llme->tlli, 0xffffffff,
|
|
||||||
GPRS_ALGO_GEA0, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -1323,17 +1319,13 @@ static int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
||||||
/* 4.7.10 */
|
/* 4.7.10 */
|
||||||
if (gh->msg_type == GSM48_MT_GMM_STATUS) {
|
if (gh->msg_type == GSM48_MT_GMM_STATUS) {
|
||||||
/* TLLI unassignment */
|
/* TLLI unassignment */
|
||||||
gprs_llgmm_assign(llme, llme->tlli, 0xffffffff,
|
gprs_llgmm_unassign(llme);
|
||||||
GPRS_ALGO_GEA0, NULL);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't reply or establish a LLME on DETACH_ACK */
|
/* Don't reply or establish a LLME on DETACH_ACK */
|
||||||
if (gh->msg_type == GSM48_MT_GMM_DETACH_ACK) {
|
if (gh->msg_type == GSM48_MT_GMM_DETACH_ACK)
|
||||||
/* TLLI unassignment */
|
return gprs_llgmm_unassign(llme);
|
||||||
return gprs_llgmm_assign(llme, llme->tlli, 0xffffffff,
|
|
||||||
GPRS_ALGO_GEA0, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
gprs_llgmm_reset(llme);
|
gprs_llgmm_reset(llme);
|
||||||
|
|
||||||
|
@ -1343,8 +1335,7 @@ static int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
||||||
rc = gsm48_rx_gmm_det_req(NULL, msg);
|
rc = gsm48_rx_gmm_det_req(NULL, msg);
|
||||||
|
|
||||||
/* TLLI unassignment */
|
/* TLLI unassignment */
|
||||||
gprs_llgmm_assign(llme, llme->tlli, 0xffffffff,
|
gprs_llgmm_unassign(llme);
|
||||||
GPRS_ALGO_GEA0, NULL);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1352,8 +1343,7 @@ static int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
||||||
rc = sgsn_force_reattach_oldmsg(msg);
|
rc = sgsn_force_reattach_oldmsg(msg);
|
||||||
|
|
||||||
/* TLLI unassignment */
|
/* TLLI unassignment */
|
||||||
gprs_llgmm_assign(llme, llme->tlli, 0xffffffff,
|
gprs_llgmm_unassign(llme);
|
||||||
GPRS_ALGO_GEA0, NULL);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -745,6 +745,13 @@ int gprs_llgmm_assign(struct gprs_llc_llme *llme,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TLLI unassignment */
|
||||||
|
int gprs_llgmm_unassign(struct gprs_llc_llme *llme)
|
||||||
|
{
|
||||||
|
return gprs_llgmm_assign(llme, llme->tlli, 0xffffffff, GPRS_ALGO_GEA0,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/* Chapter 7.2.1.2 LLGMM-RESET.req */
|
/* Chapter 7.2.1.2 LLGMM-RESET.req */
|
||||||
int gprs_llgmm_reset(struct gprs_llc_llme *llme)
|
int gprs_llgmm_reset(struct gprs_llc_llme *llme)
|
||||||
{
|
{
|
||||||
|
|
|
@ -770,7 +770,7 @@ static void sgsn_llme_cleanup_free(struct gprs_llc_llme *llme)
|
||||||
/* No MM context found */
|
/* No MM context found */
|
||||||
LOGP(DGPRS, LOGL_INFO, "Deleting orphaned LLME, TLLI 0x%08x\n",
|
LOGP(DGPRS, LOGL_INFO, "Deleting orphaned LLME, TLLI 0x%08x\n",
|
||||||
llme->tlli);
|
llme->tlli);
|
||||||
gprs_llgmm_assign(llme, llme->tlli, 0xffffffff, GPRS_ALGO_GEA0, NULL);
|
gprs_llgmm_unassign(llme);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sgsn_llme_check_cb(void *data_)
|
static void sgsn_llme_check_cb(void *data_)
|
||||||
|
|
|
@ -222,7 +222,7 @@ static void test_llme(void)
|
||||||
OSMO_ASSERT(count(gprs_llme_list()) == 1);
|
OSMO_ASSERT(count(gprs_llme_list()) == 1);
|
||||||
|
|
||||||
/* unassign which should delete it*/
|
/* unassign which should delete it*/
|
||||||
gprs_llgmm_assign(lle->llme, lle->llme->tlli, 0xffffffff, GPRS_ALGO_GEA0, NULL);
|
gprs_llgmm_unassign(lle->llme);
|
||||||
|
|
||||||
/* Check that everything was cleaned up */
|
/* Check that everything was cleaned up */
|
||||||
OSMO_ASSERT(count(gprs_llme_list()) == 0);
|
OSMO_ASSERT(count(gprs_llme_list()) == 0);
|
||||||
|
|
Loading…
Reference in New Issue