Fix all selftests to include libbpf header files with the bpf/ prefix, to be consistent with external users of the library. Also ensure that all includes of exported libbpf header files (those that are exported on 'make install' of the library) use bracketed includes instead of quoted. To not break the build, keep the old include path until everything has been changed to the new one; a subsequent patch will remove that. Fixes: 6910d7d3867a ("selftests/bpf: Ensure bpf_helper_defs.h are taken from selftests dir") Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Andrii Nakryiko <andriin@fb.com> Link: https://lore.kernel.org/bpf/157952560568.1683545.9649335788846513446.stgit@toke.dk
96 lines
2.0 KiB
C
96 lines
2.0 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <stddef.h>
|
|
#include <string.h>
|
|
#include <netinet/in.h>
|
|
#include <linux/bpf.h>
|
|
#include <linux/if_ether.h>
|
|
#include <linux/if_packet.h>
|
|
#include <linux/ip.h>
|
|
#include <linux/ipv6.h>
|
|
#include <linux/types.h>
|
|
#include <linux/socket.h>
|
|
#include <linux/tcp.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
#include <bpf/bpf_endian.h>
|
|
#include "test_tcpnotify.h"
|
|
|
|
struct {
|
|
__uint(type, BPF_MAP_TYPE_ARRAY);
|
|
__uint(max_entries, 4);
|
|
__type(key, __u32);
|
|
__type(value, struct tcpnotify_globals);
|
|
} global_map SEC(".maps");
|
|
|
|
struct {
|
|
__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
|
|
__uint(max_entries, 2);
|
|
__uint(key_size, sizeof(int));
|
|
__uint(value_size, sizeof(__u32));
|
|
} perf_event_map SEC(".maps");
|
|
|
|
int _version SEC("version") = 1;
|
|
|
|
SEC("sockops")
|
|
int bpf_testcb(struct bpf_sock_ops *skops)
|
|
{
|
|
int rv = -1;
|
|
int op;
|
|
|
|
op = (int) skops->op;
|
|
|
|
if (bpf_ntohl(skops->remote_port) != TESTPORT) {
|
|
skops->reply = -1;
|
|
return 0;
|
|
}
|
|
|
|
switch (op) {
|
|
case BPF_SOCK_OPS_TIMEOUT_INIT:
|
|
case BPF_SOCK_OPS_RWND_INIT:
|
|
case BPF_SOCK_OPS_NEEDS_ECN:
|
|
case BPF_SOCK_OPS_BASE_RTT:
|
|
case BPF_SOCK_OPS_RTO_CB:
|
|
rv = 1;
|
|
break;
|
|
|
|
case BPF_SOCK_OPS_TCP_CONNECT_CB:
|
|
case BPF_SOCK_OPS_TCP_LISTEN_CB:
|
|
case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
|
|
case BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB:
|
|
bpf_sock_ops_cb_flags_set(skops, (BPF_SOCK_OPS_RETRANS_CB_FLAG|
|
|
BPF_SOCK_OPS_RTO_CB_FLAG));
|
|
rv = 1;
|
|
break;
|
|
case BPF_SOCK_OPS_RETRANS_CB: {
|
|
__u32 key = 0;
|
|
struct tcpnotify_globals g, *gp;
|
|
struct tcp_notifier msg = {
|
|
.type = 0xde,
|
|
.subtype = 0xad,
|
|
.source = 0xbe,
|
|
.hash = 0xef,
|
|
};
|
|
|
|
rv = 1;
|
|
|
|
/* Update results */
|
|
gp = bpf_map_lookup_elem(&global_map, &key);
|
|
if (!gp)
|
|
break;
|
|
g = *gp;
|
|
g.total_retrans = skops->total_retrans;
|
|
g.ncalls++;
|
|
bpf_map_update_elem(&global_map, &key, &g,
|
|
BPF_ANY);
|
|
bpf_perf_event_output(skops, &perf_event_map,
|
|
BPF_F_CURRENT_CPU,
|
|
&msg, sizeof(msg));
|
|
}
|
|
break;
|
|
default:
|
|
rv = -1;
|
|
}
|
|
skops->reply = rv;
|
|
return 1;
|
|
}
|
|
char _license[] SEC("license") = "GPL";
|