summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahe Tardy <mahe.tardy@gmail.com>2024-10-07 12:59:57 +0300
committerMartin KaFai Lau <martin.lau@kernel.org>2024-10-08 22:06:43 +0300
commiteb62f49de7eca5917be8cebb3ad8aa3710af7021 (patch)
tree318cacaf32480c07230f9acc52c3c8782f3245e7
parentbc9b3fb827fceec4e05564d6e668280f4470ab5b (diff)
downloadlinux-eb62f49de7eca5917be8cebb3ad8aa3710af7021.tar.xz
bpf: add get_netns_cookie helper to tc programs
This is needed in the context of Cilium and Tetragon to retrieve netns cookie from hostns when traffic leaves Pod, so that we can correlate skb->sk's netns cookie. Signed-off-by: Mahe Tardy <mahe.tardy@gmail.com> Link: https://lore.kernel.org/r/20241007095958.97442-1-mahe.tardy@gmail.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
-rw-r--r--net/core/filter.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/net/core/filter.c b/net/core/filter.c
index e61ac225c41b..9c0b47bfaa77 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5138,6 +5138,17 @@ static u64 __bpf_get_netns_cookie(struct sock *sk)
return net->net_cookie;
}
+BPF_CALL_1(bpf_get_netns_cookie, struct sk_buff *, skb)
+{
+ return __bpf_get_netns_cookie(skb && skb->sk ? skb->sk : NULL);
+}
+
+static const struct bpf_func_proto bpf_get_netns_cookie_proto = {
+ .func = bpf_get_netns_cookie,
+ .ret_type = RET_INTEGER,
+ .arg1_type = ARG_PTR_TO_CTX_OR_NULL,
+};
+
BPF_CALL_1(bpf_get_netns_cookie_sock, struct sock *, ctx)
{
return __bpf_get_netns_cookie(ctx);
@@ -8209,6 +8220,8 @@ tc_cls_act_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
return &bpf_skb_under_cgroup_proto;
case BPF_FUNC_get_socket_cookie:
return &bpf_get_socket_cookie_proto;
+ case BPF_FUNC_get_netns_cookie:
+ return &bpf_get_netns_cookie_proto;
case BPF_FUNC_get_socket_uid:
return &bpf_get_socket_uid_proto;
case BPF_FUNC_fib_lookup: