On 17-07-24 07:27 AM, Jiri Pirko wrote:
Mon, Jul 24, 2017 at 03:35:45AM CEST, j...@mojatatu.com wrote:
From: Jamal Hadi Salim <j...@mojatatu.com>
[..]
This helper should be part of the previous patch.
Will do next update.
>> @@ -1157,8 +1164,18 @@ static int tc_dump_action(struct sk_buff
*skb, struct netlink_callback *cb)
>> struct tc_action_ops *a_o;
>> int ret = 0;
>> struct tcamsg *t = (struct tcamsg *) nlmsg_data(cb->nlh);
>> - struct nlattr *kind = find_dump_kind(cb->nlh);
>> + struct nla_bitfield_32 fb;
>> + struct nlattr *count_attr = NULL;
>> + struct nlattr *tb[TCA_ROOT_MAX + 1];
>> + struct nlattr *kind = NULL;
>
> Reverse christmas tree :D
>
There were already 2 christmas trees in place;->
I will re-arrange this.
+ if (tb[TCA_ROOT_FLAGS])
+ fb = nla_get_bitfield_32(tb[TCA_ROOT_FLAGS]);
fb? bf? nbf? Please make this synced within the patchset.
Ok, what do you like best? ;->
Don't you need to mask value with selector? In fact, I think that
nla_get_bitfield_32 could just return u32 which would be (value&selector).
The validation takes care of unsupported bits.
For my use case I dont need any of the above since I dont need to
unset things. In other use cases you will need both selector and
value in case someone wants a bit to be set to 0.
Infact I think i will rename that helper to "nla_get_bitvalue_32"
to be more precise.
cheers,
jamal