public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
To: Andrea Mayer <andrea.mayer@uniroma2.it>, netdev@vger.kernel.org
Cc: "David S . Miller" <davem@davemloft.net>,
	David Ahern <dsahern@kernel.org>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Simon Horman <horms@kernel.org>,
	Stefano Salsano <stefano.salsano@uniroma2.it>,
	Paolo Lungaroni <paolo.lungaroni@uniroma2.it>,
	Ahmed Abdelsalam <ahabdels@cisco.com>,
	Justin Iurman <justin.iurman@6wind.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH net-next 0/3] seg6: SRv6 L2 VPN with End.DT2U and srl2 device
Date: Thu, 26 Mar 2026 17:32:59 +0100	[thread overview]
Message-ID: <2bb55d10-38a9-4595-baef-678d59bf4059@6wind.com> (raw)
In-Reply-To: <20260322000557.12559-1-andrea.mayer@uniroma2.it>

Le 22/03/2026 à 01:05, Andrea Mayer a écrit :
> Hi all,
Hi,

first, thank you for posting this RFC.

> 
> this RFC series adds support for the SRv6 End.DT2U behavior and
> introduces the srl2 Ethernet pseudowire device, together with
> corresponding selftests.
> 
> Motivation
> ==========
> 
> The main goal is to enable L2 service delivery through an internal
> SRv6 L2 endpoint, in a way similar to how VXLAN provides L2 services
> through a VXLAN netdevice.
> 
> Today, Linux supports SRv6 L2 decapsulation only through an
> End.DX2-style model, where the exposed Ethernet frame is forwarded
> to a configured egress interface. The current implementation does
> not provide a native netdevice representing the SRv6 L2 service
> endpoint. This is a significant limitation compared to VXLAN, where
> the tunnel endpoint is represented by a netdevice that can be
> attached to a bridge and integrated naturally into the local L2
> data plane.
> 
> On the encapsulation side, the existing H.L2.Encaps mode is
> implemented as a route-based lwtunnel, which only intercepts packets
> entering the IP routing path. Non-IP protocols such as ARP are
> never routed and therefore cannot be encapsulated, making it
> unsuitable for full L2 service delivery.
> 
> Design
> ======
> 
> This series addresses that limitation by introducing srl2, a native
> SRv6 L2 endpoint interface. The intent is to make SRv6 L2 delivery
> usable in the same deployment model already familiar from VXLAN: an
> internal interface that represents the L2 service endpoint and can
> participate naturally in local L2 forwarding.
The current design, with vxlan, uses two interfaces: one bridge and one vxlan.
I presume this design was chosen because the vxlan protocol is implemented in
the vxlan driver.
I wonder if using the same design for SRv6 is the best choice. Why not use only
a bridge interface? Instead of pointing to a port, the FDB entries could point
to a nexthop id. This enables to associate a srv6 encap directly to a MAC
address. Something like:

$ ip nexthop list id 1234
id 1234 encap seg6 mode encap segs ...
$ bridge fdb show dev br0
02:03:04:05:06:07 dev br0 nhid 1234 ...

What is the gain of having two interfaces?
In term of scalability, it is interesting to have only one interface.

Regards,
Nicolas

