pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/32982 )
Change subject: gmm: Implement GMMR-PAGE.ind ......................................................................
gmm: Implement GMMR-PAGE.ind
Submit an LLGM-TRIGGER.req as described in TS 24.007 C.13.
Change-Id: Iba77b4a5280ce08f099f4e15934fa92d4ba8ba10 --- M src/gmm/gmm_prim.c M tests/gmm/gmm_prim_test.c M tests/gmm/gmm_prim_test.err M tests/gmm/gmm_prim_test.ok 4 files changed, 44 insertions(+), 2 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/src/gmm/gmm_prim.c b/src/gmm/gmm_prim.c index 34c9fe9..b6d8dac 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_llgmm_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); diff --git a/tests/gmm/gmm_prim_test.c b/tests/gmm/gmm_prim_test.c index 7eefc73..89f621c 100644 --- a/tests/gmm/gmm_prim_test.c +++ b/tests/gmm/gmm_prim_test.c @@ -458,6 +458,14 @@
/* ... */
+ /* Test PS paging request arriving from CCCH (RR): */ + gmm_prim = osmo_gprs_gmm_prim_alloc_gmmrr_page_ind(tlli); + OSMO_ASSERT(gmm_prim); + rc = osmo_gprs_gmm_prim_lower_up(gmm_prim); + OSMO_ASSERT(rc == 0); + + /* ... */ + /* DETACH */ gmm_prim = osmo_gprs_gmm_prim_alloc_gmmreg_detach_req(); OSMO_ASSERT(gmm_prim); diff --git a/tests/gmm/gmm_prim_test.err b/tests/gmm/gmm_prim_test.err index 6720d69..dea0ca7 100644 --- a/tests/gmm/gmm_prim_test.err +++ b/tests/gmm/gmm_prim_test.err @@ -37,6 +37,8 @@ DLGLOBAL INFO GMME(IMSI-1234567890:PTMSI-ec999002:TLLI-ec999002) READY timer started (expires in 10 seconds) DLGLOBAL INFO GMM_MS{RAUInitidated}: Received Event RAU_ACCEPTED DLGLOBAL INFO GMM_MS{RAUInitidated}: state_chg to Registered +DLGLOBAL INFO Rx from lower layers: GMRR-PAGE.indication +DLGLOBAL INFO GMME(IMSI-1234567890:PTMSI-ec999002:TLLI-ec999002) READY timer started (expires in 10 seconds) DLGLOBAL INFO Rx from upper layers: GMMREG-DETACH.request DLGLOBAL INFO GMM_MS{Registered}: Received Event DETACH_REQUESTED DLGLOBAL INFO GMM_MS{Registered}: state_chg to DeregisteredInitiated diff --git a/tests/gmm/gmm_prim_test.ok b/tests/gmm/gmm_prim_test.ok index 870d58f..6cf672a 100644 --- a/tests/gmm/gmm_prim_test.ok +++ b/tests/gmm/gmm_prim_test.ok @@ -19,6 +19,7 @@ test_gmm_prim_down_cb(): Rx GMRR-ASSIGN.request old_tlli=0xea711b41 new_tlli=0xec999002 test_gmm_prim_llc_down_cb(): Rx LL-UNITDATA.request TLLI=0xec999002 SAPI=GMM l3=[08 0a ] test_gmm_prim_llc_down_cb(): Rx LLGMM-RESUME.request TLLI=0xec999002 +test_gmm_prim_llc_down_cb(): Rx LLGMM-TRIGGER.request TLLI=0xec999002 test_gmm_prim_llc_down_cb(): Rx LL-UNITDATA.request TLLI=0xec999002 SAPI=GMM l3=[08 05 20 0a 00 05 f4 ec 99 90 02 ] test_gmm_prim_llc_down_cb(): Rx LLGMM-ASSIGN.request old_TLLI=0xec999002 new_TLLI=0xffffffff test_gmm_prim_up_cb(): Rx GMMREG-DETACH.confirm detach_type='GPRS detach'