gmm: Implement GMMR-PAGE.ind

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

Change-Id: Iba77b4a5280ce08f099f4e15934fa92d4ba8ba10
This commit is contained in:
Pau Espin 2023-05-24 13:44:44 +02:00
parent 8700df25d7
commit c9f5abdbff
4 changed files with 33 additions and 2 deletions

View File

@ -603,6 +603,27 @@ int gprs_gmm_prim_call_down_cb(struct osmo_gprs_gmm_prim *gmm_prim)
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 @@ static int gprs_gmm_prim_handle_gmmrr(struct osmo_gprs_gmm_prim *gmm_prim)
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);

View File

@ -458,6 +458,14 @@ static void test_gmm_prim_ms_gmmreg(void)
/* ... */
/* 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);

View File

@ -37,6 +37,8 @@ DLGLOBAL INFO Rx from lower layers: GMRR-LLC_TRANSMITTED.indication
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

View File

@ -19,6 +19,7 @@ test_gmm_prim_llc_down_cb(): Rx LLGMM-ASSIGN.request old_TLLI=0xea711b41 new_TLL
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'