cregit-Linux how code gets into the kernel

Release 4.18 tools/testing/selftests/bpf/sendmsg6_prog.c

// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2018 Facebook

#include <linux/stddef.h>
#include <linux/bpf.h>
#include <sys/socket.h>

#include "bpf_helpers.h"
#include "bpf_endian.h"


#define SRC_REWRITE_IP6_0	0

#define SRC_REWRITE_IP6_1	0

#define SRC_REWRITE_IP6_2	0

#define SRC_REWRITE_IP6_3	6


#define DST_REWRITE_IP6_0	0

#define DST_REWRITE_IP6_1	0

#define DST_REWRITE_IP6_2	0

#define DST_REWRITE_IP6_3	1


#define DST_REWRITE_PORT6	6666

int _version SEC("version") = 1;

SEC("cgroup/sendmsg6")

int sendmsg_v6_prog(struct bpf_sock_addr *ctx) { if (ctx->type != SOCK_DGRAM) return 0; /* Rewrite source. */ if (ctx->msg_src_ip6[3] == bpf_htonl(1) || ctx->msg_src_ip6[3] == bpf_htonl(0)) { ctx->msg_src_ip6[0] = bpf_htonl(SRC_REWRITE_IP6_0); ctx->msg_src_ip6[1] = bpf_htonl(SRC_REWRITE_IP6_1); ctx->msg_src_ip6[2] = bpf_htonl(SRC_REWRITE_IP6_2); ctx->msg_src_ip6[3] = bpf_htonl(SRC_REWRITE_IP6_3); } else { /* Unexpected source. Reject sendmsg. */ return 0; } /* Rewrite destination. */ if ((ctx->user_ip6[0] & 0xFFFF) == bpf_htons(0xFACE) && ctx->user_ip6[0] >> 16 == bpf_htons(0xB00C)) { ctx->user_ip6[0] = bpf_htonl(DST_REWRITE_IP6_0); ctx->user_ip6[1] = bpf_htonl(DST_REWRITE_IP6_1); ctx->user_ip6[2] = bpf_htonl(DST_REWRITE_IP6_2); ctx->user_ip6[3] = bpf_htonl(DST_REWRITE_IP6_3); ctx->user_port = bpf_htons(DST_REWRITE_PORT6); } else { /* Unexpected destination. Reject sendmsg. */ return 0; } return 1; }

Contributors

PersonTokensPropCommitsCommitProp
Andrey Ignatov207100.00%1100.00%
Total207100.00%1100.00%

char _license[] SEC("license") = "GPL";

Overall Contributors

PersonTokensPropCommitsCommitProp
Andrey Ignatov283100.00%1100.00%
Total283100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.