-
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
zebra: Add the support of the Source Addr param of the SRv6 Encapsulation #12261
Conversation
298dc38
to
aced919
Compare
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: FailedOpenBSD 7 amd64 build: Failed (click for details)OpenBSD 7 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI011BUILD/config.log/config.log.gz OpenBSD 7 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI011BUILD/config.status/config.statusMake failed for OpenBSD 7 amd64 build:
FreeBSD 11 amd64 build: Failed (click for details)FreeBSD 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI009BUILD/config.log/config.log.gz FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI009BUILD/config.status/config.statusMake failed for FreeBSD 11 amd64 build:
FreeBSD 12 amd64 build: Failed (click for details)FreeBSD 12 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/FBSD12AMD64/config.log/config.log.gz FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/FBSD12AMD64/config.status/config.statusMake failed for FreeBSD 12 amd64 build:
NetBSD 9 amd64 build: Failed (click for details)NetBSD 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI012BUILD/config.status/config.statusMake failed for NetBSD 9 amd64 build:
NetBSD 9 amd64 build: Unknown Log <config.log.gz> Debian 11 amd64 build: Failed (click for details)Debian 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/DEB11AMD64/config.log/config.log.gzMake failed for Debian 11 amd64 build:
Debian 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/DEB11AMD64/config.status/config.status Successful on other platforms/tests
Warnings Generated during build:Checkout code: Successful with additional warningsOpenBSD 7 amd64 build: Failed (click for details)OpenBSD 7 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI011BUILD/config.log/config.log.gz OpenBSD 7 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI011BUILD/config.status/config.statusMake failed for OpenBSD 7 amd64 build:
FreeBSD 11 amd64 build: Failed (click for details)FreeBSD 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI009BUILD/config.log/config.log.gz FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI009BUILD/config.status/config.statusMake failed for FreeBSD 11 amd64 build:
FreeBSD 12 amd64 build: Failed (click for details)FreeBSD 12 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/FBSD12AMD64/config.log/config.log.gz FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/FBSD12AMD64/config.status/config.statusMake failed for FreeBSD 12 amd64 build:
NetBSD 9 amd64 build: Failed (click for details)NetBSD 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/CI012BUILD/config.status/config.statusMake failed for NetBSD 9 amd64 build:
NetBSD 9 amd64 build: Unknown Log <config.log.gz> Debian 11 amd64 build: Failed (click for details)Debian 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/DEB11AMD64/config.log/config.log.gzMake failed for Debian 11 amd64 build:
Debian 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8231/artifact/DEB11AMD64/config.status/config.status
|
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: FailedOpenBSD 7 amd64 build: Failed (click for details)OpenBSD 7 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI011BUILD/config.log/config.log.gz OpenBSD 7 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI011BUILD/config.status/config.statusMake failed for OpenBSD 7 amd64 build:
FreeBSD 11 amd64 build: Failed (click for details)FreeBSD 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI009BUILD/config.log/config.log.gz FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI009BUILD/config.status/config.statusMake failed for FreeBSD 11 amd64 build:
NetBSD 9 amd64 build: Failed (click for details)NetBSD 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI012BUILD/config.status/config.statusMake failed for NetBSD 9 amd64 build:
NetBSD 9 amd64 build: Unknown Log <config.log.gz> FreeBSD 12 amd64 build: Failed (click for details)FreeBSD 12 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/FBSD12AMD64/config.log/config.log.gz FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/FBSD12AMD64/config.status/config.statusMake failed for FreeBSD 12 amd64 build:
Debian 11 amd64 build: Failed (click for details)Debian 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/DEB11AMD64/config.log/config.log.gzMake failed for Debian 11 amd64 build:
Debian 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/DEB11AMD64/config.status/config.status Successful on other platforms/tests
Warnings Generated during build:Checkout code: Successful with additional warningsOpenBSD 7 amd64 build: Failed (click for details)OpenBSD 7 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI011BUILD/config.log/config.log.gz OpenBSD 7 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI011BUILD/config.status/config.statusMake failed for OpenBSD 7 amd64 build:
FreeBSD 11 amd64 build: Failed (click for details)FreeBSD 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI009BUILD/config.log/config.log.gz FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI009BUILD/config.status/config.statusMake failed for FreeBSD 11 amd64 build:
NetBSD 9 amd64 build: Failed (click for details)NetBSD 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/CI012BUILD/config.status/config.statusMake failed for NetBSD 9 amd64 build:
NetBSD 9 amd64 build: Unknown Log <config.log.gz> FreeBSD 12 amd64 build: Failed (click for details)FreeBSD 12 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/FBSD12AMD64/config.log/config.log.gz FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/FBSD12AMD64/config.status/config.statusMake failed for FreeBSD 12 amd64 build:
Debian 11 amd64 build: Failed (click for details)Debian 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/DEB11AMD64/config.log/config.log.gzMake failed for Debian 11 amd64 build:
Debian 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8232/artifact/DEB11AMD64/config.status/config.status
|
aced919
to
88e4a1e
Compare
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: FailedDebian 11 amd64 build: Failed (click for details)Debian 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8234/artifact/DEB11AMD64/config.log/config.log.gzMake failed for Debian 11 amd64 build:
Debian 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8234/artifact/DEB11AMD64/config.status/config.status Successful on other platforms/tests
Warnings Generated during build:Checkout code: Successful with additional warningsDebian 11 amd64 build: Failed (click for details)Debian 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8234/artifact/DEB11AMD64/config.log/config.log.gzMake failed for Debian 11 amd64 build:
Debian 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8234/artifact/DEB11AMD64/config.status/config.status
|
88e4a1e
to
977134a
Compare
Continuous Integration Result: SUCCESSFULContinuous 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-8235/ This is a comment from an automated CI system. Warnings Generated during build:Checkout code: Successful with additional warnings
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some nits.
977134a
to
d9aa564
Compare
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: FailedFreeBSD 11 amd64 build: Failed (click for details)FreeBSD 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI009BUILD/config.log/config.log.gz FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI009BUILD/config.status/config.statusMake failed for FreeBSD 11 amd64 build:
NetBSD 9 amd64 build: Failed (click for details)NetBSD 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI012BUILD/config.status/config.statusMake failed for NetBSD 9 amd64 build:
NetBSD 9 amd64 build: Unknown Log <config.log.gz> OpenBSD 7 amd64 build: Failed (click for details)OpenBSD 7 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI011BUILD/config.log/config.log.gz OpenBSD 7 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI011BUILD/config.status/config.statusMake failed for OpenBSD 7 amd64 build:
FreeBSD 12 amd64 build: Failed (click for details)FreeBSD 12 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/FBSD12AMD64/config.log/config.log.gz FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/FBSD12AMD64/config.status/config.statusMake failed for FreeBSD 12 amd64 build:
Successful on other platforms/tests
Warnings Generated during build:Checkout code: Successful with additional warningsFreeBSD 11 amd64 build: Failed (click for details)FreeBSD 11 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI009BUILD/config.log/config.log.gz FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI009BUILD/config.status/config.statusMake failed for FreeBSD 11 amd64 build:
NetBSD 9 amd64 build: Failed (click for details)NetBSD 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI012BUILD/config.status/config.statusMake failed for NetBSD 9 amd64 build:
NetBSD 9 amd64 build: Unknown Log <config.log.gz> OpenBSD 7 amd64 build: Failed (click for details)OpenBSD 7 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI011BUILD/config.log/config.log.gz OpenBSD 7 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/CI011BUILD/config.status/config.statusMake failed for OpenBSD 7 amd64 build:
FreeBSD 12 amd64 build: Failed (click for details)FreeBSD 12 amd64 build: Unknown Log URL: https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/FBSD12AMD64/config.log/config.log.gz FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-PULLREQ2-8254/artifact/FBSD12AMD64/config.status/config.statusMake failed for FreeBSD 12 amd64 build:
|
d9aa564
to
7db61d6
Compare
Continuous Integration Result: SUCCESSFULContinuous 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-8255/ This is a comment from an automated CI system. Warnings Generated during build:Checkout code: Successful with additional warnings
|
@ton31337 Thank you for the review, Donatas. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
7db61d6
to
4343066
Compare
Continuous Integration Result: SUCCESSFULContinuous 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-8350/ This is a comment from an automated CI system. Warnings Generated during build:Checkout code: Successful with additional warnings
|
Rebased to resolve merge conflicts. |
zebra/kernel_netlink.c
Outdated
@@ -386,6 +386,27 @@ static int netlink_socket(struct nlsock *nl, unsigned long groups, | |||
return ret; | |||
} | |||
|
|||
/* Make socket for Linux generic netlink interface. */ | |||
static int ge_netlink_socket(struct nlsock *nl, ns_id_t ns_id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are we not abstracting and using netlink_socket and why are we not using bind? I'm not a fan of cut-n-paste coding. If we need this then let's properly abstract it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@donaldsharp Many thanks for your review!
I made the requested change.
- I abstracted
netlink_socket()
. Nownetlink_socket()
takes an additional argumentnl_family
that specifies the Netlink family of the socket to create. This allows the developer to create any kind of Netlink socket (not onlyNETLINK_ROUTE
sockets). - I added a new function
rt_netlink_socket()
that can be used to create aNETLINK_ROUTE
socket. It callsnetlink_socket()
withnl_family=NETLINK_ROUTE
. - I added a new function
ge_netlink_socket()
that can be used to create aNETLINK_GENERIC
socket. It callsnetlink_socket()
withnl_family=NETLINK_GENERIC
.
Here is the diff: https://github.com/FRRouting/frr/compare/43430662781371e161d3084d452b5484900aef23..178b584374ae5691a8ce6252faf26550080760b8
4343066
to
178b584
Compare
cf63606
to
f001d1d
Compare
@donaldsharp Many thanks for the review. All comments have been addressed. |
zebra/kernel_netlink.c
Outdated
@@ -1958,6 +1959,9 @@ void kernel_init(struct zebra_ns *zns) | |||
&zns->t_netlink); | |||
|
|||
rt_netlink_init(); | |||
|
|||
if (zns->ge_netlink_cmd.sock >= 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd move this if to inside the call to ge_netlink_init(). kernel_init() shouldn't care about the status. It just knows it needs to ask the question.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Moved to ge_netlink_init()
.
a) There is no handler for when another process changes the value in the kernel. My assumption is that this can be listened for?
b) There is no distinction for what happens when a kernel value is different than the configured value.
My assumption is that FRR, if it has a configed value should go, hey man not cool and reinstall the |
f001d1d
to
4116372
Compare
251c7a5
to
fa9bdc9
Compare
I updated the PR to do the following:
As we discussed, actually we cannot listen for changes of the encap source address in the kernel, because the kernel does not send us any notification when the value changes. I added a comment in the code to mention that this is currently not supported:
I will submit another PR to extend this functionality and handle kernel notifications for source address changes, as soon as this is supported by the kernel. |
Thanks for the review. All comments have been addressed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good ... will wait a few days to see if anyone else wants to review
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
The `netlink_socket()` function is used in many places to create and initialize Netlink sockets. Currently, it can only create `NETLINK_ROUTE` Netlink sockets. This commit generalizes the behavior of the `netlink_socket()` function, enabling it to generate Netlink sockets of any type. Specifically, it extends the `netlink_socket()` function with a new argument `nl_family`, which allows developers to specify the Netlink family of the socket to be created. Signed-off-by: Carmine Scarpitta <[email protected]>
zebra already supports several Netlink sockets which allow it to communicate with the kernel. Each Netlink socket has a specific purpose: we have a socket for incoming events from the kernel, a socket for programming the dataplane, a socket for the kernel messages, a socket used as the command channel. All the currently supported sockets are based on the `NETLINK_ROUTE` protocol. This commit adds a new Netlink socket that allows zebra to send commands to the kernel using the `Generic Netlink` protocol. Signed-off-by: Carmine Scarpitta <[email protected]>
Generic Netlink is an extension of Netlink meant for kernel-user space communications. It supports the dynamic allocation of communication channels. Kernel and user space applications register their services with a Generic Netlink controller. The Generic Netlink controller is responsible for assigning a unique channel number with each service. Clients who want to use a service query the controller to see if the service exists and to determine the correct channel number. The channel number is used to access the requested service. This commit adds the base functionality to get the channel number assigned to a specific service. More precisely, this commit adds a function `genl_resolve_family()` that takes the service name (called family in the Generic Netlink terminology) as an input parameter and queries the Generic Netlink controller to get the channel number assigned with the requested service. Signed-off-by: Carmine Scarpitta <[email protected]>
Add a bunch of set functions and associated data structure in zebra_dplane to allow the configuration of the source address for SRv6 encap in the data plane. Signed-off-by: Carmine Scarpitta <[email protected]>
- Add a new node `SRV6_ENCAP_NODE` to the CLI graph. This node allows users to configure encapsulation parameters for SRv6, including the source address of the outer encapsulating IPv6 header. - Install a new CLI command `source-address` under the `SRV6_ENCAP_NODE` node. This command is used to configure the source address of the outer encapsulating IPv6 header. - Install a new CLI command `no source-address` under the `SRV6_ENCAP_NODE` node. This command is used to unset the source address of the outer encapsulating IPv6 header and restore the default source address. Examples: ``` router# segment-routing router(sr)# srv6 router(srv6)# encapsulation router(srv6-encap)# source-address fc00:0:1::1 ``` ``` router# segment-routing router(sr)# srv6 router(srv6)# encapsulation router(srv6-encap)# no source-address ``` Signed-off-by: Carmine Scarpitta <[email protected]>
Add a new CLI command `show segment-routing srv6 manager [json]` to verify the overall SRv6 state. The current output displays only the configured source address of outer encapsulating IPv6 header. The output can be extended in the future to show more information, including summary SRv6 information and supported capabilities. Example: ``` r1# show segment-routing srv6 manager Parameters: Encapsulation: Source Address: Configured: fc00:0:1::1 r1# show segment-routing srv6 manager json { "parameters":{ "encapsulation":{ "sourceAddress":{ "configured":"fc00:0:1::1" } } } } ``` Signed-off-by: Carmine Scarpitta <[email protected]>
When writing the SRv6 config from zebra, we must also include the source address of outer encapsulating IPv6 header. Signed-off-by: Carmine Scarpitta <[email protected]>
Add a new topotest `srv6_encap_src_addr` which verifies that the `source-address` command works properly. Signed-off-by: Carmine Scarpitta <[email protected]>
Add documentation for the new SRv6 encapsulation source address feature. Signed-off-by: Carmine Scarpitta <[email protected]>
The `show segment-routing srv6 manager` CLI command allows users to print the SRv6 information. Currently, the SRv6 information includes only the SRv6 encapsulation source address. In this commit, we add the documentation for the `show segment-routing srv6` command. Signed-off-by: Carmine Scarpitta <[email protected]>
When zebra is started, someone may have configured an SRv6 encap source address different from the default address ( :: ) in the kernel. On startup, zebra should not assume that the actual SRv6 encap source address is the default address ( :: ), but should retrieve the actual source address from the kernel and put it in zebra configuration. In other words, on startup we expect the actual SRv6 encap source address and the configured one to be the same. This commit makes the necessary changes to support the above. Signed-off-by: Carmine Scarpitta <[email protected]>
fa9bdc9
to
223d453
Compare
ci:rerun unrelated failures, rerunning |
@riw777 Many thanks for the review. I rebased on top of latest master to solve conflicts. |
In SRv6, the customer packet is encapsulated with an outer IPv6 header and optional SRH. The DA of the outer IPv6 header is set to the first SID from the SID List. The Source address of the IPv6 header is set to an IPv6 address configured by the operator (i.e. the source of the SRv6 tunnel). The configuration of the SRv6 encapsulation source address is missing in FRR.
In this PR, we extend Zebra to support the configuration of the SRv6 encapsulation source address. We added the required vtysh command, topotest, and documentation changes.
The SRv6 encapsulation source address can be configured in FRR using the CLI command shown below:
Note for Linux:
The Linux dataplane implementation already supports the configuration of the SRv6 encapsulation source address. The following iproute2 command can be used to configure the source address. The iproute2 command uses a Generic Netlink message.
If the user didn’t set the SRv6 Encapsulation source address, the kernel uses the IPv6 address of the outgoing interface. However, this causes a degradation in the packet forwarding performance for the SRv6 Encapsulation behavior in the Kernel. The degradation has been studied in the SRv6 Performance benchmarking published in https://ieeexplore.ieee.org/document/9311210
Note for SONiC:
The SRv6 Encapsulation Source address is one of the parameters that must be configured in two of the SONiC AppDB tables (SRV6_MY_SID_TABLE, ROUTE_TABLE) in the case of SRv6.
The absence of the source address configuration in SONiC AppDB causes SONiC to crash.
Signed-off-by: Carmine Scarpitta [email protected]