META_SIZE
src = bpf_dynptr_slice(&data, sizeof(struct ethhdr), NULL, META_SIZE);
bpf_dynptr_write(&meta, 0, src, META_SIZE, 0);
meta_have = bpf_dynptr_slice(&meta, 0, NULL, META_SIZE);
src = bpf_dynptr_slice(&data, sizeof(struct ethhdr), NULL, META_SIZE);
dst = bpf_dynptr_slice_rdwr(&meta, 0, NULL, META_SIZE);
__builtin_memcpy(dst, src, META_SIZE);
const __u32 chunk_len = META_SIZE / 4;
__u8 meta_have[META_SIZE];
const __u32 chunk_len = META_SIZE / 4;
__u8 payload[META_SIZE];
err = bpf_dynptr_read(&md, sizeof(md), &meta, META_SIZE, 0);
err = bpf_dynptr_write(&meta, META_SIZE, &md, sizeof(md), 0);
err = bpf_dynptr_adjust(&meta, 0, META_SIZE + 1);
err = bpf_dynptr_adjust(&meta, META_SIZE + 1, META_SIZE + 1);
p = bpf_dynptr_slice(&meta, META_SIZE, NULL, sizeof(*p));
p = bpf_dynptr_slice_rdwr(&meta, META_SIZE, NULL, sizeof(*p));
static const __u8 meta_want[META_SIZE] = {
ret = bpf_xdp_adjust_meta(ctx, -META_SIZE);
if (meta + META_SIZE > ctx_ptr(ctx, data))
__builtin_memset(meta, 0, META_SIZE);
ret = bpf_xdp_adjust_meta(ctx, -META_SIZE);
if (payload + META_SIZE > data_end ||
data_meta + META_SIZE > data)
__builtin_memcpy(data_meta, payload, META_SIZE);
if (meta_have + META_SIZE > eth)
if (meta_have + META_SIZE > eth)
__u8 meta_have[META_SIZE];
if (!__builtin_memcmp(meta_have, meta_want, META_SIZE))
bpf_dynptr_read(meta_have, META_SIZE, &meta, 0, 0);
meta_have = bpf_dynptr_slice_rdwr(&meta, 0, NULL, META_SIZE);
__u8 meta_have[META_SIZE];
err = bpf_dynptr_read(meta_have, META_SIZE, &meta, 0, 0);
err = bpf_dynptr_read(meta_have, META_SIZE, &meta, 0, 0);
__u8 meta_have[META_SIZE];
err = bpf_dynptr_read(meta_have, META_SIZE, &meta, 0, 0);
err = bpf_dynptr_read(meta_have, META_SIZE, &meta, 0, 0);
return data_meta + META_SIZE <= data && (check_metadata)(file, line, data_meta);
if (meta_have + META_SIZE > data)
__u8 meta_have[META_SIZE];
bpf_dynptr_read(meta_have, META_SIZE, &meta, 0, 0);