Solaris tun interface
diff --git a/ggsn/ippool.c b/ggsn/ippool.c
index e3b72a5..ca31677 100644
--- a/ggsn/ippool.c
+++ b/ggsn/ippool.c
@@ -238,6 +238,11 @@
     if (ippool_aton(&addr, &mask, dyn, 0))
       return -1; /* Failed to parse dynamic pool */
 
+    /* Set IPPOOL_NOGATEWAY if IPPOOL_NODESTADDR is set */
+    if (flags & IPPOOL_NODESTADDR) {
+      flags |= IPPOOL_NOGATEWAY;
+    }
+
     /* Set IPPOOL_NONETWORK if IPPOOL_NOGATEWAY is set */
     if (flags & IPPOOL_NOGATEWAY) {   
       flags |= IPPOOL_NONETWORK;
@@ -249,6 +254,8 @@
       dynsize--;
     if (flags & IPPOOL_NOGATEWAY)   /* Exclude gateway address from pool */
       dynsize--;
+    if (flags & IPPOOL_NODESTADDR)  /* Exclude destination address from pool */
+      dynsize--;
     if (flags & IPPOOL_NOBROADCAST) /* Exclude broadcast address from pool */
       dynsize--;
   }
@@ -305,7 +312,9 @@
   (*this)->lastdyn = NULL;
   for (i = 0; i<dynsize; i++) {
 
-    if (flags & IPPOOL_NOGATEWAY)
+    if (flags & IPPOOL_NODESTADDR)
+      (*this)->member[i].addr.s_addr = htonl(ntohl(addr.s_addr) + i + 3);
+    else if (flags & IPPOOL_NOGATEWAY)
       (*this)->member[i].addr.s_addr = htonl(ntohl(addr.s_addr) + i + 2);
     else if (flags & IPPOOL_NONETWORK)
       (*this)->member[i].addr.s_addr = htonl(ntohl(addr.s_addr) + i + 1);