This series adds ARP/ND suppression for EVPN-enabled logical
switches. When a broadcast ARP request or multicast ND
solicitation targets an IP address that was learned via EVPN,
OVN now generates proxy-reply flows instead of flooding the
request to remote VTEPs.
Problem
-------
In EVPN deployments, every broadcast ARP request and multicast
ND solicitation is flooded across VXLAN tunnels to all remote
VTEPs. This wastes bandwidth on the overlay fabric and adds
latency to address resolution. The remote VTEPs already
advertised their MAC/IP bindings via EVPN type-2 routes, so the
local switch has enough information to answer on their behalf.
Approach
--------
The solution introduces a dedicated OpenFlow side table
(table 113) populated with EVPN-learned MAC/IP bindings. A new
chk_evpn_arp() action performs a lookup in this table. If the
target IP is found, the resolved MAC is loaded into eth.dst and
a regbit flag is set. The northd pipeline then uses the flag to
generate a proxy ARP reply or ND NA reply directly on the
ingress switch, short-circuiting the flood.
Patch breakdown
---------------
1/5 tests: Replace hardcoded table numbers with OFTABLE macros
in ovn.at.
Preparatory cleanup. A few test cases used raw OpenFlow
table numbers; replace them with OFTABLE_* m4 macros so
that the tests adapt automatically when table assignments
change.
2/5 controller: Add room between OpenFlow table stages.
Shift the output-implementation, egress, and post-egress
table regions to leave comfortable gaps between them. This
prevents table-number collisions when new stages are added
(as this series does) and removes the need for cascading
renumbering.
3/5 actions: Add chk_evpn_arp action and EVPN side table.
Infrastructure patch. Defines OFTABLE_EVPN_ARP_LOOKUP
(table 113), the OVNACT for chk_evpn_arp(), and the
parse/format/encode/free functions. Also adds an
ovn-trace stub. No flows use the action yet.
4/5 controller: Populate EVPN ARP side table for logical
switches.
Extends physical_consider_evpn_arp() to install flows in
the EVPN side table for the switch datapath. Each flow
matches on metadata + IP address and loads the resolved
MAC into eth.dst on a hit.
5/5 northd: Add EVPN ARP/ND suppression for logical switches.
Adds a pre-lookup stage (ls_in_arp_nd_pre_lookup) and
EVPN suppression response flows in ls_in_arp_rsp. The
pre-lookup calls chk_evpn_arp(); the response flows
generate proxy ARP/ND replies when the lookup succeeds.
Testing
-------
- Unit tests in ovn-northd.at verify the generated logical
flows for the new pipeline stage.
- Integration tests in ovn.at verify the chk_evpn_arp action
encoding.
- A system test in system-ovn.at exercises the full ARP
suppression path end-to-end with an EVPN-enabled switch
topology.
Ales Musil (5):
tests: Replace hardcoded table numbers with OFTABLE macros in ovn.at.
controller: Add room between OpenFlow table stages.
actions: Add chk_evpn_arp action and EVPN side table.
controller: Populate EVPN ARP side table for logical switches.
northd: Add EVPN ARP/ND suppression for logical switches.
Documentation/ref/ovn-logical-flows.7.rst | 72 ++++++++---
NEWS | 6 +
controller/lflow.c | 1 +
controller/lflow.h | 76 ++++++-----
controller/physical.c | 151 ++++++++++++++--------
include/ovn/actions.h | 10 ++
include/ovn/logical-fields.h | 4 +
lib/actions.c | 78 +++++++++++
lib/ovn-util.c | 4 +-
lib/ovn-util.h | 2 +-
northd/northd.c | 83 ++++++++++++
northd/northd.h | 18 +--
ovn-architecture.7.xml | 124 +++++++++---------
ovn-sb.ovsschema | 6 +-
ovn-sb.xml | 41 ++++++
tests/ovn-macros.at | 64 ++++-----
tests/ovn-northd.at | 39 ++++++
tests/ovn.at | 62 ++++++---
tests/system-ovn.at | 137 ++++++++++++++++++++
tests/test-ovn.c | 1 +
utilities/ovn-trace.c | 37 ++++++
21 files changed, 784 insertions(+), 232 deletions(-)
--
2.54.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev