1*e04946f5SDaniel T. Lee // SPDX-License-Identifier: GPL-2.0
2*e04946f5SDaniel T. Lee #include "vmlinux.h"
3*e04946f5SDaniel T. Lee #include "net_shared.h"
4*e04946f5SDaniel T. Lee #include <bpf/bpf_helpers.h>
5*e04946f5SDaniel T. Lee
6*e04946f5SDaniel T. Lee SEC("cgroup/sock")
bpf_prog1(struct bpf_sock * sk)7*e04946f5SDaniel T. Lee int bpf_prog1(struct bpf_sock *sk)
8*e04946f5SDaniel T. Lee {
9*e04946f5SDaniel T. Lee char fmt[] = "socket: family %d type %d protocol %d\n";
10*e04946f5SDaniel T. Lee char fmt2[] = "socket: uid %u gid %u\n";
11*e04946f5SDaniel T. Lee __u64 gid_uid = bpf_get_current_uid_gid();
12*e04946f5SDaniel T. Lee __u32 uid = gid_uid & 0xffffffff;
13*e04946f5SDaniel T. Lee __u32 gid = gid_uid >> 32;
14*e04946f5SDaniel T. Lee
15*e04946f5SDaniel T. Lee bpf_trace_printk(fmt, sizeof(fmt), sk->family, sk->type, sk->protocol);
16*e04946f5SDaniel T. Lee bpf_trace_printk(fmt2, sizeof(fmt2), uid, gid);
17*e04946f5SDaniel T. Lee
18*e04946f5SDaniel T. Lee /* block AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6 sockets
19*e04946f5SDaniel T. Lee * ie., make ping6 fail
20*e04946f5SDaniel T. Lee */
21*e04946f5SDaniel T. Lee if (sk->family == AF_INET6 &&
22*e04946f5SDaniel T. Lee sk->type == SOCK_DGRAM &&
23*e04946f5SDaniel T. Lee sk->protocol == IPPROTO_ICMPV6)
24*e04946f5SDaniel T. Lee return 0;
25*e04946f5SDaniel T. Lee
26*e04946f5SDaniel T. Lee return 1;
27*e04946f5SDaniel T. Lee }
28*e04946f5SDaniel T. Lee
29*e04946f5SDaniel T. Lee SEC("cgroup/sock")
bpf_prog2(struct bpf_sock * sk)30*e04946f5SDaniel T. Lee int bpf_prog2(struct bpf_sock *sk)
31*e04946f5SDaniel T. Lee {
32*e04946f5SDaniel T. Lee char fmt[] = "socket: family %d type %d protocol %d\n";
33*e04946f5SDaniel T. Lee
34*e04946f5SDaniel T. Lee bpf_trace_printk(fmt, sizeof(fmt), sk->family, sk->type, sk->protocol);
35*e04946f5SDaniel T. Lee
36*e04946f5SDaniel T. Lee /* block AF_INET, SOCK_DGRAM, IPPROTO_ICMP sockets
37*e04946f5SDaniel T. Lee * ie., make ping fail
38*e04946f5SDaniel T. Lee */
39*e04946f5SDaniel T. Lee if (sk->family == AF_INET &&
40*e04946f5SDaniel T. Lee sk->type == SOCK_DGRAM &&
41*e04946f5SDaniel T. Lee sk->protocol == IPPROTO_ICMP)
42*e04946f5SDaniel T. Lee return 0;
43*e04946f5SDaniel T. Lee
44*e04946f5SDaniel T. Lee return 1;
45*e04946f5SDaniel T. Lee }
46*e04946f5SDaniel T. Lee
47*e04946f5SDaniel T. Lee char _license[] SEC("license") = "GPL";
48