[PATCH v3 02/19] net/intel/common: add flow engines infrastructure

Burakov, Anatoly anatoly.burakov at intel.com
Fri Oct 2 15:13:38 CEST 2026


On 9/19/2026 6:09 PM, Medvedkin, Vladimir wrote:
> 
> On 9/16/2026 1:18 PM, Anatoly Burakov wrote:
>> Current implementation of flow engines in various drivers have a few 
>> issues
>> that need to be corrected.
>>
>> For one, some of the
> seems like a missed word?
>> are fundamentally incompatible with secondary
>> processes, because the flow engine registration and creation will
>> allocate structures in shared memory but use process-local pointers to
>> point to flow engines and pattern tables.
>>
>> For another, a lot of them are needlessly complicated and rely on a
>> separation between patterns and parsing that is hard to reason about and
>> maintain: they do not define memory ownership model, they do not 
>> define the
>> way in which we approach parameter and pattern parsing, and they
>> occasionally do weird things like passing around pointers-to-void- 
>> pointers
>> or even using pointers as integer values.
>>
>> Another common problem is extremely convoluted internal tracking, flow
>> installation, flow replay, and cleanup code. This infrastructure is 
>> usually
>> done in an ad-hoc manner that has a lot of boilerplate.
>>
>> These issues can be corrected, but because of how much code there is 
>> to the
>> current infrastructure and how tightly coupled it is, it would be 
>> easier to
>> just build new one from scratch, and gradually migrate all engines to use
>> it. This patch is intended as a first step towards that goal, and defines
>> both common data types to be used by all rte_flow parsers, as well as the
>> interaction model that is to be followed by all drivers.
>>
>> We define a set of structures that will represent:
>>
>> - Defined rte_flow parsing interaction model and code flow (ops struct)
>> - Defined memory allocation and ownership model for all engines
>> - Scratch space format for all engines (variably allocated typed struct)
>> - Flow rule format for all engines (variably allocated typed struct)
>> - Engine definitions that are compatible with secondary process model
>> - Implementations of common rte_flow operations
>> - Various supporting infrastructure for parser customization, e.g. hooks
>> - Support for using custom allocation (e.g. for mempool-based alloc)
>> - Support for replaying all flows to restore HW state
>> - Support for removing all flows without modifying HW state
>>
>> The design intent is heavily documented right inside the header and is to
>> be considered authoritative design document for how to build rte_flow
>> parsers for Intel Ethernet drivers going forward.
>>
>> Signed-off-by: Anatoly Burakov<anatoly.burakov at intel.com>
>> ---

<snip>

>> +    /* allocate context */
>> +    ctx = (struct ci_flow_engine_ctx *)calloc(1,
>> +            RTE_MAX(engine->ctx_size, sizeof(struct 
>> ci_flow_engine_ctx)));
>> +    if (ctx == NULL) {
>> +        return rte_flow_error_set(error, ENOMEM,
>> +                RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>> +                "Failed to allocate memory for rule engine context");
>> +    }
>> +    ctx->dev_data = engine_conf->dev_data;
>> +    ctx->attr = attr;
>> +    ctx->pattern = pattern;
>> +    ctx->actions = actions;
>> +    flow->dev_data = engine_conf->dev_data;

> it was set in ci_flow_alloc()

flow_alloc might not be called (e.g. for validate).

-- 
Thanks,
Anatoly


More information about the dev mailing list