net: cls_u32: be more strict about skip-sw flag
Return an error if user requested skip-sw and the underlaying hardware cannot handle tc offloads (or offloads are disabled). Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1a0f7d2984
commit
d47a0f387f
|
@ -457,20 +457,21 @@ static int u32_replace_hw_hnode(struct tcf_proto *tp,
|
|||
struct tc_to_netdev offload;
|
||||
int err;
|
||||
|
||||
if (!tc_should_offload(dev, flags))
|
||||
return tc_skip_sw(flags) ? -EINVAL : 0;
|
||||
|
||||
offload.type = TC_SETUP_CLSU32;
|
||||
offload.cls_u32 = &u32_offload;
|
||||
|
||||
if (tc_should_offload(dev, flags)) {
|
||||
offload.cls_u32->command = TC_CLSU32_NEW_HNODE;
|
||||
offload.cls_u32->hnode.divisor = h->divisor;
|
||||
offload.cls_u32->hnode.handle = h->handle;
|
||||
offload.cls_u32->hnode.prio = h->prio;
|
||||
offload.cls_u32->command = TC_CLSU32_NEW_HNODE;
|
||||
offload.cls_u32->hnode.divisor = h->divisor;
|
||||
offload.cls_u32->hnode.handle = h->handle;
|
||||
offload.cls_u32->hnode.prio = h->prio;
|
||||
|
||||
err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
|
||||
tp->protocol, &offload);
|
||||
if (tc_skip_sw(flags))
|
||||
return err;
|
||||
}
|
||||
err = dev->netdev_ops->ndo_setup_tc(dev, tp->q->handle,
|
||||
tp->protocol, &offload);
|
||||
if (tc_skip_sw(flags))
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue