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
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;