pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmocom-bb/+/33845 )


Change subject: layer23: modem: gmm: Update own TLLI copy though 
GMMRR-Assign.req hook
......................................................................

layer23: modem: gmm: Update own TLLI copy though GMMRR-Assign.req hook

This is needed in order to provide updated TLLI when submitting new user
data from the tundev to the SNDCP layer.

Change-Id: I5c6a2c371ae6d65bf4fe23e665ec939da37112be
---
M src/host/layer23/src/modem/gmm.c
1 file changed, 40 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/45/33845/1

diff --git a/src/host/layer23/src/modem/gmm.c b/src/host/layer23/src/modem/gmm.c
index 7b97894..5ea2b43 100644
--- a/src/host/layer23/src/modem/gmm.c
+++ b/src/host/layer23/src/modem/gmm.c
@@ -43,6 +43,7 @@
 #include <osmocom/bb/common/logging.h>
 #include <osmocom/bb/common/apn.h>
 #include <osmocom/bb/common/ms.h>
+#include <osmocom/bb/common/vty.h>
 #include <osmocom/bb/modem/gmm.h>
 #include <osmocom/bb/modem/sm.h>
 #include <osmocom/bb/modem/modem.h>
@@ -131,18 +132,44 @@
 {
        const char *pdu_name = osmo_gprs_gmm_prim_name(gmm_prim);
        int rc = 0;
+       uint32_t old_tlli, new_tlli;
+       struct osmocom_ms *ms, *ms_found = NULL;

        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:
+               OSMO_ASSERT(gmm_prim->oph.primitive == 
OSMO_GPRS_GMM_GMMRR_ASSIGN);
+               /* Update app TLLI reference. This usually happens as a result 
of a RAU ACCEPT */
+               old_tlli = gmm_prim->gmmrr.tlli;
+               new_tlli = gmm_prim->gmmrr.assign_req.new_tlli;
+               llist_for_each_entry(ms, &ms_list, entity) {
+                       if (old_tlli != ms->gmmlayer.tlli)
+                               continue;
+                       ms_found = ms;
+                       break;
+               }
+               if (ms_found) {
+                       if (new_tlli != OSMO_GPRS_GMM_TLLI_UNASSIGNED) {
+                               LOGP(DGMM, LOGL_INFO, "%s(): Rx %s Update TLLI 
0x%08x -> 0x%08x\n",
+                                    __func__, pdu_name, old_tlli, new_tlli);
+                               ms_found->gmmlayer.tlli = new_tlli;
+                       } else {
+                               LOGP(DGMM, LOGL_ERROR, "%s(): Rx %s with 
TLLI=0x%08x is being released, GMM should be restarted?\n",
+                                    __func__, pdu_name, old_tlli);
+                       }
+               } else {
+                       if (old_tlli != OSMO_GPRS_GMM_TLLI_UNASSIGNED)
+                               LOGP(DGMM, LOGL_ERROR, "%s(): Unexpected Rx %s 
with unknown TLLI=0x%08xn",
+                                    __func__, pdu_name, old_tlli);
+               }
+
                /* 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);

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

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I5c6a2c371ae6d65bf4fe23e665ec939da37112be
Gerrit-Change-Number: 33845
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to