From: Dekel Peled Date: Sun, 3 May 2020 07:17:22 +0000 (+0300) Subject: doc: refine ethernet and VLAN flow rule items X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=6b3042882060af2e5acbcf144baa58aa0af2cc14;p=dpdk.git doc: refine ethernet and VLAN flow rule items Specified pattern may be translated in different manner. For example the pattern "eth / ipv4" can be translated to match untagged packets only, since the pattern doesn't specify a VLAN item. It can also be translated to match both tagged and untagged packets, for the same reason. This patch updates the rte_flow documentation to clearly specify the required pattern to use. For example: To match tagged ipv4 packets, the pattern "eth / vlan / ipv4 / end" should be used. To match untagged ipv4 packets, the pattern "eth / ipv4 / end" should be used. To match all IPV4 packets, both tagged and untagged, need to apply two rules with the patterns above. To match both tagged and untagged packets of any type, the pattern "eth / end" should be used. Signed-off-by: Dekel Peled Acked-by: Andrew Rybchenko Acked-by: Ori Kam --- diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 15c7b804f3..d5dd18ce99 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -905,6 +905,11 @@ so-called layer 2.5 pattern items such as ``RTE_FLOW_ITEM_TYPE_VLAN``. In the latter case, ``type`` refers to that of the outer header, with the inner EtherType/TPID provided by the subsequent pattern item. This is the same order as on the wire. +If the ``type`` field contains a TPID value, then only tagged packets with the +specified TPID will match the pattern. +Otherwise, only untagged packets will match the pattern. +If the ``ETH`` item is the only item in the pattern, and the ``type`` field is +not specified, then both tagged and untagged packets will match the pattern. - ``dst``: destination MAC. - ``src``: source MAC. @@ -919,6 +924,8 @@ Matches an 802.1Q/ad VLAN tag. The corresponding standard outer EtherType (TPID) values are ``RTE_ETHER_TYPE_VLAN`` or ``RTE_ETHER_TYPE_QINQ``. It can be overridden by the preceding pattern item. +If a ``VLAN`` item is present in the pattern, then only tagged packets will +match the pattern. - ``tci``: tag control information. - ``inner_type``: inner EtherType or TPID. diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index 1fb94f35e8..b0e4199192 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -710,6 +710,12 @@ static const struct rte_flow_item_raw rte_flow_item_raw_mask = { * the latter case, @p type refers to that of the outer header, with the * inner EtherType/TPID provided by the subsequent pattern item. This is the * same order as on the wire. + * If the @p type field contains a TPID value, then only tagged packets with the + * specified TPID will match the pattern. + * Otherwise, only untagged packets will match the pattern. + * If the @p ETH item is the only item in the pattern, and the @p type field + * is not specified, then both tagged and untagged packets will match the + * pattern. */ struct rte_flow_item_eth { struct rte_ether_addr dst; /**< Destination MAC. */ @@ -734,6 +740,8 @@ static const struct rte_flow_item_eth rte_flow_item_eth_mask = { * The corresponding standard outer EtherType (TPID) values are * RTE_ETHER_TYPE_VLAN or RTE_ETHER_TYPE_QINQ. It can be overridden by * the preceding pattern item. + * If a @p VLAN item is present in the pattern, then only tagged packets will + * match the pattern. */ struct rte_flow_item_vlan { rte_be16_t tci; /**< Tag control information. */