pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-sgsn/+/30885 )


Change subject: Properly split llc->sndcp->gtp unitdata pathi through extra 
func call
......................................................................

Properly split llc->sndcp->gtp unitdata pathi through extra func call

Beforehand the function handling the LL-UNITDATA primitive from LLC was
already submitting the packet to GTP code which had an SNDCP related
name, so everything was really confusing and layer separation was not
clean.

Change-Id: Ia544a9dd4c0c7647b0c1b64ca110351f40820618
---
M include/osmocom/sgsn/gprs_sndcp.h
M include/osmocom/sgsn/gtp.h
M include/osmocom/sgsn/sgsn.h
M src/sgsn/gprs_sndcp.c
M src/sgsn/sgsn_libgtp.c
5 files changed, 24 insertions(+), 11 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/85/30885/1

diff --git a/include/osmocom/sgsn/gprs_sndcp.h 
b/include/osmocom/sgsn/gprs_sndcp.h
index caf675c..b77fff2 100644
--- a/include/osmocom/sgsn/gprs_sndcp.h
+++ b/include/osmocom/sgsn/gprs_sndcp.h
@@ -81,4 +81,8 @@
 /* Clean up all gprs_sndcp_entities related to llme (OS#4824) */
 void gprs_sndcp_sm_deactivate_ind_by_llme(const struct gprs_llc_llme *llme);

+/* Called by SNDCP when it has received/re-assembled a N-PDU */
+int sndcp_sn_ud_ind(struct gprs_sndcp_entity *sne, struct msgb *msg,
+                   uint32_t npdu_len, uint8_t *npdu);
+
 #endif /* INT_SNDCP_H */
diff --git a/include/osmocom/sgsn/gtp.h b/include/osmocom/sgsn/gtp.h
index 85a50d3..3280dfb 100644
--- a/include/osmocom/sgsn/gtp.h
+++ b/include/osmocom/sgsn/gtp.h
@@ -3,3 +3,6 @@
 struct sgsn_instance;

 int sgsn_gtp_init(struct sgsn_instance *sgi);
+
+int sgsn_gtp_data_req(struct gprs_ra_id *ra_id, int32_t tlli, uint8_t nsapi,
+                     struct msgb *msg, uint32_t npdu_len, uint8_t *npdu);
\ No newline at end of file
diff --git a/include/osmocom/sgsn/sgsn.h b/include/osmocom/sgsn/sgsn.h
index 76d5702..f2bb49f 100644
--- a/include/osmocom/sgsn/sgsn.h
+++ b/include/osmocom/sgsn/sgsn.h
@@ -186,9 +186,6 @@
 int sndcp_sm_activate_ind(struct gprs_llc_lle *lle, uint8_t nsapi);
 /* Entry point for the SNSM-DEACTIVATE.indication */
 int sndcp_sm_deactivate_ind(const struct gprs_llc_lle *lle, uint8_t nsapi);
-/* Called by SNDCP when it has received/re-assembled a N-PDU */
-int sgsn_rx_sndcp_ud_ind(struct gprs_ra_id *ra_id, int32_t tlli, uint8_t nsapi,
-                        struct msgb *msg, uint32_t npdu_len, uint8_t *npdu);
 int sndcp_unitdata_req(struct msgb *msg, struct gprs_llc_lle *lle, uint8_t 
nsapi,
                        void *mmcontext);
 int sndcp_llunitdata_ind(struct msgb *msg, struct gprs_llc_lle *lle,
diff --git a/src/sgsn/gprs_sndcp.c b/src/sgsn/gprs_sndcp.c
index a0c35bf..8ee752e 100644
--- a/src/sgsn/gprs_sndcp.c
+++ b/src/sgsn/gprs_sndcp.c
@@ -42,6 +42,7 @@
 #include <osmocom/sgsn/gprs_sndcp_dcomp.h>
 #include <osmocom/sgsn/gprs_sndcp_comp.h>
 #include <osmocom/sgsn/gprs_gmm.h>
+#include <osmocom/sgsn/gtp.h>

 #define DEBUG_IP_PACKETS 0     /* 0=Disabled, 1=Enabled */

@@ -397,9 +398,8 @@
                expnd = npdu;
        }

-       /* Hand off packet to gtp */
-       rc = sgsn_rx_sndcp_ud_ind(&sne->ra_id, sne->lle->llme->tlli,
-                                 sne->nsapi, msg, npdu_len, expnd);
+       /* Hand off packet to SGSN (SNDCP SN-UNITDATA.ind), which will forward 
it to GGSN (GTP): */
+       rc = sndcp_sn_ud_ind(sne, msg, npdu_len, expnd);

 ret_free:
        /* we must free the memory we allocated above; ownership is not 
transferred
@@ -864,8 +864,7 @@
                LOGP(DSNDCP, LOGL_ERROR, "Short SNDCP N-PDU: %d\n", npdu_len);
                return -EIO;
        }
-       /* actually send the N-PDU to the SGSN core code, which then
-        * hands it off to the correct GTP tunnel + GGSN via gtp_data_req() */
+       /* actually send the N-PDU to the SGSN core code (SNDCP 
SN-UNITDATA.ind) */

        /* Decompress packet */
        if (any_pcomp_or_dcomp_active(sgsn)) {
@@ -879,8 +878,7 @@
        }

        /* Hand off packet to gtp */
-       rc = sgsn_rx_sndcp_ud_ind(&sne->ra_id, lle->llme->tlli,
-                                 sne->nsapi, msg, npdu_len, expnd);
+       rc = sndcp_sn_ud_ind(sne, msg, npdu_len, expnd);

 ret_free:
        if (any_pcomp_or_dcomp_active(sgsn))
@@ -889,6 +887,17 @@
        return rc;
 }
 
+/* 5.1.1.4 SN-UNITDATA.indication
+ * Called by SNDCP when it has received/re-assembled a N-PDU
+ */
+int sndcp_sn_ud_ind(struct gprs_sndcp_entity *sne,
+                   struct msgb *msg, uint32_t npdu_len, uint8_t *npdu)
+{
+       /* Hand it off N-PDU to the correct GTP tunnel + GGSN: */
+       return sgsn_gtp_data_req(&sne->ra_id, sne->lle->llme->tlli,
+                                 sne->nsapi, msg, npdu_len, npdu);
+}
+
 #if 0
 /* Section 5.1.2.1 LL-RESET.ind */
 static int sndcp_ll_reset_ind(struct gprs_sndcp_entity *se)
diff --git a/src/sgsn/sgsn_libgtp.c b/src/sgsn/sgsn_libgtp.c
index 58e912d..f76180a 100644
--- a/src/sgsn/sgsn_libgtp.c
+++ b/src/sgsn/sgsn_libgtp.c
@@ -809,7 +809,7 @@
 }

 /* Called by SNDCP when it has received/re-assembled a N-PDU */
-int sgsn_rx_sndcp_ud_ind(struct gprs_ra_id *ra_id, int32_t tlli, uint8_t nsapi,
+int sgsn_gtp_data_req(struct gprs_ra_id *ra_id, int32_t tlli, uint8_t nsapi,
                         struct msgb *msg, uint32_t npdu_len, uint8_t *npdu)
 {
        struct sgsn_mm_ctx *mmctx;

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

Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-Change-Id: Ia544a9dd4c0c7647b0c1b64ca110351f40820618
Gerrit-Change-Number: 30885
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to