.. SPDX-License-Identifier: BSD-3-Clause Copyright(c) 2018 Intel Corporation. Soft NIC Poll Mode Driver ========================= The Soft NIC allows building custom NIC pipelines in software. The Soft NIC pipeline is DIY and reconfigurable through ``firmware`` (DPDK Packet Framework script). The Soft NIC leverages the DPDK Packet Framework libraries (librte_port, librte_table and librte_pipeline) to make it modular, flexible and extensible with new functionality. Please refer to DPDK Programmer's Guide, Chapter ``Packet Framework`` and DPDK Sample Application User Guide, Chapter ``IP Pipeline Application`` for more details. The Soft NIC is configured through the standard DPDK ethdev API (ethdev, flow, QoS, security). The internal framework is not externally visible. Key benefits: - Can be used to augment missing features to HW NICs. - Allows consumption of advanced DPDK features without application redesign. - Allows out-of-the-box performance boost of DPDK consumers applications simply by instantiating this type of Ethernet device. Flow ---- * ``Device creation``: Each Soft NIC instance is a virtual device. * ``Device start``: The Soft NIC firmware script is executed every time the device is started. The firmware script typically creates several internal objects, such as: memory pools, SW queues, traffic manager, action profiles, pipelines, etc. * ``Device stop``: All the internal objects that were previously created by the firmware script during device start are now destroyed. * ``Device run``: Each Soft NIC device needs one or several CPU cores to run. The firmware script maps each internal pipeline to a CPU core. Multiple pipelines can be mapped to the same CPU core. In order for a given pipeline assigned to CPU core X to run, the application needs to periodically call on CPU core X the `rte_pmd_softnic_run()` function for the current Soft NIC device. * ``Application run``: The application reads packets from the Soft NIC device RX queues and writes packets to the Soft NIC device TX queues. Supported Operating Systems --------------------------- Any Linux distribution fulfilling the conditions described in ``System Requirements`` section of :ref:`the DPDK documentation ` or refer to *DPDK Release Notes*. Build options ------------- The default PMD configuration available in the common_linux configuration file: CONFIG_RTE_LIBRTE_PMD_SOFTNIC=y Once the DPDK is built, all the DPDK applications include support for the Soft NIC PMD. Soft NIC PMD arguments ---------------------- The user can specify below arguments in EAL ``--vdev`` options to create the Soft NIC device instance: --vdev "net_softnic0,firmware=firmware.cli,conn_port=8086" #. ``firmware``: path to the firmware script used for Soft NIC configuration. The example "firmware" script is provided at `drivers/net/softnic/`. (Optional: No, Default = NA) #. ``conn_port``: tcp connection port (non-zero value) used by remote client (for examples- telnet, netcat, etc.) to connect and configure Soft NIC device in run-time. (Optional: yes, Default value: 0, no connection with external client) #. ``cpu_id``: numa node id. (Optional: yes, Default value: 0) #. ``tm_n_queues``: number of traffic manager's scheduler queues. The traffic manager is based on DPDK *librte_sched* library. (Optional: yes, Default value: 65,536 queues) #. ``tm_qsize0``: size of scheduler queue 0 per traffic class of the pipes/subscribers. (Optional: yes, Default: 64) #. ``tm_qsize1``: size of scheduler queue 1 per traffic class of the pipes/subscribers. (Optional: yes, Default: 64) #. ``tm_qsize2``: size of scheduler queue 2 per traffic class of the pipes/subscribers. (Optional: yes, Default: 64) #. ``tm_qsize3``: size of scheduler queue 3 per traffic class of the pipes/subscribers. (Optional: yes, Default: 64) Soft NIC testing ---------------- * Run testpmd application in Soft NIC forwarding mode with loopback feature enabled on Soft NIC port: .. code-block:: console ./testpmd -c 0x3 --vdev 'net_softnic0,firmware=