On Thu, 24 Oct 2024 13:18:06 +0200 Johannes Berg wrote: > +#define MAKE_NLA_GET_DEFAULT(tp, fn) \ > +static inline tp fn##_default(const struct nlattr *nla, \ > + tp defvalue) \ > +{ \ > + if (!nla) \ > + return defvalue; \ > + return n(nla); \ > +} > + > +MAKE_NLA_GET_DEFAULT(u8, nla_get_u8); > +MAKE_NLA_GET_DEFAULT(u16, nla_get_u16); > +MAKE_NLA_GET_DEFAULT(u32, nla_get_u32); > +MAKE_NLA_GET_DEFAULT(u64, nla_get_u64); > +MAKE_NLA_GET_DEFAULT(unsigned long, nla_get_msecs); > +MAKE_NLA_GET_DEFAULT(s8, nla_get_s8); > +MAKE_NLA_GET_DEFAULT(s16, nla_get_s16); > +MAKE_NLA_GET_DEFAULT(s32, nla_get_s32); > +MAKE_NLA_GET_DEFAULT(s64, nla_get_s64); > +MAKE_NLA_GET_DEFAULT(s16, nla_get_le16); > +MAKE_NLA_GET_DEFAULT(s32, nla_get_le32); > +MAKE_NLA_GET_DEFAULT(s64, nla_get_le64); > +MAKE_NLA_GET_DEFAULT(s16, nla_get_be16); > +MAKE_NLA_GET_DEFAULT(s32, nla_get_be32); > +MAKE_NLA_GET_DEFAULT(s64, nla_get_be64); I'd vote to just spell out the accessors instead of hinding the definitions behind macros. Place them right after the existing nla_get_* definition to make it more likely people will notice them. Either way: Acked-by: Jakub Kicinski <kuba@xxxxxxxxxx>