]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/dpdk/doc/guides/nics/features.rst
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / dpdk / doc / guides / nics / features.rst
CommitLineData
11fdf7f2
TL
1.. SPDX-License-Identifier: BSD-3-Clause
2 Copyright(c) 2017 Intel Corporation.
3
4Features Overview
5=================
6
7This section explains the supported features that are listed in the
8:doc:`overview`.
9
10As a guide to implementers it also shows the structs where the features are
11defined and the APIs that can be use to get/set the values.
12
13Following tags used for feature details, these are from driver point of view:
14
15``[uses]`` : Driver uses some kind of input from the application.
16
17``[implements]`` : Driver implements a functionality.
18
19``[provides]`` : Driver provides some kind of data to the application. It is possible
20to provide data by implementing some function, but "provides" is used
21for cases where provided data can't be represented simply by a function.
22
23``[related]`` : Related API with that feature.
24
25
26.. _nic_features_speed_capabilities:
27
28Speed capabilities
29------------------
30
31Supports getting the speed capabilities that the current device is capable of.
32
33* **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
34* **[related] API**: ``rte_eth_dev_info_get()``.
35
36
37.. _nic_features_link_status:
38
39Link status
40-----------
41
42Supports getting the link speed, duplex mode and link state (up/down).
43
44* **[implements] eth_dev_ops**: ``link_update``.
45* **[implements] rte_eth_dev_data**: ``dev_link``.
46* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
47
48
49.. _nic_features_link_status_event:
50
51Link status event
52-----------------
53
54Supports Link Status Change interrupts.
55
56* **[uses] user config**: ``dev_conf.intr_conf.lsc``.
57* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
58* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
59* **[implements] rte_eth_dev_data**: ``dev_link``.
60* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
61* **[related] API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
62
63
64.. _nic_features_removal_event:
65
66Removal event
67-------------
68
69Supports device removal interrupts.
70
71* **[uses] user config**: ``dev_conf.intr_conf.rmv``.
72* **[uses] rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
73* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
74* **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
75
76
77.. _nic_features_queue_status_event:
78
79Queue status event
80------------------
81
82Supports queue enable/disable events.
83
84* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87.. _nic_features_rx_interrupt:
88
89Rx interrupt
90------------
91
92Supports Rx interrupts.
93
94* **[uses] user config**: ``dev_conf.intr_conf.rxq``.
95* **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
96* **[related] API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
97
98
99.. _nic_features_lock-free_tx_queue:
100
101Lock-free Tx queue
102------------------
103
104If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
106
107* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MT_LOCKFREE``.
108* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
109* **[related] API**: ``rte_eth_tx_burst()``.
110
111
112.. _nic_features_fast_mbuf_free:
113
114Fast mbuf free
115--------------
116
117Supports optimization for fast release of mbufs following successful Tx.
118Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
119
120* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
121* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
122
123
124.. _nic_features_free_tx_mbuf_on_demand:
125
126Free Tx mbuf on demand
127----------------------
128
129Supports freeing consumed buffers on a Tx ring.
130
131* **[implements] eth_dev_ops**: ``tx_done_cleanup``.
132* **[related] API**: ``rte_eth_tx_done_cleanup()``.
133
134
135.. _nic_features_queue_start_stop:
136
137Queue start/stop
138----------------
139
140Supports starting/stopping a specific Rx/Tx queue of a port.
141
142* **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
143 ``tx_queue_stop``.
144* **[related] API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
145 ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
146
147
148.. _nic_features_mtu_update:
149
150MTU update
151----------
152
153Supports updating port MTU.
154
155* **[implements] eth_dev_ops**: ``mtu_set``.
156* **[implements] rte_eth_dev_data**: ``mtu``.
157* **[provides] rte_eth_dev_info**: ``max_rx_pktlen``.
158* **[related] API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
159
160
161.. _nic_features_jumbo_frame:
162
163Jumbo frame
164-----------
165
166Supports Rx jumbo frames.
167
168* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
169 ``dev_conf.rxmode.max_rx_pkt_len``.
170* **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
171* **[related] API**: ``rte_eth_dev_set_mtu()``.
172
173
174.. _nic_features_scattered_rx:
175
176Scattered Rx
177------------
178
179Supports receiving segmented mbufs.
180
181* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
182* **[implements] datapath**: ``Scattered Rx function``.
183* **[implements] rte_eth_dev_data**: ``scattered_rx``.
184* **[provides] eth_dev_ops**: ``rxq_info_get:scattered_rx``.
185* **[related] eth_dev_ops**: ``rx_pkt_burst``.
186
187
188.. _nic_features_lro:
189
190LRO
191---
192
193Supports Large Receive Offload.
194
195* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
196* **[implements] datapath**: ``LRO functionality``.
197* **[implements] rte_eth_dev_data**: ``lro``.
198* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
199* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
200
201
202.. _nic_features_tso:
203
204TSO
205---
206
207Supports TCP Segmentation Offloading.
208
209* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
210* **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
9f95a23c 211* **[uses] mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
11fdf7f2
TL
212* **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
213* **[implements] datapath**: ``TSO functionality``.
214* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
215
216
217.. _nic_features_promiscuous_mode:
218
219Promiscuous mode
220----------------
221
222Supports enabling/disabling promiscuous mode for a port.
223
224* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
225* **[implements] rte_eth_dev_data**: ``promiscuous``.
226* **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
227 ``rte_eth_promiscuous_get()``.
228
229
230.. _nic_features_allmulticast_mode:
231
232Allmulticast mode
233-----------------
234
235Supports enabling/disabling receiving multicast frames.
236
237* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
238* **[implements] rte_eth_dev_data**: ``all_multicast``.
239* **[related] API**: ``rte_eth_allmulticast_enable()``,
240 ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
241
242
243.. _nic_features_unicast_mac_filter:
244
245Unicast MAC filter
246------------------
247
248Supports adding MAC addresses to enable whitelist filtering to accept packets.
249
250* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
251* **[implements] rte_eth_dev_data**: ``mac_addrs``.
252* **[related] API**: ``rte_eth_dev_default_mac_addr_set()``,
253 ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
254 ``rte_eth_macaddr_get()``.
255
256
257.. _nic_features_multicast_mac_filter:
258
259Multicast MAC filter
260--------------------
261
262Supports setting multicast addresses to filter.
263
264* **[implements] eth_dev_ops**: ``set_mc_addr_list``.
265* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``.
266
267
268.. _nic_features_rss_hash:
269
270RSS hash
271--------
272
273Supports RSS hashing on RX.
274
275* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
276* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
277* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
278* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
279
280
281.. _nic_features_inner_rss:
282
283Inner RSS
284---------
285
286Supports RX RSS hashing on Inner headers.
287
9f95a23c 288* **[uses] rte_flow_action_rss**: ``level``.
11fdf7f2
TL
289* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
290
291
292.. _nic_features_rss_key_update:
293
294RSS key update
295--------------
296
297Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
298Receive Side Scaling (RSS) hash key.
299
300* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
301* **[provides] rte_eth_dev_info**: ``hash_key_size``.
302* **[related] API**: ``rte_eth_dev_rss_hash_update()``,
303 ``rte_eth_dev_rss_hash_conf_get()``.
304
305
306.. _nic_features_rss_reta_update:
307
308RSS reta update
309---------------
310
311Supports updating Redirection Table of the Receive Side Scaling (RSS).
312
313* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
314* **[provides] rte_eth_dev_info**: ``reta_size``.
315* **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
316
317
318.. _nic_features_vmdq:
319
320VMDq
321----
322
323Supports Virtual Machine Device Queues (VMDq).
324
325* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
326* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
327* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
328* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
329* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
330
331
332.. _nic_features_sriov:
333
334SR-IOV
335------
336
337Driver supports creating Virtual Functions.
338
339* **[implements] rte_eth_dev_data**: ``sriov``.
340
341.. _nic_features_dcb:
342
343DCB
344---
345
346Supports Data Center Bridging (DCB).
347
348* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
349* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
350* **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
351* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
352* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
353* **[implements] eth_dev_ops**: ``get_dcb_info``.
354* **[related] API**: ``rte_eth_dev_get_dcb_info()``.
355
356
357.. _nic_features_vlan_filter:
358
359VLAN filter
360-----------
361
362Supports filtering of a VLAN Tag identifier.
363
364* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
365* **[implements] eth_dev_ops**: ``vlan_filter_set``.
366* **[related] API**: ``rte_eth_dev_vlan_filter()``.
367
368
369.. _nic_features_ethertype_filter:
370
371Ethertype filter
372----------------
373
374Supports filtering on Ethernet type.
375
376* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
377* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
378
379.. _nic_features_ntuple_filter:
380
381N-tuple filter
382--------------
383
384Supports filtering on N-tuple values.
385
386* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
387* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
388
389
390.. _nic_features_syn_filter:
391
392SYN filter
393----------
394
395Supports TCP syn filtering.
396
397* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
398* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
399
400
401.. _nic_features_tunnel_filter:
402
403Tunnel filter
404-------------
405
406Supports tunnel filtering.
407
408* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
409* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
410
411
412.. _nic_features_flexible_filter:
413
414Flexible filter
415---------------
416
417Supports a flexible (non-tuple or Ethertype) filter.
418
419* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
420* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
421
422
423.. _nic_features_hash_filter:
424
425Hash filter
426-----------
427
428Supports Hash filtering.
429
430* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
431* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
432
433
434.. _nic_features_flow_director:
435
436Flow director
437-------------
438
439Supports Flow Director style filtering to queues.
440
441* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
442* **[provides] mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
443 ``PKT_RX_FDIR_FLX``.
444* **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
445
446
447.. _nic_features_flow_control:
448
449Flow control
450------------
451
452Supports configuring link flow control.
453
454* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
455 ``priority_flow_ctrl_set``.
456* **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
457 ``rte_eth_dev_priority_flow_ctrl_set()``.
458
459
460.. _nic_features_flow_api:
461
462Flow API
463--------
464
465Supports the DPDK Flow API for generic filtering.
466
467* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
468* **[implements] rte_flow_ops**: ``All``.
469
470
471.. _nic_features_rate_limitation:
472
473Rate limitation
474---------------
475
476Supports Tx rate limitation for a queue.
477
478* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
479* **[related] API**: ``rte_eth_set_queue_rate_limit()``.
480
481
482.. _nic_features_traffic_mirroring:
483
484Traffic mirroring
485-----------------
486
487Supports adding traffic mirroring rules.
488
489* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
490* **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
491
492
493.. _nic_features_inline_crypto_doc:
494
495Inline crypto
496-------------
497
9f95a23c 498Supports inline crypto processing (e.g. inline IPsec). See Security library and PMD documentation for more details.
11fdf7f2
TL
499
500* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
501* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
502* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
503 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
504* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
505 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
506* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
507 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
508
509
510.. _nic_features_crc_offload:
511
512CRC offload
513-----------
514
515Supports CRC stripping by hardware.
9f95a23c 516A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
11fdf7f2 517
9f95a23c 518* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
11fdf7f2
TL
519
520
521.. _nic_features_vlan_offload:
522
523VLAN offload
524------------
525
526Supports VLAN offload to hardware.
527
528* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
529* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
9f95a23c 530* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
11fdf7f2 531* **[implements] eth_dev_ops**: ``vlan_offload_set``.
9f95a23c 532* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
11fdf7f2
TL
533* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
534 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
535* **[related] API**: ``rte_eth_dev_set_vlan_offload()``,
536 ``rte_eth_dev_get_vlan_offload()``.
537
538
539.. _nic_features_qinq_offload:
540
541QinQ offload
542------------
543
544Supports QinQ (queue in queue) offload.
545
546* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
547* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
9f95a23c
TL
548* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
549* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
550 ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
551 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
11fdf7f2
TL
552* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
553 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
554
555
556.. _nic_features_l3_checksum_offload:
557
558L3 checksum offload
559-------------------
560
561Supports L3 checksum offload.
562
563* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
564* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
565* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
566 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
9f95a23c 567* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
11fdf7f2
TL
568* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
569 ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
570 ``PKT_RX_IP_CKSUM_NONE``.
571* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
572 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
573
574
575.. _nic_features_l4_checksum_offload:
576
577L4 checksum offload
578-------------------
579
580Supports L4 checksum offload.
581
9f95a23c 582* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
11fdf7f2
TL
583* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
584* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
585 ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
586 ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
9f95a23c 587* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
11fdf7f2
TL
588* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
589 ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
590 ``PKT_RX_L4_CKSUM_NONE``.
9f95a23c 591* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``,
11fdf7f2
TL
592 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
593
594.. _nic_features_hw_timestamp:
595
596Timestamp offload
597-----------------
598
599Supports Timestamp.
600
601* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
602* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
603* **[provides] mbuf**: ``mbuf.timestamp``.
604* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
605
606.. _nic_features_macsec_offload:
607
608MACsec offload
609--------------
610
611Supports MACsec.
612
613* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
614* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
615* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
616* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
617 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
618
619
620.. _nic_features_inner_l3_checksum:
621
622Inner L3 checksum
623-----------------
624
625Supports inner packet L3 checksum.
626
627* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
628* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
629* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
630 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
631 ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
632 ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
633* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
634* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
635* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
636 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
637
638
639.. _nic_features_inner_l4_checksum:
640
641Inner L4 checksum
642-----------------
643
644Supports inner packet L4 checksum.
645
9f95a23c
TL
646* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
647* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
648 ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
649* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
650* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
651 ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
652* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
653* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
654 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
655
11fdf7f2
TL
656
657.. _nic_features_packet_type_parsing:
658
659Packet type parsing
660-------------------
661
662Supports packet type parsing and returns a list of supported types.
663
664* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
665* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``.
666
667
668.. _nic_features_timesync:
669
670Timesync
671--------
672
673Supports IEEE1588/802.1AS timestamping.
674
675* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
676 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
677 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
678* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
679 ``rte_eth_timesync_read_rx_timestamp()``,
680 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
681 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
682
683
684.. _nic_features_rx_descriptor_status:
685
686Rx descriptor status
687--------------------
688
689Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
690used, status can be "Available", "Done" or "Unavailable". When
691``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
692not set".
693
694* **[implements] eth_dev_ops**: ``rx_descriptor_status``.
695* **[related] API**: ``rte_eth_rx_descriptor_status()``.
696* **[implements] eth_dev_ops**: ``rx_descriptor_done``.
697* **[related] API**: ``rte_eth_rx_descriptor_done()``.
698
699
700.. _nic_features_tx_descriptor_status:
701
702Tx descriptor status
703--------------------
704
705Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
706or "Unavailable."
707
708* **[implements] eth_dev_ops**: ``tx_descriptor_status``.
709* **[related] API**: ``rte_eth_tx_descriptor_status()``.
710
711
712.. _nic_features_basic_stats:
713
714Basic stats
715-----------
716
717Support basic statistics such as: ipackets, opackets, ibytes, obytes,
718imissed, ierrors, oerrors, rx_nombuf.
719
720And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
721
722These apply to all drivers.
723
724* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
725* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
726
727
728.. _nic_features_extended_stats:
729
730Extended stats
731--------------
732
733Supports Extended Statistics, changes from driver to driver.
734
735* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
736* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
737* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
738 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
739 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
740
741
742.. _nic_features_stats_per_queue:
743
744Stats per queue
745---------------
746
747Supports configuring per-queue stat counter mapping.
748
749* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
750* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
751 ``rte_eth_dev_set_tx_queue_stats_mapping()``.
752
753
754.. _nic_features_fw_version:
755
756FW version
757----------
758
759Supports getting device hardware firmware information.
760
761* **[implements] eth_dev_ops**: ``fw_version_get``.
762* **[related] API**: ``rte_eth_dev_fw_version_get()``.
763
764
765.. _nic_features_eeprom_dump:
766
767EEPROM dump
768-----------
769
770Supports getting/setting device eeprom data.
771
772* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
773* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
774 ``rte_eth_dev_set_eeprom()``.
775
776
777.. _nic_features_module_eeprom_dump:
778
779Module EEPROM dump
780------------------
781
782Supports getting information and data of plugin module eeprom.
783
784* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
785* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
786
787
788.. _nic_features_register_dump:
789
790Registers dump
791--------------
792
793Supports retrieving device registers and registering attributes (number of
794registers and register size).
795
796* **[implements] eth_dev_ops**: ``get_reg``.
797* **[related] API**: ``rte_eth_dev_get_reg_info()``.
798
799
800.. _nic_features_led:
801
802LED
803---
804
805Supports turning on/off a software controllable LED on a device.
806
807* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
808* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
809
810
811.. _nic_features_multiprocess_aware:
812
813Multiprocess aware
814------------------
815
816Driver can be used for primary-secondary process model.
817
818
819.. _nic_features_bsd_nic_uio:
820
821BSD nic_uio
822-----------
823
824BSD ``nic_uio`` module supported.
825
826
827.. _nic_features_linux_uio:
828
829Linux UIO
830---------
831
832Works with ``igb_uio`` kernel module.
833
834* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
835
836.. _nic_features_linux_vfio:
837
838Linux VFIO
839----------
840
841Works with ``vfio-pci`` kernel module.
842
843* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
844
845.. _nic_features_other_kdrv:
846
847Other kdrv
848----------
849
850Kernel module other than above ones supported.
851
852
853.. _nic_features_armv7:
854
855ARMv7
856-----
857
858Support armv7 architecture.
859
860Use ``defconfig_arm-armv7a-*-*``.
861
862
863.. _nic_features_armv8:
864
865ARMv8
866-----
867
868Support armv8a (64bit) architecture.
869
870Use ``defconfig_arm64-armv8a-*-*``
871
872
873.. _nic_features_power8:
874
875Power8
876------
877
878Support PowerPC architecture.
879
880Use ``defconfig_ppc_64-power8-*-*``
881
882.. _nic_features_x86-32:
883
884x86-32
885------
886
887Support 32bits x86 architecture.
888
889Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
890
891
892.. _nic_features_x86-64:
893
894x86-64
895------
896
897Support 64bits x86 architecture.
898
899Use ``defconfig_x86_64-native-*-*``.
900
901
902.. _nic_features_usage_doc:
903
904Usage doc
905---------
906
907Documentation describes usage.
908
909See ``doc/guides/nics/*.rst``
910
911
912.. _nic_features_design_doc:
913
914Design doc
915----------
916
917Documentation describes design.
918
919See ``doc/guides/nics/*.rst``.
920
921
922.. _nic_features_perf_doc:
923
924Perf doc
925--------
926
927Documentation describes performance values.
928
929See ``dpdk.org/doc/perf/*``.
930
931.. _nic_features_runtime_rx_queue_setup:
932
933Runtime Rx queue setup
934----------------------
935
936Supports Rx queue setup after device started.
937
938* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
939* **[related] API**: ``rte_eth_dev_info_get()``.
940
941.. _nic_features_runtime_tx_queue_setup:
942
943Runtime Tx queue setup
944----------------------
945
946Supports Tx queue setup after device started.
947
948* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
949* **[related] API**: ``rte_eth_dev_info_get()``.
950
951.. _nic_features_other:
952
953Other dev ops not represented by a Feature
954------------------------------------------
955
956* ``rxq_info_get``
957* ``txq_info_get``
958* ``vlan_tpid_set``
959* ``vlan_strip_queue_set``
960* ``vlan_pvid_set``
961* ``rx_queue_count``
962* ``l2_tunnel_offload_set``
963* ``uc_hash_table_set``
964* ``uc_all_hash_table_set``
965* ``udp_tunnel_port_add``
966* ``udp_tunnel_port_del``
967* ``l2_tunnel_eth_type_conf``
968* ``l2_tunnel_offload_set``
969* ``tx_pkt_prepare``