RE: [PATCH bpf-next v3] libbpf: fix compilation errors on ubuntu 16.04

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 






[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux