net: netdevsim: mimic tc-taprio offload
To be able to use netdevsim for tc-testing with an offloaded tc-taprio schedule, it needs to report a PTP clock (which it now does), and to accept ndo_setup_tc(TC_SETUP_QDISC_TAPRIO) calls. Since netdevsim has no packet I/O, this doesn't do anything intelligent, it only allows taprio offload code paths to go through some level of automated testing. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://lore.kernel.org/r/20230807193324.4128292-9-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
b63e78fca8
commit
35da47fe1c
@ -209,6 +209,31 @@ static int nsim_set_vf_link_state(struct net_device *dev, int vf, int state)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void nsim_taprio_stats(struct tc_taprio_qopt_stats *stats)
|
||||||
|
{
|
||||||
|
stats->window_drops = 0;
|
||||||
|
stats->tx_overruns = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int nsim_setup_tc_taprio(struct net_device *dev,
|
||||||
|
struct tc_taprio_qopt_offload *offload)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
switch (offload->cmd) {
|
||||||
|
case TAPRIO_CMD_REPLACE:
|
||||||
|
case TAPRIO_CMD_DESTROY:
|
||||||
|
break;
|
||||||
|
case TAPRIO_CMD_STATS:
|
||||||
|
nsim_taprio_stats(&offload->stats);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
err = -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static LIST_HEAD(nsim_block_cb_list);
|
static LIST_HEAD(nsim_block_cb_list);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -217,6 +242,8 @@ nsim_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data)
|
|||||||
struct netdevsim *ns = netdev_priv(dev);
|
struct netdevsim *ns = netdev_priv(dev);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
case TC_SETUP_QDISC_TAPRIO:
|
||||||
|
return nsim_setup_tc_taprio(dev, type_data);
|
||||||
case TC_SETUP_BLOCK:
|
case TC_SETUP_BLOCK:
|
||||||
return flow_block_cb_setup_simple(type_data,
|
return flow_block_cb_setup_simple(type_data,
|
||||||
&nsim_block_cb_list,
|
&nsim_block_cb_list,
|
||||||
|
Reference in New Issue
Block a user