summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2019-02-22 16:20:51 +0100
committerDonald Sharp <sharpd@cumulusnetworks.com>2019-03-27 21:22:22 +0100
commit9fb2b87997ac8a69133e5c157374eb2944671a27 (patch)
treebd8c7f634fc1a82a4d580f9e4e057f93e261dc30
parentzebra: Re-evaluate the nexthop tracking if flags changed (diff)
downloadfrr-9fb2b87997ac8a69133e5c157374eb2944671a27.tar.xz
frr-9fb2b87997ac8a69133e5c157374eb2944671a27.zip
isisd, ospf6d, ripngd: Do not allow v6 LL's to be `redist connected` in
The rib process of handling routes has been unified a bit more and as a result v6 LL routes are now showing up as a result of a `redistribute connected`. Doing anything with these routes is a policy decision that should be enforced by the individual routing daemons not by zebra. As such add a bit of code to isisd, ripngd and opsf6d to handle them. The bgp daemon already handles this situation. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--isisd/isis_zebra.c4
-rw-r--r--ospf6d/ospf6_zebra.c3
-rw-r--r--ripngd/ripng_zebra.c3
3 files changed, 10 insertions, 0 deletions
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index dfe74e325..79d79f891 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -362,6 +362,10 @@ static int isis_zebra_read(int command, struct zclient *zclient,
if (zapi_route_decode(zclient->ibuf, &api) < 0)
return -1;
+ if (api.prefix.family == AF_INET6
+ && IN6_IS_ADDR_LINKLOCAL(&api.prefix.u.prefix6))
+ return 0;
+
/*
* Avoid advertising a false default reachability. (A default
* route installed by IS-IS gets redistributed from zebra back
diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c
index 54f1735e7..abdc82a73 100644
--- a/ospf6d/ospf6_zebra.c
+++ b/ospf6d/ospf6_zebra.c
@@ -226,6 +226,9 @@ static int ospf6_zebra_read_route(int command, struct zclient *zclient,
if (CHECK_FLAG(api.message, ZAPI_MESSAGE_SRCPFX))
return 0;
+ if (IN6_IS_ADDR_LINKLOCAL(&api.prefix.u.prefix6))
+ return 0;
+
ifindex = api.nexthops[0].ifindex;
nexthop = &api.nexthops[0].gate.ipv6;
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 28a57f25d..c68c066f0 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_zebra.c
@@ -126,6 +126,9 @@ static int ripng_zebra_read_route(int command, struct zclient *zclient,
if (CHECK_FLAG(api.message, ZAPI_MESSAGE_SRCPFX))
return 0;
+ if (IN6_IS_ADDR_LINKLOCAL(&api.prefix.u.prefix6))
+ return 0;
+
nexthop = api.nexthops[0].gate.ipv6;
ifindex = api.nexthops[0].ifindex;