Add support for SRv6 SID Manager#15604
Merged
riw777 merged 25 commits intoFRRouting:masterfrom Jun 18, 2024
Merged
Conversation
4008b0a to
e308339
Compare
Closed
|
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
e308339 to
879e795
Compare
879e795 to
0c54998
Compare
This was referenced Apr 3, 2024
Merged
Merged
ton31337
previously requested changes
Apr 5, 2024
Member
ton31337
left a comment
There was a problem hiding this comment.
Documentation is missing yet. Another question: is this similar to the label allocation manager (synchronous)?
|
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
The previous commits introduced a new operation, `ZEBRA_SRV6_MANAGER_GET_LOCATOR`, allowing a daemon to request information about a specific SRv6 locator from the SRv6 SID Manager. This commit extends the SID Manager to respond to a `ZEBRA_SRV6_MANAGER_GET_LOCATOR` request and provide the requested locator information. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Add functions to allocate/release SRv6 SIDs. SIDs can be allocated either explicitly (allocate a specific SID) or dynamically (allocate any available SID). Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Previous commits introduced two new ZAPI operations, `ZEBRA_SRV6_MANAGER_GET_SRV6_SID` and `ZEBRA_SRV6_MANAGER_RELEASE_SRV6_SID`. These operations allow a daemon to interact with the SRv6 SID Manager to get and release an SRv6 SID, respectively. This commit extends the SID Manager by adding logic to process the requests `ZEBRA_SRV6_MANAGER_GET_SRV6_SID` and `ZEBRA_SRV6_MANAGER_RELEASE_SRV6_SID`, and allocate/release SIDs to requesting daemons. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Add a new ZAPI command `ZEBRA_SRV6_SID_NOTIFY` used by zebra to send asynchronous SRv6 SIDs notifications to zclients. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Send asynchronous notifications to zclients when an SRv6 SID is allocated/released and when a SID alloc/release operation fails. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Currently, when a locator is deleted in zebra, zebra notifies only the zclient that owns the locator. With the introduction of SID Manager, the locator is no longer owned by any client. Instead, the locator is owned by Zebra, and clients can allocate and release SIDs from the locator using the ZAPI ZEBRA_SRV6_MANAGER_GET_SID and ZEBRA_SRV6_MANAGER_RELEASE_SID. Therefore, when a locator is removed in Zebra, we need to notify all daemons so that they can release/uninstall the SIDs allocated by that locator. Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
> 2024/06/07 15:09:43 ZEBRA: [MZYPC-GBDGR] srv6_manager_get_sid_internal: getting SRv6 SID for ctx End.DT4 vrf vrf1, sid_value=1003::4, locator_name= > [..] > 2024/06/07 15:09:43 ZEBRA: [QGJBT-YJ11W] zsend_srv6_sid_notify: notifying ZEBRA_SRV6_SID_NOTIFY ctx End.DT4 vrf vrf2, sid (null) note ZAPI_SRV6_SID_FAIL_ALLOC (proto=30, instance=0, sessionId=0) Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
With 2 ISIS SRv6 instances, the second ISIS instance always gets the same End SID as the first one. > router isis 1 > segment-routing srv6 > locator loc1 > exit > exit > router isis 2 > segment-routing srv6 > locator loc2 > end > segment-routing > srv6 > locators > locator loc1 > prefix 2001::1/64 > exit > locator loc2 > prefix 3001::1/64 > output: > 2024/06/11 17:30:15 ISIS: [N6PCR-FQ5ZA] SRv6 locator (locator loc1, prefix 2001::1/64) set for IS-IS area 1 > 2024/06/11 17:30:15 ISIS: [V4RBG-TYW5S] Requesting SRv6 SIDs for IS-IS area 1 > 2024/06/11 17:30:15 ISIS: [ZRHYM-6RMYK] isis_zebra_srv6_sid_notify: received SRv6 SID notify: ctx End USP sid_value 2001::1 sid_func 0 note ZAPI_SRV6_SID_ALLOCATED > [..] > 2024/06/11 17:36:49 ISIS: [N6PCR-FQ5ZA] SRv6 locator (locator loc2, prefix 3001::1/64) set for IS-IS area 2 > 2024/06/11 17:36:49 ISIS: [V4RBG-TYW5S] Requesting SRv6 SIDs for IS-IS area 2 > 2024/06/11 17:36:49 ISIS: [ZRHYM-6RMYK] isis_zebra_srv6_sid_notify: received SRv6 SID notify: ctx End USP sid_value 2001::1 sid_func 0 note ZAPI_SRV6_SID_ALLOCATED Actually, at the second request, ZEBRA always gives an existing dynamic SID of the first available locator, because the locator name is never checked. > 2024/06/11 17:36:49 ZEBRA: [XMBTQ-GE6EY] get_srv6_sid: received SRv6 SID alloc request: SID ctx End USP ((null)), mode=dynamic > 2024/06/11 17:36:49 ZEBRA: [R61Q3-QWR23] get_srv6_sid_dynamic: returning existing SID End USP 2001::1 > 2024/06/11 17:36:49 ZEBRA: [J1GMY-B6CAK] srv6_manager_get_sid_internal: got existing SRv6 SID for ctx End USP: sid_value=2001::1 (func=0) (proto=9, instance=0, sessionId=0), notify client Fix this by checking the locator of the existing SID. Fixes: b771bf8 ("zebra: Add functions to alloc/release SRv6 SIDs") Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
4902323 to
209223d
Compare
In the near future, some daemons may only register SIDs. This may be the case for the pathd daemon when creating SRv6 binding SIDs. When a locator is getting deleted at ZEBRA level, the daemon may have an easy way to find out the SIds to unregister to. This commit proposes to add the locator name to the SID_SRV6_NOTIFY message whenever possible. Only case when an allocation failure happens, the locator will not be present. In all other places, the notify API at procol levels has the locator name extra-parameter. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
79698eb to
36a310c
Compare
Jafaral
added a commit
that referenced
this pull request
Nov 12, 2024
New Features Highlight: - PIM candidate BSR/RP [#16438] - Static IGMP join without an IGMP report [1#6450] - PIM AutoRP discovery/announcements [#16634] - IGMP proxy [#16861] - SRv6 SID Manager [#15604] - Add `bgp ipv6-auto-ra` command [#16354] - Implement `neighbor x remote-as auto` for BGP [#16345] - Implement `bgp dual-as` for BGP [#16816] - Implement BGP-wide configuration for graceful restart [#16099] - Handle kernel routes appropriately (should fix recent NOPREFIXROUTE issue) [#16300] - Add `cisco-authentication` password support for NHRP [#16172] Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
cscarpitta
added a commit
to cscarpitta/sonic-buildimage
that referenced
this pull request
Dec 16, 2024
This commit brings PR FRRouting/frr#15604 from FRR mainline to SONiC Add support for SRv6 SID Manager FRRouting/frr#15604 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#15604 from FRR mainline to SONiC Add support for SRv6 SID Manager FRRouting/frr#15604 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In the current FRR implementation, the SRv6 locator can only be used by one client at a time. This PR adds support for the SRv6 SID Manager, a zebra component responsible for SID allocation/management. The SRv6 SID Manager exposes a SID allocation/release APIs, allowing clients to request and release an SRv6 SID. The SID manager allows the SRv6 Locator to be shared among many clients such as IS-IS, BGP and others. The PR extends the BGP, IS-IS daemons to communicate with the SRv6 SID Manager to allocate/release SRv6 SIDs.
The SID Manager supports two SRv6 SID allocation schemes: