|
@@ -4304,6 +4304,25 @@ static u32 xdp_convert_ctx_access(enum bpf_access_type type,
|
|
|
si->dst_reg, si->src_reg,
|
|
|
offsetof(struct xdp_buff, data_end));
|
|
|
break;
|
|
|
+ case offsetof(struct xdp_md, ingress_ifindex):
|
|
|
+ *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct xdp_buff, rxq),
|
|
|
+ si->dst_reg, si->src_reg,
|
|
|
+ offsetof(struct xdp_buff, rxq));
|
|
|
+ *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct xdp_rxq_info, dev),
|
|
|
+ si->dst_reg, si->dst_reg,
|
|
|
+ offsetof(struct xdp_rxq_info, dev));
|
|
|
+ *insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->dst_reg,
|
|
|
+ bpf_target_off(struct net_device,
|
|
|
+ ifindex, 4, target_size));
|
|
|
+ break;
|
|
|
+ case offsetof(struct xdp_md, rx_queue_index):
|
|
|
+ *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct xdp_buff, rxq),
|
|
|
+ si->dst_reg, si->src_reg,
|
|
|
+ offsetof(struct xdp_buff, rxq));
|
|
|
+ *insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->dst_reg,
|
|
|
+ bpf_target_off(struct xdp_rxq_info,
|
|
|
+ queue_index, 4, target_size));
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return insn - insn_buf;
|