-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Failure to remove IPv6 static route with multiple output paths #7718
Comments
Can confirm the same issue exists with a master build "frr version 7.6-dev-20201209-05-g327c3aad2". One other data-point. You can cut-n-past the add sequence directly into vtysh, but not the delete. To delete everything you have to "slowly" issue each individual "no ipv6 route ..." command, i.e. wait a second or two before issuing the next command. |
I'm not able to reproduce this "need a delay" issue with master. my 'uninstall' file was:
I didn't have any subinterface config handy, so that may be different? I just ran the daemons and vtysh from a development sandbox: is there some other component of the danos/whatever stack that's involved? |
OK thanks. The only DANOS item left in the test is the dataplane, at the moment I can't see how that would impact the kernel. Is staticd the right place to be poking about for clues at what might be happening? |
sure: staticd is receiving the "ipv6 route" cli input there, and processing it to decide what to send to zebra. zebra is responding to the "show ipv6 route" cli. it would give you some insight to enable some debugs too: those should show you what staticd is sending, and when, and then how zebra disposes of the info. |
Hi @mg964 - it might be worth knocking up a quick topotest to check this in a vanilla FRR setting. Can point you in the right direction if you want to pursue this. |
so the output from the first |
Does look like the multipath is not present in the kernel. This is a similar test (which works) using ipv4:
Here's a re-run with ipv6:
Logging: frr-ipv6-route.txt |
The output given in the initial message is not v6 ecmp from my perspective. Something has gone wrong, hence the request for more data. Secondly the ipv4 quote is missing data from your last response. |
This is what I expect it too look like:
|
Its the interface/gateway attribute that is causing problems. Use an address and all works as expected. |
This works for me. Can you please provide the requested data? |
Was it just the logging for add AND delete you wanted? |
no just the add looking at the data now |
Can you please provide the kernel you are running as well as how it is compiled? ( the boot/config-XXX ) I would also like to see the output of |
This is the kernel:
The source can be found here: https://github.com/danos/linux-vyatta/tree/linux-vyatta-5.4.y I've attached config (from /proc/config.gz) & sysctl. |
Another datapoint... used "ip -6 monitor" to see what is issued to the kernel. Looks a bit odd. The following is the result of manually/slowly issuing "ipv6 route 10:2::1/128 dp0p1s1" & "ipv6 route 10:2::1/128 dp0p1s2.102":
I can see how the first add & subsequent delete makes sense - preparation for the subsequent addition of the second NH interface - but the next add only includes the initial NH interface, i.e. a repeat of the first add. Now watch what happens if I issue "no ipv6 route 10:2::1/128 dp0p1s2.102" followed by "no ipv6 route 10:2::1/128 dp0p1s1" (reverse the order used to add):
Feels like there is a "work queue" ("next-hop path list"?) where only the head of the queue is being processed. |
@mg964 it looks like there might be a kernel bug in DANOS. If we take FRR out of the equation and use
|
Ok found that we (vyatta) have a kernel patch to allow device only routes via the multipath API. See the ipv6-interface-route-ecmp.patch in the above kernel tree. This patch was in response to a 2018 kernel update (b5d2d75):
and, as @deastoe pointed out, we must program up the kernel in some slightly different way to FRR. I guess FRR must have have a work around for the shortcomings of IPv6 multipath in the kernel that fails when used in combination with the vyatta patch. |
@donaldsharp in your working example, what kernel/FRR versions were you using? I've run a quick test using a stock debian 10 image together with FRR7.5:
The RIB has tagged the paths as rejected and there is nothing in the kernel, i.e. everything has been left in a "sensible" state. This is the result of the kernel rejecting the attempt to use the multipath API. From the logs:
Wondering if you are using a kernel that has fixed the multipath issue or if there is some sort of workaround in FRR. Cheers, Mark |
Never mind, looks like we've found a possible solution in DANOS. |
@mg964 HI,I have a similar problem , I can't find the patch(ipv6-interface-route-ecmp.patch), how did you fixd it? |
Hello @kwind. The solution was specific to DANOS, there was no need to make any changes to FRR. Essentially, ended up issuing 'zebra nexthop kernel enable'. |
Is there any way to add IPv6 multipath path routes whith device only. The version of kernel is 5.4.18. |
Looking for a clue as why the following is failing. I'm running with FRR 7.4 under DANOS, but I've managed to strip away the DANOS portions and am left with a fairly simple repro of the problem.
Two files with the necessary configuration to add and delete the route:
Run "sudo vtysh -f ~/add-ipv6-route.txt" to add the route and all looks OK:
But if you now apply the delete only the first next-hop gets removed from the kernel:
You can clean things up by manually re-adding the routes and re-issuing the delete - repeat for each of the output paths until the route is finally removed from the kernel.
Any ideas where to start? Is it some sort of vtysh issue?
The text was updated successfully, but these errors were encountered: