15. ABI and API Deprecation
See the guidelines document for details of the ABI policy. API and ABI deprecation notices are to be posted here.
15.1. Deprecation Notices
eal: both declaring and identifying devices will be streamlined in v18.05. New functions will appear to query a specific port from buses, classes of device and device drivers. Device declaration will be made coherent with the new scheme of device identification. As such,
rte_devargsdevice representation will change.- removal of
nameandargsfields. - The enum
rte_devtypewas used to identify a bus and will disappear. - The
rte_devargs_listwill be made private. - Functions previously deprecated will change or disappear:
rte_eal_devargs_addrte_eal_devargs_type_countrte_eal_parse_devargs_str, replaced byrte_eal_devargs_parserte_eal_devargs_parsewill change its format and use.- all
rte_devargsrelated functions will be renamed, changing therte_eal_devargs_prefix torte_devargs_.
- removal of
pci: Several exposed functions are misnamed. The following functions are deprecated starting from v17.11 and are replaced:
eal_parse_pci_BDFreplaced byrte_pci_addr_parseeal_parse_pci_DomBDFreplaced byrte_pci_addr_parserte_eal_compare_pci_addrreplaced byrte_pci_addr_cmp
eal: The semantics of the return value for the
rte_lcore_has_rolefunction are planned to change in v18.05. The function currently returns 0 and <0 for success and failure, respectively. This will change to 1 and 0 for true and false, respectively, to make use of the function more intuitive.eal: new
numa_node_countmember will be added torte_configstructure in v18.05.eal: due to internal data layout reorganization, there will be changes to several structures and functions as a result of coming changes to support memory hotplug in v18.05.
rte_eal_get_physmem_layoutwill be deprecated and removed in subsequent releases.rte_mem_configcontents will change due to switch to memseg lists.rte_memzonemembermemseg_idwill no longer serve any useful purpose and will be removed.eal: a new set of mbuf mempool ops name APIs for user, platform and best mempool names have been defined in
rte_mbufin v18.02. The uses ofrte_eal_mbuf_default_mempool_opsshall be replaced byrte_mbuf_best_mempool_ops. The following function is now redundant and it is target to be deprecated in 18.05:rte_eal_mbuf_default_mempool_ops
mempool: several API and ABI changes are planned in v18.05. The following functions, introduced for Xen, which is not supported anymore since v17.11, are hard to use, not used anywhere else in DPDK. Therefore they will be deprecated in v18.05 and removed in v18.08:
rte_mempool_xmem_createrte_mempool_xmem_sizerte_mempool_xmem_usage
The following changes are planned:
- removal of
get_capabilitiesmempool ops and related flags. - substitute
register_memory_areawithpopulateops. - addition of new ops to customize required memory chunk calculation, customize objects population and allocate contiguous block of objects if underlying driver supports it.
mbuf: The control mbuf API will be removed in v18.05. The impacted functions and macros are:
rte_ctrlmbuf_init()rte_ctrlmbuf_alloc()rte_ctrlmbuf_free()rte_ctrlmbuf_data()rte_ctrlmbuf_len()rte_is_ctrlmbuf()CTRL_MBUF_FLAG
The packet mbuf API should be used as a replacement.
mbuf: The opaque
mbuf->hash.schedfield will be updated to support generic definition in line with the ethdev TM and MTR APIs. Currently, this field is defined in librte_sched in a non-generic way. The new generic format will contain: queue ID, traffic class, color. Field size will not change.ethdev: a new Tx and Rx offload API was introduced on 17.11. In the new API, offloads are divided into per-port and per-queue offloads. Offloads are disabled by default and enabled per application request.
The old ethdev - drivers offload interface will be deprecated on 18.05. This includes: - removal of the conversion in ethdev from new offloading API to old API for drivers.
In later releases the old offloading API will be deprecated, which will include: - removal of
ETH_TXQ_FLAGS_NO*flags. - removal oftxq_flagsfield fromrte_eth_txconfstruct. - removal of the offloads bit-field fromrte_eth_rxmodestruct.ethdev: the legacy filter API, including
rte_eth_dev_filter_supported(),rte_eth_dev_filter_ctrl()as well as filter types MACVLAN, ETHERTYPE, FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded by the generic flow API (rte_flow) in PMDs that implement the latter. Target release for removal of the legacy API will be defined once most PMDs have switched to rte_flow.ethdev: A new rss level field planned in 18.05. The new API add rss_level field to
rte_eth_rss_confto enable a choice of RSS hash calculation on outer or inner header of tunneled packet.ethdev: Currently, if the rte_eth_rx_burst() function returns a value less than nb_pkts, the application will assume that no more packets are present. Some of the hw queue based hardware can only support smaller burst for RX and TX and thus break the expectation of the rx_burst API. Similar is the case for TX burst as well as ring sizes.
rte_eth_dev_infowill be added with following new parameters so as to support semantics for drivers to define a preferred size for Rx/Tx burst and rings.- Member
struct preferred_sizewould be added to enclose all preferred size to be fetched from driver/implementation. - Members
uint16_t rx_burst,uint16_t tx_burst,uint16_t rx_ring, anduint16_t tx_ringwould be added tostruct preferred_size.
- Member
ethdev: A work is being planned for 18.05 to expose VF port representors as a mean to perform control and data path operation on the different VFs. As VF representor is an ethdev port, new fields are needed in order to map between the VF representor and the VF or the parent PF. Those new fields are to be included in
rte_eth_dev_infostruct.ethdev: The prototype and the behavior of
dev_ops->eth_mac_addr_set()will change in v18.05. A return code will be added to notify the caller if an error occurred in the PMD. Inrte_eth_dev_default_mac_addr_set(), the new default MAC address will be copied indev->data->mac_addrs[0]only if the operation is successful. This modification will only impact the PMDs, not the applications.ethdev: functions add rx/tx callback will return named opaque type
rte_eth_add_rx_callback(),rte_eth_add_first_rx_callback()andrte_eth_add_tx_callback()functions currently return callback object asvoid \*but APIs to delete callbacks getstruct rte_eth_rxtx_callback \*as parameter. For consistency functions adding callback will returnstruct rte_eth_rxtx_callback \*instead ofvoid \*.ethdev: The size of variables
flow_types_maskinrte_eth_fdir_info structure,sym_hash_enable_maskandvalid_bit_maskinrte_eth_hash_global_confstructure will be increased from 32 to 64 bits to fulfill hardware requirements. This change will break existing ABI as size of the structures will increase.ethdev:
rte_eth_dev_get_sec_ctx()fix port id storagerte_eth_dev_get_sec_ctx()is usinguint8_tforport_id, which should beuint16_t.i40e: The default flexible payload configuration which extracts the first 16 bytes of the payload for RSS will be deprecated starting from 18.02. If required the previous behavior can be configured using existing flow director APIs. There is no ABI/API break. This change will just remove a global configuration setting and require explicit configuration.
librte_meter: The API will change to accommodate configuration profiles. Most of the API functions will have an additional opaque parameter.
ring: The alignment constraints on the ring structure will be relaxed to one cache line instead of two, and an empty cache line padding will be added between the producer and consumer structures. The size of the structure and the offset of the fields will remain the same on platforms with 64B cache line, but will change on other platforms.