Hi, On Wed, Jul 16, 2025 at 11:44:59AM +0200, Florian Westphal wrote: > Phil Sutter <phil@xxxxxx> wrote: > > #include <string.h> > > #include <stdlib.h> > > +#include <libmnl/libmnl.h> > > Why is this include needed? Because of: | In file included from udata.c:9: | ../include/utils.h:88:40: warning: 'struct nlattr' declared inside parameter list will not be visible outside of this definition or declaration | 88 | const char *mnl_attr_get_ifname(struct nlattr *attr); | | ^~~~~~ > > #include <libnftnl/common.h> > > > > #include "config.h" > > @@ -83,4 +84,7 @@ int nftnl_fprintf(FILE *fpconst, const void *obj, uint32_t cmd, uint32_t type, > > int nftnl_set_str_attr(const char **dptr, uint32_t *flags, > > uint16_t attr, const void *data, uint32_t data_len); > > > > +void mnl_attr_put_ifname(struct nlmsghdr *nlh, int attr, const char *ifname); > > +const char *mnl_attr_get_ifname(struct nlattr *attr); > > + > > nftnl_attr_put_ifname, nftnl_attr_get_ifname? > Using mnl_ prefix seems wrong, that should be reserved for libmnl. I chose the prefix since they 1:1 replace calls to mnl_attr_put_strz() and mnl_attr_get_str(). You're right, since they are implemented by libnftnl the prefix is wrong. I was a bit undecided whether to put them into libmnl, but they are a bit too specific for that. Will fix the prefix and respin! Thanks, Phil