Yonghong Song wrote: > libbpf is used as a submodule in bcc. > When importing latest libbpf repo in bcc, I observed the > following compilation errors when compiling on ubuntu 16.04. > .../netlink.c:416:23: error: ‘TC_H_CLSACT’ undeclared (first use in this function) > *parent = TC_H_MAKE(TC_H_CLSACT, > ^ > .../netlink.c:418:9: error: ‘TC_H_MIN_INGRESS’ undeclared (first use in this function) > TC_H_MIN_INGRESS : TC_H_MIN_EGRESS); > ^ > .../netlink.c:418:28: error: ‘TC_H_MIN_EGRESS’ undeclared (first use in this function) > TC_H_MIN_INGRESS : TC_H_MIN_EGRESS); > ^ > .../netlink.c: In function ‘__get_tc_info’: > .../netlink.c:522:11: error: ‘TCA_BPF_ID’ undeclared (first use in this function) > if (!tbb[TCA_BPF_ID]) > ^ > > In ubuntu 16.04, TCA_BPF_* enumerator looks like below > enum { > TCA_BPF_UNSPEC, > TCA_BPF_ACT, > ... > TCA_BPF_NAME, > TCA_BPF_FLAGS, > __TCA_BPF_MAX, > }; > #define TCA_BPF_MAX (__TCA_BPF_MAX - 1) > while in latest bpf-next, the enumerator looks like > enum { > TCA_BPF_UNSPEC, > ... > TCA_BPF_FLAGS, > TCA_BPF_FLAGS_GEN, > TCA_BPF_TAG, > TCA_BPF_ID, > __TCA_BPF_MAX, > }; > > In this patch, TCA_BPF_ID is defined as a macro with proper value and this > works regardless of whether TCA_BPF_ID is defined in uapi header or not. > TCA_BPF_MAX is also adjusted in a similar way. > > Fixes: 715c5ce454a6 ("libbpf: Add low level TC-BPF management API") > Cc: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > Signed-off-by: Yonghong Song <yhs@xxxxxx> > --- Looks better thanks. Now even compiling on systems with out of date uapi headers should be fine and running on newer kernels will still work as expected. Thanks. Acked-by: John Fastabend <john.fastabend@xxxxxxxxx> > diff --git a/tools/lib/bpf/netlink.c b/tools/lib/bpf/netlink.c > index 39f25e09b51e..37cb6b50f4b3 100644 > --- a/tools/lib/bpf/netlink.c > +++ b/tools/lib/bpf/netlink.c > @@ -22,6 +22,29 @@ > #define SOL_NETLINK 270 > #endif > > +#ifndef TC_H_CLSACT > +#define TC_H_CLSACT TC_H_INGRESS > +#endif > + > +#ifndef TC_H_MIN_INGRESS > +#define TC_H_MIN_INGRESS 0xFFF2U > +#endif > + > +#ifndef TC_H_MIN_EGRESS > +#define TC_H_MIN_EGRESS 0xFFF3U > +#endif > + > +/* TCA_BPF_ID is an enumerator value in uapi/linux/pkt_cls.h. > + * Declare it as a macro here so old system can still work > + * without TCA_BPF_ID defined in pkt_cls.h. > + */ > +#define TCA_BPF_ID 11 I guess compiler is smart enough to see TCA_BPF_ID is the same value as in headers so it wont throw a redefined warning. > + > +#ifdef TCA_BPF_MAX > +#undef TCA_BPF_MAX > +#endif > +#define TCA_BPF_MAX 11 > + > typedef int (*libbpf_dump_nlmsg_t)(void *cookie, void *msg, struct nlattr **tb); > > typedef int (*__dump_nlmsg_t)(struct nlmsghdr *nlmsg, libbpf_dump_nlmsg_t, > -- > 2.30.2 >