> 
> On top of that, the series adds support for End.DT2U so that Ethernet
> payloads carried over SRv6 can be decapsulated and delivered into an
> L2 domain through either a bridge port or an srl2 interface.
> 
> Relation to RFC 8986
> ====================
> 
> RFC 8986 describes End.DT2U in terms of an abstract L2 table
> associated with the SID. That abstraction specifies the externally
> observable forwarding behavior of the node, but it does not mandate a
> specific internal implementation. What matters is functional
> equivalence.
> 
> This series enforces that property by restricting valid End.DT2U
> decapsulation targets to endpoints that provide the required L2
> forwarding semantics by construction.
> 
> When the target device is a bridge port, the Linux bridge provides
> the expected behavior directly: source MAC learning, destination MAC
> lookup, and unknown-unicast flooding within the corresponding L2
> domain.
> 
> When the target device is an srl2 interface, the same model is
> realized in a degenerate but valid form, corresponding to a minimal
> two-port L2 domain in which one endpoint is srl2. In that case,
> forwarding is trivial: frames are delivered to srl2 only when
> addressed to its MAC address, or when they are broadcast or multicast.
> No general FDB is required in this case because there are no
> additional L2 destinations to learn.
> 
> Any other type of decapsulation target is rejected at configuration
> time, since it would not guarantee the forwarding behavior required by
> End.DT2U.
> 
> The srl2 device is the minimal baseline implementation providing
> point-to-point L2 encapsulation with a single segment list.
> Additional features can be added incrementally based on community
> feedback and use cases.
> 
> Usage
> =====
> 
>   ip link add srl2-0 type srl2 segs fc00::a,fc00::b
>   ip link set srl2-0 master br0
> 
>   ip -6 route add fc00::100/128 encap seg6local action End.DT2U \
>       l2dev srl2-0 dev dum0
> 
>   # encapsulating traffic from veth-hs into srl2-0
>   ip link set veth-hs master br0
> 
> Selftest topology
> =================
> 
>             cafe::1                                cafe::2
>            10.0.0.1                               10.0.0.2
>           +--------+                             +--------+
>           |  hs-1  |                             |  hs-2  |
>           +---+----+                             +----+---+
>               |                                       |
>         +-----+------+                         +------+-----+
>         |   veth-hs  |                         |  veth-hs   |
>         |      |     |   fcf0:0:1:2::/64       |     |      |
>         |    br0     +-------------------------+   br0      |
>         |      |     |                         |     |      |
>         |   srl2-0   |                         |  srl2-0    |
>         |    rt-1    |                         |   rt-2     |
>         +------------+                         +------------+
> 
> The test verifies IPv4/IPv6 host-to-host and host-to-gateway
> connectivity over the SRv6 L2 VPN, including ARP resolution
> through the tunnel.
> 
> A companion iproute2 series provides userspace support:
> 
>   [RFC PATCH iproute2-next 0/4] seg6: add SRv6 End.DT2U and srl2 support
> 
> 
> This is an RFC posting to collect feedback on both the overall design
> and the userspace API before moving forward with a formal submission.
> 
> Comments are very welcome, especially on:
> - the introduction of srl2 as an internal SRv6 L2 endpoint
> - the choice of constraining End.DT2U targets to bridge ports
>   and srl2 devices
> - the netlink/uAPI exposure
> - the selftest coverage and topology
> 
> Thanks,
> Andrea and Stefano
> 
> 
> Andrea Mayer (3):
>   seg6: add support for the SRv6 End.DT2U behavior
>   seg6: add SRv6 L2 tunnel device (srl2)
>   selftests: seg6: add SRv6 srl2 + End.DT2U L2 VPN test
> 
>  include/linux/srl2.h                          |   7 +
>  include/uapi/linux/seg6_local.h               |   3 +
>  include/uapi/linux/srl2.h                     |  20 +
>  net/ipv6/Kconfig                              |  16 +
>  net/ipv6/Makefile                             |   1 +
>  net/ipv6/seg6.c                               |   1 +
>  net/ipv6/seg6_local.c                         | 160 ++++-
>  net/ipv6/srl2.c                               | 269 ++++++++
>  tools/testing/selftests/net/Makefile          |   1 +
>  tools/testing/selftests/net/config            |   1 +
>  .../selftests/net/srv6_srl2_l2vpn_test.sh     | 621 ++++++++++++++++++
>  11 files changed, 1094 insertions(+), 6 deletions(-)
>  create mode 100644 include/linux/srl2.h
>  create mode 100644 include/uapi/linux/srl2.h
>  create mode 100644 net/ipv6/srl2.c
>  create mode 100755 tools/testing/selftests/net/srv6_srl2_l2vpn_test.sh
> 


  parent reply	other threads:[~2026-03-26 16:33 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-22  0:05 [RFC PATCH net-next 0/3] seg6: SRv6 L2 VPN with End.DT2U and srl2 device Andrea Mayer
2026-03-22  0:05 ` [RFC PATCH net-next 1/3] seg6: add support for the SRv6 End.DT2U behavior Andrea Mayer
2026-03-22  0:05 ` [RFC PATCH net-next 2/3] seg6: add SRv6 L2 tunnel device (srl2) Andrea Mayer
2026-03-24 16:08   ` Justin Iurman
2026-03-24 16:24     ` Justin Iurman
2026-03-25 13:43   ` Justin Iurman
2026-03-26 17:29     ` Stefano Salsano
2026-03-26 16:44   ` Nicolas Dichtel
2026-03-22  0:05 ` [RFC PATCH net-next 3/3] selftests: seg6: add SRv6 srl2 + End.DT2U L2 VPN test Andrea Mayer
2026-03-24 16:00 ` [RFC PATCH net-next 0/3] seg6: SRv6 L2 VPN with End.DT2U and srl2 device Justin Iurman
2026-03-25  7:10   ` Stefano Salsano
2026-03-25  8:35     ` Justin Iurman
2026-03-26 16:30     ` Nicolas Dichtel
2026-03-26 17:30       ` Stefano Salsano
2026-03-26 16:32 ` Nicolas Dichtel [this message]
2026-03-27  1:09   ` Stefano Salsano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2bb55d10-38a9-4595-baef-678d59bf4059@6wind.com \
    --to=nicolas.dichtel@6wind.com \
    --cc=ahabdels@cisco.com \
    --cc=andrea.mayer@uniroma2.it \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=justin.iurman@6wind.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=paolo.lungaroni@uniroma2.it \
    --cc=stefano.salsano@uniroma2.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox