srv6: add per-nexthop encap source address#642
Conversation
|
Warning Review limit reached
Next review available in: 54 seconds Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (11)
📝 WalkthroughWalkthroughAdds optional per-nexthop SRv6 encapsulation source handling across public and private nexthop data, CLI parsing and display, control-plane conversion, datapath header construction, and FRR route installation. Updates FRR version options, packages, and CI coverage. Adds smoke tests that configure explicit encapsulation sources and verify captured outer IPv6 source addresses. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
e2e1fc7 to
c903ada
Compare
c903ada to
7cb7cff
Compare
7cb7cff to
def05f4
Compare
Allow SRv6 output nexthops to carry an explicit encapsulation source address. When set, the datapath uses it directly as the outer IPv6 source instead of the global tunnel source or the interface preferred address. An internal SR_ENCAP_F_SRC flag avoids a 16-byte address comparison in the datapath hot path. Signed-off-by: Robin Jarry <rjarry@redhat.com> Reviewed-by: Maxime Leroy <maxime@leroys.fr>
FRR 10.8 added a per-nexthop encap source address to nexthop_add_srv6_seg6(). Forward the encap_src field from grout SRv6 output nexthops to FRR, and copy it back when importing nexthops from FRR. Signed-off-by: Robin Jarry <rjarry@redhat.com> Reviewed-by: Maxime Leroy <maxime@leroys.fr>
Add a test case that creates an SRv6 output nexthop with an explicit source address and verifies the encapsulated packets use it as the outer IPv6 source with tcpdump. Signed-off-by: Robin Jarry <rjarry@redhat.com> Reviewed-by: Maxime Leroy <maxime@leroys.fr>
Test that FRR 10.8 per-nexthop encap source addresses are synced through the dplane plugin. The test configures an SRv6 route with encap-source in FRR and verifies grout encapsulates packets with the correct outer IPv6 source address. Requires FRR >= 10.8, skipped on older versions. Signed-off-by: Robin Jarry <rjarry@redhat.com> Reviewed-by: Maxime Leroy <maxime@leroys.fr>
def05f4 to
fda8215
Compare
FRR 10.8 added a per-nexthop encapsulation source address to nexthop_add_srv6_seg6(). This series adds per-nexthop encap_src support to grout's SRv6 output nexthops and plumbs it through the FRR dplane plugin.
When an SRv6 output nexthop has an explicit encap_src set, the datapath uses it directly as the outer IPv6 source instead of the global tunnel source or the interface preferred address. An internal flags field avoids a 16-byte comparison in the hot path.
The series also updates FRR build support: bumps 10.5 to 10.5.4, adds 10.7 (rc1), and changes the default build version to 10.6.
Summary
encap-srcsupport end-to-end (CLI → control plane API structs → FRR dplane plugin → datapath encapsulation).encap_srcas the outer IPv6 header source; whenencap_srcis unspecified, fall back to the configured tunnel source / interface preferred address.encap_srcfield plusSR_ENCAP_F_SRCpresence flag, and insrv6_output_process()use the flaggedencap_srcdirectly to avoid doing a 16-byte IPv6 comparison in the datapath hot path.encap_src, settingSR_ENCAP_F_SRConly when it’s not the unspecified IPv6 address.rte_ipv6_addr_is_unspec()helper inapi/gr_net_compat.hto detect unspecified IPv6 addresses by checking all 16 bytes.SRCparameter and to showENCAP_SRConly whenencap_srcis not unspecified.encap_srctonexthop_add_srv6_seg6()for FRR>= 10.8.0, and populate the plugin-sideencap_srcfrom the FRR seglist source when buildingGR_NH_T_SR6_OUTPUT.GR_API_VERSIONfrom3to4.encap-sourcebehavior:smoke/srv6_test.shandsmoke/srv6_encapsrc_frr_test.sh(skips when installed FRR <10.8.0).frr_versionto10.6, add10.7(rc1) support, bump10.5wrap to10.5.4, and adjust CI build matrix to use10.7for thegcc-14aarch64 configuration.