Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Vladimir Oltean and committed by
Jakub Kicinski
35da47fe b63e78fc

+27
+27
drivers/net/netdevsim/netdev.c
··· 209 209 return 0; 210 210 } 211 211 212 + static void nsim_taprio_stats(struct tc_taprio_qopt_stats *stats) 213 + { 214 + stats->window_drops = 0; 215 + stats->tx_overruns = 0; 216 + } 217 + 218 + static int nsim_setup_tc_taprio(struct net_device *dev, 219 + struct tc_taprio_qopt_offload *offload) 220 + { 221 + int err = 0; 222 + 223 + switch (offload->cmd) { 224 + case TAPRIO_CMD_REPLACE: 225 + case TAPRIO_CMD_DESTROY: 226 + break; 227 + case TAPRIO_CMD_STATS: 228 + nsim_taprio_stats(&offload->stats); 229 + break; 230 + default: 231 + err = -EOPNOTSUPP; 232 + } 233 + 234 + return err; 235 + } 236 + 212 237 static LIST_HEAD(nsim_block_cb_list); 213 238 214 239 static int ··· 242 217 struct netdevsim *ns = netdev_priv(dev); 243 218 244 219 switch (type) { 220 + case TC_SETUP_QDISC_TAPRIO: 221 + return nsim_setup_tc_taprio(dev, type_data); 245 222 case TC_SETUP_BLOCK: 246 223 return flow_block_cb_setup_simple(type_data, 247 224 &nsim_block_cb_list,