added ippool.h and ippool.c
diff --git a/ggsn/tun.h b/ggsn/tun.h
index 03dc7df..8d4618d 100644
--- a/ggsn/tun.h
+++ b/ggsn/tun.h
@@ -1,48 +1,78 @@
 /* 
- *  OpenGGSN - Gateway GPRS Support Node
- *  Copyright (C) 2002 Mondru AB.
+ * TUN interface functions.
+ * Copyright (C) 2002, 2003 Mondru AB.
  * 
- *  The contents of this file may be used under the terms of the GNU
- *  General Public License Version 2, provided that the above copyright
- *  notice and this permission notice is included in all copies or
- *  substantial portions of the software.
+ * The contents of this file may be used under the terms of the GNU
+ * General Public License Version 2, provided that the above copyright
+ * notice and this permission notice is included in all copies or
+ * substantial portions of the software.
  * 
- *  The initial developer of the original code is
- *  Jens Jakobsen <jj@openggsn.org>
+ * The initial developer of the original code is
+ * Jens Jakobsen <jj@openggsn.org>
  * 
- *  Contributor(s):
+ * Contributor(s):
  * 
  */
 
 #ifndef _TUN_H
 #define _TUN_H
 
-#define hton8(x)  (x)
-#define ntoh8(x)  (x)
-#define hton16(x) htons(x)
-#define ntoh16(x) ntohs(x)
-#define hton32(x) htonl(x)
-#define ntoh32(x) ntohl(x)
+#define PACKET_MAX      8196 /* Maximum packet size we receive */
+#define TUN_SCRIPTSIZE   256
+#define TUN_ADDRSIZE     128
+#define TUN_NLBUFSIZE   1024
 
-#define PACKET_MAX      8196 /* TODO */
+struct tun_packet_t {
+  unsigned int ver:4;
+  unsigned int ihl:4;
+  unsigned int dscp:6;
+  unsigned int ecn:2;
+  unsigned int length:16;
+  unsigned int id:16;
+  unsigned int flags:3;
+  unsigned int fragment:13;
+  unsigned int ttl:8;
+  unsigned int protocol:8;
+  unsigned int check:16;
+  unsigned int src:32;
+  unsigned int dst:32;
+};
+
 
 /* ***********************************************************
  * Information storage for each tun instance
  *************************************************************/
 
 struct tun_t {
-  int fd;                /* File descriptor to network interface */
-  struct in_addr addr;   /* IP address of tun interface */
+  int fd;                /* File descriptor to tun interface */
+  struct in_addr addr;
+  struct in_addr dstaddr;
+  struct in_addr netmask;
+  int addrs;             /* Number of allocated IP addresses */
   char devname[IFNAMSIZ];/* Name of the tun device */
+  int (*cb_ind) (struct tun_t *tun, void *pack, unsigned len);
 };
 
 
-extern int tun_newtun(struct tun_t **tun);
-extern int tun_freetun(struct tun_t *tun);
-extern int tun_decaps(struct tun_t *tun, 
-     int (*cb) (void *cl, struct tun_t*, void *pack, unsigned len),
-		      void *cl);
+extern int tun_new(struct tun_t **tun);
+extern int tun_free(struct tun_t *tun);
+extern int tun_decaps(struct tun_t *this);
 extern int tun_encaps(struct tun_t *tun, void *pack, unsigned len);
 
+extern int tun_addaddr(struct tun_t *this, struct in_addr *addr,
+		       struct in_addr *dstaddr, struct in_addr *netmask);
+
+
+extern int tun_setaddr(struct tun_t *this, struct in_addr *our_adr, 
+		       struct in_addr *his_adr, struct in_addr *net_mask);
+
+int tun_addroute(struct tun_t *this, struct in_addr *dst, 
+		 struct in_addr *gateway, struct in_addr *mask);
+
+extern int tun_set_cb_ind(struct tun_t *this, 
+     int (*cb_ind) (struct tun_t *tun, void *pack, unsigned len));
+
+
+extern int tun_runscript(struct tun_t *tun, char* script);
 
 #endif	/* !_TUN_H */