Skip to contentSkip to conversation

tools/bpftool: copy uapi/linux/tc_act/tc_bpf.h to tools directory

PATCH In review Yonghong Song 2 participants 3 messages Nov 8, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tools/bpftool: copy uapi/linux/tc_act/tc_bpf.h to tools directory

Commit f6f3bac08ff9 ("tools/bpf: bpftool: add net support") added certain networking support to bpftool.
The implementation relies on a relatively recent uapi header file linux/tc_act/tc_bpf.h on the host which contains the marco definition of TCA_ACT_BPF_ID.

Unfortunately, this is not the case for all distributions. See the email message below where rhel-7.2 does not have an up-to-date linux/tc_act/tc_bpf.h.
https://www.mail-archive.com/[email protected]/msg1799211.html

This patch fixed the issue by copying linux/tc_act/tc_bpf.h from kernel include/uapi directory to tools/include/uapi directory so building the bpftool does not depend on host system for this file.

Fixes f6f3bac08ff9 ("tools/bpf: bpftool: add net support")
---
 tools/include/uapi/linux/tc_act/tc_bpf.h | 37 ++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
 create mode 100644 tools/include/uapi/linux/tc_act/tc_bpf.h
tools/include/uapi/linux/tc_act/tc_bpf.h new file +37 -0
new file mode 100644
index 000000000000..6e89a5df49a4
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ * Copyright (c) 2015 Jiri Pirko <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_BPF_H
+#define __LINUX_TC_BPF_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_BPF 13
+
+struct tc_act_bpf {
+	tc_gen;
+};
+
+enum {
+	TCA_ACT_BPF_UNSPEC,
+	TCA_ACT_BPF_TM,
+	TCA_ACT_BPF_PARMS,
+	TCA_ACT_BPF_OPS_LEN,
+	TCA_ACT_BPF_OPS,
+	TCA_ACT_BPF_FD,
+	TCA_ACT_BPF_NAME,
+	TCA_ACT_BPF_PAD,
+	TCA_ACT_BPF_TAG,
+	TCA_ACT_BPF_ID,
+	__TCA_ACT_BPF_MAX,
+};
+#define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
+
+#endif
Signature · 1 line
2.17.1
#1 lore raw
Quoted 10 lines · Yonghong Song

Commit f6f3bac08ff9 ("tools/bpf: bpftool: add net support") added certain networking support to bpftool.
The implementation relies on a relatively recent uapi header file linux/tc_act/tc_bpf.h on the host which contains the marco definition of TCA_ACT_BPF_ID.

Unfortunately, this is not the case for all distributions. See the email message below where rhel-7.2 does not have an up-to-date linux/tc_act/tc_bpf.h.
https://www.mail-archive.com/[email protected]/msg1799211.html

i have not tested this patch, but basing on the early commit 6f3bac08ff9 ("tools/bpf: bpftool: add net support")
i cooked up similar patch locally, but i noticed that it also requires an up-to-date linux/pkt_cls.h as well to avoid compiling errors:

root@lkp-bdw-ep3 ~/linux-f6f3bac08f/tools/bpf/bpftool# make V=1 [...snip...]
gcc -O2 -W -Wall -Wextra -Wno-unused-parameter -Wshadow -Wno-missing-field-initializers -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ -I/root/linux-f6f3bac08f/kernel/bpf/ -I/root/linux-f6f3bac08f/tools/include -I/root/linux-f6f3bac08f/tools/include/uapi -I/root/linux-f6f3bac08f/tools/lib/bpf -I/root/linux-f6f3bac08f/tools/perf -DBPFTOOL_VERSION='"4.19.0-rc2"' -DCOMPAT_NEED_REALLOCARRAY -c -MMD -o netlink_dumper.o netlink_dumper.c
make -C /root/linux-f6f3bac08f/tools/lib/bpf/ OUTPUT= libbpf.a make[1]: Entering directory '/root/linux-f6f3bac08f/tools/lib/bpf' netlink_dumper.c: In function 'do_bpf_filter_dump':
netlink_dumper.c:153:9: error: 'TCA_BPF_ID' undeclared (first use in this function)
if (tb[TCA_BPF_ID])

         ^~~~~~~~~~
netlink_dumper.c:153:9: note: each undeclared identifier is reported only once for each function it appears in
netlink_dumper.c:155:9: error: 'TCA_BPF_TAG' undeclared (first use in this function)
  if (tb[TCA_BPF_TAG])
         ^~~~~~~~~~~

Makefile:96: recipe for target 'netlink_dumper.o' failed
make: *** [netlink_dumper.o] Error 1
make: *** Waiting for unfinished jobs....
make -f /root/linux-f6f3bac08f/tools/build/Makefile.build dir=. obj=libbpf make[1]: Leaving directory '/root/linux-f6f3bac08f/tools/lib/bpf'

Thanks
Zhijian

Quoted 56 lines

This patch fixed the issue by copying linux/tc_act/tc_bpf.h from kernel include/uapi directory to tools/include/uapi directory so building the bpftool does not depend on host system for this file.

Fixes f6f3bac08ff9 ("tools/bpf: bpftool: add net support")
---
  tools/include/uapi/linux/tc_act/tc_bpf.h | 37 ++++++++++++++++++++++++
  1 file changed, 37 insertions(+)

create mode 100644 tools/include/uapi/linux/tc_act/tc_bpf.h

