mbox series

[RFC,net-next,(resend),0/4] Send notifications for roaming hosts

Message ID 20241108035546.2055996-1-elliot.ayrey@alliedtelesis.co.nz (mailing list archive)
Headers show
Series Send notifications for roaming hosts | expand

Message

Elliot Ayrey Nov. 8, 2024, 3:55 a.m. UTC
Apologies, this is a resend as the first version didn't have the correct CCs.


For 802.1x operation it is useful to know when a host authorised to on port
has roamed to another port, and take action on it.

The fdb sticky flag is used to configure a host for a single port and
prohibit it from moving to another, so this flag is used as the means of
determining when to send the notification.

In this set of patches the fdb notify mechanism is extended to including a
roaming bit, so user applications can configure an fdb entry for a host as
sticky (likely also static) and turn on notifications. With this
configuration, if traffic matching this entry appears on another port the
entry will not be updated but a notification will be sent to userspace.

This is achieved by temporarily updating the fdb entry with the new port,
setting the roaming bit, firing off a notification, and restoring the
original port. The port remains unchanged but userspace is now notified of
the new port the host was seen on.

For this specific implementation the mv88e6xxx chip's member-violation
interrupt is used to inform the kernel bridge via switchdev that a host is
roaming to a new port. For this to work the br_fdb_external_learn_add()
function has been changed to respect the stick flag where it previously
wasn't.

Elliot Ayrey (4):
  net: bridge: respect sticky flag on external learn
  net: bridge: send notification for roaming hosts
  net: dsa: mv88e6xxx: handle member-violations
  net: dsa: mv88e6xxx: cache fid-to-vid association

 drivers/net/dsa/mv88e6xxx/chip.h        |  2 +
 drivers/net/dsa/mv88e6xxx/global1_atu.c | 37 +++++++++++++++
 drivers/net/dsa/mv88e6xxx/global1_vtu.c |  6 ++-
 drivers/net/dsa/mv88e6xxx/switchdev.c   | 60 ++++++++++++------------
 drivers/net/dsa/mv88e6xxx/switchdev.h   |  2 +
 include/uapi/linux/neighbour.h          |  4 +-
 net/bridge/br_fdb.c                     | 61 +++++++++++++++++--------
 net/bridge/br_input.c                   |  9 +++-
 net/bridge/br_private.h                 |  3 ++
 9 files changed, 132 insertions(+), 52 deletions(-)