From: Gabriel Goller <g.goller@proxmox.com>
To: Stefan Hanreich <s.hanreich@proxmox.com>
Cc: Thomas Glanzmann <thomas@glanzmann.de>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH] sdn: evpn: allow vlan-aware vnets
Date: Wed, 9 Sep 2026 11:22:59 +0200 [thread overview]
Message-ID: <aqEkLo5GMnrhZoJF@luna.proxmox.com> (raw)
In-Reply-To: <1ddca9b8-410e-42c5-9b36-5c84b8e8aa0f@proxmox.com>
On 09.09.2026 10:40, Stefan Hanreich wrote:
>
>
> On 9/8/26 10:56 PM, Thomas Glanzmann wrote:
> > Hello Stefan,
> >
> >> Does utilizing a VLAN-aware VXLAN zone with an EVPN controller and then
> >> attaching a route map to the EVPN controller work for your use case as
> >> well?
> >
> > Yes. I rebuilt my setup that way and it does everything the patch did, so
> > consider the patch withdrawn in favour of your approach - with one
> > packaging gap that has to be closed first, see below.
> >
> > I tested it against three foreign VTEP implementations. Versions:
> >
> > Proxmox PVE 9.2.11, libpve-network-perl 1.6.7 (stock, no patches),
> > libpve-rs-perl 0.15.3, frr 10.6.1-1+pve3,
> > ifupdown2 3.3.0-1+pmx12 VTEP 10.101.0.18
> > MikroTik CRS304-4XG, RouterOS 7.25beta3 VTEP 172.31.0.4
> > Cisco N9K-C9372TX, NX-OS 9.3(16) VTEP 172.31.0.7
> > BIRD 3.3.2 (Debian bird3) VTEP 172.31.0.118
> >
>
> [...]
>
> > So the answer to your question is yes, and I prefer your shape to mine: it
> > gets the L2 EVI without a VRF, and the filtering is explicit and visible in
> > the configuration instead of hardcoded in a plugin.
>
> Thanks for testing! I personally also prefer the solution with the explicit
> route map for that reason.
>
> [...]
>
> >> Do you see any other issues, particularly with your specific setup?
> >
> > Three, one of them a blocker.
> >
> > 1. Zones/VxlanPlugin.pm never emits vxlan-local-tunnelip. This is the one
> > thing that stops your proposal from working out of the box, and it fails
> > silently. generate_sdn_config computes $ifaceip via
> > find_local_ip_interface_peers() (or from the fabric node) and then never
> > uses it for the interface:
>
> [...]
>
> >
> > No type-3 is originated, no VTEP is learned, nothing forwards, and all
> > BGP sessions look perfectly healthy while this is the case. This does
> > not matter for a plain VXLAN zone, because static vxlan_remoteip
> > head-end replication works fine without a local tunnel IP - it bites
> > only the moment an EVPN controller is supposed to drive that zone,
> > which is precisely the setup you want to make official. I worked around
> > it with
> >
> > # /etc/network/interfaces.d/zz-vxlan-local-tunnelip
> > iface vxlan_e1
> > vxlan-local-tunnelip 10.101.0.18
> >
> > which ifupdown2 merges with the generated stanza and which survives
> > pvesh set /cluster/sdn. Immediately after adding it: Vlan: 1,
> > Local VTEP IP: 10.101.0.18, and all three remote VTEPs appear with
> > flood: HER. Adding the same push to VxlanPlugin.pm as EvpnPlugin.pm
> > already has would fix it; I am happy to send that as a patch if you
> > want it.
>
> That should have already been fixed in the FRR version used in your tests
> (10.6.1-1+pve3) [1] as that was a bug introduced in version 10.6. @Gabriel
> can you take a look?
Yes, this should be fixed with https://github.com/FRRouting/frr/pull/22555.
Note that `show evpn vni x` shows the zebra vtep, and zebra can't find a vtep as
there is no vxlan-local-tunnelip set on the interface. bgpd will fallback to the
router-ip, so `show bgp l2vpn evpn route` should show routes with the correct
derived vtep ip.
The ifupdown2 warning is only printed on the syntax-check, which gets executed
when using e.g. `ifreload -s`. We don't do that anywhere AFAICS. Maybe we should
patch this warning out as it's technically false. No vxlan-local-tunnelip does
make sense when e.g. using source routing (ip src) or multiple local addresses
(migration).
> [...]
>
> > One smaller note: with a single EVPN controller
> > skip_route_target_filtering() returns true, so MAP_VTEP_OUT is a bare
> > permit 1 plus the call; with several controllers the generated
> > extcommunity match is added alongside the call, and I have not tested that
> > combination.
> >
> > So: tenable, yes, and I would rather have your version than mine. If the
> > vxlan-local-tunnelip line lands, the setup works with no patched Perl at
> > all, which I have now verified against NX-OS, RouterOS and BIRD at the
> > same time.
>
> Yes, with multiple EVPN controllers this would most likely break out of the
> box - since only Route Targets from EVPN zones / vnets are considered when
> generating the extcommunity list for the RT filter. It is possible to override
> this behavior with a custom route map as well, even if it is just a blank
> permit. This could be more ergonomic though since it is required to build
> the RT filter manually with Route Map entries...
>
>
> [1] https://lore.proxmox.com/pve-devel/20260714111858.232230-1-g.goller@proxmox.com/
>
next prev parent reply other threads:[~2026-09-09 9:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 21:49 [PATCH] sdn: evpn: allow vlan-aware vnets Thomas Glanzmann
2026-09-08 9:45 ` Stefan Hanreich
2026-09-08 20:56 ` Thomas Glanzmann
2026-09-09 8:40 ` Stefan Hanreich
2026-09-09 9:22 ` Gabriel Goller [this message]
2026-09-09 4:52 ` DERUMIER, Alexandre
2026-09-09 8:06 ` Stefan Hanreich
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=aqEkLo5GMnrhZoJF@luna.proxmox.com \
--to=g.goller@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
--cc=s.hanreich@proxmox.com \
--cc=thomas@glanzmann.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.