1*3f306588SStanislav Fomichev /* SPDX-License-Identifier: GPL-2.0 */ 2*3f306588SStanislav Fomichev #include <stdio.h> 3*3f306588SStanislav Fomichev #include <unistd.h> 4*3f306588SStanislav Fomichev #include <errno.h> 5*3f306588SStanislav Fomichev #include <string.h> 6*3f306588SStanislav Fomichev #include <assert.h> 7*3f306588SStanislav Fomichev #include <stdlib.h> 8*3f306588SStanislav Fomichev #include <stdarg.h> 9*3f306588SStanislav Fomichev #include <time.h> 10*3f306588SStanislav Fomichev #include <signal.h> 11*3f306588SStanislav Fomichev 12*3f306588SStanislav Fomichev #include <linux/types.h> 13*3f306588SStanislav Fomichev typedef __u16 __sum16; 14*3f306588SStanislav Fomichev #include <arpa/inet.h> 15*3f306588SStanislav Fomichev #include <linux/if_ether.h> 16*3f306588SStanislav Fomichev #include <linux/if_packet.h> 17*3f306588SStanislav Fomichev #include <linux/ip.h> 18*3f306588SStanislav Fomichev #include <linux/ipv6.h> 19*3f306588SStanislav Fomichev #include <linux/tcp.h> 20*3f306588SStanislav Fomichev #include <linux/filter.h> 21*3f306588SStanislav Fomichev #include <linux/perf_event.h> 22*3f306588SStanislav Fomichev #include <linux/unistd.h> 23*3f306588SStanislav Fomichev 24*3f306588SStanislav Fomichev #include <sys/ioctl.h> 25*3f306588SStanislav Fomichev #include <sys/wait.h> 26*3f306588SStanislav Fomichev #include <sys/types.h> 27*3f306588SStanislav Fomichev #include <sys/time.h> 28*3f306588SStanislav Fomichev #include <fcntl.h> 29*3f306588SStanislav Fomichev #include <pthread.h> 30*3f306588SStanislav Fomichev #include <linux/bpf.h> 31*3f306588SStanislav Fomichev #include <linux/err.h> 32*3f306588SStanislav Fomichev #include <bpf/bpf.h> 33*3f306588SStanislav Fomichev #include <bpf/libbpf.h> 34*3f306588SStanislav Fomichev 35*3f306588SStanislav Fomichev #include "test_iptunnel_common.h" 36*3f306588SStanislav Fomichev #include "bpf_util.h" 37*3f306588SStanislav Fomichev #include "bpf_endian.h" 38*3f306588SStanislav Fomichev #include "trace_helpers.h" 39*3f306588SStanislav Fomichev #include "flow_dissector_load.h" 40*3f306588SStanislav Fomichev 41*3f306588SStanislav Fomichev extern int error_cnt, pass_cnt; 42*3f306588SStanislav Fomichev extern bool jit_enabled; 43*3f306588SStanislav Fomichev 44*3f306588SStanislav Fomichev #define MAGIC_BYTES 123 45*3f306588SStanislav Fomichev 46*3f306588SStanislav Fomichev /* ipv4 test vector */ 47*3f306588SStanislav Fomichev struct ipv4_packet { 48*3f306588SStanislav Fomichev struct ethhdr eth; 49*3f306588SStanislav Fomichev struct iphdr iph; 50*3f306588SStanislav Fomichev struct tcphdr tcp; 51*3f306588SStanislav Fomichev } __packed; 52*3f306588SStanislav Fomichev extern struct ipv4_packet pkt_v4; 53*3f306588SStanislav Fomichev 54*3f306588SStanislav Fomichev /* ipv6 test vector */ 55*3f306588SStanislav Fomichev struct ipv6_packet { 56*3f306588SStanislav Fomichev struct ethhdr eth; 57*3f306588SStanislav Fomichev struct ipv6hdr iph; 58*3f306588SStanislav Fomichev struct tcphdr tcp; 59*3f306588SStanislav Fomichev } __packed; 60*3f306588SStanislav Fomichev extern struct ipv6_packet pkt_v6; 61*3f306588SStanislav Fomichev 62*3f306588SStanislav Fomichev #define _CHECK(condition, tag, duration, format...) ({ \ 63*3f306588SStanislav Fomichev int __ret = !!(condition); \ 64*3f306588SStanislav Fomichev if (__ret) { \ 65*3f306588SStanislav Fomichev error_cnt++; \ 66*3f306588SStanislav Fomichev printf("%s:FAIL:%s ", __func__, tag); \ 67*3f306588SStanislav Fomichev printf(format); \ 68*3f306588SStanislav Fomichev } else { \ 69*3f306588SStanislav Fomichev pass_cnt++; \ 70*3f306588SStanislav Fomichev printf("%s:PASS:%s %d nsec\n", __func__, tag, duration);\ 71*3f306588SStanislav Fomichev } \ 72*3f306588SStanislav Fomichev __ret; \ 73*3f306588SStanislav Fomichev }) 74*3f306588SStanislav Fomichev 75*3f306588SStanislav Fomichev #define CHECK(condition, tag, format...) \ 76*3f306588SStanislav Fomichev _CHECK(condition, tag, duration, format) 77*3f306588SStanislav Fomichev #define CHECK_ATTR(condition, tag, format...) \ 78*3f306588SStanislav Fomichev _CHECK(condition, tag, tattr.duration, format) 79*3f306588SStanislav Fomichev 80*3f306588SStanislav Fomichev int bpf_find_map(const char *test, struct bpf_object *obj, const char *name); 81