mirror of
https://github.com/torvalds/linux.git
synced 2026-10-17 06:20:02 +02:00
Implement support for FDB and MDB management for the RTL8365MB series
switches.
The hardware supports IVL by keying the unicast forwarding database with
the {MAC, VID, EFID} tuple. The Extended Filtering ID (EFID) is 3 bits
wide, providing 8 unique filtering domains. This driver reserves EFID 0
for standalone ports, effectively limiting the hardware offload to a
maximum of 7 bridges. The multicast database uses a {MAC, VID} key, with
ports from different bridges sharing the same multicast group.
Introduce a mutex lock (l2_lock) to protect concurrent L2 table updates.
Add support for forwarding database operations, including unicast and
multicast entry handling as well as fast aging support.
Set DSA switch flags assisted_learning_on_cpu_port and fdb_isolation.
Signed-off-by: Alvin Šipraga <alsi@bang-olufsen.dk>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Reviewed-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Co-developed-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Link: https://patch.msgid.link/20260606-realtek_forward-v13-7-b9e409687cbe@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
33 lines
1.0 KiB
C
33 lines
1.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Forwarding and multicast database interface for the rtl8365mb switch family
|
|
*
|
|
* Copyright (C) 2022 Alvin Šipraga <alsi@bang-olufsen.dk>
|
|
*/
|
|
|
|
#ifndef _REALTEK_RTL8365MB_L2_H
|
|
#define _REALTEK_RTL8365MB_L2_H
|
|
|
|
#include <linux/if_ether.h>
|
|
#include <linux/types.h>
|
|
|
|
#include "realtek.h"
|
|
|
|
int rtl8365mb_l2_get_next_uc(struct realtek_priv *priv, u16 *addr, int port,
|
|
struct realtek_fdb_entry *entry);
|
|
int rtl8365mb_l2_add_uc(struct realtek_priv *priv, int port,
|
|
const unsigned char addr[static ETH_ALEN],
|
|
u16 efid, u16 vid);
|
|
int rtl8365mb_l2_del_uc(struct realtek_priv *priv, int port,
|
|
const unsigned char addr[static ETH_ALEN],
|
|
u16 efid, u16 vid);
|
|
int rtl8365mb_l2_flush(struct realtek_priv *priv, int port, u16 vid);
|
|
|
|
int rtl8365mb_l2_add_mc(struct realtek_priv *priv, int port,
|
|
const unsigned char mac_addr[static ETH_ALEN],
|
|
u16 vid);
|
|
int rtl8365mb_l2_del_mc(struct realtek_priv *priv, int port,
|
|
const unsigned char mac_addr[static ETH_ALEN],
|
|
u16 vid);
|
|
|
|
#endif /* _REALTEK_RTL8365MB_L2_H */
|