Currently there is no way of querying whether a filter is offloaded to HW or not when using both policy (no flag).
Reuse the skip flags to show the insertion status by setting the skip_hw flag in case the filter wasn't offloaded. Signed-off-by: Or Gerlitz <ogerl...@mellanox.com> --- net/sched/cls_bpf.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index d9c9701..91ba90d 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -185,14 +185,23 @@ static int cls_bpf_offload(struct tcf_proto *tp, struct cls_bpf_prog *prog, return -EINVAL; } } else { - if (!tc_should_offload(dev, tp, prog->gen_flags)) - return skip_sw ? -EINVAL : 0; + if (!tc_should_offload(dev, tp, prog->gen_flags)) { + if (tc_skip_sw(prog->gen_flags)) + return -EINVAL; + prog->gen_flags |= TCA_CLS_FLAGS_SKIP_HW; + return 0; + } cmd = TC_CLSBPF_ADD; } ret = cls_bpf_offload_cmd(tp, obj, cmd); - if (ret) - return skip_sw ? ret : 0; + + if (ret) { + if (skip_sw) + return ret; + prog->gen_flags |= TCA_CLS_FLAGS_SKIP_HW; + return 0; + } obj->offloaded = true; if (oldprog) -- 2.3.7