diff options
author | Oliver Smith <osmith@sysmocom.de> | 2022-11-17 13:59:51 +0100 |
---|---|---|
committer | Oliver Smith <osmith@sysmocom.de> | 2022-11-17 14:08:30 +0100 |
commit | 55e3dc8ec82ce0707b4811b8ce984572416de722 (patch) | |
tree | fb355f13b9521867fcda9e59003eff9b22b92078 | |
parent | acd967a177414a2dff0de946f58a0bdefc9705da (diff) |
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
-rw-r--r-- | src/sgsn/sgsn_libgtp.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/sgsn/sgsn_libgtp.c b/src/sgsn/sgsn_libgtp.c index 530080096..033637d9f 100644 --- a/src/sgsn/sgsn_libgtp.c +++ b/src/sgsn/sgsn_libgtp.c @@ -768,15 +768,24 @@ static int cb_data_ind(struct pdp_t *lib, void *packet, unsigned int len) msgb_free(msg); return -1; case ST_GMM_REGISTERED_NORMAL: - OSMO_ASSERT(mm->gb.mm_state_fsm->state != ST_MM_IDLE); - if (mm->gb.mm_state_fsm->state == ST_MM_STANDBY) { + switch (mm->gb.mm_state_fsm->state) { + 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", osmo_fsm_inst_state_name(mm->gmm_fsm), osmo_fsm_inst_state_name(mm->gb.mm_state_fsm)); gprs_gb_page_ps_ra(mm); - } - /* FIXME: queue the packet we received from GTP */ + /* FIXME: queue the packet we received from GTP */ + break; + } break; default: LOGP(DGPRS, LOGL_ERROR, "GTP DATA IND for TLLI %08X in state " |