+ case RTE_FLOW_ITEM_TYPE_ESP:
+ if (l3 == RTE_FLOW_ITEM_TYPE_IPV4 &&
+ l4 == RTE_FLOW_ITEM_TYPE_UDP)
+ flow_type = ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP;
+ else if (l3 == RTE_FLOW_ITEM_TYPE_IPV6 &&
+ l4 == RTE_FLOW_ITEM_TYPE_UDP)
+ flow_type = ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP;
+ else if (l3 == RTE_FLOW_ITEM_TYPE_IPV4 &&
+ l4 == RTE_FLOW_ITEM_TYPE_END)
+ flow_type = ICE_FLTR_PTYPE_NONF_IPV4_ESP;
+ else if (l3 == RTE_FLOW_ITEM_TYPE_IPV6 &&
+ l4 == RTE_FLOW_ITEM_TYPE_END)
+ flow_type = ICE_FLTR_PTYPE_NONF_IPV6_ESP;
+
+ esp_spec = item->spec;
+ esp_mask = item->mask;
+
+ if (!(esp_spec && esp_mask))
+ break;
+
+ if (esp_mask->hdr.spi == UINT32_MAX) {
+ if (l4 == RTE_FLOW_ITEM_TYPE_UDP)
+ *input_set |= ICE_INSET_NAT_T_ESP_SPI;
+ else
+ *input_set |= ICE_INSET_ESP_SPI;
+ }
+
+ if (l3 == RTE_FLOW_ITEM_TYPE_IPV4)
+ filter->input.ip.v4.sec_parm_idx =
+ esp_spec->hdr.spi;
+ else if (l3 == RTE_FLOW_ITEM_TYPE_IPV6)
+ filter->input.ip.v6.sec_parm_idx =
+ esp_spec->hdr.spi;
+ break;