summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul>2004-05-08 05:00:31 +0000
committerpaul <paul>2004-05-08 05:00:31 +0000
commit4a7aac1bc609ee147492b228af9222f526e2ca2f (patch)
tree4f764b16562766422bca65ff2f6668a51757b9ec
parent5bd4189c17bad7a9e115ef573c0324c4b969a641 (diff)
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.
-rw-r--r--lib/ChangeLog9
-rw-r--r--lib/if.c37
-rw-r--r--lib/if.h12
3 files changed, 53 insertions, 5 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 121d1d62..b7c54228 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 8237b2f2..e76f6092 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 @@ if_flag_dump (unsigned long flag)
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 @@ if_dump (struct interface *ifp)
{
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 @@ connected_lookup_address (struct interface *ifp, struct in_addr dst)
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 708853bc..70a12860 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -94,7 +94,8 @@ struct interface
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 @@ char *ifindex2ifname (unsigned int);
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 *);