summaryrefslogtreecommitdiffstats
path: root/ospf6d/ospf6_asbr.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospf6d/ospf6_asbr.c')
-rw-r--r--ospf6d/ospf6_asbr.c24
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;