pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/33811 )
Change subject: WIP: sm: Handle GMMSM-MODIFY.ind primitive ......................................................................
WIP: sm: Handle GMMSM-MODIFY.ind primitive
Change-Id: Ic765b7a565cac4abcf34d8c6868e103971d17822 --- M src/sm/sm_prim.c 1 file changed, 43 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/11/33811/1
diff --git a/src/sm/sm_prim.c b/src/sm/sm_prim.c index b513aa7..41fd0ec 100644 --- a/src/sm/sm_prim.c +++ b/src/sm/sm_prim.c @@ -530,6 +530,37 @@ return rc; }
+/* Osmocom specific, GMMSM-MODIFY-IND */ +static int gprs_sm_prim_handle_gmmsm_modify_ind(struct osmo_gprs_gmm_prim *gmm_prim) +{ + struct osmo_gprs_gmm_gmmsm_prim *gmmsm = &gmm_prim->gmmsm; + struct gprs_sm_entity *sme; + struct gprs_sm_ms *ms; + int rc; + + sme = gprs_sm_find_sme_by_sess_id(gmmsm->sess_id); + if (!sme) { + LOGSM(LOGL_ERROR, "Rx GMMSM-MODIFY.ind for non existing SM Entity\n"); + return -EINVAL; + } + + ms = sme->ms; + + /* Update allocated PTMSI: */ + if (gmm_prim->gmmsm.modify_ind.allocated_ptmsi != GSM_RESERVED_TMSI) + ms->gmm.ptmsi = gmm_prim->gmmsm.modify_ind.allocated_ptmsi; + ms->gmm.ptmsi_sig = gmm_prim->gmmsm.modify_ind.allocated_ptmsi_sig; + /* Update allocated TLLI: */ + ms->gmm.tlli = gmm_prim->gmmsm.modify_ind.allocated_tlli; + /* Update the current RAI: */ + memcpy(&ms->gmm.ra, &gmm_prim->gmmsm.modify_ind.rai, sizeof(ms->gmm.ra)); + + /* TODO: Handle gmm_prim->gmmsm.modify_ind.pdp_ctx_status */ + /* TODO: Handle gmm_prim->gmmsm.modify_ind.rx_npdu_numbers_list */ + + return rc; +} + static int gprs_sm_prim_handle_gmmsm(struct osmo_gprs_gmm_prim *gmm_prim) { int rc = 0; @@ -543,6 +574,9 @@ case OSMO_PRIM(OSMO_GPRS_GMM_GMMSM_UNITDATA, PRIM_OP_INDICATION): rc = gprs_sm_prim_handle_gmmsm_unitdata_ind(gmm_prim); break; + case OSMO_PRIM(OSMO_GPRS_GMM_GMMSM_MODIFY, PRIM_OP_INDICATION): + rc = gprs_sm_prim_handle_gmmsm_modify_ind(gmm_prim); + break; default: rc = gprs_sm_prim_handle_gmm_unsupported(gmm_prim); rc = 1;