forked from Openwrt/openwrt
f89904ad78
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.1.77 Removed upstreamed: generic/backport-6.1/707-v6.8-01-net-phy-at803x-fix-passing-the-wrong-reference-for-c.patch[1] generic/backport-6.1/796-v6.8-ipmr-fix-kernel-panic-when-forwarding-mcast-packets.patch[2] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.77&id=7dc0fefd37dd5fb03fdac6e3e01b1c2291148ccb 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.77&id=d2f1b7fe74afd66298dbb3c7b39e7b62e4df1724 Build system: x86/64 Build-tested: x86/64/AMD Cezanne Run-tested: x86/64/AMD Cezanne Signed-off-by: John Audia <therealgraysky@proton.me>
87 lines
2.9 KiB
Diff
87 lines
2.9 KiB
Diff
From 3b4329230db8750bea7a56ef07f07cbbf5fc6c5a Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Tue, 4 Jul 2023 22:50:12 +0200
|
|
Subject: [PATCH 19/20] net: dsa: qca8k: implement lag_fdb_add/del ops
|
|
|
|
Implement lag_fdb_add/del ops to correctly support using LAG interface.
|
|
Qca8k switch supports declaring fdb entry for link aggregation by simply
|
|
setting the DES_PORT bits to all the LAG member.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
---
|
|
drivers/net/dsa/qca/qca8k-8xxx.c | 2 ++
|
|
drivers/net/dsa/qca/qca8k-common.c | 48 ++++++++++++++++++++++++++++++
|
|
drivers/net/dsa/qca/qca8k.h | 6 ++++
|
|
3 files changed, 56 insertions(+)
|
|
|
|
--- a/drivers/net/dsa/qca/qca8k-8xxx.c
|
|
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c
|
|
@@ -2015,6 +2015,8 @@ static const struct dsa_switch_ops qca8k
|
|
.port_fdb_add = qca8k_port_fdb_add,
|
|
.port_fdb_del = qca8k_port_fdb_del,
|
|
.port_fdb_dump = qca8k_port_fdb_dump,
|
|
+ .lag_fdb_add = qca8k_lag_fdb_add,
|
|
+ .lag_fdb_del = qca8k_lag_fdb_del,
|
|
.port_mdb_add = qca8k_port_mdb_add,
|
|
.port_mdb_del = qca8k_port_mdb_del,
|
|
.port_mirror_add = qca8k_port_mirror_add,
|
|
--- a/drivers/net/dsa/qca/qca8k-common.c
|
|
+++ b/drivers/net/dsa/qca/qca8k-common.c
|
|
@@ -1215,6 +1215,42 @@ int qca8k_port_lag_leave(struct dsa_swit
|
|
return qca8k_lag_refresh_portmap(ds, port, lag, true);
|
|
}
|
|
|
|
+int qca8k_lag_fdb_add(struct dsa_switch *ds, struct dsa_lag lag,
|
|
+ const unsigned char *addr, u16 vid,
|
|
+ struct dsa_db db)
|
|
+{
|
|
+ struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
|
|
+ struct dsa_port *dp;
|
|
+ u16 port_mask = 0;
|
|
+
|
|
+ /* Set the vid to the port vlan id if no vid is set */
|
|
+ if (!vid)
|
|
+ vid = QCA8K_PORT_VID_DEF;
|
|
+
|
|
+ dsa_lag_foreach_port(dp, ds->dst, &lag)
|
|
+ port_mask |= BIT(dp->index);
|
|
+
|
|
+ return qca8k_port_fdb_insert(priv, addr, port_mask, vid);
|
|
+}
|
|
+
|
|
+int qca8k_lag_fdb_del(struct dsa_switch *ds, struct dsa_lag lag,
|
|
+ const unsigned char *addr, u16 vid,
|
|
+ struct dsa_db db)
|
|
+{
|
|
+ struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
|
|
+ struct dsa_port *dp;
|
|
+ u16 port_mask = 0;
|
|
+
|
|
+ /* Set the vid to the port vlan id if no vid is set */
|
|
+ if (!vid)
|
|
+ vid = QCA8K_PORT_VID_DEF;
|
|
+
|
|
+ dsa_lag_foreach_port(dp, ds->dst, &lag)
|
|
+ port_mask |= BIT(dp->index);
|
|
+
|
|
+ return qca8k_fdb_del(priv, addr, port_mask, vid);
|
|
+}
|
|
+
|
|
int qca8k_read_switch_id(struct qca8k_priv *priv)
|
|
{
|
|
u32 val;
|
|
--- a/drivers/net/dsa/qca/qca8k.h
|
|
+++ b/drivers/net/dsa/qca/qca8k.h
|
|
@@ -590,5 +590,11 @@ int qca8k_port_lag_join(struct dsa_switc
|
|
struct netlink_ext_ack *extack);
|
|
int qca8k_port_lag_leave(struct dsa_switch *ds, int port,
|
|
struct dsa_lag lag);
|
|
+int qca8k_lag_fdb_add(struct dsa_switch *ds, struct dsa_lag lag,
|
|
+ const unsigned char *addr, u16 vid,
|
|
+ struct dsa_db db);
|
|
+int qca8k_lag_fdb_del(struct dsa_switch *ds, struct dsa_lag lag,
|
|
+ const unsigned char *addr, u16 vid,
|
|
+ struct dsa_db db);
|
|
|
|
#endif /* __QCA8K_H */
|