summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/bpf_endian.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-05-01 22:43:49 +0300
committerDavid S. Miller <davem@davemloft.net>2017-05-01 22:43:49 +0300
commitbc1bafbbe9b3558d7789ff151ef4f185b6ad21f3 (patch)
tree33a8d0dd917e4f46705bc024b4f72500238b87d8 /tools/testing/selftests/bpf/bpf_endian.h
parent5b8481fa42ac58484d633b558579e302aead64c1 (diff)
downloadlinux-bc1bafbbe9b3558d7789ff151ef4f185b6ad21f3.tar.xz
bpf: Move endianness BPF helpers out of bpf_util.h
We do not want to include things like stdio.h and friends into eBPF program builds. bpf_util.h is for host compiled programs, so eBPF C-code helpers don't really belong there. Add a new bpf_endian.h as a quick fix for this for now. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/testing/selftests/bpf/bpf_endian.h')
-rw-r--r--tools/testing/selftests/bpf/bpf_endian.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/bpf_endian.h b/tools/testing/selftests/bpf/bpf_endian.h
new file mode 100644
index 000000000000..19d0604f8694
--- /dev/null
+++ b/tools/testing/selftests/bpf/bpf_endian.h
@@ -0,0 +1,23 @@
+#ifndef __BPF_ENDIAN__
+#define __BPF_ENDIAN__
+
+#include <asm/byteorder.h>
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define __bpf_ntohs(x) __builtin_bswap16(x)
+# define __bpf_htons(x) __builtin_bswap16(x)
+#elif __BYTE_ORDER == __BIG_ENDIAN
+# define __bpf_ntohs(x) (x)
+# define __bpf_htons(x) (x)
+#else
+# error "Fix your __BYTE_ORDER?!"
+#endif
+
+#define bpf_htons(x) \
+ (__builtin_constant_p(x) ? \
+ __constant_htons(x) : __bpf_htons(x))
+#define bpf_ntohs(x) \
+ (__builtin_constant_p(x) ? \
+ __constant_ntohs(x) : __bpf_ntohs(x))
+
+#endif