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()
277 struct veth_rq *rq, bool xdp) in veth_forward_skb() argument
279 return __dev_forward_skb(dev, skb) ?: xdp ? in veth_forward_skb()
548 static int veth_xdp_tx(struct veth_rq *rq, struct xdp_buff *xdp, in veth_xdp_tx() argument
551 struct xdp_frame *frame = xdp_convert_buff_to_frame(xdp); in veth_xdp_tx()
582 struct xdp_buff xdp; in veth_xdp_rcv_one() local
585 xdp_convert_frame_to_buff(frame, &xdp); in veth_xdp_rcv_one()
586 xdp.rxq = &rq->xdp_rxq; in veth_xdp_rcv_one()
588 act = bpf_prog_run_xdp(xdp_prog, &xdp); in veth_xdp_rcv_one()
592 delta = frame->data - xdp.data; in veth_xdp_rcv_one()
593 len = xdp.data_end - xdp.data; in veth_xdp_rcv_one()
597 xdp.rxq->mem = frame->mem; in veth_xdp_rcv_one()
598 if (unlikely(veth_xdp_tx(rq, &xdp, bq) < 0)) { in veth_xdp_rcv_one()
609 xdp.rxq->mem = frame->mem; in veth_xdp_rcv_one()
610 if (xdp_do_redirect(rq->dev, &xdp, xdp_prog)) { in veth_xdp_rcv_one()
660 struct xdp_buff xdp; in veth_xdp_rcv_skb() local
712 xdp.data_hard_start = skb->head; in veth_xdp_rcv_skb()
713 xdp.data = skb_mac_header(skb); in veth_xdp_rcv_skb()
714 xdp.data_end = xdp.data + pktlen; in veth_xdp_rcv_skb()
715 xdp.data_meta = xdp.data; in veth_xdp_rcv_skb()
716 xdp.rxq = &rq->xdp_rxq; in veth_xdp_rcv_skb()
719 xdp.frame_sz = (void *)skb_end_pointer(skb) - xdp.data_hard_start; in veth_xdp_rcv_skb()
720 xdp.frame_sz += SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); in veth_xdp_rcv_skb()
722 orig_data = xdp.data; in veth_xdp_rcv_skb()
723 orig_data_end = xdp.data_end; in veth_xdp_rcv_skb()
725 act = bpf_prog_run_xdp(xdp_prog, &xdp); in veth_xdp_rcv_skb()
731 get_page(virt_to_page(xdp.data)); in veth_xdp_rcv_skb()
733 xdp.rxq->mem = rq->xdp_mem; in veth_xdp_rcv_skb()
734 if (unlikely(veth_xdp_tx(rq, &xdp, bq) < 0)) { in veth_xdp_rcv_skb()
743 get_page(virt_to_page(xdp.data)); in veth_xdp_rcv_skb()
745 xdp.rxq->mem = rq->xdp_mem; in veth_xdp_rcv_skb()
746 if (xdp_do_redirect(rq->dev, &xdp, xdp_prog)) { in veth_xdp_rcv_skb()
766 delta = orig_data - xdp.data; in veth_xdp_rcv_skb()
775 off = xdp.data_end - orig_data_end; in veth_xdp_rcv_skb()
780 metalen = xdp.data - xdp.data_meta; in veth_xdp_rcv_skb()
793 page_frag_free(xdp.data); in veth_xdp_rcv_skb()
1209 static int veth_xdp(struct net_device *dev, struct netdev_bpf *xdp) in veth_xdp() argument
1211 switch (xdp->command) { in veth_xdp()
1213 return veth_xdp_set(dev, xdp->prog, xdp->extack); in veth_xdp()