sm: Handle GMMSM-Release.ind
Change-Id: Ia2ac9dbffe29c3509f1088ceb327569a331ec598
This commit is contained in:
parent
4c225a7912
commit
7b9654c4d0
|
@ -29,6 +29,7 @@ enum gprs_sm_ms_fsm_events {
|
|||
GPRS_SM_MS_EV_TX_MOD_PDP_CTX_REQ,
|
||||
GPRS_SM_MS_EV_RX_MOD_PDP_CTX_REJ,
|
||||
GPRS_SM_MS_EV_RX_MOD_PDP_CTX_ACC,
|
||||
GPRS_SM_MS_EV_GMM_RELEASE_IND, /* TS 24.007 9.5.1.4 GMMSM-RELEASE-IND */
|
||||
};
|
||||
|
||||
struct gprs_sm_ms_fsm_ctx {
|
||||
|
|
|
@ -128,7 +128,7 @@ struct osmo_gprs_sm_smreg_prim {
|
|||
uint8_t pco[OSMO_GPRS_SM_PCO_MAXLEN];
|
||||
uint8_t pco_len;
|
||||
/* TODO: MBMS protocol configuration options*/
|
||||
} deact_req;
|
||||
} pdp_deact_req;
|
||||
|
||||
|
||||
/* OSMO_GPRS_SM_SMREG_PDP_DEACTIVATE | Cnf, 6.5.1.6 */
|
||||
|
@ -138,7 +138,7 @@ struct osmo_gprs_sm_smreg_prim {
|
|||
uint8_t pco[OSMO_GPRS_SM_PCO_MAXLEN];
|
||||
uint8_t pco_len;
|
||||
/* TODO: MBMS protocol configuration options*/
|
||||
} deact_cnf;
|
||||
} pdp_deact_cnf;
|
||||
|
||||
/* OSMO_GPRS_SM_SMREG_PDP_DEACTIVATE | Ind, 6.5.1.7 */
|
||||
struct {
|
||||
|
@ -149,7 +149,7 @@ struct osmo_gprs_sm_smreg_prim {
|
|||
uint8_t pco[OSMO_GPRS_SM_PCO_MAXLEN];
|
||||
uint8_t pco_len;
|
||||
/* TODO: MBMS protocol configuration options */
|
||||
} deact_ind;
|
||||
} pdp_deact_ind;
|
||||
|
||||
/* OSMO_GPRS_SM_SMREG_PDP_MODIFY | Ind, 6.5.1.8 */
|
||||
struct {
|
||||
|
|
|
@ -98,6 +98,9 @@ static void st_sm_ms_pdp_active_pending(struct osmo_fsm_inst *fi, uint32_t event
|
|||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_ACTIVE);
|
||||
gprs_sm_submit_smreg_pdp_act_cnf(ctx->sme, (enum gsm48_gsm_cause)0);
|
||||
break;
|
||||
case GPRS_SM_MS_EV_GMM_RELEASE_IND:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_INACTIVE);
|
||||
break;
|
||||
default:
|
||||
OSMO_ASSERT(0);
|
||||
}
|
||||
|
@ -116,6 +119,9 @@ static void st_sm_ms_pdp_active(struct osmo_fsm_inst *fi, uint32_t event, void *
|
|||
case GPRS_SM_MS_EV_TX_MOD_PDP_CTX_REQ:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_MODIFY_PENDING);
|
||||
break;
|
||||
case GPRS_SM_MS_EV_GMM_RELEASE_IND:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_INACTIVE);
|
||||
break;
|
||||
default:
|
||||
OSMO_ASSERT(0);
|
||||
}
|
||||
|
@ -134,6 +140,9 @@ static void st_sm_ms_pdp_modify_pending(struct osmo_fsm_inst *fi, uint32_t event
|
|||
case GPRS_SM_MS_EV_RX_MOD_PDP_CTX_ACC:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_ACTIVE);
|
||||
break;
|
||||
case GPRS_SM_MS_EV_GMM_RELEASE_IND:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_INACTIVE);
|
||||
break;
|
||||
default:
|
||||
OSMO_ASSERT(0);
|
||||
}
|
||||
|
@ -145,6 +154,9 @@ static void st_sm_ms_pdp_inactive_pending(struct osmo_fsm_inst *fi, uint32_t eve
|
|||
case GPRS_SM_MS_EV_RX_DEACT_PDP_CTX_ACC:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_INACTIVE);
|
||||
break;
|
||||
case GPRS_SM_MS_EV_GMM_RELEASE_IND:
|
||||
sm_ms_fsm_state_chg(fi, GPRS_SM_MS_ST_PDP_INACTIVE);
|
||||
break;
|
||||
default:
|
||||
OSMO_ASSERT(0);
|
||||
}
|
||||
|
@ -201,7 +213,8 @@ static struct osmo_fsm_state sm_ms_fsm_states[] = {
|
|||
X(GPRS_SM_MS_EV_RX_GMM_ESTABLISH_REJ) |
|
||||
X(GPRS_SM_MS_EV_RX_ACT_PDP_CTX_REJ) |
|
||||
X(GPRS_SM_MS_EV_RX_ACT_PDP_CTX_ACC) |
|
||||
X(GPRS_SM_MS_EV_NSAPI_ACTIVATED),
|
||||
X(GPRS_SM_MS_EV_NSAPI_ACTIVATED) |
|
||||
X(GPRS_SM_MS_EV_GMM_RELEASE_IND),
|
||||
.out_state_mask =
|
||||
X(GPRS_SM_MS_ST_PDP_INACTIVE) |
|
||||
X(GPRS_SM_MS_ST_PDP_ACTIVE_PENDING) |
|
||||
|
@ -214,7 +227,8 @@ static struct osmo_fsm_state sm_ms_fsm_states[] = {
|
|||
.in_event_mask =
|
||||
X(GPRS_SM_MS_EV_RX_DEACT_PDP_CTX_REQ) |
|
||||
X(GPRS_SM_MS_EV_TX_DEACT_PDP_CTX_REQ)|
|
||||
X(GPRS_SM_MS_EV_TX_MOD_PDP_CTX_REQ),
|
||||
X(GPRS_SM_MS_EV_TX_MOD_PDP_CTX_REQ) |
|
||||
X(GPRS_SM_MS_EV_GMM_RELEASE_IND),
|
||||
.out_state_mask =
|
||||
X(GPRS_SM_MS_ST_PDP_INACTIVE) |
|
||||
X(GPRS_SM_MS_ST_PDP_INACTIVE_PENDING) |
|
||||
|
@ -226,7 +240,8 @@ static struct osmo_fsm_state sm_ms_fsm_states[] = {
|
|||
.in_event_mask =
|
||||
X(GPRS_SM_MS_EV_RX_DEACT_PDP_CTX_REQ) |
|
||||
X(GPRS_SM_MS_EV_RX_MOD_PDP_CTX_REJ) |
|
||||
X(GPRS_SM_MS_EV_RX_MOD_PDP_CTX_ACC),
|
||||
X(GPRS_SM_MS_EV_RX_MOD_PDP_CTX_ACC) |
|
||||
X(GPRS_SM_MS_EV_GMM_RELEASE_IND),
|
||||
.out_state_mask =
|
||||
X(GPRS_SM_MS_ST_PDP_INACTIVE) |
|
||||
X(GPRS_SM_MS_ST_PDP_ACTIVE) |
|
||||
|
@ -236,7 +251,8 @@ static struct osmo_fsm_state sm_ms_fsm_states[] = {
|
|||
},
|
||||
[GPRS_SM_MS_ST_PDP_INACTIVE_PENDING] = {
|
||||
.in_event_mask =
|
||||
X(GPRS_SM_MS_EV_RX_DEACT_PDP_CTX_ACC),
|
||||
X(GPRS_SM_MS_EV_RX_DEACT_PDP_CTX_ACC) |
|
||||
X(GPRS_SM_MS_EV_GMM_RELEASE_IND),
|
||||
.out_state_mask =
|
||||
X(GPRS_SM_MS_ST_PDP_INACTIVE),
|
||||
.name = "PDP_INACTIVE_PENDING",
|
||||
|
@ -257,6 +273,7 @@ const struct value_string sm_ms_fsm_event_names[] = {
|
|||
{ GPRS_SM_MS_EV_TX_MOD_PDP_CTX_REQ, "TX_MOD_PDP_CTX_REQ" },
|
||||
{ GPRS_SM_MS_EV_RX_MOD_PDP_CTX_REJ, "RX_MOD_PDP_CTX_REJ" },
|
||||
{ GPRS_SM_MS_EV_RX_MOD_PDP_CTX_ACC, "RX_MOD_PDP_CTX_ACC" },
|
||||
{ GPRS_SM_MS_EV_GMM_RELEASE_IND, "GMM_RELEASE_IND"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -493,6 +493,23 @@ static int gprs_sm_prim_handle_gmmsm_establish_cnf(struct osmo_gprs_gmm_prim *gm
|
|||
return rc;
|
||||
}
|
||||
|
||||
/* TS 24.007 9.5.1.2 GMMSM-RELEASE-IND */
|
||||
static int gprs_sm_prim_handle_gmmsm_release_ind(struct osmo_gprs_gmm_prim *gmm_prim)
|
||||
{
|
||||
struct osmo_gprs_gmm_gmmsm_prim *gmmsm = &gmm_prim->gmmsm;
|
||||
struct gprs_sm_entity *sme;
|
||||
int rc;
|
||||
|
||||
sme = gprs_sm_find_sme_by_sess_id(gmmsm->sess_id);
|
||||
if (!sme) {
|
||||
LOGSM(LOGL_ERROR, "Rx GMMSM-RELEASE.ind for non existing SM Entity sess_id=%u\n", gmmsm->sess_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
rc = osmo_fsm_inst_dispatch(sme->ms_fsm.fi, GPRS_SM_MS_EV_GMM_RELEASE_IND, NULL);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* TS 24.007 9.5.1.6 GMMSM-UNITDATA-IND */
|
||||
static int gprs_sm_prim_handle_gmmsm_unitdata_ind(struct osmo_gprs_gmm_prim *gmm_prim)
|
||||
{
|
||||
|
@ -520,6 +537,9 @@ static int gprs_sm_prim_handle_gmmsm(struct osmo_gprs_gmm_prim *gmm_prim)
|
|||
case OSMO_PRIM(OSMO_GPRS_GMM_GMMSM_ESTABLISH, PRIM_OP_CONFIRM):
|
||||
rc = gprs_sm_prim_handle_gmmsm_establish_cnf(gmm_prim);
|
||||
break;
|
||||
case OSMO_PRIM(OSMO_GPRS_GMM_GMMSM_RELEASE, PRIM_OP_INDICATION):
|
||||
rc = gprs_sm_prim_handle_gmmsm_release_ind(gmm_prim);
|
||||
break;
|
||||
case OSMO_PRIM(OSMO_GPRS_GMM_GMMSM_UNITDATA, PRIM_OP_INDICATION):
|
||||
rc = gprs_sm_prim_handle_gmmsm_unitdata_ind(gmm_prim);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue