/linux-6.14.4/Documentation/networking/ |
D | xdp-rx-metadata.rst | 1 .. SPDX-License-Identifier: GPL-2.0 4 XDP RX Metadata 7 This document describes how an eXpress Data Path (XDP) program can access 8 hardware metadata related to a packet using a set of helper functions, 9 and how it can pass that metadata on to other consumers. 14 XDP has access to a set of kfuncs to manipulate the metadata in an XDP frame. 15 Every device driver that wishes to expose additional packet metadata can 16 implement these kfuncs. The set of kfuncs is declared in ``include/net/xdp.h`` 20 metadata is supported, this set will grow: 22 .. kernel-doc:: net/core/xdp.c [all …]
|
D | index.rst | 4 Refer to :ref:`netdev-FAQ` for a guide on netdev development process specifics. 13 batman-adv 21 ethtool-netlink 23 iso15765-2 32 sfp-phylink 36 checksum-offloads 37 segmentation-offloads 40 tls-offload 41 tls-handshake 45 arcnet-hardware [all …]
|
D | xsk-tx-metadata.rst | 1 .. SPDX-License-Identifier: GPL-2.0 4 AF_XDP TX Metadata 8 via :doc:`af_xdp`. Refer to :doc:`xdp-rx-metadata` on how to access similar 9 metadata on the receive side. 14 The headroom for the metadata is reserved via ``tx_metadata_len`` and 15 ``XDP_UMEM_TX_METADATA_LEN`` flag in ``struct xdp_umem_reg``. The metadata 17 The metadata layout is a fixed UAPI, refer to ``union xsk_tx_metadata`` in 25 The headroom and the metadata itself should be located right before 26 ``xdp_desc->addr`` in the umem frame. Within a frame, the metadata 31 +-----------------+---------+----------------------------+ [all …]
|
/linux-6.14.4/Documentation/netlink/specs/ |
D | netdev.yaml | 1 # SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 9 - 11 name: xdp-act 12 render-max: true 14 - 17 XDP features set supported by all drivers 19 - 23 - 24 name: ndo-xmit 27 - [all …]
|
/linux-6.14.4/drivers/net/ethernet/netronome/nfp/nfd3/ |
D | xsk.c | 1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 21 struct xsk_buff_pool *pool = r_vec->xsk_pool; in nfp_nfd3_xsk_tx_xdp() 29 xsk_buff_raw_dma_sync_for_device(pool, xrxbuf->dma_addr + pkt_off, in nfp_nfd3_xsk_tx_xdp() 32 wr_idx = D_IDX(tx_ring, tx_ring->wr_p); in nfp_nfd3_xsk_tx_xdp() 34 txbuf = &tx_ring->txbufs[wr_idx]; in nfp_nfd3_xsk_tx_xdp() 35 txbuf->xdp = xrxbuf->xdp; in nfp_nfd3_xsk_tx_xdp() 36 txbuf->real_len = pkt_len; in nfp_nfd3_xsk_tx_xdp() 37 txbuf->is_xsk_tx = true; in nfp_nfd3_xsk_tx_xdp() 40 txd = &tx_ring->txds[wr_idx]; in nfp_nfd3_xsk_tx_xdp() 41 txd->offset_eop = NFD3_DESC_TX_EOP; in nfp_nfd3_xsk_tx_xdp() [all …]
|
D | dp.c | 1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 /* Copyright (C) 2015-2019 Netronome Systems, Inc. */ 20 * driver en-queues packets for transmit by advancing the write 42 * nfp_nfd3_tx_ring_stop() - stop tx ring 63 * nfp_nfd3_tx_tso() - Set up Tx descriptor for LSO 64 * @r_vec: per-ring structure 70 * Set up Tx descriptor for LSO, do nothing for non-LSO skbs. 83 if (!skb->encapsulation) { in nfp_nfd3_tx_tso() 86 l4_hdrlen = (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) ? in nfp_nfd3_tx_tso() 91 l4_hdrlen = (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) ? in nfp_nfd3_tx_tso() [all …]
|
/linux-6.14.4/include/net/ |
D | xdp.h | 1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* include/net/xdp.h 17 * DOC: XDP RX-queue information 19 * The XDP RX-queue info (xdp_rxq_info) is associated with the driver 20 * level RX-ring queues. It is information that is specific to how 21 * the driver has configured a given RX-ring queue. 24 * reference to this xdp_rxq_info structure. This provides the XDP 25 * data-path read-access to RX-info for both kernel and bpf-side 29 * context. Contents are read-mostly and must not be updated during 34 * The struct is not directly tied to the XDP prog. A new XDP prog [all …]
|
D | xdp_sock.h | 1 /* SPDX-License-Identifier: GPL-2.0 */ 51 struct xsk_queue *rx ____cacheline_aligned_in_smp; 97 * AF_XDP TX metadata hooks for network devices. 127 int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp); 128 int __xsk_map_redirect(struct xdp_sock *xs, struct xdp_buff *xdp); 132 * xsk_tx_metadata_to_compl - Save enough relevant metadata information 134 * @meta: pointer to AF_XDP metadata area 147 if (meta->flags & XDP_TXMD_FLAGS_TIMESTAMP) in xsk_tx_metadata_to_compl() 148 compl->tx_timestamp = &meta->completion.tx_timestamp; in xsk_tx_metadata_to_compl() 150 compl->tx_timestamp = NULL; in xsk_tx_metadata_to_compl() [all …]
|
/linux-6.14.4/include/uapi/linux/ |
D | if_xdp.h | 1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 3 * if_xdp: XDP socket user-space interface 17 #define XDP_COPY (1 << 1) /* Force copy-mode */ 18 #define XDP_ZEROCOPY (1 << 2) /* Force zero-copy mode */ 22 * driver with a poll() (Rx and Tx) or sendto() (Tx only). If you are 30 * multi-buffer XDP frames into multiple Rx descriptors. Without this set 44 /* Request to reserve tx_metadata_len bytes of per-chunk metadata. 67 struct xdp_ring_offset rx; member 73 /* XDP socket options */ 96 __u64 rx_ring_full; /* Dropped due to rx ring being full */ [all …]
|
/linux-6.14.4/tools/include/uapi/linux/ |
D | if_xdp.h | 1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 3 * if_xdp: XDP socket user-space interface 17 #define XDP_COPY (1 << 1) /* Force copy-mode */ 18 #define XDP_ZEROCOPY (1 << 2) /* Force zero-copy mode */ 22 * driver with a poll() (Rx and Tx) or sendto() (Tx only). If you are 30 * multi-buffer XDP frames into multiple Rx descriptors. Without this set 44 /* Request to reserve tx_metadata_len bytes of per-chunk metadata. 67 struct xdp_ring_offset rx; member 73 /* XDP socket options */ 96 __u64 rx_ring_full; /* Dropped due to rx ring being full */ [all …]
|
/linux-6.14.4/drivers/net/ethernet/netronome/nfp/nfdk/ |
D | dp.c | 1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 /* Copyright (C) 2015-2019 Netronome Systems, Inc. */ 47 if (!skb->encapsulation) { in nfp_nfdk_tx_tso() 50 l4_hdrlen = (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) ? in nfp_nfdk_tx_tso() 55 l4_hdrlen = (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) ? in nfp_nfdk_tx_tso() 60 segs = skb_shinfo(skb)->gso_segs; in nfp_nfdk_tx_tso() 61 mss = skb_shinfo(skb)->gso_size & NFDK_DESC_TX_MSS_MASK; in nfp_nfdk_tx_tso() 70 txbuf->pkt_cnt = segs; in nfp_nfdk_tx_tso() 71 txbuf->real_len = skb->len + hdrlen * (txbuf->pkt_cnt - 1); in nfp_nfdk_tx_tso() 73 u64_stats_update_begin(&r_vec->tx_sync); in nfp_nfdk_tx_tso() [all …]
|
/linux-6.14.4/drivers/net/ethernet/engleder/ |
D | tsnep_main.c | 1 // SPDX-License-Identifier: GPL-2.0 2 /* Copyright (C) 2021 Gerhard Engleder <gerhard@engleder-embedded.com> */ 6 * The TSN endpoint Ethernet MAC is a FPGA based network device for real-time 10 * It supports multiple TX/RX queue pairs. The first TX/RX queue pair is used 14 * - www.embedded-experts.at/tsn 15 * - www.engleder-embedded.com 36 #define TSNEP_MAX_RX_BUF_SIZE (PAGE_SIZE - TSNEP_HEADROOM - \ 38 /* XSK buffer shall store at least Q-in-Q frame */ 52 ECM_INT_DELAY_BASE_US + ECM_INT_DELAY_BASE_US - 1) 76 iowrite32(mask, adapter->addr + ECM_INT_ENABLE); in tsnep_enable_irq() [all …]
|
/linux-6.14.4/drivers/net/ethernet/sfc/siena/ |
D | rx.c | 1 // SPDX-License-Identifier: GPL-2.0-only 4 * Copyright 2005-2006 Fen Systems Ltd. 5 * Copyright 2005-2013 Solarflare Communications Inc. 20 #include <net/xdp.h> 33 /* Maximum rx prefix used by any architecture. */ 47 struct efx_nic *efx = rx_queue->efx; in efx_rx_packet__check_len() 48 unsigned max_len = rx_buf->len - efx->type->rx_buffer_padding; in efx_rx_packet__check_len() 56 rx_buf->flags |= EFX_RX_PKT_DISCARD; in efx_rx_packet__check_len() 59 netif_err(efx, rx_err, efx->net_dev, in efx_rx_packet__check_len() 60 "RX queue %d overlength RX event (%#x > %#x)\n", in efx_rx_packet__check_len() [all …]
|
/linux-6.14.4/tools/testing/selftests/bpf/ |
D | xdp_hw_metadata.c | 1 // SPDX-License-Identifier: GPL-2.0 3 /* Reference program for verifying XDP metadata on real HW. Functional test 6 * RX: 7 * - UDP 9091 packets are diverted into AF_XDP 8 * - Metadata verified: 9 * - rx_timestamp 10 * - rx_hash 13 * - UDP 9091 packets trigger TX reply 14 * - TX HW timestamp is requested and reported back upon completion 15 * - TX checksum is requested [all …]
|
/linux-6.14.4/drivers/net/ethernet/sfc/ |
D | rx.c | 1 // SPDX-License-Identifier: GPL-2.0-only 4 * Copyright 2005-2006 Fen Systems Ltd. 5 * Copyright 2005-2013 Solarflare Communications Inc. 20 #include <net/xdp.h> 33 /* Maximum rx prefix used by any architecture. */ 47 struct efx_nic *efx = rx_queue->efx; in efx_rx_packet__check_len() 48 unsigned max_len = rx_buf->len - efx->type->rx_buffer_padding; in efx_rx_packet__check_len() 56 rx_buf->flags |= EFX_RX_PKT_DISCARD; in efx_rx_packet__check_len() 59 netif_err(efx, rx_err, efx->net_dev, in efx_rx_packet__check_len() 60 "RX queue %d overlength RX event (%#x > %#x)\n", in efx_rx_packet__check_len() [all …]
|
/linux-6.14.4/drivers/net/ethernet/amazon/ena/ |
D | ena_netdev.h | 1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 3 * Copyright 2015-2020 Amazon.com, Inc. or its affiliates. All rights reserved. 17 #include <net/xdp.h> 60 #define ENA_DEFAULT_RX_COPYBREAK (256 - NET_IP_ALIGN) 77 /* Refill Rx queue when number of required descriptors is above 88 #define ENA_TX_RING_IDX_NEXT(idx, ring_size) (((idx) + 1) & ((ring_size) - 1)) 90 #define ENA_RX_RING_IDX_NEXT(idx, ring_size) (((idx) + 1) & ((ring_size) - 1)) 92 (((idx) + (n)) & ((ring_size) - 1)) 97 #define ENA_IO_RXQ_IDX_TO_COMBINED_IDX(q) (((q) - 1) / 2) 135 /* XDP buffer structure which is used for sending packets in [all …]
|
/linux-6.14.4/tools/net/ynl/samples/ |
D | netdev.c | 1 // SPDX-License-Identifier: GPL-2.0 9 #include "netdev-user.h" 24 if (!d->_present.ifindex) in netdev_print_device() 27 name = if_indextoname(d->ifindex, ifname); in netdev_print_device() 30 printf("[%d]\t", d->ifindex); in netdev_print_device() 32 if (!d->_present.xdp_features) in netdev_print_device() 35 printf("xdp-features (%llx):", d->xdp_features); in netdev_print_device() 36 for (int i = 0; d->xdp_features >= 1U << i; i++) { in netdev_print_device() 37 if (d->xdp_features & (1U << i)) in netdev_print_device() 41 printf(" xdp-rx-metadata-features (%llx):", d->xdp_rx_metadata_features); in netdev_print_device() [all …]
|
/linux-6.14.4/tools/testing/selftests/bpf/progs/ |
D | xdp_metadata.c | 1 // SPDX-License-Identifier: GPL-2.0 30 SEC("xdp") 31 int rx(struct xdp_md *ctx) in rx() function 39 u64 timestamp = -1; in rx() 42 data = (void *)(long)ctx->data; in rx() 43 data_end = (void *)(long)ctx->data_end; in rx() 46 if (eth->h_proto == bpf_htons(ETH_P_IP)) { in rx() 48 if (iph + 1 < data_end && iph->protocol == IPPROTO_UDP) in rx() 51 if (eth->h_proto == bpf_htons(ETH_P_IPV6)) { in rx() 53 if (ip6h + 1 < data_end && ip6h->nexthdr == IPPROTO_UDP) in rx() [all …]
|
/linux-6.14.4/drivers/net/ethernet/intel/igc/ |
D | igc.h | 1 /* SPDX-License-Identifier: GPL-2.0 */ 18 #include <net/xdp.h> 114 struct xsk_tx_metadata_compl xsk_meta; /* ref to xsk Tx metadata */ 187 /* RX */ 218 /* RX */ 315 /* Free-running timer lock */ 319 struct timespec64 prev_ptp_time; /* Pre-reset PTP clock */ 363 /* AF_XDP TX metadata operations */ 403 /* RX-desc Write-Back format RSS Type's */ 418 #define IGC_RSS_TYPE_MASK GENMASK(3,0) /* 4-bits (3:0) = mask 0x0F */ [all …]
|
/linux-6.14.4/tools/testing/selftests/net/ |
D | nl_netdev.py | 2 # SPDX-License-Identifier: GPL-2.0 10 def empty_check(nf) -> None: 15 def lo_check(nf) -> None: 17 ksft_eq(len(lo_info['xdp-features']), 0) 18 ksft_eq(len(lo_info['xdp-rx-metadata-features']), 0) 21 def napi_list_check(nf) -> None: 38 def page_pool_check(nf) -> None: 81 attached = [pp for pp in pp_list if "detach-time" not in pp] 87 attached = [pp for pp in pp_list if "detach-time" not in pp] 88 detached = [pp for pp in pp_list if "detach-time" in pp] [all …]
|
/linux-6.14.4/drivers/net/ethernet/fungible/funeth/ |
D | funeth_rx.c | 1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 4 #include <linux/dma-mapping.h> 22 /* Per packet headroom in non-XDP mode. Present only for 1-frag packets. */ 40 if (unlikely(buf->pg_refs < MIN_PAGE_REFS)) { in refresh_refs() 41 buf->pg_refs += EXTRA_PAGE_REFS; in refresh_refs() 42 page_ref_add(buf->page, EXTRA_PAGE_REFS); in refresh_refs() 46 /* Offer a buffer to the Rx buffer cache. The cache will hold the buffer if its 52 struct funeth_rx_cache *c = &q->cache; in cache_offer() 54 if (c->prod_cnt - c->cons_cnt <= c->mask && buf->node == numa_mem_id()) { in cache_offer() 55 c->bufs[c->prod_cnt & c->mask] = *buf; in cache_offer() [all …]
|
/linux-6.14.4/drivers/net/ethernet/netronome/nfp/ |
D | nfp_net.h | 1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 /* Copyright (C) 2015-2018 Netronome Systems, Inc. */ 21 #include <linux/io-64-nonatomic-hi-lo.h> 24 #include <net/xdp.h> 32 if (__nn->dp.netdev) \ 33 netdev_printk(lvl, __nn->dp.netdev, fmt, ## args); \ 35 dev_printk(lvl, __nn->dp.dev, "ctrl: " fmt, ## args); \ 48 if (__dp->netdev) \ 49 netdev_warn(__dp->netdev, fmt, ## args); \ 51 dev_warn(__dp->dev, fmt, ## args); \ [all …]
|
/linux-6.14.4/drivers/net/ethernet/intel/ice/ |
D | ice_txrx.c | 1 // SPDX-License-Identifier: GPL-2.0 12 #include <net/xdp.h> 27 * ice_prgm_fdir_fltr - Program a Flow Director filter 47 return -ENOENT; in ice_prgm_fdir_fltr() 48 tx_ring = vsi->tx_rings[0]; in ice_prgm_fdir_fltr() 49 if (!tx_ring || !tx_ring->desc) in ice_prgm_fdir_fltr() 50 return -ENOENT; in ice_prgm_fdir_fltr() 51 dev = tx_ring->dev; in ice_prgm_fdir_fltr() 54 for (i = ICE_FDIR_CLEAN_DELAY; ICE_DESC_UNUSED(tx_ring) < 2; i--) { in ice_prgm_fdir_fltr() 56 return -EAGAIN; in ice_prgm_fdir_fltr() [all …]
|
/linux-6.14.4/drivers/net/ |
D | veth.c | 1 // SPDX-License-Identifier: GPL-2.0-only 21 #include <net/xdp.h> 44 /* xdp */ 123 struct xdp_buff xdp; member 130 cmd->base.speed = SPEED_10000; in veth_get_link_ksettings() 131 cmd->base.duplex = DUPLEX_FULL; in veth_get_link_ksettings() 132 cmd->base.port = PORT_TP; in veth_get_link_ksettings() 133 cmd->base.autoneg = AUTONEG_DISABLE; in veth_get_link_ksettings() 139 strscpy(info->driver, DRV_NAME, sizeof(info->driver)); in veth_get_drvinfo() 140 strscpy(info->version, DRV_VERSION, sizeof(info->version)); in veth_get_drvinfo() [all …]
|
/linux-6.14.4/drivers/net/ethernet/qlogic/qede/ |
D | qede.h | 1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 3 * Copyright (c) 2015-2017 QLogic Corporation 4 * Copyright (c) 2019-2020 Marvell International Ltd. 16 #include <net/xdp.h> 177 &(edev)->flags) 184 #define QEDE_MAX_RSS_CNT(edev) ((edev)->dev_info.num_queues) 185 #define QEDE_MAX_TSS_CNT(edev) ((edev)->dev_info.num_queues) 187 ((edev)->dev_info.common.dev_type == QED_DEV_TYPE_BB) 189 ((edev)->dev_info.common.dev_type == QED_DEV_TYPE_AH) 201 #define QEDE_QUEUE_CNT(edev) ((edev)->num_queues) [all …]
|