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