On 06/01/2016 06:50 PM, Jakub Kicinski wrote:
Add cls_bpf support for the TCA_CLS_FLAGS_SKIP_HW flag. Unlike U32 and flower cls_bpf already has some netlink flags defined. I chose to create a new attribute to be able to use the same flag values as the above.
Yeah, that's totally fine to make it a new flag attribute.
Unknown flags are ignored and not reported upon dump. Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com> Reviewed-by: Dinan Gunawardena <dgunaward...@netronome.com> Reviewed-by: Simon Horman <simon.hor...@netronome.com>
[...]
diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index f4297c8a42fe..93a86edf3bd8 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -395,6 +395,7 @@ enum { TCA_BPF_FD, TCA_BPF_NAME, TCA_BPF_FLAGS, + TCA_BPF_GEN_TCA_FLAGS,
Small nit for the non-RFC set: I'd simply name that TCA_BPF_FLAGS_GEN.
__TCA_BPF_MAX, };
[...]
@@ -400,8 +406,11 @@ static int cls_bpf_modify_existing(struct net *net, struct tcf_proto *tp, have_exts = bpf_flags & TCA_BPF_FLAG_ACT_DIRECT; } + if (tb[TCA_BPF_GEN_TCA_FLAGS]) + gen_flags = nla_get_u32(tb[TCA_BPF_GEN_TCA_FLAGS]); prog->exts_integrated = have_exts; + prog->gen_flags = gen_flags & CLS_BPF_SUPPORTED_GEN_FLAGS;
Invalid flags should probably be rejected here with -EINVAL or something.
ret = is_bpf ? cls_bpf_prog_from_ops(tb, prog) : cls_bpf_prog_from_efd(tb, prog, tp); @@ -568,6 +577,9 @@ static int cls_bpf_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, bpf_flags |= TCA_BPF_FLAG_ACT_DIRECT; if (bpf_flags && nla_put_u32(skb, TCA_BPF_FLAGS, bpf_flags)) goto nla_put_failure; + if (prog->gen_flags && + nla_put_u32(skb, TCA_BPF_GEN_TCA_FLAGS, prog->gen_flags)) + goto nla_put_failure; nla_nest_end(skb, nest);
Otherwise looks good: Acked-by: Daniel Borkmann <dan...@iogearbox.net>