Message ID | 20160426115427.GB20950@soda.linbit (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Johannes Berg |
Headers | show |
On Tue, Apr 26, 2016 at 01:54:27PM +0200, Lars Ellenberg wrote: > On Tue, Apr 26, 2016 at 10:06:10AM +0200, Nicolas Dichtel wrote: > > > > This is the continuation (series #3) of the work done to align netlink > > attributes when these attributes contain some 64-bit fields. > > > > It's the last patchset from what I've seen. > > > > The last user of nla_put_u64() is block/drbd. This module does not use > > standard netlink API (see all the stuff in include/linux/genl_magic_struct.h > > and include/linux/genl_magic_func.h). I didn't modify it because it's seems > > hard to do it whithout testing and fully understanding the context > > Something like this should just work. > + * @attrtype: attribute type > + * @value: numeric value > + */ > +static inline int nla_put_u64_64bit_unspec(struct sk_buff *skb, int attrtype, > + u64 value) > +{ > + return nla_put_64bit(skb, attrtype, sizeof(u64), &value, NLA_UNSPEC); Ok, I confused attribute and policy type there for a sec. Anyways, 0 works just fine, all our nested attribute enums are != 0, because nla_parse skips type 0. Lars -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Lars Ellenberg <lars.ellenberg@linbit.com> Date: Tue, 26 Apr 2016 13:54:27 +0200 > On Tue, Apr 26, 2016 at 10:06:10AM +0200, Nicolas Dichtel wrote: >> >> This is the continuation (series #3) of the work done to align netlink >> attributes when these attributes contain some 64-bit fields. >> >> It's the last patchset from what I've seen. >> >> The last user of nla_put_u64() is block/drbd. This module does not use >> standard netlink API (see all the stuff in include/linux/genl_magic_struct.h >> and include/linux/genl_magic_func.h). I didn't modify it because it's seems >> hard to do it whithout testing and fully understanding the context > > Something like this should just work. Unfortunately we had problems using unspec, that's why an explicit new padding attribute is added for each netlink attribute set. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/genl_magic_struct.h b/include/linux/genl_magic_struct.h index eecd19b..5715dac 100644 --- a/include/linux/genl_magic_struct.h +++ b/include/linux/genl_magic_struct.h @@ -80,7 +80,7 @@ extern void CONCAT_(GENL_MAGIC_FAMILY, _genl_unregister)(void); nla_get_u32, nla_put_u32, true) #define __u64_field(attr_nr, attr_flag, name) \ __field(attr_nr, attr_flag, name, NLA_U64, __u64, \ - nla_get_u64, nla_put_u64, false) + nla_get_u64, nla_put_u64_64bit_unspec, false) #define __str_field(attr_nr, attr_flag, name, maxlen) \ __array(attr_nr, attr_flag, name, NLA_NUL_STRING, char, maxlen, \ nla_strlcpy, nla_put, false) diff --git a/include/net/netlink.h b/include/net/netlink.h index e589cb3..38ba770 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -871,6 +871,18 @@ static inline int nla_put_u64_64bit(struct sk_buff *skb, int attrtype, } /** + * nla_put_u64_64bit_unspec - nla_put_u64_64bit() with padattr = 0 + * @skb: socket buffer to add attribute to + * @attrtype: attribute type + * @value: numeric value + */ +static inline int nla_put_u64_64bit_unspec(struct sk_buff *skb, int attrtype, + u64 value) +{ + return nla_put_64bit(skb, attrtype, sizeof(u64), &value, NLA_UNSPEC); +} + +/** * nla_put_be64 - Add a __be64 netlink attribute to a socket buffer and align it * @skb: socket buffer to add attribute to * @attrtype: attribute type