| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- From: Pablo Neira Ayuso <[email protected]>
- Date: Wed, 24 Mar 2021 02:30:51 +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 <[email protected]>
- ---
- --- a/net/dsa/slave.c
- +++ b/net/dsa/slave.c
- @@ -1239,14 +1239,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;
|