2004-05-08 Sowmini Varadhan <sowmini.varadhan@sun.com>

        * if.h: Add mtu6 field to struct interface, IPv6 MTU may differ
          from IPv4, and Solaris treats the MTU's differently.
          Add connected_add_by_prefix, for use by later patch.
        * if.c: (connected_add_by_prefix) Add prefix to connected list.
          (if_flag_dump) Solaris: Dump IFF_IPv4/6 flag
          (if_dump) Dump mtu6 flag, for HAVE_IPV6.
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 121d1d6..b7c5422 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,12 @@
+2004-05-08 Sowmini Varadhan <sowmini.varadhan@sun.com>
+
+	* if.h: Add mtu6 field to struct interface, IPv6 MTU may differ
+	  from IPv4, and Solaris treats the MTU's differently.
+	  Add connected_add_by_prefix, for use by later patch.
+	* if.c: (connected_add_by_prefix) Add prefix to connected list.
+	  (if_flag_dump) Solaris: Dump IFF_IPv4/6 flag
+	  (if_dump) Dump mtu6 flag, for HAVE_IPV6.
+
 2004-04-21 Boris Kovalenko <boris@tagnet.ru>
 
 	* daemon.c: (daemon) fix check for error return from setsid
diff --git a/lib/if.c b/lib/if.c
index 8237b2f..e76f609 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -30,7 +30,6 @@
 #include "if.h"
 #include "sockunion.h"
 #include "prefix.h"
-#include "zebra/connected.h"
 #include "memory.h"
 #include "table.h"
 #include "buffer.h"
@@ -402,6 +401,10 @@
   IFF_OUT_LOG (IFF_LINK1, "LINK1");
   IFF_OUT_LOG (IFF_LINK2, "LINK2");
   IFF_OUT_LOG (IFF_MULTICAST, "MULTICAST");
+#ifdef SOLARIS_IPV6
+  IFF_OUT_LOG (IFF_IPV4, "IFF_IPv4");
+  IFF_OUT_LOG (IFF_IPV6, "IFF_IPv6");
+#endif /* SOLARIS_IPV6 */
 
   strlcat (logbuf, ">", BUFSIZ);
 
@@ -414,8 +417,15 @@
 {
   listnode node;
 
-  zlog_info ("Interface %s index %d metric %d mtu %d %s",
+  zlog_info ("Interface %s index %d metric %d mtu %d "
+#ifdef HAVE_IPV6
+             "mtu6 %d "
+#endif /* HAVE_IPV6 */
+             "%s",
 	     ifp->name, ifp->ifindex, ifp->metric, ifp->mtu, 
+#ifdef HAVE_IPV6
+	     ifp->mtu6,
+#endif /* HAVE_IPV6 */
 	     if_flag_dump (ifp->flags));
   
   for (node = listhead (ifp->connected); node; nextnode (node))
@@ -709,6 +719,29 @@
   return match;
 }
 
+struct connected *
+connected_add_by_prefix (struct interface *ifp, struct prefix *p, 
+                         struct prefix *destination)
+{
+  struct connected *ifc;
+
+  /* Allocate new connected address. */
+  ifc = connected_new ();
+  ifc->ifp = ifp;
+
+  /* Fetch interface address */
+  ifc->address = prefix_new();
+  memcpy (ifc->address, p, sizeof(struct prefix));
+
+  /* Fetch dest address */
+  ifc->destination = prefix_new();
+  memcpy (ifc->destination, destination, sizeof(struct prefix));
+
+  /* Add connected address to the interface. */
+  listnode_add (ifp->connected, ifc);
+  return ifc;
+}
+
 #ifndef HAVE_IF_NAMETOINDEX
 unsigned int
 if_nametoindex (const char *name)
diff --git a/lib/if.h b/lib/if.h
index 708853b..70a1286 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -94,7 +94,8 @@
   int metric;
 
   /* Interface MTU. */
-  int mtu;
+  int mtu;    /* IPv4 MTU */
+  int mtu6;   /* IPv6 MTU - probably, but not neccessarily same as mtu */
 
   /* Hardware address. */
 #ifdef HAVE_SOCKADDR_DL
@@ -205,8 +206,13 @@
 struct connected *connected_new ();
 void connected_free (struct connected *);
 void connected_add (struct interface *, struct connected *);
-struct connected  *connected_delete_by_prefix (struct interface *, struct prefix *);
-struct connected  *connected_lookup_address (struct interface *, struct in_addr);
+struct connected  *connected_add_by_prefix (struct interface *,
+                                            struct prefix *,
+                                            struct prefix *);
+struct connected  *connected_delete_by_prefix (struct interface *, 
+                                               struct prefix *);
+struct connected  *connected_lookup_address (struct interface *, 
+                                             struct in_addr);
 
 #ifndef HAVE_IF_NAMETOINDEX
 unsigned int if_nametoindex (const char *);