diff options
Diffstat (limited to 'ospf6d/ospf6_asbr.c')
-rw-r--r-- | ospf6d/ospf6_asbr.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c index 56ed1a6c..deb708ac 100644 --- a/ospf6d/ospf6_asbr.c +++ b/ospf6d/ospf6_asbr.c @@ -486,6 +486,18 @@ ospf6_asbr_route_add (int type, int ifindex, struct prefix *prefix, struct ospf6_external_route *route; struct ospf6_external_info *info, tinfo; +#if defined (MUSICA) || defined (LINUX) + /* XXX As long as the OSPFv3 redistribution is applied to all the connected + * routes, one needs to filter the ::/96 prefixes. + * However it could be a wanted case, it will be removed soon. + */ + struct prefix_ipv6 *p = (prefix_ipv6 *)prefix; + + if ((IN6_IS_ADDR_V4COMPAT(&p->prefix)) || + (IN6_IS_ADDR_UNSPECIFIED (&p->prefix) && (p->prefixlen == 96))) + return; +#endif /* MUSICA or LINUX */ + if (! ospf6_zebra_is_redistribute (type)) return; @@ -592,6 +604,18 @@ ospf6_asbr_route_remove (int type, int ifindex, struct prefix *prefix) struct ospf6_external_info *info; struct ospf6_lsa *lsa; +#if defined (MUSICA) || defined (LINUX) + /* XXX As long as the OSPFv3 redistribution is applied to all the connected + * routes, one needs to filter the ::/96 prefixes. + * However it could be a wanted case, it will be removed soon. + */ + struct prefix_ipv6 *p = (prefix_ipv6 *)prefix; + + if ((IN6_IS_ADDR_V4COMPAT(&p->prefix)) || + (IN6_IS_ADDR_UNSPECIFIED (&p->prefix) && (p->prefixlen == 96))) + return; +#endif /* MUSICA or LINUX */ + node = route_node_get (external_table, prefix); route = node->info; |