b10d604459
Signed-off-by: Felix Fietkau <nbd@nbd.name>
54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
From: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
Date: Mon, 18 Jan 2021 22:39:17 +0100
|
|
Subject: [PATCH] dsa: slave: add support for TC_SETUP_FT
|
|
|
|
The dsa infrastructure provides a well-defined hierarchy of devices,
|
|
pass up the call to set up the flow block to the master device. From the
|
|
software dataplane, the netfilter infrastructure uses the dsa slave
|
|
devices to refer to the input and output device for the given skbuff.
|
|
Similarly, the flowtable definition in the ruleset refers to the dsa
|
|
slave port devices.
|
|
|
|
This patch adds the glue code to call ndo_setup_tc with TC_SETUP_FT
|
|
with the master device via the dsa slave devices.
|
|
|
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
---
|
|
|
|
--- a/net/dsa/slave.c
|
|
+++ b/net/dsa/slave.c
|
|
@@ -1202,14 +1202,32 @@ static int dsa_slave_setup_tc_block(stru
|
|
}
|
|
}
|
|
|
|
+static int dsa_slave_setup_ft_block(struct dsa_switch *ds, int port,
|
|
+ void *type_data)
|
|
+{
|
|
+ struct dsa_port *cpu_dp = dsa_to_port(ds, port)->cpu_dp;
|
|
+ struct net_device *master = cpu_dp->master;
|
|
+
|
|
+ if (!master->netdev_ops->ndo_setup_tc)
|
|
+ return -EOPNOTSUPP;
|
|
+
|
|
+ return master->netdev_ops->ndo_setup_tc(master, TC_SETUP_FT, type_data);
|
|
+}
|
|
+
|
|
static int dsa_slave_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
|
void *type_data)
|
|
{
|
|
struct dsa_port *dp = dsa_slave_to_port(dev);
|
|
struct dsa_switch *ds = dp->ds;
|
|
|
|
- if (type == TC_SETUP_BLOCK)
|
|
+ switch (type) {
|
|
+ case TC_SETUP_BLOCK:
|
|
return dsa_slave_setup_tc_block(dev, type_data);
|
|
+ case TC_SETUP_FT:
|
|
+ return dsa_slave_setup_ft_block(ds, dp->index, type_data);
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
|
|
if (!ds->ops->port_setup_tc)
|
|
return -EOPNOTSUPP;
|