pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmocom-bb/+/32080 )

Change subject: layer23: modem: Forward GMMRR primitives between GMM and RLCMAC 
layers
......................................................................

layer23: modem: Forward GMMRR primitives between GMM and RLCMAC layers

Related: OS#5501
Change-Id: I7603d8bbda0cdd437eb7557267efb7bbc3552565
---
M src/host/layer23/src/modem/gmm.c
M src/host/layer23/src/modem/rlcmac.c
2 files changed, 42 insertions(+), 4 deletions(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  fixeria: Looks good to me, approved




diff --git a/src/host/layer23/src/modem/gmm.c b/src/host/layer23/src/modem/gmm.c
index f88226e..9472e32 100644
--- a/src/host/layer23/src/modem/gmm.c
+++ b/src/host/layer23/src/modem/gmm.c
@@ -35,6 +35,7 @@
 #include <osmocom/gprs/llc/llc_prim.h>
 #include <osmocom/gprs/gmm/gmm_prim.h>
 #include <osmocom/gprs/gmm/gmm.h>
+#include <osmocom/gprs/rlcmac/rlcmac_prim.h>

 #include <osmocom/bb/common/settings.h>
 #include <osmocom/bb/common/logging.h>
@@ -42,7 +43,6 @@
 #include <osmocom/bb/common/ms.h>
 #include <osmocom/bb/modem/gmm.h>

-
 static int modem_gmm_prim_up_cb(struct osmo_gprs_gmm_prim *gmm_prim, void 
*user_data)
 {
        const char *pdu_name = osmo_gprs_gmm_prim_name(gmm_prim);
@@ -72,7 +72,22 @@
        const char *pdu_name = osmo_gprs_gmm_prim_name(gmm_prim);
        int rc = 0;

+       osmo_static_assert(sizeof(struct osmo_gprs_gmm_gmmrr_prim) == 
sizeof(struct osmo_gprs_rlcmac_gmmrr_prim),
+                          _gmmrr_prim_size);
+
        switch (gmm_prim->oph.sap) {
+       case OSMO_GPRS_GMM_SAP_GMMRR:
+               /* Forward it to lower layers, pass ownership over to RLCMAC: */
+               /* Optimization: GMM-GMMRR-ASSIGN-REQ is 1-to-1 ABI compatible 
with
+                                RLCMAC-GMMRR-ASSIGN-REQ, we just need to adapt 
the header.
+                                See osmo_static_assert(_gmmrr_prim_size) above.
+               */
+               OSMO_ASSERT(gmm_prim->oph.primitive == 
OSMO_GPRS_GMM_GMMRR_ASSIGN);
+               gmm_prim->oph.sap = OSMO_GPRS_RLCMAC_SAP_GMMRR;
+               gmm_prim->oph.primitive = OSMO_GPRS_RLCMAC_GMMRR_ASSIGN;
+               osmo_gprs_rlcmac_prim_upper_down((struct osmo_gprs_rlcmac_prim 
*)gmm_prim);
+               rc = 1; /* Tell GMM that we take ownership of the prim. */
+               break;
        case OSMO_GPRS_GMM_SAP_GMMREG:
        default:
                LOGP(DGMM, LOGL_ERROR, "%s(): Unexpected Rx %s\n", __func__, 
pdu_name);
diff --git a/src/host/layer23/src/modem/rlcmac.c 
b/src/host/layer23/src/modem/rlcmac.c
index 8327620..deb366a 100644
--- a/src/host/layer23/src/modem/rlcmac.c
+++ b/src/host/layer23/src/modem/rlcmac.c
@@ -35,6 +35,7 @@
 #include <osmocom/gprs/rlcmac/rlcmac_prim.h>
 #include <osmocom/gprs/rlcmac/rlcmac.h>
 #include <osmocom/gprs/llc/llc_prim.h>
+#include <osmocom/gprs/gmm/gmm_prim.h>

 #include <osmocom/bb/common/logging.h>
 #include <osmocom/bb/common/l1ctl.h>
@@ -75,12 +76,24 @@

 static int modem_rlcmac_handle_gmmrr(struct osmo_gprs_rlcmac_prim *rlcmac_prim)
 {
+       struct osmo_gprs_gmm_prim *gmm_prim;
        int rc;
+
+       osmo_static_assert(sizeof(struct osmo_gprs_rlcmac_gmmrr_prim) == 
sizeof(struct osmo_gprs_gmm_gmmrr_prim),
+                          _gmmrr_prim_size);
+
        switch (rlcmac_prim->oph.primitive) {
        case OSMO_GPRS_RLCMAC_GMMRR_PAGE:
-               LOGP(DRLCMAC, LOGL_ERROR, "%s(): TODO: implement answering to 
paging indication TLLI=0x%08x\n",
-                    __func__, rlcmac_prim->gmmrr.page_ind.tlli);
-               rc = 0;
+               /* Forward it to upper layers, pass ownership over to GMM: */
+               /* Optimization: RLCMAC-GMMRR-ASSIGN-REQ is 1-to-1 ABI 
compatible with
+                                GMM-GMMRR-ASSIGN-REQ, we just need to adapt 
the header.
+                                See osmo_static_assert(_gmmrr_prim_size) above.
+               */
+               gmm_prim = (struct osmo_gprs_gmm_prim *)rlcmac_prim;
+               gmm_prim->oph.sap = OSMO_GPRS_GMM_SAP_GMMRR;
+               gmm_prim->oph.primitive = OSMO_GPRS_RLCMAC_GMMRR_PAGE;
+               osmo_gprs_gmm_prim_lower_up(gmm_prim);
+               rc = 1; /* Tell RLCMAC that we take ownership of the prim. */
                break;
        default:
                LOGP(DRLCMAC, LOGL_NOTICE, "%s(): Unexpected Rx RLCMAC GMMRR 
prim %u\n",

--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/32080
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I7603d8bbda0cdd437eb7557267efb7bbc3552565
Gerrit-Change-Number: 32080
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to