On Fri, May 25, 2018 at 4:20 AM, Mathieu Xhonneux <m.xhonn...@gmail.com> wrote: > Previous patch "selftests/bpf: test for seg6local End.BPF action" lacks > some UAPI headers in tools/. > > clang -I. -I./include/uapi -I../../../include/uapi -idirafter > /usr/local/include -idirafter > /data/users/yhs/work/llvm/build/install/lib/clang/7.0.0/include > -idirafter /usr/include -Wno-compare-distinct-pointer-types \ > -O2 -target bpf -emit-llvm -c test_lwt_seg6local.c -o - | \ > llc -march=bpf -mcpu=generic -filetype=obj -o > [...]/net-next/tools/testing/selftests/bpf/test_lwt_seg6local.o > test_lwt_seg6local.c:4:10: fatal error: 'linux/seg6_local.h' file not found > ^~~~~~~~~~~~~~~~~~~~ > 1 error generated. > make: Leaving directory > `/data/users/yhs/work/net-next/tools/testing/selftests/bpf' > > Reported-by: Y Song <ys114...@gmail.com> > Signed-off-by: Mathieu Xhonneux <m.xhonn...@gmail.com> > --- > .../selftests/bpf/include/uapi/linux/seg6.h | 55 +++++++++++++++ > .../selftests/bpf/include/uapi/linux/seg6_local.h | 80 > ++++++++++++++++++++++ > 2 files changed, 135 insertions(+) > create mode 100644 tools/testing/selftests/bpf/include/uapi/linux/seg6.h > create mode 100644 > tools/testing/selftests/bpf/include/uapi/linux/seg6_local.h > > diff --git a/tools/testing/selftests/bpf/include/uapi/linux/seg6.h > b/tools/testing/selftests/bpf/include/uapi/linux/seg6.h > new file mode 100644 > index 000000000000..286e8d6a8e98 > --- /dev/null > +++ b/tools/testing/selftests/bpf/include/uapi/linux/seg6.h > @@ -0,0 +1,55 @@ > +/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ > +/* > + * SR-IPv6 implementation > + * > + * Author: > + * David Lebrun <david.leb...@uclouvain.be> > + * > + * > + * 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 _UAPI_LINUX_SEG6_H > +#define _UAPI_LINUX_SEG6_H > + > +#include <linux/types.h> > +#include <linux/in6.h> /* For struct in6_addr. */ > + > +/* > + * SRH > + */ > +struct ipv6_sr_hdr { > + __u8 nexthdr; > + __u8 hdrlen; > + __u8 type; > + __u8 segments_left; > + __u8 first_segment; /* Represents the last_entry field of SRH */ > + __u8 flags; > + __u16 tag; > + > + struct in6_addr segments[0]; > +}; > + > +#define SR6_FLAG1_PROTECTED (1 << 6) > +#define SR6_FLAG1_OAM (1 << 5) > +#define SR6_FLAG1_ALERT (1 << 4) > +#define SR6_FLAG1_HMAC (1 << 3) > + > +#define SR6_TLV_INGRESS 1 > +#define SR6_TLV_EGRESS 2 > +#define SR6_TLV_OPAQUE 3 > +#define SR6_TLV_PADDING 4 > +#define SR6_TLV_HMAC 5 > + > +#define sr_has_hmac(srh) ((srh)->flags & SR6_FLAG1_HMAC) > + > +struct sr6_tlv { > + __u8 type; > + __u8 len; > + __u8 data[0]; > +}; > + > +#endif > diff --git a/tools/testing/selftests/bpf/include/uapi/linux/seg6_local.h > b/tools/testing/selftests/bpf/include/uapi/linux/seg6_local.h > new file mode 100644 > index 000000000000..edc138bdc56d > --- /dev/null > +++ b/tools/testing/selftests/bpf/include/uapi/linux/seg6_local.h > @@ -0,0 +1,80 @@ > +/* > + * SR-IPv6 implementation > + * > + * Author: > + * David Lebrun <david.leb...@uclouvain.be> > + * > + * > + * 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 _UAPI_LINUX_SEG6_LOCAL_H > +#define _UAPI_LINUX_SEG6_LOCAL_H > + > +#include <linux/seg6.h> > + > +enum { > + SEG6_LOCAL_UNSPEC, > + SEG6_LOCAL_ACTION, > + SEG6_LOCAL_SRH, > + SEG6_LOCAL_TABLE, > + SEG6_LOCAL_NH4, > + SEG6_LOCAL_NH6, > + SEG6_LOCAL_IIF, > + SEG6_LOCAL_OIF, > + SEG6_LOCAL_BPF, > + __SEG6_LOCAL_MAX, > +}; > +#define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1) > + > +enum { > + SEG6_LOCAL_ACTION_UNSPEC = 0, > + /* node segment */ > + SEG6_LOCAL_ACTION_END = 1, > + /* adjacency segment (IPv6 cross-connect) */ > + SEG6_LOCAL_ACTION_END_X = 2, > + /* lookup of next seg NH in table */ > + SEG6_LOCAL_ACTION_END_T = 3, > + /* decap and L2 cross-connect */ > + SEG6_LOCAL_ACTION_END_DX2 = 4, > + /* decap and IPv6 cross-connect */ > + SEG6_LOCAL_ACTION_END_DX6 = 5, > + /* decap and IPv4 cross-connect */ > + SEG6_LOCAL_ACTION_END_DX4 = 6, > + /* decap and lookup of DA in v6 table */ > + SEG6_LOCAL_ACTION_END_DT6 = 7, > + /* decap and lookup of DA in v4 table */ > + SEG6_LOCAL_ACTION_END_DT4 = 8, > + /* binding segment with insertion */ > + SEG6_LOCAL_ACTION_END_B6 = 9, > + /* binding segment with encapsulation */ > + SEG6_LOCAL_ACTION_END_B6_ENCAP = 10, > + /* binding segment with MPLS encap */ > + SEG6_LOCAL_ACTION_END_BM = 11, > + /* lookup last seg in table */ > + SEG6_LOCAL_ACTION_END_S = 12, > + /* forward to SR-unaware VNF with static proxy */ > + SEG6_LOCAL_ACTION_END_AS = 13, > + /* forward to SR-unaware VNF with masquerading */ > + SEG6_LOCAL_ACTION_END_AM = 14, > + /* custom BPF action */ > + SEG6_LOCAL_ACTION_END_BPF = 15, > + > + __SEG6_LOCAL_ACTION_MAX, > +}; > + > +#define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1) > + > +enum { > + SEG6_LOCAL_BPF_PROG_UNSPEC, > + SEG6_LOCAL_BPF_PROG, > + SEG6_LOCAL_BPF_PROG_NAME, > + __SEG6_LOCAL_BPF_PROG_MAX, > +}; > + > +#define SEG6_LOCAL_BPF_PROG_MAX (__SEG6_LOCAL_BPF_PROG_MAX - 1) > + > +#endif > -- > 2.16.1 >
Acked-by: Song Liu <songliubrav...@fb.com>