1e2a46d54SStanislav Fomichev // SPDX-License-Identifier: GPL-2.0
2e2a46d54SStanislav Fomichev 
3e2a46d54SStanislav Fomichev #include <vmlinux.h>
4e2a46d54SStanislav Fomichev #include "xdp_metadata.h"
5e2a46d54SStanislav Fomichev #include <bpf/bpf_helpers.h>
6e2a46d54SStanislav Fomichev #include <bpf/bpf_endian.h>
7e2a46d54SStanislav Fomichev 
8*0f26b74eSJesper Dangaard Brouer extern int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, __u32 *hash,
9*0f26b74eSJesper Dangaard Brouer 				    enum xdp_rss_hash_type *rss_type) __ksym;
10e2a46d54SStanislav Fomichev 
11e2a46d54SStanislav Fomichev int called;
12e2a46d54SStanislav Fomichev 
13e2a46d54SStanislav Fomichev SEC("freplace/rx")
freplace_rx(struct xdp_md * ctx)14e2a46d54SStanislav Fomichev int freplace_rx(struct xdp_md *ctx)
15e2a46d54SStanislav Fomichev {
16*0f26b74eSJesper Dangaard Brouer 	enum xdp_rss_hash_type type = 0;
17e2a46d54SStanislav Fomichev 	u32 hash = 0;
18e2a46d54SStanislav Fomichev 	/* Call _any_ metadata function to make sure we don't crash. */
19*0f26b74eSJesper Dangaard Brouer 	bpf_xdp_metadata_rx_hash(ctx, &hash, &type);
20e2a46d54SStanislav Fomichev 	called++;
21e2a46d54SStanislav Fomichev 	return XDP_PASS;
22e2a46d54SStanislav Fomichev }
23e2a46d54SStanislav Fomichev 
24e2a46d54SStanislav Fomichev char _license[] SEC("license") = "GPL";
25