Helper function bpf_redirect_peer
Definition
Copyright (c) 2015 The Libbpf Authors. All rights reserved.
Redirect the packet to another net device of index ifindex. This helper is somewhat similar to bpf_redirect(), except that the redirection happens to the ifindex' peer device and the netns switch takes place from ingress to ingress without going through the CPU's backlog queue.
The flags argument is reserved and must be 0. The helper is currently only supported for tc BPF program types at the ingress hook and for veth and netkit target device types. The peer device must reside in a different network namespace.
Returns
The helper returns TC_ACT_REDIRECT on success or TC_ACT_SHOT on error.
static long (* const bpf_redirect_peer)(__u32 ifindex, __u64 flags) = (void *) 155;
Usage
Docs could be improved
This part of the docs is incomplete, contributions are very welcome
Note
v6.15
With this patch, bpf_redirect_peer now calls skb_scrub_packet. pkt_type is set to PACKET_HOST by default.
Program types
This helper call can be used in the following program types:
Example
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
SEC("tc/ingress") // redirect_peer works only on ingress direction
int bpf_redirect_peer_example(struct __sk_buff *skb) {
__u32 if_index = 2; // interface index to redirect to
// kernel version < 6.15,
// you must explicitly call bpf_skb_change_type to update the pkt_type.
return bpf_redirect_peer(if_index, 0);
}
char LICENSE[] SEC("license") = "Dual BSD/GPL";