mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
Add a selftest covering ETH_HLEN-sized IPv4/IPv6 EtherType inputs for bpf_prog_test_run_skb(). Reuse a single zero-initialized struct ethhdr eth_hlen and set eth_hlen.h_proto from the per-test h_proto field. Also add a dedicated tc_adjust_room program and route the short IPv4/IPv6 cases to it, so the selftest actually exercises the bpf_skb_adjust_room() path from the report. Signed-off-by: Sun Jian <sun.jian.kdev@gmail.com> Link: https://lore.kernel.org/r/20260408034623.180320-3-sun.jian.kdev@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
45 lines
817 B
C
45 lines
817 B
C
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
|
#include <linux/bpf.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
#include <bpf/bpf_endian.h>
|
|
|
|
char _license[] SEC("license") = "GPL";
|
|
|
|
int ifindex;
|
|
int ret;
|
|
|
|
SEC("lwt_xmit")
|
|
int redirect_ingress(struct __sk_buff *skb)
|
|
{
|
|
ret = bpf_clone_redirect(skb, ifindex, BPF_F_INGRESS);
|
|
return 0;
|
|
}
|
|
|
|
SEC("lwt_xmit")
|
|
int redirect_egress(struct __sk_buff *skb)
|
|
{
|
|
ret = bpf_clone_redirect(skb, ifindex, 0);
|
|
return 0;
|
|
}
|
|
|
|
SEC("tc")
|
|
int tc_redirect_ingress(struct __sk_buff *skb)
|
|
{
|
|
ret = bpf_clone_redirect(skb, ifindex, BPF_F_INGRESS);
|
|
return 0;
|
|
}
|
|
|
|
SEC("tc")
|
|
int tc_redirect_egress(struct __sk_buff *skb)
|
|
{
|
|
ret = bpf_clone_redirect(skb, ifindex, 0);
|
|
return 0;
|
|
}
|
|
|
|
SEC("tc")
|
|
int tc_adjust_room(struct __sk_buff *skb)
|
|
{
|
|
ret = bpf_skb_adjust_room(skb, 4, BPF_ADJ_ROOM_NET, 0);
|
|
return 0;
|
|
}
|