vxlan, so ARP and non-IP never cross the overlay.sr6 device + End.DT2U.
A bridge-integrated Ethernet pseudowire that makes SRv6 L2 overlays
operationally equivalent to VXLAN in Linux (for point-to-point).Why VXLAN works in Linux:
| Behavior | What it does (RFC 8986) | In Linux today |
|---|---|---|
End.DX2 |
Decap & forward the inner Ethernet frame to a specific outgoing L2 interface | ✓ seg6local — cross-connect only |
End.DT2U |
Decap & deliver into a local Ethernet domain, unicast MAC lookup | ✗ → this patch series |
End.DT2M |
Decap & flood into the L2 domain (BUM traffic) | ✗ → next step |
The behaviors exist — Linux does not expose them for bridging:
H.L2.Encaps, IP only)sr6 device + Linux End.DT2U;
(2) carry the L2 service ID inside the SRv6 programming model — no new architectural element.
seg6: SRv6 L2 tunnel device (sr6)seg6: SRv6 End.DT2U behaviorselftests: sr6 + End.DT2U L2 VPN testdocs: Documentation/networking/sr6.rst
CONFIG_IPV6_SR6 (module sr6) · depends on IPV6_SEG6_LWTUNNEL,
selects DST_CACHE · netlink spec in rt-link.yaml
sr6 link type · End.DT2U actionhmac KEYID)ip-link, ip-route
UAPI: IFLA_SR6_SRH, IFLA_SR6_FIB_TABLE ·
SEG6_LOCAL_ACTION_END_DT2U (17), SEG6_LOCAL_L2DEV
netdev@ as soon as it lands.
sr6 device: an Ethernet pseudowire netdevicesr6 — attaches to a bridgeIPPROTO_ETHERNETdst_cache, invalidated on l3mdev changetablevxlan netdevice plays for VXLAN.
End.DT2U in seg6localSEG6_LOCAL_L2DEVIPPROTO_ETHERNET → netif_rx() on l2devl2dev = bridge port or another sr6 devicebuild_state, with a proper extackl2dev is what keeps
true Ethernet-overlay semantics.
skb_scrub_packet() must run before eth_type_trans().
Scrubbing afterwards resets pkt_type to PACKET_HOST — and
multicast / broadcast silently break on the bridge.
sr6 device are members of the same bridge; ordinary L2 forwarding does the rest.
Route-based encap only sees packets on the IP routing path:
Bridge-integrated sr6 — ARP follows the path of any frame:
sr6 → encapsulated into the underlayEnd.DT2U delivers it into the L2 domainA transparent Ethernet service requires broadcast / unknown-unicast / multicast and address resolution to cross the overlay — exactly what a routed-IP tunnel cannot do.
| Mode | VRF context | sr6 table | Where the SID route must live |
|---|---|---|---|
| plain | no | — | main — resolved through fib rules |
| VRF | yes | — | the VRF table — blackhole in main prevents leaking |
| table | no | X | table X — direct lookup, fib rules bypassed |
| VRF + table | yes | X | table X — the explicit table wins over the VRF |
dst_cache is per-cpu and is invalidated
automatically when the l3mdev context changes — a bridge can be moved in and out of a VRF at runtime.
sr6 is an ordinary link type,
End.DT2U is an ordinary seg6local action — both documented in the
ip-link and ip-route man pages of the series.
sr6 —
a point-to-point L3 interface over the L2 tunnel. End.DT2U already accepts an sr6 as l2dev,
so the remote SID does not change.sr6 inherits the routing context and
performs the route lookup for the encapsulated packet in the VRF table — per-service routing domains, for free.Documentation/networking/sr6.rst, with full configurations.
srv6_sr6_l2vpn_test.sh: the full datapath, exercisedsr6 as a bridge portEnd)| Stack (IPv6 underlay) | Header chain | Outer overhead |
|---|---|---|
| VXLAN over IPv6 | IPv6 + UDP + VXLAN + ETH | 56 bytes |
| SRv6 L2 — RFC v2 branch today | IPv6 + SRH + ETH | 64 bytes (1 SID) |
| SRv6 L2 — µSID / reduced (landing in RFC v2) | IPv6 + ETH — no SRH | 40 bytes |
End.DT2M: multipoint services. BUM replication and split-horizon are the steps from
point-to-point pseudowires to a real E-LAN service.
sr6 + End.DT2U close the Linux gap: bridge-integrated, ARP-capable,
VXLAN-equivalent SRv6 L2 overlays. 4 kernel + 5 iproute2 patches, with selftest and documentation.
µSID / reduced encapsulation (40 B, no SRH), then RFC v2 to netdev@.
After that: End.DT2M, EVPN over SRv6, cloud orchestrators.
Review welcome, before it hits the list:
github.com/netgroup/srv6-linux-kernel-dev → seg6_sr6_L2encap_rfc-v2
github.com/netgroup/srv6-linux-iproute2-dev → seg6_sr6_L2encap_UAPI-v2
andrea.mayer@uniroma2.it · stefano.salsano@uniroma2.it
One 128-bit IPv6 destination address carries a locator plus a sequence of compact instructions — no SRH needed.