added pco DNS support
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 322cc9d..74fe1cc 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -60,7 +60,6 @@
 
 
 int maxfd = 0;	                /* For select()            */
-struct tun_t *tun;              /* TUN instance            */
 
 struct in_addr listen_;
 struct in_addr net, mask;       /* Network interface       */
@@ -71,10 +70,9 @@
 struct ul255_t qos;
 struct ul255_t apn;
 
+struct gsn_t *gsn;              /* GSN instance            */
 struct tun_t *tun;              /* TUN instance            */
 struct ippool_t *ippool;        /* Pool of IP addresses    */
-struct gsn_t *gsn;              /* GSN instance            */
-
 
 
 /* Used to write process ID to file. Assume someone else will delete */
@@ -345,7 +343,6 @@
   apn.v[0] = (char) strlen(args_info.apn_arg);
   strncpy(&apn.v[1], args_info.apn_arg, sizeof(apn.v)-1);
   
-  
 
   if (debug) printf("gtpclient: Initialising GTP tunnel\n");
   
@@ -355,7 +352,6 @@
     exit(1);
   }
   if (gsn->fd > maxfd) maxfd = gsn->fd;
-    
 
   gtp_set_cb_gpdu(gsn, encaps_tun);
   gtp_set_cb_delete_context(gsn, delete_context);
@@ -373,23 +369,7 @@
   tun_set_cb_ind(tun, cb_tun_ind);
   if (tun->fd > maxfd) maxfd = tun->fd;
 
-  if (ipup) {
-    char buf[1024];
-    char snet[100];
-    char smask[100];
-
-    strncpy(snet, inet_ntoa(net), sizeof(snet));
-    snet[sizeof(snet)-1] = 0;
-    strncpy(smask, inet_ntoa(mask), sizeof(smask));
-    smask[sizeof(smask)-1] = 0;
-    
-    /* system("ipup /dev/tun0 192.168.0.10"); */
-    snprintf(buf, sizeof(buf), "%s %s %s %s",
-	     ipup, tun->devname, snet, smask);
-    buf[sizeof(buf)-1] = 0;
-    if (debug) printf("%s\n", buf);
-    system(buf);
-  }
+  if (ipup) tun_runscript(tun, ipup);
 
   /******************************************************************/
   /* Main select loop                                               */