On Wed, 2019-07-03 at 16:37 +0200, Jiri Pirko wrote: > Wed, Jul 03, 2019 at 03:44:57PM CEST, [email protected] wrote: > > On Wed, 2019-07-03 at 13:49 +0200, Jiri Pirko wrote: > > > > > > > +Value and mask must have length at least ETHTOOL_A_BITSET_SIZE bits > > > > rounded up > > > > +to a multiple of 32 bits. They consist of 32-bit words in host byte > > > > order, > > > > > > Looks like the blocks are similar to NLA_BITFIELD32. Why don't you user > > > nested array of NLA_BITFIELD32 instead? > > > > That would seem kind of awkward to use, IMHO. > > > > Perhaps better to make some kind of generic "arbitrary size bitfield" > > attribute type? > > Yep, I believe I was trying to make this point during bitfield32 > discussion, failed apparently. So if we have "NLA_BITFIELD" with > arbitrary size, that sounds good to me.
I guess it could be the same way - just have the content be u32 value[N]; u32 select[N]; where N = nla_len(attr) / 8 That'd be compatible with NLA_BITFIELD32, and we could basically change all occurrences of NLA_BITFIELD32 to NLA_BITFIELD, and have NLA_BITFIELD take something like a "max_bit" for the .len field or something like that? And an entry in the validation union to point to a "u32 *mask" instead of the current validation_data that just points to a single u32 mask... So overall seems like a pretty simple extension to NLA_BITFIELD32 that handles NLA_BITFIELD32 as a special case with simply .len=32. (len is a 16-bit field, but a 64k bitmap should be sufficient I hope?) johannes

