mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
selftests/bpf: Allow VLAN packets in xdp_hw_metadata
Make VLAN c-tag and s-tag XDP hint testing more convenient by not skipping VLAN-ed packets. Allow both 802.1ad and 802.1Q headers. Acked-by: Stanislav Fomichev <sdf@google.com> Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com> Link: https://lore.kernel.org/r/20231205210847.28460-16-larysa.zaremba@intel.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
7978bad4b6
commit
e71a9fa7fd
2 changed files with 17 additions and 1 deletions
|
@ -26,15 +26,23 @@ int rx(struct xdp_md *ctx)
|
|||
{
|
||||
void *data, *data_meta, *data_end;
|
||||
struct ipv6hdr *ip6h = NULL;
|
||||
struct ethhdr *eth = NULL;
|
||||
struct udphdr *udp = NULL;
|
||||
struct iphdr *iph = NULL;
|
||||
struct xdp_meta *meta;
|
||||
struct ethhdr *eth;
|
||||
int err;
|
||||
|
||||
data = (void *)(long)ctx->data;
|
||||
data_end = (void *)(long)ctx->data_end;
|
||||
eth = data;
|
||||
|
||||
if (eth + 1 < data_end && (eth->h_proto == bpf_htons(ETH_P_8021AD) ||
|
||||
eth->h_proto == bpf_htons(ETH_P_8021Q)))
|
||||
eth = (void *)eth + sizeof(struct vlan_hdr);
|
||||
|
||||
if (eth + 1 < data_end && eth->h_proto == bpf_htons(ETH_P_8021Q))
|
||||
eth = (void *)eth + sizeof(struct vlan_hdr);
|
||||
|
||||
if (eth + 1 < data_end) {
|
||||
if (eth->h_proto == bpf_htons(ETH_P_IP)) {
|
||||
iph = (void *)(eth + 1);
|
||||
|
|
|
@ -9,6 +9,14 @@
|
|||
#define ETH_P_IPV6 0x86DD
|
||||
#endif
|
||||
|
||||
#ifndef ETH_P_8021Q
|
||||
#define ETH_P_8021Q 0x8100
|
||||
#endif
|
||||
|
||||
#ifndef ETH_P_8021AD
|
||||
#define ETH_P_8021AD 0x88A8
|
||||
#endif
|
||||
|
||||
struct xdp_meta {
|
||||
__u64 rx_timestamp;
|
||||
__u64 xdp_timestamp;
|
||||
|
|
Loading…
Reference in a new issue