Re: [PATCH v2 net-next 8/9] bpf: nfp: Report bpf_prog ID during XDP_QUERY_PROG
flat view
From: Jakub Kicinski <hidden>
Date: 2017-06-14 03:43:03
On Tue, 13 Jun 2017 20:19:53 -0700, Martin KaFai Lau wrote:
On Tue, Jun 13, 2017 at 07:19:50PM -0700, Jakub Kicinski wrote:quoted
On Tue, 13 Jun 2017 17:37:50 -0700, Martin KaFai Lau wrote:quoted
On Tue, Jun 13, 2017 at 04:52:32PM -0700, Jakub Kicinski wrote:quoted
On Tue, 13 Jun 2017 14:08:40 -0700, Martin KaFai Lau wrote:quoted
- case XDP_QUERY_PROG: - xdp->prog_attached = !!nn->dp.xdp_prog; + case XDP_QUERY_PROG: { + const struct bpf_prog *xdp_prog; + + xdp_prog = nn->dp.xdp_prog; + if (xdp_prog) { + xdp->prog_id = xdp_prog->aux->id; + xdp->prog_attached = true; + } else { + xdp->prog_id = 0; + xdp->prog_attached = false; + } return 0; + }I'm sorry to nit pick but it could be done on a single line: case XDP_QUERY_PROG: xdp->prog_attached = !!nn->dp.xdp_prog; + xdp->prog_id = nn->dp.xdp_prog ? nn->dp.xdp_prog->aux->id : 0; return 0; default: return -EINVAL;OK...quoted
What would be even cooler is a helper like this: static inline u32 bpf_prog_id(struct bpf_prog *prog) { if (!prog) return 0; return prog->aux->id; } in linux/bpf.h.Good idea.You may actually have to add that into a source file, because bpf.h does not know the definition of struct bpf_prog :(Yeah. filter.h seems not working well either. It looks good to me at the first thought. After a second thought, in the future, I am not so sure having a getter for every fields in bpf_prog.
Yes, if it's not a static inline it's far less appealing...
I can put bpf_prog_id() in nfp_net_common.c only. or do 'xdp->prog_id = nn->dp.xdp_prog ? nn->dp.xdp_prog->aux->id : 0;' as you suggested earlier also. I am fine either way. Your call ;)
OK, let's do the ternary operator version then :) Sorry for leading you into this dead end.