-
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
ospf6d: missing ECMP NHs in certain topologies #13297
Conversation
When ospf6 is started up and SPF is run depending on which route is selected as the parent route we could miss adding a NH. If one possible parent route has two equal cost paths and the second possible parent route has only one depending on which one is selected first determines if we have have one or two NHs. In the network below when creating a route 2001:db8:3:4::/64 in R2. When SPF is run there are two possible parent routes R3 and R4. 2001:db8:1:2 +-----+ 2001:db8:2:5 +--------------+ 2 +---------------+ | ::2 | | ::2 | | +-----+ | | | ::1| | +-----+ |::5 | 1 |2001:db8:1:3+-----+2001:db8:3:5+-----+2001:db8:5:6+-----+ | +------------+ 3 +------------+ 5 +------------+ 6 | +-----+ ::1 ::3 | |::3 ::5 | |::5 ::6| | ::1| +-----+ +-----+ +-----+ | |::3 | | 2001:db8:3:4 | | | |::4 | 2001:db8:1:4 +-----+ +--------------+ 4 | ::4 | | +-----+ The problem was if we first created the route to 2001:db8:3:4::/64 with R3 as the parent route all is fine. The code was merging the NH from the parent route and R3 has 2 NH, one pointing to R1 and one to R5. But if route 2001:db8:3:4::/64 was first created with parent as R4, it has only one NH pointing to R1, and then later a new vertex was created pointing to R3 the code would only copy the nhs from the vertex not from the parent route. The vertex always has just one NH. But the parent route could have more. So when we would bringup this setup one time we would see one NH for 2001:db8:3:4::/64 and the next time we would see two NHs. The code has been modified so that it behaves the same when the route is first created, or when a vertex is created, it selects the NHs from the parent route. Signed-off-by: Lynne Morrison <lynne@voltanet.io>
Continuous Integration Result: FAILEDContinuous Integration Result: FAILEDSee below for issues. This is a comment from an automated CI system. Get source / Pull Request: SuccessfulBuilding Stage: SuccessfulBasic Tests: FailedTopotests Ubuntu 18.04 amd64 part 9: Failed (click for details)Topology Test Results are at https://ci1.netdef.org/browse/FRR-PULLREQ2-TOPO9U18AMD64-10865/test Topology Tests failed for Topotests Ubuntu 18.04 amd64 part 9 Successful on other platforms/tests
|
ci:rerun ospf_sr_te_topo1 failure, rerunning |
Continuous Integration Result: SUCCESSFULCongratulations, this patch passed basic tests Tested-by: NetDEF / OpenSourceRouting.org CI System CI System Testrun URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-10874/ This is a comment from an automated CI system. |
@Mergifyio backport stable/8.5 |
✅ Backports have been created
|
ospf6d: missing ECMP NHs in certain topologies (backport #13297)
When ospf6 is started up and SPF is run depending on which route is
selected as the parent route we could miss adding a NH. If one
possible parent route has two equal cost paths and the second possible
parent route has only one depending on which one is selected first
determines if we have have one or two NHs.
In the network below when creating a route 2001:db8:3:4::/64 in R2. When SPF is run there are two possible parent routes R3 and R4.
::1| |
+-----+ |::5
| 1 |2001:db8:1:3+-----+2001:db8:3:5+-----+2001:db8:5:6+-----+
| +------------+ 3 +------------+ 5 +------------+ 6 |
+-----+ ::1 ::3 | |::3 ::5 | |::5 ::6| |
::1| +-----+ +-----+ +-----+
| |::3
| | 2001:db8:3:4
| |
| |::4
| 2001:db8:1:4 +-----+
+--------------+ 4 |
::4 | |
+-----+
The problem was if we first created the route to 2001:db8:3:4::/64 with R3 as the parent route all is fine. The code was merging the NH from the parent
route and R3 has 2 NH, one pointing to R1 and one to R5. But if route
2001:db8:3:4::/64 was first created with parent as R4, it has only one NH
pointing to R1, and then later a new vertex was created pointing to R3 the
code would only copy the nhs from the vertex not from the parent route. The
vertex always has just one NH. But the parent route could have more. So
when we would bringup this setup one time we would see one NH for
2001:db8:3:4::/64 and the next time we would see two NHs. The code has been
modified so that it behaves the same when the route is first created, or when
a vertex is created, it selects the NHs from the parent route.