Skip to content

Conversation

dmytroshytyi-6WIND
Copy link
Contributor

For BGP SRv6 updates, This PR considers "SRv6 SID reachability" and replaces the NH reachability with the
SRv6 SID reachability.

Today, only the NH reachability is checked, and when route is installed, if the SRv6 SID is not reachable
then the SRv6 segs route will fail to be installed.
This is what happens on kernel.

This PR:

  • avoids this use case, and does not install the BGP route.
  • ensures the SID is reachable, before installing the BGP route to zebra

Possible cases like the one below are not considered, and do not work anyway:

Router A and D are running BGP protocol. The route map, to set nexthop == C, is configured on
router D. Such that router C IPv6 address is verified to be reachable to flag the SRv6 reachable,
but if route on the router C that points to D router's SRv6 SID dissapears(broken link),
on node A SID is expected to be still reachable, because nexthop C is reachable.

BGP update with explicit nexthop(C) set via route-map and SRV6 SID
__________________________ 
|                         |
▽                         ^
(A-B-C--------------------D)
     
     ^                    ^
nexthop C                SRv6 SID
of BGP update

@frrbot frrbot bot added bgp documentation tests Topotests, make check, etc labels Nov 16, 2023
@ton31337
Copy link
Member

Just a quick question: is this behavior something that other vendors have (SID reachability tracking)? I'm worried that we can't break anything if this is turned ON by default and can't be controlled. Maybe a knob would be handy?

Copy link
Member

@riw777 riw777 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good

@donaldsharp donaldsharp self-requested a review November 21, 2023 16:26
@eddieruan-alibaba
Copy link

Would this raise any scale concerns?

VPN SID is similar to vpn label for MPLS VPN, which provides local information once packets reach to this PE. In the example you provide,


| |
▽ ^
(A-B-C--------------------D)

If we don't sue route-map to set nexthop, the nexthop is D. Do we really want to let A, B, C all aware the reachablity of your VPN SID, or just keep it as local context to D if some chip has scale concerns with v6 prefixes.

https://datatracker.ietf.org/doc/rfc8986/ section 3.3. "Routed and non-routed SRv6 SIDs are the SRv6 instantiation of
global and local segments, "

how do you plan to handle these local segment use cases?

@pguibert6WIND
Copy link
Member

ci:rerun

Copy link
Contributor

@cscarpitta cscarpitta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dmytroshytyi-6WIND Thanks for the SRv6 contribution. Overall LGTM, I have only two nits.

@dmytroshytyi-6WIND dmytroshytyi-6WIND force-pushed the srv6_bgp_sid_reachability branch 2 times, most recently from ebfc5be to 4086473 Compare January 25, 2024 15:00

