Re: [PATCH bpf v2] tools/bpftool: copy a few net uapi headers to tools directory

2018-11-08 Thread Daniel Borkmann
On 11/08/2018 04:55 AM, Yonghong Song wrote:
> 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/linux-kernel@vger.kernel.org/msg1799211.html
> Further investigation found that linux/pkt_cls.h is also needed for macro
> TCA_BPF_TAG.
> 
> This patch fixed the issue by copying linux/tc_act/tc_bpf.h
> and linux/pkt_cls.h from kernel include/uapi directory to
> tools/include/uapi directory so building the bpftool does not depend
> on host system for these files.
> 
> Fixes: f6f3bac08ff9 ("tools/bpf: bpftool: add net support")
> Reported-by: kernel test robot 
> Cc: Li Zhijian 
> Signed-off-by: Yonghong Song 

Applied to bpf, thanks Yonghong!


[PATCH bpf v2] tools/bpftool: copy a few net uapi headers to tools directory

2018-11-07 Thread 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/linux-kernel@vger.kernel.org/msg1799211.html
Further investigation found that linux/pkt_cls.h is also needed for macro
TCA_BPF_TAG.

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

Fixes: f6f3bac08ff9 ("tools/bpf: bpftool: add net support")
Reported-by: kernel test robot 
Cc: Li Zhijian 
Signed-off-by: Yonghong Song 
---
 tools/include/uapi/linux/pkt_cls.h   | 612 +++
 tools/include/uapi/linux/tc_act/tc_bpf.h |  37 ++
 2 files changed, 649 insertions(+)
 create mode 100644 tools/include/uapi/linux/pkt_cls.h
 create mode 100644 tools/include/uapi/linux/tc_act/tc_bpf.h

Changelogs:
  v1 -> v2:
. copy linux/pkt_cls.h as well.

diff --git a/tools/include/uapi/linux/pkt_cls.h 
b/tools/include/uapi/linux/pkt_cls.h
new file mode 100644
index ..401d0c1e612d
--- /dev/null
+++ b/tools/include/uapi/linux/pkt_cls.h
@@ -0,0 +1,612 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef __LINUX_PKT_CLS_H
+#define __LINUX_PKT_CLS_H
+
+#include 
+#include 
+
+#define TC_COOKIE_MAX_SIZE 16
+
+/* Action attributes */
+enum {
+   TCA_ACT_UNSPEC,
+   TCA_ACT_KIND,
+   TCA_ACT_OPTIONS,
+   TCA_ACT_INDEX,
+   TCA_ACT_STATS,
+   TCA_ACT_PAD,
+   TCA_ACT_COOKIE,
+   __TCA_ACT_MAX
+};
+
+#define TCA_ACT_MAX __TCA_ACT_MAX
+#define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
+#define TCA_ACT_MAX_PRIO 32
+#define TCA_ACT_BIND   1
+#define TCA_ACT_NOBIND 0
+#define TCA_ACT_UNBIND 1
+#define TCA_ACT_NOUNBIND   0
+#define TCA_ACT_REPLACE1
+#define TCA_ACT_NOREPLACE  0
+
+#define TC_ACT_UNSPEC  (-1)
+#define TC_ACT_OK  0
+#define TC_ACT_RECLASSIFY  1
+#define TC_ACT_SHOT2
+#define TC_ACT_PIPE3
+#define TC_ACT_STOLEN  4
+#define TC_ACT_QUEUED  5
+#define TC_ACT_REPEAT  6
+#define TC_ACT_REDIRECT7
+#define TC_ACT_TRAP8 /* For hw path, this means "trap to cpu"
+  * and don't further process the frame
+  * in hardware. For sw path, this is
+  * equivalent of TC_ACT_STOLEN - drop
+  * the skb and act like everything
+  * is alright.
+  */
+#define TC_ACT_VALUE_MAX   TC_ACT_TRAP
+
+/* There is a special kind of actions called "extended actions",
+ * which need a value parameter. These have a local opcode located in
+ * the highest nibble, starting from 1. The rest of the bits
+ * are used to carry the value. These two parts together make
+ * a combined opcode.
+ */
+#define __TC_ACT_EXT_SHIFT 28
+#define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
+#define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
+#define TC_ACT_EXT_OPCODE(combined) ((combined) & (~TC_ACT_EXT_VAL_MASK))
+#define TC_ACT_EXT_CMP(combined, opcode) (TC_ACT_EXT_OPCODE(combined) == 
opcode)
+
+#define TC_ACT_JUMP __TC_ACT_EXT(1)
+#define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
+#define TC_ACT_EXT_OPCODE_MAX  TC_ACT_GOTO_CHAIN
+
+/* Action type identifiers*/
+enum {
+   TCA_ID_UNSPEC=0,
+   TCA_ID_POLICE=1,
+   /* other actions go here */
+   __TCA_ID_MAX=255
+};
+
+#define TCA_ID_MAX __TCA_ID_MAX
+
+struct tc_police {
+   __u32   index;
+   int action;
+#define TC_POLICE_UNSPEC   TC_ACT_UNSPEC
+#define TC_POLICE_OK   TC_ACT_OK
+#define TC_POLICE_RECLASSIFY   TC_ACT_RECLASSIFY
+#define TC_POLICE_SHOT TC_ACT_SHOT
+#define TC_POLICE_PIPE TC_ACT_PIPE
+
+   __u32   limit;
+   __u32   burst;
+   __u32   mtu;
+   struct tc_ratespec  rate;
+   struct tc_ratespec  peakrate;
+   int refcnt;
+   int bindcnt;
+   __u32   capab;
+};
+
+struct tcf_t {
+   __u64   install;
+   __u64   lastuse;
+   __u64   expires;
+   __u64   firstuse;
+};
+
+struct tc_cnt {
+   int   refcnt;
+   int   bindcnt;
+};
+
+#define tc_gen \
+   __u32 index; \
+   __u32 capab; \
+   int   action; \
+   int   refcnt; \
+   int   bindcnt
+