13f306588SStanislav Fomichev /* SPDX-License-Identifier: GPL-2.0 */ 23f306588SStanislav Fomichev #include <stdio.h> 33f306588SStanislav Fomichev #include <unistd.h> 43f306588SStanislav Fomichev #include <errno.h> 53f306588SStanislav Fomichev #include <string.h> 63f306588SStanislav Fomichev #include <assert.h> 73f306588SStanislav Fomichev #include <stdlib.h> 83f306588SStanislav Fomichev #include <stdarg.h> 93f306588SStanislav Fomichev #include <time.h> 103f306588SStanislav Fomichev #include <signal.h> 113f306588SStanislav Fomichev 123f306588SStanislav Fomichev #include <linux/types.h> 133f306588SStanislav Fomichev typedef __u16 __sum16; 143f306588SStanislav Fomichev #include <arpa/inet.h> 153f306588SStanislav Fomichev #include <linux/if_ether.h> 163f306588SStanislav Fomichev #include <linux/if_packet.h> 173f306588SStanislav Fomichev #include <linux/ip.h> 183f306588SStanislav Fomichev #include <linux/ipv6.h> 193f306588SStanislav Fomichev #include <linux/tcp.h> 203f306588SStanislav Fomichev #include <linux/filter.h> 213f306588SStanislav Fomichev #include <linux/perf_event.h> 223f306588SStanislav Fomichev #include <linux/unistd.h> 233f306588SStanislav Fomichev 243f306588SStanislav Fomichev #include <sys/ioctl.h> 253f306588SStanislav Fomichev #include <sys/wait.h> 263f306588SStanislav Fomichev #include <sys/types.h> 273f306588SStanislav Fomichev #include <sys/time.h> 283f306588SStanislav Fomichev #include <fcntl.h> 293f306588SStanislav Fomichev #include <pthread.h> 303f306588SStanislav Fomichev #include <linux/bpf.h> 313f306588SStanislav Fomichev #include <linux/err.h> 323f306588SStanislav Fomichev #include <bpf/bpf.h> 333f306588SStanislav Fomichev #include <bpf/libbpf.h> 343f306588SStanislav Fomichev 353f306588SStanislav Fomichev #include "test_iptunnel_common.h" 363f306588SStanislav Fomichev #include "bpf_util.h" 373f306588SStanislav Fomichev #include "bpf_endian.h" 383f306588SStanislav Fomichev #include "trace_helpers.h" 393f306588SStanislav Fomichev #include "flow_dissector_load.h" 403f306588SStanislav Fomichev 413f306588SStanislav Fomichev extern int error_cnt, pass_cnt; 423f306588SStanislav Fomichev extern bool jit_enabled; 433f306588SStanislav Fomichev 443f306588SStanislav Fomichev #define MAGIC_BYTES 123 453f306588SStanislav Fomichev 463f306588SStanislav Fomichev /* ipv4 test vector */ 473f306588SStanislav Fomichev struct ipv4_packet { 483f306588SStanislav Fomichev struct ethhdr eth; 493f306588SStanislav Fomichev struct iphdr iph; 503f306588SStanislav Fomichev struct tcphdr tcp; 513f306588SStanislav Fomichev } __packed; 523f306588SStanislav Fomichev extern struct ipv4_packet pkt_v4; 533f306588SStanislav Fomichev 543f306588SStanislav Fomichev /* ipv6 test vector */ 553f306588SStanislav Fomichev struct ipv6_packet { 563f306588SStanislav Fomichev struct ethhdr eth; 573f306588SStanislav Fomichev struct ipv6hdr iph; 583f306588SStanislav Fomichev struct tcphdr tcp; 593f306588SStanislav Fomichev } __packed; 603f306588SStanislav Fomichev extern struct ipv6_packet pkt_v6; 613f306588SStanislav Fomichev 623f306588SStanislav Fomichev #define _CHECK(condition, tag, duration, format...) ({ \ 633f306588SStanislav Fomichev int __ret = !!(condition); \ 643f306588SStanislav Fomichev if (__ret) { \ 653f306588SStanislav Fomichev error_cnt++; \ 663f306588SStanislav Fomichev printf("%s:FAIL:%s ", __func__, tag); \ 673f306588SStanislav Fomichev printf(format); \ 683f306588SStanislav Fomichev } else { \ 693f306588SStanislav Fomichev pass_cnt++; \ 703f306588SStanislav Fomichev printf("%s:PASS:%s %d nsec\n", __func__, tag, duration);\ 713f306588SStanislav Fomichev } \ 723f306588SStanislav Fomichev __ret; \ 733f306588SStanislav Fomichev }) 743f306588SStanislav Fomichev 753f306588SStanislav Fomichev #define CHECK(condition, tag, format...) \ 763f306588SStanislav Fomichev _CHECK(condition, tag, duration, format) 773f306588SStanislav Fomichev #define CHECK_ATTR(condition, tag, format...) \ 783f306588SStanislav Fomichev _CHECK(condition, tag, tattr.duration, format) 793f306588SStanislav Fomichev 80*eaf90740SStanislav Fomichev #define MAGIC_VAL 0x1234 81*eaf90740SStanislav Fomichev #define NUM_ITER 100000 82*eaf90740SStanislav Fomichev #define VIP_NUM 5 83*eaf90740SStanislav Fomichev 843f306588SStanislav Fomichev int bpf_find_map(const char *test, struct bpf_object *obj, const char *name); 85