diff options
Diffstat (limited to 'target/linux/generic/pending-5.4/647-net-dsa-support-hardware-flow-table-offload.patch')
-rw-r--r-- | target/linux/generic/pending-5.4/647-net-dsa-support-hardware-flow-table-offload.patch | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/target/linux/generic/pending-5.4/647-net-dsa-support-hardware-flow-table-offload.patch b/target/linux/generic/pending-5.4/647-net-dsa-support-hardware-flow-table-offload.patch deleted file mode 100644 index 91aae5b65c..0000000000 --- a/target/linux/generic/pending-5.4/647-net-dsa-support-hardware-flow-table-offload.patch +++ /dev/null @@ -1,78 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Thu, 17 Sep 2020 18:41:23 +0200 -Subject: [PATCH] net: dsa: support hardware flow table offload - -Look up the master device and the port id - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/include/net/netfilter/nf_flow_table.h -+++ b/include/net/netfilter/nf_flow_table.h -@@ -90,6 +90,7 @@ struct flow_offload { - #define FLOW_OFFLOAD_PATH_ETHERNET BIT(0) - #define FLOW_OFFLOAD_PATH_VLAN BIT(1) - #define FLOW_OFFLOAD_PATH_PPPOE BIT(2) -+#define FLOW_OFFLOAD_PATH_DSA BIT(3) - - struct flow_offload_hw_path { - struct net_device *dev; -@@ -100,6 +101,7 @@ struct flow_offload_hw_path { - u16 vlan_proto; - u16 vlan_id; - u16 pppoe_sid; -+ u16 dsa_port; - }; - - #define NF_FLOW_TIMEOUT (30 * HZ) ---- a/net/dsa/slave.c -+++ b/net/dsa/slave.c -@@ -19,6 +19,10 @@ - #include <linux/if_bridge.h> - #include <linux/netpoll.h> - #include <linux/ptp_classify.h> -+#if IS_ENABLED(CONFIG_NF_FLOW_TABLE) -+#include <linux/netfilter.h> -+#include <net/netfilter/nf_flow_table.h> -+#endif - - #include "dsa_priv.h" - -@@ -1226,6 +1230,27 @@ static struct devlink_port *dsa_slave_ge - return dp->ds->devlink ? &dp->devlink_port : NULL; - } - -+#if IS_ENABLED(CONFIG_NF_FLOW_TABLE) -+static int dsa_flow_offload_check(struct flow_offload_hw_path *path) -+{ -+ struct net_device *dev = path->dev; -+ struct dsa_port *dp; -+ -+ if (!(path->flags & FLOW_OFFLOAD_PATH_ETHERNET)) -+ return -EINVAL; -+ -+ dp = dsa_slave_to_port(dev); -+ path->dsa_port = dp->index; -+ path->dev = dsa_slave_to_master(dev); -+ path->flags |= FLOW_OFFLOAD_PATH_DSA; -+ -+ if (path->dev->netdev_ops->ndo_flow_offload_check) -+ return path->dev->netdev_ops->ndo_flow_offload_check(path); -+ -+ return 0; -+} -+#endif /* CONFIG_NF_FLOW_TABLE */ -+ - static const struct net_device_ops dsa_slave_netdev_ops = { - .ndo_open = dsa_slave_open, - .ndo_stop = dsa_slave_close, -@@ -1250,6 +1275,9 @@ static const struct net_device_ops dsa_s - .ndo_vlan_rx_add_vid = dsa_slave_vlan_rx_add_vid, - .ndo_vlan_rx_kill_vid = dsa_slave_vlan_rx_kill_vid, - .ndo_get_devlink_port = dsa_slave_get_devlink_port, -+#if IS_ENABLED(CONFIG_NF_FLOW_TABLE) -+ .ndo_flow_offload_check = dsa_flow_offload_check, -+#endif - }; - - static struct device_type dsa_type = { |