Lines Matching defs:xdp
21 #include <net/xdp.h>
41 /* xdp */
242 static void *veth_xdp_to_ptr(struct xdp_frame *xdp)
244 return (void *)((unsigned long)xdp | VETH_XDP_FLAG);
276 struct veth_rq *rq, bool xdp)
278 return __dev_forward_skb(dev, skb) ?: xdp ?
549 static int veth_xdp_tx(struct veth_rq *rq, struct xdp_buff *xdp,
552 struct xdp_frame *frame = xdp_convert_buff_to_frame(xdp);
583 struct xdp_buff xdp;
586 xdp_convert_frame_to_buff(frame, &xdp);
587 xdp.rxq = &rq->xdp_rxq;
589 act = bpf_prog_run_xdp(xdp_prog, &xdp);
593 delta = frame->data - xdp.data;
594 len = xdp.data_end - xdp.data;
598 xdp.rxq->mem = frame->mem;
599 if (unlikely(veth_xdp_tx(rq, &xdp, bq) < 0)) {
610 xdp.rxq->mem = frame->mem;
611 if (xdp_do_redirect(rq->dev, &xdp, xdp_prog)) {
661 struct xdp_buff xdp;
713 xdp.data_hard_start = skb->head;
714 xdp.data = skb_mac_header(skb);
715 xdp.data_end = xdp.data + pktlen;
716 xdp.data_meta = xdp.data;
717 xdp.rxq = &rq->xdp_rxq;
720 xdp.frame_sz = (void *)skb_end_pointer(skb) - xdp.data_hard_start;
721 xdp.frame_sz += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
723 orig_data = xdp.data;
724 orig_data_end = xdp.data_end;
726 act = bpf_prog_run_xdp(xdp_prog, &xdp);
732 get_page(virt_to_page(xdp.data));
734 xdp.rxq->mem = rq->xdp_mem;
735 if (unlikely(veth_xdp_tx(rq, &xdp, bq) < 0)) {
744 get_page(virt_to_page(xdp.data));
746 xdp.rxq->mem = rq->xdp_mem;
747 if (xdp_do_redirect(rq->dev, &xdp, xdp_prog)) {
767 delta = orig_data - xdp.data;
776 off = xdp.data_end - orig_data_end;
781 metalen = xdp.data - xdp.data_meta;
794 page_frag_free(xdp.data);
1209 static int veth_xdp(struct net_device *dev, struct netdev_bpf *xdp)
1211 switch (xdp->command) {
1213 return veth_xdp_set(dev, xdp->prog, xdp->extack);