net/sfc: support decrement IP TTL actions in transfer flows
authorIvan Malov <ivan.malov@oktetlabs.ru>
Fri, 5 Nov 2021 21:54:09 +0000 (00:54 +0300)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 8 Nov 2021 15:25:51 +0000 (16:25 +0100)
These actions map to MAE action DECR_IP_TTL. It affects
the outermost header in the current processing state of
the packet, which might have been decapsulated by prior
action DECAP. It also updates IPv4 checksum accordingly.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
doc/guides/nics/features/sfc.ini
doc/guides/nics/sfc_efx.rst
drivers/net/sfc/sfc_mae.c

index 0d785f4..1ce2dc4 100644 (file)
@@ -62,10 +62,12 @@ vxlan                = Y
 
 [rte_flow actions]
 count                = Y
+dec_ttl              = Y
 drop                 = Y
 flag                 = Y
 jump                 = P
 mark                 = Y
+of_dec_nw_ttl        = Y
 of_pop_vlan          = Y
 of_push_vlan         = Y
 of_set_vlan_pcp      = Y
index 960e25b..00b95a4 100644 (file)
@@ -234,6 +234,10 @@ Supported actions (***transfer*** rules):
 
 - OF_VLAN_SET_PCP
 
+- OF_DEC_NW_TTL
+
+- DEC_TTL
+
 - VXLAN_DECAP
 
 - VXLAN_ENCAP
index 411f2ac..93cce60 100644 (file)
@@ -3587,6 +3587,14 @@ sfc_mae_rule_parse_action(struct sfc_adapter *sa,
                                       bundle->actions_mask);
                rc = efx_mae_action_set_populate_vlan_pop(spec);
                break;
+       case RTE_FLOW_ACTION_TYPE_OF_DEC_NW_TTL:
+       case RTE_FLOW_ACTION_TYPE_DEC_TTL:
+               SFC_BUILD_SET_OVERFLOW(RTE_FLOW_ACTION_TYPE_OF_DEC_NW_TTL,
+                                      bundle->actions_mask);
+               SFC_BUILD_SET_OVERFLOW(RTE_FLOW_ACTION_TYPE_DEC_TTL,
+                                      bundle->actions_mask);
+               rc = efx_mae_action_set_populate_decr_ip_ttl(spec);
+               break;
        case RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN:
                SFC_BUILD_SET_OVERFLOW(RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN,
                                       bundle->actions_mask);