pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmo-gprs/+/33112 )
Change subject: sm: Handle GMMSM-Release.ind
......................................................................
sm: Handle GMMSM-Release.ind
Change-Id: Ia2ac9dbffe29c3509f1088ceb327569a331ec598
---
M include/osmocom/gprs/sm/sm_ms_fsm.h
M include/osmocom/gprs/sm/sm_prim.h
M src/sm/sm_ms_fsm.c
M src/sm/sm_prim.c
4 files changed, 54 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/12/33112/1
diff --git a/include/osmocom/gprs/sm/sm_ms_fsm.h b/include/osmocom/gprs/sm/sm_ms_fsm.h
index d1d4689..2ea9bd8 100644
--- a/include/osmocom/gprs/sm/sm_ms_fsm.h
+++ b/include/osmocom/gprs/sm/sm_ms_fsm.h
@@ -29,6 +29,7 @@
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 {
diff --git a/include/osmocom/gprs/sm/sm_prim.h b/include/osmocom/gprs/sm/sm_prim.h
index d4e17a4..127dd35 100644
--- a/include/osmocom/gprs/sm/sm_prim.h
+++ b/include/osmocom/gprs/sm/sm_prim.h
@@ -128,7 +128,7 @@
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 @@
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 @@
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 {
diff --git a/src/sm/sm_ms_fsm.c b/src/sm/sm_ms_fsm.c
index aaaa008..dc063b9 100644
--- a/src/sm/sm_ms_fsm.c
+++ b/src/sm/sm_ms_fsm.c
@@ -98,6 +98,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
.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 @@
.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 @@
},
[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 @@
{ 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 }
};
diff --git a/src/sm/sm_prim.c b/src/sm/sm_prim.c
index 158959e..b513aa7 100644
--- a/src/sm/sm_prim.c
+++ b/src/sm/sm_prim.c
@@ -493,6 +493,23 @@
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 @@
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;
--
To view, visit
https://gerrit.osmocom.org/c/libosmo-gprs/+/33112
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-gprs
Gerrit-Branch: master
Gerrit-Change-Id: Ia2ac9dbffe29c3509f1088ceb327569a331ec598
Gerrit-Change-Number: 33112
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-MessageType: newchange