sgsn_libgtp: cb_data_ind: remove mm_idle assert

Log an error message and drop the packet instead of asserting if
mm state fsm is in ST_MM_IDLE while the gmm fsm is in
ST_GMM_REGISTERED_NORMAL.

Fixes: OS#5725
Change-Id: I9dab98917c622b36dae22399bb359d747a598208
This commit is contained in:
Oliver Smith 2022-11-17 13:59:51 +01:00
parent acd967a177
commit 55e3dc8ec8
1 changed files with 13 additions and 4 deletions

View File

@ -768,15 +768,24 @@ static int cb_data_ind(struct pdp_t *lib, void *packet, unsigned int len)
msgb_free(msg); msgb_free(msg);
return -1; return -1;
case ST_GMM_REGISTERED_NORMAL: case ST_GMM_REGISTERED_NORMAL:
OSMO_ASSERT(mm->gb.mm_state_fsm->state != ST_MM_IDLE); switch (mm->gb.mm_state_fsm->state) {
if (mm->gb.mm_state_fsm->state == ST_MM_STANDBY) { case ST_MM_IDLE:
LOGP(DGPRS, LOGL_ERROR, "Dropping DL packet for MS in MM state %s\n",
osmo_fsm_inst_state_name(mm->gb.mm_state_fsm));
msgb_free(msg);
return -1;
case ST_MM_READY:
/* Go ahead */
break;
case ST_MM_STANDBY:
LOGMMCTXP(LOGL_INFO, mm, "Paging MS in GMM state %s, MM state %s\n", LOGMMCTXP(LOGL_INFO, mm, "Paging MS in GMM state %s, MM state %s\n",
osmo_fsm_inst_state_name(mm->gmm_fsm), osmo_fsm_inst_state_name(mm->gmm_fsm),
osmo_fsm_inst_state_name(mm->gb.mm_state_fsm)); osmo_fsm_inst_state_name(mm->gb.mm_state_fsm));
gprs_gb_page_ps_ra(mm); gprs_gb_page_ps_ra(mm);
}
/* FIXME: queue the packet we received from GTP */ /* FIXME: queue the packet we received from GTP */
break;
}
break; break;
default: default:
LOGP(DGPRS, LOGL_ERROR, "GTP DATA IND for TLLI %08X in state " LOGP(DGPRS, LOGL_ERROR, "GTP DATA IND for TLLI %08X in state "