pespin has uploaded this change for review.
gmm: Provide allocated PTMSI & TLLI to upper layers
Upper layers (SM or app) may need access to PTMSI or TLLI.
PTMSI:
- App may want to store it somewhere in order to reuse it next time
it wants to GMM Attach.
TLLI:
- App will need the TLLI to identify the MS when sending/receiving
primitives over SN SAP (app<->SNDCP).
- SM layer will need the TLLI to communicate over SNSM SAP (SM<->SNDCP),
as well as relay the information to the app if the GMM Attach happens
implicitly over SMREG-Act_Pdp_Ctx.req -> GMMSM-Establish-Req.
Change-Id: I552c43c55409773e2d13b72cba45a866165f203f
---
M include/osmocom/gprs/gmm/gmm_prim.h
M include/osmocom/gprs/gmm/gmm_private.h
M src/gmm/gmm.c
M src/gmm/gmm_ms_fsm.c
M src/gmm/gmm_prim.c
5 files changed, 35 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/35/32635/1
diff --git a/include/osmocom/gprs/gmm/gmm_prim.h b/include/osmocom/gprs/gmm/gmm_prim.h
index 7e50c58..42dc90a 100644
--- a/include/osmocom/gprs/gmm/gmm_prim.h
+++ b/include/osmocom/gprs/gmm/gmm_prim.h
@@ -117,6 +117,7 @@
struct {
/* PLMNs MT-caps, attach-type. */
uint32_t allocated_ptmsi;
+ uint32_t allocated_tlli;
} acc;
struct {
uint8_t cause; /* See enum gsm48_gsm_cause */
@@ -219,6 +220,8 @@
union {
struct {
/* PLMNs MT-caps, attach-type. */
+ uint32_t allocated_ptmsi;
+ uint32_t allocated_tlli;
} acc;
struct {
uint8_t cause;
diff --git a/include/osmocom/gprs/gmm/gmm_private.h b/include/osmocom/gprs/gmm/gmm_private.h
index df97e1d..57658e9 100644
--- a/include/osmocom/gprs/gmm/gmm_private.h
+++ b/include/osmocom/gprs/gmm/gmm_private.h
@@ -118,7 +118,7 @@
int gprs_gmm_tx_ciph_auth_resp(const struct gprs_gmm_entity *gmme, const uint8_t *sres);
int gprs_gmm_submit_gmmreg_attach_cnf(struct gprs_gmm_entity *gmme, bool accepted, uint8_t cause);
-int gprs_gmm_submit_gmmsm_establish_cnf(struct gprs_gmm_entity *gmme, uint32_t sess_id, bool accepted, uint8_t cause);
+int gprs_gmm_submit_gmmsm_establish_cnf(struct gprs_gmm_entity *gmme, bool accepted, uint8_t cause);
int gprs_gmm_submit_llgmm_assing_req(const struct gprs_gmm_entity *gmme);
#define LOGGMME(gmme, level, fmt, args...) \
diff --git a/src/gmm/gmm.c b/src/gmm/gmm.c
index 0070dda..faba983 100644
--- a/src/gmm/gmm.c
+++ b/src/gmm/gmm.c
@@ -288,6 +288,7 @@
gmm_prim_tx->gmmreg.attach_cnf.accepted = accepted;
if (accepted) {
gmm_prim_tx->gmmreg.attach_cnf.acc.allocated_ptmsi = gmme->ptmsi;
+ gmm_prim_tx->gmmreg.attach_cnf.acc.allocated_tlli = gmme->tlli;
} else {
gmm_prim_tx->gmmreg.attach_cnf.rej.cause = cause;
}
@@ -323,12 +324,16 @@
return rc;
}
-int gprs_gmm_submit_gmmsm_establish_cnf(struct gprs_gmm_entity *gmme, uint32_t sess_id, bool accepted, uint8_t cause)
+int gprs_gmm_submit_gmmsm_establish_cnf(struct gprs_gmm_entity *gmme, bool accepted, uint8_t cause)
{
struct osmo_gprs_gmm_prim *gmm_prim_tx;
int rc;
- gmm_prim_tx = gprs_gmm_prim_alloc_gmmsm_establish_cnf(sess_id, cause);
+ gmm_prim_tx = gprs_gmm_prim_alloc_gmmsm_establish_cnf(gmme->sess_id, cause);
+ if (accepted) {
+ gmm_prim_tx->gmmsm.establish_cnf.acc.allocated_ptmsi = gmme->ptmsi;
+ gmm_prim_tx->gmmsm.establish_cnf.acc.allocated_tlli = gmme->tlli;
+ }
rc = gprs_gmm_prim_call_up_cb(gmm_prim_tx);
return rc;
diff --git a/src/gmm/gmm_ms_fsm.c b/src/gmm/gmm_ms_fsm.c
index f553ad3..053f8fc 100644
--- a/src/gmm/gmm_ms_fsm.c
+++ b/src/gmm/gmm_ms_fsm.c
@@ -129,9 +129,7 @@
if (att.implicit_att) {
/* Submit GMMSM-ESTABLISH-CNF as per TS 24.007 Annex C.3 */
- rc = gprs_gmm_submit_gmmsm_establish_cnf(ctx->gmme,
- ctx->gmme->sess_id,
- false, cause);
+ rc = gprs_gmm_submit_gmmsm_establish_cnf(ctx->gmme, false, cause);
if (rc < 0)
return;
}
@@ -147,7 +145,7 @@
}
if (ctx->attach.implicit_att) {
/* Submit GMMSM-ESTABLISH-CNF as per TS 24.007 Annex C.3 */
- rc = gprs_gmm_submit_gmmsm_establish_cnf(ctx->gmme, ctx->gmme->sess_id, true, 0);
+ rc = gprs_gmm_submit_gmmsm_establish_cnf(ctx->gmme, true, 0);
if (rc < 0)
return;
}
diff --git a/src/gmm/gmm_prim.c b/src/gmm/gmm_prim.c
index 573b568..ed8fed6 100644
--- a/src/gmm/gmm_prim.c
+++ b/src/gmm/gmm_prim.c
@@ -489,7 +489,7 @@
gmme->sess_id = gmm_prim->gmmsm.sess_id;
if (gmme->ms_fsm.fi->state == GPRS_GMM_MS_ST_REGISTERED) {
- rc = gprs_gmm_submit_gmmsm_establish_cnf(gmme, gmm_prim->gmmsm.sess_id, true, 0);
+ rc = gprs_gmm_submit_gmmsm_establish_cnf(gmme, true, 0);
return rc;
}
To view, visit change 32635. To unsubscribe, or for help writing mail filters, visit settings.