2003-09-29 Paul Jakma <paul@dishone.st>
* zebra/connected.c: revert the 'generic PtP' patch as it causes
far too many problems. People who use FreeSWAN should investigate
native linux ipsec.
* zebra/rt_netlink.c: ditto
* lib/if.c: ditto
* ripd/ripd.h: ditto
* ripd/ripd.c: ditto
* ripd/rip_interface.c: ditto
* ospfd/ospfd.c: ditto
* ospfd/ospf_snmp.c: ditto
* bgpd/bgp_nexthop.c: ditto
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index a2efa17..02cae6e 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -487,7 +487,6 @@
void *broad = NULL;
u_char flags = 0;
char *label = NULL;
- int peeronly = 0;
ifa = NLMSG_DATA (h);
@@ -539,40 +538,41 @@
if (tb[IFA_LABEL] && strcmp (ifp->name, RTA_DATA (tb[IFA_LABEL])))
zlog_info (" IFA_LABEL %s", RTA_DATA (tb[IFA_LABEL]));
}
-
- /* peer or broadcast network? */
- if (ifa->ifa_family == AF_INET)
- peeronly = if_is_pointopoint (ifp) ||
- ifa->ifa_prefixlen >= IPV4_MAX_PREFIXLEN - 1;
-#ifdef HAVE_IPV6
- if (ifa->ifa_family == AF_INET6)
+
+ if (tb[IFA_ADDRESS] == NULL)
+ tb[IFA_ADDRESS] = tb[IFA_LOCAL];
+
+ if (ifp->flags & IFF_POINTOPOINT)
{
- peeronly = if_is_pointopoint (ifp) ||
- ifa->ifa_prefixlen >= IPV6_MAX_PREFIXLEN - 1;
+ if (tb[IFA_LOCAL])
+ {
+ addr = RTA_DATA (tb[IFA_LOCAL]);
+ if (tb[IFA_ADDRESS])
+ broad = RTA_DATA (tb[IFA_ADDRESS]);
+ else
+ broad = NULL;
+ }
+ else
+ {
+ if (tb[IFA_ADDRESS])
+ addr = RTA_DATA (tb[IFA_ADDRESS]);
+ else
+ addr = NULL;
+ }
}
-#endif /* HAVE_IPV6 */
- if (!(tb[IFA_LOCAL] && tb[IFA_ADDRESS]))
+ else
{
- /* FIXME: IPv6 Appears to have only IFA_ADDRESS */
- peeronly = 0;
+ if (tb[IFA_ADDRESS])
+ addr = RTA_DATA (tb[IFA_ADDRESS]);
+ else
+ addr = NULL;
+
+ if (tb[IFA_BROADCAST])
+ broad = RTA_DATA(tb[IFA_BROADCAST]);
+ else
+ broad = NULL;
}
- /* network. prefixlen applies to IFA_ADDRESS rather than IFA_LOCAL */
- if (tb[IFA_ADDRESS] && !peeronly)
- addr = RTA_DATA (tb[IFA_ADDRESS]);
- else if (tb[IFA_LOCAL])
- addr = RTA_DATA (tb[IFA_LOCAL]);
- else
- addr = NULL;
-
- /* broadcast/peer */
- if (tb[IFA_BROADCAST])
- broad = RTA_DATA (tb[IFA_BROADCAST]);
- else if (tb[IFA_ADDRESS] && peeronly)
- broad = RTA_DATA (tb[IFA_ADDRESS]); /* peer address specified */
- else
- broad = NULL;
-
/* Flags. */
if (ifa->ifa_flags & IFA_F_SECONDARY)
SET_FLAG (flags, ZEBRA_IFA_SECONDARY);