extern struct nexthop *nexthop_ipv6_ifname_add (struct rib *rib,
struct in6_addr *ipv6,
char *ifname);
-extern int
-rib_bogus_ipv6 (int type, struct prefix_ipv6 *p,
- struct in6_addr *gate, unsigned int ifindex, int table);
extern struct zebra_vrf *zebra_vrf_lookup (vrf_id_t vrf_id);
extern struct zebra_vrf *zebra_vrf_alloc (vrf_id_t);
}
-int
-rib_bogus_ipv6 (int type, struct prefix_ipv6 *p,
- struct in6_addr *gate, unsigned int ifindex, int table)
-{
- if (type == ZEBRA_ROUTE_CONNECT && IN6_IS_ADDR_UNSPECIFIED (&p->prefix)) {
-#if defined (MUSICA) || defined (LINUX)
- /* IN6_IS_ADDR_V4COMPAT(&p->prefix) */
- if (p->prefixlen == 96)
- return 0;
-#endif /* MUSICA */
- return 1;
- }
- if (type == ZEBRA_ROUTE_KERNEL && IN6_IS_ADDR_UNSPECIFIED (&p->prefix)
- && p->prefixlen == 96 && gate && IN6_IS_ADDR_UNSPECIFIED (gate))
- {
- kernel_delete_ipv6_old (p, gate, ifindex, 0, table);
- return 1;
- }
- return 0;
-}
-
int
rib_add_ipv6 (int type, u_short instance, int flags, struct prefix_ipv6 *p,
struct in6_addr *gate, unsigned int ifindex, vrf_id_t vrf_id,
if (type == ZEBRA_ROUTE_BGP && CHECK_FLAG (flags, ZEBRA_FLAG_IBGP))
distance = 200;
- /* Filter bogus route. */
- if (rib_bogus_ipv6 (type, p, gate, ifindex, 0))
- return 0;
-
/* Lookup route node.*/
rn = route_node_get (table, (struct prefix *) p);
for (i = 0; i < max_nh_if; i++)
{
if ((i < nh_count) && !IN6_IS_ADDR_UNSPECIFIED (&nexthops[i])) {
- if ((i < if_count) && ifindices[i]) {
- if (rib_bogus_ipv6 (rib->type, &p, &nexthops[i], ifindices[i], 0)) {
- continue;
- }
+ if ((i < if_count) && ifindices[i])
nexthop_ipv6_ifindex_add (rib, &nexthops[i], ifindices[i]);
- }
- else {
- if (rib_bogus_ipv6 (rib->type, &p, &nexthops[i], 0, 0)) {
- continue;
- }
+ else
nexthop_ipv6_add (rib, &nexthops[i]);
- }
}
else {
- if ((i < if_count) && ifindices[i]) {
- if (rib_bogus_ipv6 (rib->type, &p, NULL, ifindices[i], 0)) {
- continue;
- }
+ if ((i < if_count) && ifindices[i])
nexthop_ifindex_add (rib, ifindices[i]);
- }
}
}
}