This series adds shared MAC binding scopes for logical router ports that
use the same physical L2 domain and gateway placement.

The motivation comes from OVN-Kubernetes deployments with many user-defined
networks sharing a node's external bridge. Each network has its own gateway
router, but those routers often resolve the same external neighbors. ARP
replies cannot be demultiplexed using connection tracking, so delivering
them to all gateway-router patch ports creates expensive fan-out. At
scale, this has also exposed OVS recirculation limits. Independently,
learning the same neighbors on each router duplicates Southbound MAC
bindings and the corresponding controller flows.

OVN-Kubernetes has been narrowing which neighbor-discovery traffic is
forwarded to each gateway router. Shared MAC binding scopes provide the
OVN support needed to avoid delivering every reply to every router merely
to populate their individual neighbor tables.

Logical router ports opt into a MAC_Binding_Scope. Bindings learned on any
member are available to all members, with one Shared_MAC_Binding row per
scope and IP address and a shared set of lookup flows on each relevant
chassis. Private fallback bindings and per-port static overrides retain
their precedence. Learning, aging, and GARP/RARP policy are configured on
the scope.

Northd validates that members share gateway placement and the physical L2
domain, and negotiates controller support before activating a scope. The
CMS remains responsible for delivering ARP/NDP traffic to at least one
member; this series does not change external-bridge forwarding itself.

The three patches introduce the scoped logical actions, add the schema
and northd support, and implement controller learning and lookup. The
controller changes also cover buffered-packet release, conditional
monitoring, timestamp refresh, and EVPN synchronization.

This follows the earlier design discussion:
https://mail.openvswitch.org/pipermail/ovs-discuss/2026-September/054021.html

Testing includes the passing GitHub CI checks, focused shared-binding
unit tests, and userspace EVPN system tests. The development PR and CI
results are available here:
https://github.com/trozet/ovn/pull/8

Feedback on the API, implementation, and series organization is welcome.

Tim Rozet (3):
  actions: Add scoped MAC binding lookups.
  northd: Add shared MAC binding scopes.
  controller: Support shared MAC binding scopes.

 Documentation/ref/ovn-logical-flows.7.rst |  17 +-
 NEWS                                      |   3 +
 controller/chassis.c                      |   7 +
 controller/evpn-mac-binding-sync.c        | 147 +++++---
 controller/evpn-mac-binding-sync.h        |  16 +-
 controller/garp_rarp.c                    |  36 +-
 controller/garp_rarp.h                    |   1 +
 controller/lflow.c                        | 139 ++++++++
 controller/lflow.h                        |  14 +
 controller/mac-cache.c                    | 417 +++++++++++++++++-----
 controller/mac-cache.h                    |  23 +-
 controller/neighbor-of.c                  |  98 ++++-
 controller/neighbor-of.h                  |   4 +
 controller/ovn-controller.8.xml           |  18 +
 controller/ovn-controller.c               | 327 ++++++++++++++++-
 controller/pinctrl.c                      |  81 ++++-
 controller/pinctrl.h                      |   3 +
 controller/statctrl.c                     |  18 +
 controller/statctrl.h                     |   1 +
 include/ovn/actions.h                     |  19 +-
 include/ovn/features.h                    |   1 +
 lib/actions.c                             | 107 +++++-
 lib/mac-binding-index.c                   |  67 ++++
 lib/mac-binding-index.h                   |  13 +
 lib/ovn-util.c                            |   4 +-
 northd/aging.c                            |  61 ++++
 northd/aging.h                            |   1 +
 northd/automake.mk                        |   2 +
 northd/en-global-config.c                 |  21 +-
 northd/en-global-config.h                 |   1 +
 northd/en-mac-binding-scope.c             | 406 +++++++++++++++++++++
 northd/en-mac-binding-scope.h             |  26 ++
 northd/inc-proc-northd.c                  |  32 +-
 northd/northd.c                           | 202 +++++++++--
 northd/ovn-northd.c                       |  13 +
 ovn-nb.ovsschema                          |  26 +-
 ovn-nb.xml                                |  75 ++++
 ovn-sb.ovsschema                          |  36 +-
 ovn-sb.xml                                | 162 ++++++++-
 tests/ovn-controller.at                   |   1 +
 tests/ovn-inc-proc-graph-dump.at          |  27 +-
 tests/ovn-macros.at                       |  14 +-
 tests/ovn-northd.at                       | 195 +++++++++-
 tests/ovn.at                              | 334 ++++++++++++++++-
 tests/system-ovn.at                       |  43 +++
 tests/test-ovn.c                          |   4 +
 utilities/ovn-trace.c                     |  90 ++++-
 47 files changed, 3067 insertions(+), 286 deletions(-)
 create mode 100644 northd/en-mac-binding-scope.c
 create mode 100644 northd/en-mac-binding-scope.h


base-commit: 38575ba43e9d0b501f49387f0da40cd3ad83ed94
-- 
2.56.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to