1*35749060SStanislav Fomichev // SPDX-License-Identifier: GPL-2.0 2*35749060SStanislav Fomichev 3*35749060SStanislav Fomichev #include <linux/stddef.h> 4*35749060SStanislav Fomichev #include <linux/bpf.h> 5*35749060SStanislav Fomichev #include <linux/in.h> 6*35749060SStanislav Fomichev #include <sys/socket.h> 7*35749060SStanislav Fomichev 8*35749060SStanislav Fomichev #include <bpf/bpf_helpers.h> 9*35749060SStanislav Fomichev #include <bpf/bpf_endian.h> 10*35749060SStanislav Fomichev 11*35749060SStanislav Fomichev #define SERV4_IP 0xc0a801feU /* 192.168.1.254 */ 12*35749060SStanislav Fomichev #define SERV4_PORT 4040 13*35749060SStanislav Fomichev 14*35749060SStanislav Fomichev SEC("cgroup/recvmsg4") 15*35749060SStanislav Fomichev int recvmsg4_prog(struct bpf_sock_addr *ctx) 16*35749060SStanislav Fomichev { 17*35749060SStanislav Fomichev struct bpf_sock *sk; 18*35749060SStanislav Fomichev __u32 user_ip4; 19*35749060SStanislav Fomichev __u16 user_port; 20*35749060SStanislav Fomichev 21*35749060SStanislav Fomichev sk = ctx->sk; 22*35749060SStanislav Fomichev if (!sk) 23*35749060SStanislav Fomichev return 1; 24*35749060SStanislav Fomichev 25*35749060SStanislav Fomichev if (sk->family != AF_INET) 26*35749060SStanislav Fomichev return 1; 27*35749060SStanislav Fomichev 28*35749060SStanislav Fomichev if (ctx->type != SOCK_STREAM && ctx->type != SOCK_DGRAM) 29*35749060SStanislav Fomichev return 1; 30*35749060SStanislav Fomichev 31*35749060SStanislav Fomichev ctx->user_ip4 = bpf_htonl(SERV4_IP); 32*35749060SStanislav Fomichev ctx->user_port = bpf_htons(SERV4_PORT); 33*35749060SStanislav Fomichev 34*35749060SStanislav Fomichev return 1; 35*35749060SStanislav Fomichev } 36*35749060SStanislav Fomichev 37*35749060SStanislav Fomichev char _license[] SEC("license") = "GPL"; 38