Mon, Jun 12, 2017 at 03:57:05PM CEST, j...@mojatatu.com wrote: >On 17-06-12 07:47 AM, Jiri Pirko wrote: >> Mon, Jun 12, 2017 at 01:16:05PM CEST, j...@mojatatu.com wrote: >> > On 17-06-11 10:13 AM, Jiri Pirko wrote: > >> > This also is not useful. >> > It happens to be ok for this use case but not for the >> > general case. i.e. >> > We need to get the whole struct not just the values >> > and use the selector to pick what bits are affected. >> > Example if bit X is set to 1 in selector and bit X in value >> > is 0, then we set the kernel's bit X to 0. >> >> Sure, have another helper for selector then. >> Or, you can have: >> >> struct nla_flag_bits *fb; >> fb = nla_get_flag_bits(tb[TCA_ROOT_FLAGS]); >> >> Or all 3 helpers. My point is, it is a specific netlink attribute with >> specific format, it should have get/put helpers. >> > >I did try nla_get_flag_bits(tb[TCA_ROOT_FLAGS], &fb) so i dont have >to do alloc/free - it ended being a single line function which >does a memcpy. >Is this really necessary?
Yes please, it is necessary! By the same logic, nla_get_u32 would not be necessary. I don't understand why you need alloc/free... >The user of this structure better know it to make use of it. > >cheers, >jamal