gtp-kernel: Get rid of hard-coded kernel GTP device name

The existing kernel GTP support code inherited from OpenGGSN was overly
simplistic and didn't support multiple GTP devices or user-defined GTP
device names.  Let's remove that restriction in this patch

Change-Id: I51df223788fd5b7cf8099463b8aa0ca4a4fd1c96
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 2937b04..6aa4210 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -266,7 +266,8 @@
 		}
 		LOGPAPN(LOGL_ERROR, apn, "Setting up Kernel GTP\n");
 		/* use GTP kernel module for data packet encapsulation */
-		if (gtp_kernel_init(apn->ggsn->gsn, &apn->v4.cfg.ifconfig_prefix, apn->tun.cfg.ipup_script) < 0) {
+		if (gtp_kernel_init(apn->ggsn->gsn, apn->tun.cfg.dev_name,
+				    &apn->v4.cfg.ifconfig_prefix, apn->tun.cfg.ipup_script) < 0) {
 			return -1;
 		}
 		break;
@@ -334,6 +335,7 @@
 {
 	struct gsn_t *gsn = pdp->gsn;
 	struct ippoolm_t *ipp = (struct ippoolm_t *)pdp->peer;
+	struct apn_ctx *apn = pdp->priv;
 
 	LOGPPDP(LOGL_INFO, pdp, "Deleting PDP context\n");
 	struct ippoolm_t *member = pdp->peer;
@@ -344,7 +346,7 @@
 	} else
 		LOGPPDP(LOGL_ERROR, pdp, "Cannot find/free IP Pool member\n");
 
-	if (gtp_kernel_tunnel_del(pdp)) {
+	if (gtp_kernel_tunnel_del(pdp, apn->tun.cfg.dev_name)) {
 		LOGPPDP(LOGL_ERROR, pdp, "Cannot delete tunnel from kernel:%s\n",
 			strerror(errno));
 	}
@@ -567,7 +569,7 @@
 		in46a_to_eua(&member->addr, &pdp->eua);
 
 		/* TODO: In IPv6, EUA doesn't contain the actual IP addr/prefix! */
-		if (gtp_kernel_tunnel_add(pdp) < 0) {
+		if (gtp_kernel_tunnel_add(pdp, apn->tun.cfg.dev_name) < 0) {
 			LOGPPDP(LOGL_ERROR, pdp, "Cannot add tunnel to kernel: %s\n", strerror(errno));
 			gtp_create_context_resp(gsn, pdp, GTPCAUSE_SYS_FAIL);
 			return 0;
@@ -596,6 +598,7 @@
 
 	pdp->peer = member;
 	pdp->ipif = apn->tun.tun;	/* TODO */
+	pdp->priv = apn;
 	member->peer = pdp;
 
 	if (!send_trap(gsn, pdp, member, "imsi-ass-ip")) { /* TRAP with IP assignment */