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 *);