mirror of
https://github.com/h3xduck/TripleCross.git
synced 2025-12-17 07:33:07 +08:00
75 lines
1.7 KiB
C
75 lines
1.7 KiB
C
// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
|
/* Copyright (c) 2020 Facebook */
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <sys/resource.h>
|
|
#include <bpf/libbpf.h>
|
|
#include "minimal.skel.h"
|
|
|
|
static int libbpf_print_fn(enum libbpf_print_level level, const char *format, va_list args)
|
|
{
|
|
return vfprintf(stderr, format, args);
|
|
}
|
|
|
|
static void bump_memlock_rlimit(void)
|
|
{
|
|
struct rlimit rlim_new = {
|
|
.rlim_cur = RLIM_INFINITY,
|
|
.rlim_max = RLIM_INFINITY,
|
|
};
|
|
|
|
if (setrlimit(RLIMIT_MEMLOCK, &rlim_new)) {
|
|
fprintf(stderr, "Failed to increase RLIMIT_MEMLOCK limit!\n");
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
struct minimal_bpf *skel;
|
|
int err;
|
|
|
|
/* Set up libbpf errors and debug info callback */
|
|
libbpf_set_print(libbpf_print_fn);
|
|
|
|
/* Bump RLIMIT_MEMLOCK to allow BPF sub-system to do anything */
|
|
bump_memlock_rlimit();
|
|
|
|
/* Open BPF application */
|
|
skel = minimal_bpf__open();
|
|
if (!skel) {
|
|
fprintf(stderr, "Failed to open BPF skeleton\n");
|
|
return 1;
|
|
}
|
|
|
|
/* ensure BPF program only handles write() syscalls from our process */
|
|
skel->bss->my_pid = getpid();
|
|
|
|
/* Load & verify BPF programs */
|
|
err = minimal_bpf__load(skel);
|
|
if (err) {
|
|
fprintf(stderr, "Failed to load and verify BPF skeleton\n");
|
|
goto cleanup;
|
|
}
|
|
|
|
/* Attach tracepoint handler */
|
|
err = minimal_bpf__attach(skel);
|
|
if (err) {
|
|
fprintf(stderr, "Failed to attach BPF skeleton\n");
|
|
goto cleanup;
|
|
}
|
|
|
|
printf("Successfully started! Please run `sudo cat /sys/kernel/debug/tracing/trace_pipe` "
|
|
"to see output of the BPF programs.\n");
|
|
|
|
for (;;) {
|
|
/* trigger our BPF program */
|
|
fprintf(stderr, ".");
|
|
sleep(1);
|
|
}
|
|
|
|
cleanup:
|
|
minimal_bpf__destroy(skel);
|
|
return -err;
|
|
}
|