pespin has uploaded this change for review.

View Change

llc: Implement GMMR-PAGE.ind

Submit an LLGM-TRIGGER.req as described in TS 24.007 C.13.

Change-Id: Iba77b4a5280ce08f099f4e15934fa92d4ba8ba10
---
M include/osmocom/gprs/llc/llc_prim.h
M src/gmm/gmm_prim.c
2 files changed, 39 insertions(+), 3 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/82/32982/1
diff --git a/include/osmocom/gprs/llc/llc_prim.h b/include/osmocom/gprs/llc/llc_prim.h
index 904e9fa..2542563 100644
--- a/include/osmocom/gprs/llc/llc_prim.h
+++ b/include/osmocom/gprs/llc/llc_prim.h
@@ -88,6 +88,11 @@
return get_value_string(osmo_gprs_llc_bssgp_prim_type_names, val);
}

+/* TS 04.64 Section 7.2.1.3 LLGMM-TRIGGER */
+enum osmo_gprs_llc_llgm_trigger_type {
+ OSMO_GPRS_LLC_LLGM_TRIGGER_CELL_UPDATE,
+ OSMO_GPRS_LLC_LLGM_TRIGGER_PAGE_RESP,
+};

/* Parameters for OSMO_GPRS_LLC_LLGMM_* prims */
struct osmo_gprs_llc_llgmm_prim {
@@ -104,7 +109,7 @@
} assign_req;
/* OSMO_GPRS_LLC_LLGMM_TRIGGER | Req */
struct {
- uint8_t cause;
+ uint8_t cause; /* enum osmo_gprs_llc_llgm_trigger_type */
} trigger_req;
/* OSMO_GPRS_LLC_LLGMM_SUSPEND | Req */
struct {
diff --git a/src/gmm/gmm_prim.c b/src/gmm/gmm_prim.c
index 34c9fe9..4b4b6e9 100644
--- a/src/gmm/gmm_prim.c
+++ b/src/gmm/gmm_prim.c
@@ -603,6 +603,27 @@
return rc;
}

+static int gprs_gmm_prim_handle_gmmrr_page_ind(struct osmo_gprs_gmm_prim *gmm_prim)
+{
+ struct osmo_gprs_llc_prim *llc_prim_tx;
+ int rc;
+ struct gprs_gmm_entity *gmme;
+
+ if (!(gmme = gprs_gmm_find_gmme_by_tlli(gmm_prim->gmmrr.tlli))) {
+ LOGGMM(LOGL_NOTICE, "Rx %s: Unknown TLLI 0x%08x\n",
+ osmo_gprs_gmm_prim_name(gmm_prim), gmm_prim->gmmrr.tlli);
+ return -ENOENT;
+ }
+
+ /* TS 24.007 C.13: restart READY timer, submit LLGM-TRIGGER.req */
+ gprs_gmm_gmme_ready_timer_start(gmme);
+
+ llc_prim_tx = osmo_gprs_llc_prim_alloc_llgm_trigger_req(gmme->tlli, OSMO_GPRS_LLC_LLGM_TRIGGER_PAGE_RESP);
+
+ rc = gprs_gmm_prim_call_llc_down_cb(llc_prim_tx);
+ return rc;
+}
+
static int gprs_gmm_prim_handle_gmmrr_llc_transmitted_ind(struct osmo_gprs_gmm_prim *gmm_prim)
{
struct gprs_gmm_entity *gmme = gprs_gmm_find_gmme_by_tlli(gmm_prim->gmmrr.tlli);
@@ -620,8 +641,7 @@
int rc = 0;
switch (OSMO_PRIM_HDR(&gmm_prim->oph)) {
case OSMO_PRIM(OSMO_GPRS_GMM_GMMRR_PAGE, PRIM_OP_INDICATION):
- rc = gprs_gmm_prim_handle_unsupported(gmm_prim);
- rc = 1;
+ rc = gprs_gmm_prim_handle_gmmrr_page_ind(gmm_prim);
break;
case OSMO_PRIM(OSMO_GPRS_GMM_GMMRR_LLC_TRANSMITTED, PRIM_OP_INDICATION):
rc = gprs_gmm_prim_handle_gmmrr_llc_transmitted_ind(gmm_prim);

To view, visit change 32982. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libosmo-gprs
Gerrit-Branch: master
Gerrit-Change-Id: Iba77b4a5280ce08f099f4e15934fa92d4ba8ba10
Gerrit-Change-Number: 32982
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-MessageType: newchange