Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#include <stdio.h>
  3#include <unistd.h>
  4#include <errno.h>
  5#include <string.h>
  6#include <assert.h>
  7#include <stdlib.h>
  8#include <stdarg.h>
  9#include <time.h>
 10#include <signal.h>
 11
 12#include <linux/types.h>
 13typedef __u16 __sum16;
 14#include <arpa/inet.h>
 15#include <linux/if_ether.h>
 16#include <linux/if_packet.h>
 17#include <linux/ip.h>
 18#include <linux/ipv6.h>
 19#include <netinet/tcp.h>
 20#include <linux/filter.h>
 21#include <linux/perf_event.h>
 22#include <linux/socket.h>
 23#include <linux/unistd.h>
 24
 25#include <sys/ioctl.h>
 26#include <sys/wait.h>
 27#include <sys/types.h>
 28#include <sys/time.h>
 29#include <fcntl.h>
 30#include <pthread.h>
 31#include <linux/bpf.h>
 32#include <linux/err.h>
 33#include <bpf/bpf.h>
 34#include <bpf/libbpf.h>
 35
 36#include "test_iptunnel_common.h"
 37#include "bpf_util.h"
 38#include <bpf/bpf_endian.h>
 39#include "trace_helpers.h"
 40#include "testing_helpers.h"
 41#include "flow_dissector_load.h"
 42
 43enum verbosity {
 44	VERBOSE_NONE,
 45	VERBOSE_NORMAL,
 46	VERBOSE_VERY,
 47	VERBOSE_SUPER,
 48};
 49
 50struct str_set {
 51	const char **strs;
 52	int cnt;
 53};
 54
 55struct test_selector {
 56	struct str_set whitelist;
 57	struct str_set blacklist;
 58	bool *num_set;
 59	int num_set_len;
 60};
 61
 62struct test_env {
 63	struct test_selector test_selector;
 64	struct test_selector subtest_selector;
 65	bool verifier_stats;
 66	enum verbosity verbosity;
 67
 68	bool jit_enabled;
 69	bool get_test_cnt;
 70	bool list_test_names;
 71
 72	struct prog_test_def *test;
 73	FILE *stdout;
 74	FILE *stderr;
 75	char *log_buf;
 76	size_t log_cnt;
 77	int nr_cpus;
 78
 79	int succ_cnt; /* successful tests */
 80	int sub_succ_cnt; /* successful sub-tests */
 81	int fail_cnt; /* total failed tests + sub-tests */
 82	int skip_cnt; /* skipped tests */
 83
 84	int saved_netns_fd;
 85};
 86
 87extern struct test_env env;
 88
 89extern void test__force_log();
 90extern bool test__start_subtest(const char *name);
 91extern void test__skip(void);
 92extern void test__fail(void);
 93extern int test__join_cgroup(const char *path);
 94
 95#define PRINT_FAIL(format...)                                                  \
 96	({                                                                     \
 97		test__fail();                                                  \
 98		fprintf(stdout, "%s:FAIL:%d ", __func__, __LINE__);            \
 99		fprintf(stdout, ##format);                                     \
100	})
101
102#define _CHECK(condition, tag, duration, format...) ({			\
103	int __ret = !!(condition);					\
104	int __save_errno = errno;					\
105	if (__ret) {							\
106		test__fail();						\
107		fprintf(stdout, "%s:FAIL:%s ", __func__, tag);		\
108		fprintf(stdout, ##format);				\
109	} else {							\
110		fprintf(stdout, "%s:PASS:%s %d nsec\n",			\
111		       __func__, tag, duration);			\
112	}								\
113	errno = __save_errno;						\
114	__ret;								\
115})
116
117#define CHECK_FAIL(condition) ({					\
118	int __ret = !!(condition);					\
119	int __save_errno = errno;					\
120	if (__ret) {							\
121		test__fail();						\
122		fprintf(stdout, "%s:FAIL:%d\n", __func__, __LINE__);	\
123	}								\
124	errno = __save_errno;						\
125	__ret;								\
126})
127
128#define CHECK(condition, tag, format...) \
129	_CHECK(condition, tag, duration, format)
130#define CHECK_ATTR(condition, tag, format...) \
131	_CHECK(condition, tag, tattr.duration, format)
132
133static inline __u64 ptr_to_u64(const void *ptr)
134{
135	return (__u64) (unsigned long) ptr;
136}
137
138static inline void *u64_to_ptr(__u64 ptr)
139{
140	return (void *) (unsigned long) ptr;
141}
142
143int bpf_find_map(const char *test, struct bpf_object *obj, const char *name);
144int compare_map_keys(int map1_fd, int map2_fd);
145int compare_stack_ips(int smap_fd, int amap_fd, int stack_trace_len);
146int extract_build_id(char *build_id, size_t size);
147
148#ifdef __x86_64__
149#define SYS_NANOSLEEP_KPROBE_NAME "__x64_sys_nanosleep"
150#elif defined(__s390x__)
151#define SYS_NANOSLEEP_KPROBE_NAME "__s390x_sys_nanosleep"
152#else
153#define SYS_NANOSLEEP_KPROBE_NAME "sys_nanosleep"
154#endif