On 4/12/17 6:34 AM, Johannes Berg wrote: > diff --git a/include/uapi/linux/netlink.h b/include/uapi/linux/netlink.h > index b2c9c26ea30f..7df88770e029 100644 > --- a/include/uapi/linux/netlink.h > +++ b/include/uapi/linux/netlink.h > @@ -69,6 +69,10 @@ struct nlmsghdr { > #define NLM_F_CREATE 0x400 /* Create, if it does not exist */ > #define NLM_F_APPEND 0x800 /* Add to end of list */ > > +/* Flags for ACK message */ > +#define NLM_F_CAPPED 0x100 /* request was capped */ > +#define NLM_F_ACK_TLVS 0x200 /* extended ACK TVLs were included */ > + > /* > 4.4BSD ADD NLM_F_CREATE|NLM_F_EXCL > 4.4BSD CHANGE NLM_F_REPLACE > @@ -101,6 +105,33 @@ struct nlmsghdr { > struct nlmsgerr { > int error; > struct nlmsghdr msg; > + /* > + * followed by the message contents unless NETLINK_CAP_ACK was set > + * or the ACK indicates success (error == 0) > + * message length is aligned with NLMSG_ALIGN() > + */ > + /* > + * followed by TLVs defined in enum nlmsgerr_attrs > + * if NETLINK_EXT_ACK was set > + */ > +}; > + > +/** > + * enum nlmsgerr_attrs - nlmsgerr attributes > + * @NLMSGERR_ATTR_UNUSED: unused > + * @NLMSGERR_ATTR_MSG: error message string (string) > + * @NLMSGERR_ATTR_OFFS: offset of the invalid attribute in the original > + * message, counting from the beginning of the header (u32) > + * @__NLMSGERR_ATTR_MAX: number of attributes > + * @NLMSGERR_ATTR_MAX: highest attribute number > + */ > +enum nlmsgerr_attrs { > + NLMSGERR_ATTR_UNUSED, > + NLMSGERR_ATTR_MSG, There was a discussion about side effects of adding strings (bloat, internationalization). Should ATTR_MSG be removed until that is ironed out? Leaving it in suggests it is ok to start adding strings.