mlxsw: spectrum: push cls_flower and cls_matchall setup_tc processing into separate functions
Let mlxsw_sp_setup_tc be a splitter for specific setup_tc types and push out cls_flower and cls_matchall specific codes into separate functions. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
8c818c27f3
commit
fd33f1dfed
@ -1693,46 +1693,67 @@ static void mlxsw_sp_port_del_cls_matchall(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
kfree(mall_tc_entry);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
u32 handle, u32 chain_index, __be16 proto,
|
||||
struct tc_to_netdev *tc)
|
||||
static int mlxsw_sp_setup_tc_cls_matchall(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
u32 handle, u32 chain_index,
|
||||
__be16 proto,
|
||||
struct tc_cls_matchall_offload *f)
|
||||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
|
||||
bool ingress = TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS);
|
||||
|
||||
if (chain_index)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (f->command) {
|
||||
case TC_CLSMATCHALL_REPLACE:
|
||||
return mlxsw_sp_port_add_cls_matchall(mlxsw_sp_port, proto, f,
|
||||
ingress);
|
||||
case TC_CLSMATCHALL_DESTROY:
|
||||
mlxsw_sp_port_del_cls_matchall(mlxsw_sp_port, f);
|
||||
return 0;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_sp_setup_tc_cls_flower(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
u32 handle, u32 chain_index, __be16 proto,
|
||||
struct tc_cls_flower_offload *f)
|
||||
{
|
||||
bool ingress = TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS);
|
||||
|
||||
if (chain_index)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (f->command) {
|
||||
case TC_CLSFLOWER_REPLACE:
|
||||
return mlxsw_sp_flower_replace(mlxsw_sp_port, ingress,
|
||||
proto, f);
|
||||
case TC_CLSFLOWER_DESTROY:
|
||||
mlxsw_sp_flower_destroy(mlxsw_sp_port, ingress, f);
|
||||
return 0;
|
||||
case TC_CLSFLOWER_STATS:
|
||||
return mlxsw_sp_flower_stats(mlxsw_sp_port, ingress, f);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
static int mlxsw_sp_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
u32 handle, u32 chain_index, __be16 proto,
|
||||
struct tc_to_netdev *tc)
|
||||
{
|
||||
struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
|
||||
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSMATCHALL:
|
||||
switch (tc->cls_mall->command) {
|
||||
case TC_CLSMATCHALL_REPLACE:
|
||||
return mlxsw_sp_port_add_cls_matchall(mlxsw_sp_port,
|
||||
proto,
|
||||
tc->cls_mall,
|
||||
ingress);
|
||||
case TC_CLSMATCHALL_DESTROY:
|
||||
mlxsw_sp_port_del_cls_matchall(mlxsw_sp_port,
|
||||
tc->cls_mall);
|
||||
return 0;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
return mlxsw_sp_setup_tc_cls_matchall(mlxsw_sp_port, handle,
|
||||
chain_index, proto,
|
||||
tc->cls_mall);
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
switch (tc->cls_flower->command) {
|
||||
case TC_CLSFLOWER_REPLACE:
|
||||
return mlxsw_sp_flower_replace(mlxsw_sp_port, ingress,
|
||||
proto, tc->cls_flower);
|
||||
case TC_CLSFLOWER_DESTROY:
|
||||
mlxsw_sp_flower_destroy(mlxsw_sp_port, ingress,
|
||||
tc->cls_flower);
|
||||
return 0;
|
||||
case TC_CLSFLOWER_STATS:
|
||||
return mlxsw_sp_flower_stats(mlxsw_sp_port, ingress,
|
||||
tc->cls_flower);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
return mlxsw_sp_setup_tc_cls_flower(mlxsw_sp_port, handle,
|
||||
chain_index, proto,
|
||||
tc->cls_flower);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
Reference in New Issue
Block a user