if (is_bgp_static) {
if (pi && pi->attr && pi->attr->srv6_l3vpn) {
IPV6_ADDR_COPY(&(p->u.prefix6),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no need to check for pi != NULL. it is alread done above.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks fixed.

bgpd/bgp_nht.c Outdated
@@ -660,6 +672,7 @@ static void bgp_process_nexthop_update(struct bgp_nexthop_cache *bnc,

if (BGP_DEBUG(nht, NHT)) {
char buf[NEXTHOP_STRLEN];

zlog_debug(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no need to add empty line

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Fixed.

Copy link
Member

@pguibert6WIND pguibert6WIND left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 minor issues.
also, the commit "bgpd: srv6 sid reachability information".
I would add this in the commit log:
Fixes 7f8c7d9 ("bgpd: ignore nexthop validation for srv6-vpn")

BGP IPv4 L3VPN with SRv6 SID reachability example
provided in the documentation

Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
Enable the SRv6 SID prefix generation in make_prefix()
function of bgp_nht.c.

Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>

fixup: bgpd: extend make_prefix to form srv6-based prefix
In the case of SRv6-VPN we track the reachability
to the SID. We check that the SID is available
in the BGP update and then we check the nexthop
reachability.

Fixes 7f8c7d9 ("bgpd: ignore nexthop validation for srv6-vpn")

Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Verify that SRv6 SID becomes unreachable and
further the IPv4 route in L3VPN becomes invalid.

Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
@dmytroshytyi-6WIND dmytroshytyi-6WIND force-pushed the srv6_bgp_sid_reachability branch from 4086473 to 5101463 Compare January 30, 2024 15:17
@dmytroshytyi-6WIND
Copy link
Contributor Author

ci:rerun

1 similar comment
@dmytroshytyi-6WIND
Copy link
Contributor Author

ci:rerun

@riw777
Copy link
Member

riw777 commented Feb 20, 2024

2 minor issues. also, the commit "bgpd: srv6 sid reachability information". I would add this in the commit log: Fixes 7f8c7d9 ("bgpd: ignore nexthop validation for srv6-vpn")

If this were in, I think we could merge this.

@dmytroshytyi-6WIND
Copy link
Contributor Author

2 minor issues. also, the commit "bgpd: srv6 sid reachability information". I would add this in the commit log: Fixes 7f8c7d9 ("bgpd: ignore nexthop validation for srv6-vpn")

If this were in, I think we could merge this.

This commit log includes the "Fixes" tag:
b3ac502

And these two comments were addressed:
#14810 (comment)
#14810 (comment)

Copy link
Member

@riw777 riw777 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good

@riw777 riw777 merged commit c4f9b87 into FRRouting:master Feb 27, 2024
cscarpitta added a commit to cscarpitta/sonic-buildimage that referenced this pull request Dec 16, 2024
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
github-actions bot pushed a commit to bradh352/sonic-buildimage that referenced this pull request Jan 2, 2025
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
github-actions bot pushed a commit to bradh352/sonic-buildimage that referenced this pull request Jan 2, 2025
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
github-actions bot pushed a commit to bradh352/sonic-buildimage that referenced this pull request Jan 2, 2025
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
mssonicbld added a commit to mssonicbld/sonic-buildimage-msft that referenced this pull request Jan 7, 2025
#### Why I did it

Bring the below PRs from FRR mainline to SONiC in order to support SRv6 SID Manager in SONiC.

#### New patches that were added

| Patch             | FRR Pull Request |
| ------------- | ----------------- |
| 0064-SRv6-BGP-SID-reachability.patch | FRRouting/frr#14810 |
| 0065-zebra-display-srv6-encapsulation-source-address-when-configured.patch | FRRouting/frr#16151 |
| 0066-lib-fix-srv6-locator-flags-propagated-to-isis.patch | FRRouting/frr#15673 |
| 0067-Add-support-for-SRv6-SID-Manager.patch | FRRouting/frr#15604 |
| 0068-bgpd-Extend-BGP-to-communicate-with-the-SRv6-SID-Manager-to-allocate-release-SRv6-SIDs.patch | FRRouting/frr#15676 |
VladimirKuk pushed a commit to Marvell-switching/sonic-buildimage that referenced this pull request Jan 21, 2025
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
prabhataravind pushed a commit to prabhataravind/sonic-buildimage that referenced this pull request Mar 5, 2025
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
yanjundeng pushed a commit to yanjundeng/sonic-buildimage that referenced this pull request Apr 23, 2025
This commit brings PR FRRouting/frr#14810 from FRR mainline to SONiC

SRv6 BGP SID reachability
FRRouting/frr#14810

Signed-off-by: cscarpitta <cscarpit@cisco.com>
lguohan pushed a commit to sonic-net/sonic-buildimage that referenced this pull request May 8, 2025
New patches that were added:
Patch	FRR Pull request
0086-isisd-lib-add-some-codepoints-usually-shared-with-other-vendors.patch	FRRouting/frr#17957
0087-staticd-Add-support-for-SRv6-uA-behavior.patch	FRRouting/frr#18198

Removed patches:
Patch	FRR commit / Pull request
0025-bgp-community-memory-leak-fix.patch	FRRouting/frr@e613e12
0028-zebra-fix-parse-attr-problems-for-encap.patch	FRRouting/frr@ba5a353 FRRouting/frr@569f9e4 FRRouting/frr@bd4fca1
0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch	FRRouting/frr@a8efa99
0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch	FRRouting/frr@705fed7
0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch	FRRouting/frr@5f379be
0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch	FRRouting/frr@ccfe452
0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch	FRRouting/frr@a07df6f
0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch	FRRouting/frr@ed7005d
0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch	FRRouting/frr@9edf45b
0038-zebra-Actually-display-I-O-buffer-sizes.patch	FRRouting/frr@8d8f12b
0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch	FRRouting/frr@33dccbe
0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch	FRRouting/frr@f4ba472
0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch	FRRouting/frr@920bf45
0042-zebra-Use-built-in-data-structure-counter.patch	FRRouting/frr@a23a938
0043-zebra-Use-the-ctx-queue-counters.patch	FRRouting/frr@34670c4
0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch	FRRouting/frr@3af381b
0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch	FRRouting/frr@8926ac1
0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch	FRRouting/frr@98b11de
0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch	FRRouting/frr@b47a92e
0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch	FRRouting/frr@4395fcd
0049-bgpd-backpressure-Improve-debuggability.patch	FRRouting/frr@186db96
0050-bgpd-backpressure-Avoid-use-after-free.patch	FRRouting/frr@40965e5
0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch	FRRouting/frr@c4bbb5b
0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch	FRRouting/frr@6cf5b79
0055-bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch	FRRouting/frr@0402551
0059-Fix-BGP-reset-on-suppress-fib-pending-configuration.patch	FRRouting/frr#17487
0060-bgpd-Validate-both-nexthop-information-NEXTHOP-and-N.patch	FRRouting/frr@a0d2734
0061-dont-print-warning-if-not-a-daemon.patch	FRRouting/frr@cecf571
0062-zebra-lib-use-internal-rbtree-per-ns.patch	FRRouting/frr#17297
0064-SRv6-BGP-SID-reachability.patch	FRRouting/frr#14810
0065-zebra-display-srv6-encapsulation-source-address-when-configured.patch	FRRouting/frr@890b67d
0066-lib-fix-srv6-locator-flags-propagated-to-isis.patch	FRRouting/frr@03d2ad0
0067-Add-support-for-SRv6-SID-Manager.patch	FRRouting/frr#15604
0068-bgpd-Extend-BGP-to-communicate-with-the-SRv6-SID-Manager-to-allocate-release-SRv6-SIDs.patch	FRRouting/frr#15676
0069-lib-nexthop-code-should-use-uint16_t-for-nexthop-cou.patch	FRRouting/frr@0bc79f5
0070-Allow-16-bit-size-for-nexthops.patch	FRRouting/frr@9f8968f
0071-zebra-Only-notify-dplane-work-pthread-when-needed.patch	FRRouting/frr#17062
0072-Fix-up-improper-handling-of-nexthops-for-nexthop-tra.patch	FRRouting/frr#17076
0073-remove-in6addr-cmp.patch	FRRouting/frr#17312
0074-bgp-best-port-reordering.patch	FRRouting/frr#15572
0075-bgp-mp-info-changes.patch	FRRouting/frr#16961
0076-Optimizations-and-problem-fixing-for-large-scale-ecmp-from-bgp.patch	FRRouting/frr#17229
0077-frr-vtysh-dependencies-for-srv6-static-patches.patch	FRRouting/frr@fd8edc3
0078-vtysh-de-conditionalize-and-reorder-install-node.patch	FRRouting/frr@e26c580
0079-staticd-add-support-for-srv6.patch	FRRouting/frr#16894
0081-bgpd-Optimize-evaluate-paths-for-a-peer-going-down.patch	FRRouting/frr@9f55368

Realigned patches:
Patch
0001-Reduce-severity-of-Vty-connected-from-message.patch
0002-Allow-BGP-attr-NEXT_HOP-to-be-0.0.0.0-due-to-allevia.patch
0003-nexthops-compare-vrf-only-if-ip-type.patch
0004-frr-remove-frr-log-outchannel-to-var-log-frr.log.patch
0005-Add-support-of-bgp-l3vni-evpn.patch
0006-Link-local-scope-was-not-set-while-binding-socket-for-bgp-ipv6-link-local-neighbors.patch
0007-ignore-route-from-default-table.patch
0008-Use-vrf_id-for-vrf-not-tabled_id.patch
0010-bgpd-Change-log-level-for-graceful-restart-events.patch
0021-Disable-ipv6-src-address-test-in-pceplib.patch
0022-cross-compile-changes.patch
0054-build-dplane-fpm-sonic-module.patch
0056-zebra-do-not-send-local-routes-to-fpm.patch
0057-Adding-changes-to-write-ip-nht-resolve-via-default-c.patch
0058-When-the-file-is-config-replayed-we-cannot-handle-th.patch
0061-Set-multipath-to-514-and-disable-bgp-vnc-for-optimiz.patch
0063-Patch-to-send-tag-value-associated-with-route-via-ne.patch
0080-SRv6-vpn-route-and-sidlist-install.patch
0082-Revert-bgpd-upon-if-event-evaluate-bnc-with-matching.patch
0083-staticd-add-cli-to-support-steering-of-ipv4-traffic-over-srv6-sid-list.patch
0084-lib-Return-duplicate-prefix-list-entry-test.patch
0085-This-error-happens-when-we-try-to-write-to-a-socket.patch

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants