53 lines
1.8 KiB
Diff
53 lines
1.8 KiB
Diff
From 246b87f0daff042ad215c9c55b411e70ae5406e2 Mon Sep 17 00:00:00 2001
|
|
From: Ken Zhu <quic_guigenz@quicinc.com>
|
|
Date: Mon, 25 Apr 2022 13:54:20 -0700
|
|
Subject: [PATCH 263/281] net: do time update rather than fully update in the
|
|
fdb
|
|
|
|
keep the fdb up to date when do refresh.
|
|
|
|
Change-Id: Ib0297f11920b66bb573ef41f8a09da9ac0d774af
|
|
Signed-off-by: Ken Zhu <quic_guigenz@quicinc.com>
|
|
---
|
|
include/linux/if_bridge.h | 1 +
|
|
net/bridge/br_fdb.c | 18 ++++++++++++++++++
|
|
2 files changed, 19 insertions(+)
|
|
|
|
--- a/include/linux/if_bridge.h
|
|
+++ b/include/linux/if_bridge.h
|
|
@@ -78,6 +78,7 @@ extern struct net_device *br_port_dev_ge
|
|
struct sk_buff *skb,
|
|
unsigned int cookie);
|
|
extern void br_refresh_fdb_entry(struct net_device *dev, const char *addr);
|
|
+extern void br_fdb_entry_refresh(struct net_device *dev, const char *addr, __u16 vid);
|
|
extern void br_dev_update_stats(struct net_device *dev,
|
|
struct rtnl_link_stats64 *nlstats);
|
|
extern struct net_bridge_fdb_entry *br_fdb_has_entry(struct net_device *dev,
|
|
--- a/net/bridge/br_fdb.c
|
|
+++ b/net/bridge/br_fdb.c
|
|
@@ -1006,6 +1006,24 @@ void br_refresh_fdb_entry(struct net_dev
|
|
}
|
|
EXPORT_SYMBOL_GPL(br_refresh_fdb_entry);
|
|
|
|
+/* Update timestamp of FDB entries for bridge packets being forwarded by offload engines */
|
|
+void br_fdb_entry_refresh(struct net_device *dev, const char *addr, __u16 vid)
|
|
+{
|
|
+ struct net_bridge_fdb_entry *fdb;
|
|
+ struct net_bridge_port *p = br_port_get_rcu(dev);
|
|
+
|
|
+ if (!p || p->state == BR_STATE_DISABLED)
|
|
+ return;
|
|
+
|
|
+ rcu_read_lock();
|
|
+ fdb = fdb_find_rcu(&p->br->fdb_hash_tbl, addr, vid);
|
|
+ if (likely(fdb)) {
|
|
+ fdb->updated = jiffies;
|
|
+ }
|
|
+ rcu_read_unlock();
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(br_fdb_entry_refresh);
|
|
+
|
|
/* Look up the MAC address in the device's bridge fdb table */
|
|
struct net_bridge_fdb_entry *br_fdb_has_entry(struct net_device *dev,
|
|
const char *addr, __u16 vid)
|