tools/include/uapi/linux/tc_act/tc_bpf.h new file +37 -0
new file mode 100644
index 000000000000..6e89a5df49a4
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ * Copyright (c) 2015 Jiri Pirko <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_BPF_H
+#define __LINUX_TC_BPF_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_BPF 13
+
+struct tc_act_bpf {
+	tc_gen;
+};
+
+enum {
+	TCA_ACT_BPF_UNSPEC,
+	TCA_ACT_BPF_TM,
+	TCA_ACT_BPF_PARMS,
+	TCA_ACT_BPF_OPS_LEN,
+	TCA_ACT_BPF_OPS,
+	TCA_ACT_BPF_FD,
+	TCA_ACT_BPF_NAME,
+	TCA_ACT_BPF_PAD,
+	TCA_ACT_BPF_TAG,
+	TCA_ACT_BPF_ID,
+	__TCA_ACT_BPF_MAX,
+};
+#define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
+
+#endif
#2 lore raw
Quoted 11 lines · Li Zhijian
Quoted 10 lines · Yonghong Song

Commit f6f3bac08ff9 ("tools/bpf: bpftool: add net support") added certain networking support to bpftool.
The implementation relies on a relatively recent uapi header file linux/tc_act/tc_bpf.h on the host which contains the marco definition of TCA_ACT_BPF_ID.

Unfortunately, this is not the case for all distributions. See the email message below where rhel-7.2 does not have an up-to-date linux/tc_act/tc_bpf.h.

Quoted 7 lines
Quoted 2 lines

https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mail-2Darchive.com_linux-2Dkernel-40vger.kernel.org_msg1799211.html&d=DwICaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=BQIJZUzQfMmUkyvlAHMs7zygIFBysR_MlkAyHN59-7E&s=pVed3MjGDG_PMeBrhrqb3m57NRinnlcdL1QjAOj4iLA&e=

i have not tested this patch, but basing on the early commit 6f3bac08ff9 ("tools/bpf: bpftool: add net support")
i cooked up similar patch locally, but i noticed that it also requires an up-to-date linux/pkt_cls.h as well to avoid compiling errors:

Thanks for testing. I will add linux/pkt_cls.h as well for the version 2.

Quoted 90 lines

root@lkp-bdw-ep3 ~/linux-f6f3bac08f/tools/bpf/bpftool# make V=1 [...snip...]
gcc -O2 -W -Wall -Wextra -Wno-unused-parameter -Wshadow

(quoted diff) +0 -7
-Wno-missing-field-initializers -DPACKAGE='"bpftool"' 
-D__EXPORTED_HEADERS__ -I/root/linux-f6f3bac08f/kernel/bpf/ 
-I/root/linux-f6f3bac08f/tools/include 
-I/root/linux-f6f3bac08f/tools/include/uapi 
-I/root/linux-f6f3bac08f/tools/lib/bpf 
-I/root/linux-f6f3bac08f/tools/perf -DBPFTOOL_VERSION='"4.19.0-rc2"' 
-DCOMPAT_NEED_REALLOCARRAY   -c -MMD -o netlink_dumper.o netlink_dumper.c

make -C /root/linux-f6f3bac08f/tools/lib/bpf/ OUTPUT= libbpf.a make[1]: Entering directory '/root/linux-f6f3bac08f/tools/lib/bpf' netlink_dumper.c: In function 'do_bpf_filter_dump':
netlink_dumper.c:153:9: error: 'TCA_BPF_ID' undeclared (first use in this function)
  if (tb[TCA_BPF_ID])
         ^~~~~~~~~~
netlink_dumper.c:153:9: note: each undeclared identifier is reported only once for each function it appears in netlink_dumper.c:155:9: error: 'TCA_BPF_TAG' undeclared (first use in this function)
  if (tb[TCA_BPF_TAG])
         ^~~~~~~~~~~
Makefile:96: recipe for target 'netlink_dumper.o' failed
make: *** [netlink_dumper.o] Error 1
make: *** Waiting for unfinished jobs....
make -f /root/linux-f6f3bac08f/tools/build/Makefile.build dir=. obj=libbpf make[1]: Leaving directory '/root/linux-f6f3bac08f/tools/lib/bpf'

Thanks
Zhijian

Quoted 57 lines

This patch fixed the issue by copying linux/tc_act/tc_bpf.h from kernel include/uapi directory to tools/include/uapi directory so building the bpftool does not depend on host system for this file.

Fixes f6f3bac08ff9 ("tools/bpf: bpftool: add net support")

---
  tools/include/uapi/linux/tc_act/tc_bpf.h | 37 ++++++++++++++++++++++++

  1 file changed, 37 insertions(+)

  create mode 100644 tools/include/uapi/linux/tc_act/tc_bpf.h

tools/include/uapi/linux/tc_act/tc_bpf.h new file +37 -0
new file mode 100644
index 000000000000..6e89a5df49a4
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/*
+ * Copyright (c) 2015 Jiri Pirko <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __LINUX_TC_BPF_H
+#define __LINUX_TC_BPF_H
+
+#include <linux/pkt_cls.h>
+
+#define TCA_ACT_BPF 13
+
+struct tc_act_bpf {
+    tc_gen;
+};
+
+enum {
+    TCA_ACT_BPF_UNSPEC,
+    TCA_ACT_BPF_TM,
+    TCA_ACT_BPF_PARMS,
+    TCA_ACT_BPF_OPS_LEN,
+    TCA_ACT_BPF_OPS,
+    TCA_ACT_BPF_FD,
+    TCA_ACT_BPF_NAME,
+    TCA_ACT_BPF_PAD,
+    TCA_ACT_BPF_TAG,
+    TCA_ACT_BPF_ID,
+    __TCA_ACT_BPF_MAX,
+};
+#define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
+
+#endif