cregit-Linux how code gets into the kernel

Release 4.7 samples/bpf/libbpf.c

Directory: samples/bpf
/* eBPF mini library */
#include <stdlib.h>
#include <stdio.h>
#include <linux/unistd.h>
#include <unistd.h>
#include <string.h>
#include <linux/netlink.h>
#include <linux/bpf.h>
#include <errno.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <linux/if_packet.h>
#include <arpa/inet.h>
#include "libbpf.h"


static __u64 ptr_to_u64(void *ptr) { return (__u64) (unsigned long) ptr; }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov20100.00%1100.00%
Total20100.00%1100.00%


int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size, int max_entries, int map_flags) { union bpf_attr attr = { .map_type = map_type, .key_size = key_size, .value_size = value_size, .max_entries = max_entries, .map_flags = map_flags, }; return syscall(__NR_bpf, BPF_MAP_CREATE, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov68100.00%2100.00%
Total68100.00%2100.00%


int bpf_update_elem(int fd, void *key, void *value, unsigned long long flags) { union bpf_attr attr = { .map_fd = fd, .key = ptr_to_u64(key), .value = ptr_to_u64(value), .flags = flags, }; return syscall(__NR_bpf, BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov69100.00%2100.00%
Total69100.00%2100.00%


int bpf_lookup_elem(int fd, void *key, void *value) { union bpf_attr attr = { .map_fd = fd, .key = ptr_to_u64(key), .value = ptr_to_u64(value), }; return syscall(__NR_bpf, BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov59100.00%1100.00%
Total59100.00%1100.00%


int bpf_delete_elem(int fd, void *key) { union bpf_attr attr = { .map_fd = fd, .key = ptr_to_u64(key), }; return syscall(__NR_bpf, BPF_MAP_DELETE_ELEM, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov47100.00%1100.00%
Total47100.00%1100.00%


int bpf_get_next_key(int fd, void *key, void *next_key) { union bpf_attr attr = { .map_fd = fd, .key = ptr_to_u64(key), .next_key = ptr_to_u64(next_key), }; return syscall(__NR_bpf, BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov59100.00%1100.00%
Total59100.00%1100.00%

#define ROUND_UP(x, n) (((x) + (n) - 1u) & ~((n) - 1u)) char bpf_log_buf[LOG_BUF_SIZE];
int bpf_prog_load(enum bpf_prog_type prog_type, const struct bpf_insn *insns, int prog_len, const char *license, int kern_version) { union bpf_attr attr = { .prog_type = prog_type, .insns = ptr_to_u64((void *) insns), .insn_cnt = prog_len / sizeof(struct bpf_insn), .license = ptr_to_u64((void *) license), .log_buf = ptr_to_u64(bpf_log_buf), .log_size = LOG_BUF_SIZE, .log_level = 1, }; /* assign one field outside of struct init to make sure any * padding is zero initialized */ attr.kern_version = kern_version; bpf_log_buf[0] = 0; return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov120100.00%2100.00%
Total120100.00%2100.00%


int bpf_obj_pin(int fd, const char *pathname) { union bpf_attr attr = { .pathname = ptr_to_u64((void *)pathname), .bpf_fd = fd, }; return syscall(__NR_bpf, BPF_OBJ_PIN, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
daniel borkmanndaniel borkmann52100.00%1100.00%
Total52100.00%1100.00%


int bpf_obj_get(const char *pathname) { union bpf_attr attr = { .pathname = ptr_to_u64((void *)pathname), }; return syscall(__NR_bpf, BPF_OBJ_GET, &attr, sizeof(attr)); }

Contributors

PersonTokensPropCommitsCommitProp
daniel borkmanndaniel borkmann44100.00%1100.00%
Total44100.00%1100.00%


int open_raw_sock(const char *name) { struct sockaddr_ll sll; int sock; sock = socket(PF_PACKET, SOCK_RAW | SOCK_NONBLOCK | SOCK_CLOEXEC, htons(ETH_P_ALL)); if (sock < 0) { printf("cannot create raw socket\n"); return -1; } memset(&sll, 0, sizeof(sll)); sll.sll_family = AF_PACKET; sll.sll_ifindex = if_nametoindex(name); sll.sll_protocol = htons(ETH_P_ALL); if (bind(sock, (struct sockaddr *)&sll, sizeof(sll)) < 0) { printf("bind to %s: %s\n", name, strerror(errno)); close(sock); return -1; } return sock; }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov137100.00%1100.00%
Total137100.00%1100.00%


int perf_event_open(struct perf_event_attr *attr, int pid, int cpu, int group_fd, unsigned long flags) { return syscall(__NR_perf_event_open, attr, pid, cpu, group_fd, flags); }

Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov39100.00%1100.00%
Total39100.00%1100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
alexei starovoitovalexei starovoitov67387.52%583.33%
daniel borkmanndaniel borkmann9612.48%116.67%
Total769100.00%6100.00%
Directory: samples/bpf
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}