lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/43475?usp=email )
Change subject: libvlr: lu_fsm: split off creation and start of the LU FSM ......................................................................
libvlr: lu_fsm: split off creation and start of the LU FSM
Change-Id: I2ed3d7cc79b208d1810b4c03c4cb2d6cab83020f --- M include/osmocom/vlr/vlr.h M src/libvlr/vlr_lu_fsm.c M src/sgsn/gprs_rau_fsm.c 3 files changed, 25 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/75/43475/1
diff --git a/include/osmocom/vlr/vlr.h b/include/osmocom/vlr/vlr.h index d40d680..a931d48 100644 --- a/include/osmocom/vlr/vlr.h +++ b/include/osmocom/vlr/vlr.h @@ -312,6 +312,8 @@ bool is_r99, bool is_utran, bool assign_tmsi);
+int vlr_loc_start(struct osmo_fsm_inst *fi); + struct osmo_fsm_inst * vlr_ra_update(struct osmo_fsm_inst *parent, uint32_t parent_event_success, @@ -328,6 +330,8 @@ bool is_r99, bool is_utran, bool assign_tmsi);
+int vlr_ra_start(struct osmo_fsm_inst *fi); + void vlr_loc_update_cancel(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause fsm_cause, uint8_t gsm48_cause); diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c index e2b714b..1b1a1d2 100644 --- a/src/libvlr/vlr_lu_fsm.c +++ b/src/libvlr/vlr_lu_fsm.c @@ -1750,11 +1750,17 @@ LOGPFSML(fi, LOGL_ERROR, "Authentication off on UTRAN network. Good luck.\n");
- osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL); - return fi; }
+int vlr_loc_start(struct osmo_fsm_inst *fi) +{ + if (fi) + return osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL); + + return -ENOENT; +} + struct osmo_fsm_inst * vlr_ra_update(struct osmo_fsm_inst *parent, uint32_t parent_event_success, @@ -1808,11 +1814,17 @@ LOGPFSML(fi, LOGL_ERROR, "Authentication off on UTRAN network. Good luck.\n");
- osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL); - return fi; }
+int vlr_ra_start(struct osmo_fsm_inst *fi) +{ + if (fi) + return osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL); + + return -ENOENT; +} + void vlr_loc_update_cancel(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause fsm_cause, uint8_t gsm48_cause) diff --git a/src/sgsn/gprs_rau_fsm.c b/src/sgsn/gprs_rau_fsm.c index a9a79e6..1253975 100644 --- a/src/sgsn/gprs_rau_fsm.c +++ b/src/sgsn/gprs_rau_fsm.c @@ -77,10 +77,11 @@ static void gmm_rau_fsm_s_init(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct sgsn_mm_ctx *mmctx = gmm_rau_fsm_priv(fi); + struct osmo_fsm_inst *inst;
switch (event) { case GMM_RAU_E_UE_RAU_REQUEST: - mmctx->vsub->lu_fsm = vlr_ra_update( + inst = vlr_ra_update( mmctx->attach_rau.rau_fsm, GMM_RAU_E_VLR_TERM_SUCCESS, GMM_RAU_E_VLR_TERM_FAIL, NULL, sgsn->vlr, mmctx, @@ -99,6 +100,9 @@
osmo_tdef_fsm_inst_state_chg(fi, GMM_RAU_S_WAIT_VLR_ANSWER, gmm_rau_tdef_states, gmm_rau_tdefs, 0); osmo_fsm_inst_dispatch(mmctx->gmm_fsm, E_GMM_COMMON_PROC_INIT_REQ, NULL); + if (inst) + vlr_ra_start(inst); + break; default: OSMO_ASSERT(0);