path: root/doc/guides/nics/enic.rst
AgeCommit message (Collapse)Author
2019-10-23net/enic: add flow implementation based on Flow Manager APIHyong Youb Kim
Flow Manager API is the new firmware interface that exposes match action capabilities in 1400 series VIC adapters. It is intended for virtual switch offloads and enables more advanced features than the existing filter API. For example, it supports VXLAN encap and decap actions, and exposes TCAM and exact match tables. Add the new flow implementation using Flow Manager and use it when available. When Flow Manager is not available, the driver will continue to use the old filter-based flow implementation. Signed-off-by: John Daley <> Signed-off-by: Hyong Youb Kim <>
2019-10-23net/enic: enable GENEVE with options offloadHyong Youb Kim
Latest firmware supports Geneve with options offload. Current overlay offload only supports Geneve with no options. This new feature is disabled by default, as it is intrusive and cannot be used with flow API. Add a new devarg 'geneve-opt' so the user can explicitly enable it. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2019-10-07doc: remove deprecated flow director from enic guideJohn Daley
The legacy filter API "flow director" has been superseded by rte_flow since 2017. Remove comments in the enic guide regarding the deprecated feature. Signed-off-by: John Daley <> Reviewed-by: Hyong Youb Kim <>
2019-06-14net/enic: remove flow count action supportJohn Daley
The firmware in 1400 series VIC adapters which would support COUNT flow action was postponed and reworked. The capability will be re-added in a future release when the firmware is available. This reverts the following commits. commit 86df6c4e2fce ("net/enic: support flow counter action") commit 1b4ce87dc5e6 ("net/enic: fix counter action") Cc: Signed-off-by: John Daley <> Reviewed-by: Hyong Youb Kim <>
2019-05-03doc: fix spelling reported by aspell in guidesJohn McNamara
Fix spelling errors in the guide docs. Signed-off-by: John McNamara <> Acked-by: Rami Rosen <>
2019-03-12mk: use linux and freebsd in config namesBruce Richardson
Rather than using linuxapp and bsdapp everywhere, we can change things to use the, more readable, terms "linux" and "freebsd" in our build configs. Rather than renaming the configs we can just duplicate the existing ones with the new names using symlinks, and use the new names exclusively internally. ["make showconfigs" also only shows the new names to keep the list short] The result is that backward compatibility is kept fully but any new builds or development can be done using the newer names, i.e. both "make config T=x86_64-native-linuxapp-gcc" and "T=x86_64-native-linux-gcc" work. Signed-off-by: Bruce Richardson <>
2019-03-08net/enic: fix endianness in VLAN matchHyong Youb Kim
The VLAN fields in the NIC filter use little endian. The VLAN item is in big endian, so swap bytes. Fixes: 6ced137607d0 ("net/enic: flow API for NICs with advanced filters enabled") Cc: Signed-off-by: Hyong Youb Kim <>
2019-03-08net/enic: enable limited support for raw flow itemHyong Youb Kim
Some apps like VPP use a raw item to match UDP tunnel headers like VXLAN or GENEVE. The NIC hardware supports such usage via L5 match, which does pattern match on packet data immediately following the outer L4 header. Accept raw items for these limited use cases. Signed-off-by: Hyong Youb Kim <>
2019-03-08net/enic: enable limited passthru flow actionHyong Youb Kim
Some apps like VPP use PASSTHRU+MARK flow rules to offload packet matching to the NIC. Just like MARK+RSS used by OVS-DPDK and others, PASSTHRU+MARK is used to "mark and then receive normally". Recent VIC adapters support such flow rules, so enable PASSTHRU for this limited use case. Signed-off-by: Hyong Youb Kim <>
2019-03-08net/enic: enable limited RSS flow actionHyong Youb Kim
Some apps like OVS-DPDK use MARK+RSS flow rules in order to offload packet matching to the NIC. The RSS action in such flow rules simply indicates "receive packet normally", not trying to override the port wide RSS. The action is included in the flow rules simply to terminate them, as MARK is not a fate-deciding action. And, the RSS action has a most basic config: default hash, level, types, null key, and identity queue mapping. Recent VIC adapters can support these "mark and receive" flow rules. So, enable support for RSS action for this limited use case. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2019-03-08net/enic: allow flow mark ID 0Hyong Youb Kim
The driver currently accepts mark ID 0 but does not report it in matching packet's mbuf. For example, the following testpmd command succeeds. But, the mbuf of a matching IPv4 UDP packet does not have PKT_RX_FDIR_ID set. flow create 0 ingress pattern ... actions mark id 0 / queue index 0 / end The problem has to do with mapping mark IDs (32-bit) to NIC filter IDs. Filter ID is currently 16-bit, so values greater than 0xffff are rejected. The firmware reserves filter ID 0 for filters that do not mark (e.g. steer w/o mark). And, the driver reserves 0xffff for the flag action. This leaves 1...0xfffe for app use. It is possible to simply reject mark ID 0 as unsupported. But, 0 is commonly used (e.g. OVS-DPDK and VPP). So, when adding a filter, set filter ID = mark ID + 1 to support mark ID 0. The receive handler subtracts 1 from filter ID to get back the original mark ID. Fixes: dfbd6a9cb504 ("net/enic: extend flow director support for 1300 series") Cc: Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-11-26fix URLsThomas Monjalon
The DPDK website has a new URL scheme since June 2018. Cc: Signed-off-by: Thomas Monjalon <> Acked-by: John McNamara <>
2018-10-26doc: fix spelling in PMD guidesStephen Hemminger
Trivial pelling errors found by codespell. Signed-off-by: Stephen Hemminger <> Acked-by: Marko Kovacevic <>
2018-10-11net/enic: add AVX2 based vectorized Rx handlerHyong Youb Kim
Add the vectorized version of the no-scatter Rx handler. It aims to process 8 descriptors per loop using AVX2 SIMD instructions. This handler is in its own file enic_rxtx_vec_avx2.c, and makefile and are modified to compile it when the compiler supports AVX2. Under ideal conditions, the vectorized handler reduces cycles/packet by more than 30%, when compared against the no-scatter Rx handler. Most implementation ideas come from i40e's AVX2 based handler, so credit goes to its authors. At this point, the new handler is meant for field trials, and is not selected by default. So add a new devarg enable-avx2-rx to allow the user to request the use of the new handler. When enable-avx2-rx=1, the driver will consider using the new handler. Also update the guide doc and introduce the vectorized handler. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-10-11net/enic: support flow counter actionJohn Daley
Support counter action for 1400 series adapters. The adapter API for allocating and freeing counters is independent of the adapter match/action API. If the filter action is requested, a counter is first allocated and then assigned to the filter, and when the filter is deleted, the counter must also be deleted. Counters are DMAd to pre-allocated consistent memory periodically, controlled by the define VNIC_FLOW_COUNTER_UPDATE_MSECS. The default is 100 milliseconds. Signed-off-by: John Daley <> Reviewed-by: Hyong Youb Kim <>
2018-07-23doc: update enic guide and featuresHyong Youb Kim
Make a few updates in preparation for 18.08. - Use SPDX - Add 1400 series VIC adapters to supported models - Describe the VXLAN port number - Expand the description for ig-vlan-rewrite - Add inner RSS and checksum to the features Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-07-03net/enic: add devarg to specify ingress VLAN rewrite modeHyong Youb Kim
Add a new devarg "ig-vlan-rewrite" to allow the user to set non-default rewrite mode. The UCS VIC may add/remove/modify the VLAN header of an ingress packet depending on the ingress VLAN rewrite mode. By default, the driver sets the pass-through mode, which tells the NIC "do not touch VLAN header and preserve it as is". This mode is usually sufficient, but can complicate deployments for certain environments. For example, OVS-DPDK in UCS blade environments may want to use "untag default VLAN mode", which removes the VLAN header from an ingress packet if it matches vNIC's default VLAN. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-05-14doc: remove mention of unreleased nics from enic guideJohn Daley
Company policy discourages the mention of unreleased hardware in guides and release notes. Fixes: 08df773 ("doc: update enic guide and features") Signed-off-by: Hyong Youb Kim <> Signed-off-by: John Daley <>
2018-05-14doc: update the enic guide and featuresHyong Youb Kim
Add more descriptions regarding SR-IOV and RSS settings. Remove 'Multicast MAC filter' and add 'Allmulticast mode' to the features. Cc: Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <> Reviewed-by: Aaron Conole <>
2018-04-27net/enic: enable overlay offload for VXLAN and GENEVEHyong Youb Kim
Recent NIC models support overlay offload. The overlay offload feature enables the following on the NIC. - Rx/Tx checksum offloads for both inner and outer packets. - Rx inner packet type classification. - TSO. - Inner RSS. TX descriptors do not require any changes, except the header length for TSO. The NIC parses outer/inner packets and performs offloads on them as necessary. The header length for tunneled TSO includes both inner and outer headers. The NIC actually parses and performs the above for NVGRE as well. DPDK currently has no offload flags for NVGRE, and the hardware has no controls to individually enable tunnel types either. So do nothing for now. The driver enables overlay offload by default. Add a devargs 'disable-overlay=<0|1>' to allow the app to disable it. Also update the enic guide doc. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-04-14doc: update enic guide and featuresHyong Youb Kim
Documentation updates including for 1400 series VIC adapters. Remove VLAN filter from the features file as the driver does not support that API. Hardware does support VLAN filtering, but it is not controlled through the driver. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-04-14net/enic: support drop flow actionHyong Youb Kim
1330 and 1400 series adapters support the drop action. Check for its availability and set the necessary flag when creating NIC filters. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-04-14net/enic: support UDP RSS on 1400 series adaptersJohn Daley
Recent models support IPv4/IPv6 UDP RSS. There is no control bit to enable UDP RSS alone. Instead, the NIC enables/disables TCP and UDP RSS together. Signed-off-by: John Daley <> Reviewed-by: Hyong Youb Kim <>
2018-03-30doc: describe Rx bytes counter behavior for enicHyong Youb Kim
Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-03-30net/enic: support Rx queue interruptsHyong Youb Kim
Enable rx queue interrupts if the app requests them, and vNIC has enough interrupt resources. Use interrupt vector 0 for link status and errors. Use vector 1 for rx queue 0, vector 2 for rx queue 1, and so on. So, with n rx queues, vNIC needs to have at n + 1 interrupts. For VIC, enabling and disabling rx queue interrupts are simply mask/unmask operations. VIC's credit based interrupt moderation is not used, as the app wants to explicitly control when to enable/disable interrupts. This version requires MSI-X (vfio-pci). Sharing one interrupt for link status and rx queues is possible, but is rather complex and has no user demands. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-03-30net/enic: heed the requested max Rx packet sizeHyong Youb Kim
Currently, enic completely ignores the requested max Rx packet size (rxmode.max_rx_pkt_len). The desired behavior is that the NIC hardware drops packets larger than the requested size, even though they are still smaller than MTU. Cisco VIC does not have such a feature. But, we can accomplish a similar (not same) effect by reducing the size of posted receive buffers. Packets larger than the posted size get truncated, and the receive handler drops them. This is also how the kernel enic driver enforces the Rx side MTU. This workaround works only when scatter mode is *not* used. When scatter is used, there is currently no way to support rxmode.max_rx_pkt_len, as the NIC always receives packets up to MTU. For posterity, add a copious amount of comments regarding the hardware's drop/receive behavior with respect to max/current MTU. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-01-16net/enic: use dynamic log typesHyong Youb Kim
"pmd.enic.init" replaces CONFIG_RTE_LIBRTE_ENIC_DEBUG "pmd.enic.flow" replaces CONFIG_RTE_LIBRTE_ENIC_DEBUG_FLOW Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2018-01-16doc: update enic guideHyong Youb Kim
Fix typos, inconsistencies, duplicate text, and so on. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
2017-06-12net/enic: flow API documentationJohn Daley
Update enic NIC guide, release notes and add flow API to the supported features list. Signed-off-by: John Daley <> Reviewed-by: Nelson Escobar <>
2017-04-28doc: fix enic guide syntaxJohn Daley
Fixes: 211f9a9ce2f0 ("enic: add guide") Cc: Signed-off-by: John Daley <> Acked-by: John McNamara <>
2017-04-28doc: add SR-IOV configurations to enic guideJohn Daley
Document SR-IOV passthrough setup and limitations for enic PMD. Signed-off-by: John Daley <> Acked-by: John McNamara <>
2016-10-13net/enic: extend flow director support for 1300 seriesJohn Daley
1300 series Cisco adapter firmware version 2.0(13) for UCS C-series servers and 3.1(2) for blade servers supports more filtering capabilities. The feature can be enabled via Cisco CIMC or USCM with the 'advanced filters' radio button. When enabled, the these additional flow director modes are available: RTE_ETH_FLOW_NONFRAG_IPV4_OTHER RTE_ETH_FLOW_NONFRAG_IPV4_SCTP RTE_ETH_FLOW_NONFRAG_IPV6_UDP RTE_ETH_FLOW_NONFRAG_IPV6_TCP RTE_ETH_FLOW_NONFRAG_IPV6_SCTP RTE_ETH_FLOW_NONFRAG_IPV6_OTHER Changes: - Detect and set an 'advanced filters' flag dependent on the adapter capability. - Implement RTE_ETH_FILTER_INFO filter op to return the flow types available dependent on whether advanced filters are enabled. - Use a function pointer to select how filters are added to the adapter: copy_fltr_v1() for older firmware/adapters or copy_fltr_v2() for adapters which support advanced filters. - Apply fdir global masks to filters when in advanced filter mode. - Update documentation. Signed-off-by: John Daley <> Reviewed-by: Nelson Escobar <>
2016-10-13net/enic: document how to configure vNIC parametersNelson Escobar
Update the enic guide to better explain how to setup vNIC parameters on the Cisco VIC since the introduction of rx scatter, and print an error message for the case of having 1 RQ configured in the vNIC, referring to the documentation for more information. Signed-off-by: Nelson Escobar <> Acked-by: John McNamara <>
2016-09-30net/enic: enable link check interruptNelson Escobar
Signed-off-by: Nelson Escobar <> Reviewed-by: John Daley <>
2016-07-22unify tools namingThomas Monjalon
The following tools may be installed system-wide. It may be cleaner and more convenient to find them with the same dpdk- prefix (especially for autocompletion). Moreover, the script deserves a new name because it is not restricted to NICs and can be used for e.g. crypto. These files are renamed: pmdinfogen -> dpdk-pmdinfogen -> dpdk_pdump -> dpdk-pdump dpdk_proc_info -> dpdk-procinfo -> -> The tools pmdinfogen, and dpdk_pdump are new in 16.07. The scripts and may have been used with previous releases by end users. That's why a symbolic link still provide the old name in the installed tools directory. Signed-off-by: Thomas Monjalon <> Acked-by: Yuanhan Liu <>
2016-07-22doc: update release notes and guide for enicJohn Daley
Signed-off-by: John Daley <>
2016-03-25enic: update maintainersJohn Daley
Change maintainers for ENIC PMD and fix pointer to enic documentation in MAINTAINERS. Signed-off-by: John Daley <>
2015-12-14enic: add guideJohn Daley
Signed-off-by: John Daley <>