[dpdk-dev] [PATCH v10 06/11] net/failsafe: support flow API
Ferruh Yigit
ferruh.yigit at intel.com
Mon Jul 17 18:34:53 CEST 2017
On 7/17/2017 5:19 PM, Gaëtan Rivet wrote:
> On Mon, Jul 17, 2017 at 05:03:46PM +0100, Ferruh Yigit wrote:
>> On 7/15/2017 6:57 PM, Gaetan Rivet wrote:
>>> Signed-off-by: Gaetan Rivet <gaetan.rivet at 6wind.com>
>>> Acked-by: Olga Shern <olgas at mellanox.com>
>>
>> <...>
>>
>>> +
>>> + flow = fs_flow_allocate(attr, patterns, actions);
>>> + FOREACH_SUBDEV_ST(sdev, i, dev, DEV_ACTIVE) {
>>> + flow->flows[i] = rte_flow_create(PORT_ID(sdev),
>>> + attr, patterns, actions, error);
>>
>> Should SUB_ID(sdev) used here? And in related functions.
>> flow->flows[SUB_ID(sdev)] = ...
>>
>
> The SUB_ID(sdev) is the index in the sub_device array allocated in
> private data for the fail-safe. It is also used for the sub_rte_flow in
> the rte_flow (which sports an array of rte_flow pointers for each
> sub_device).
I got this part, let me ask another way, is it always guarantied, even
after some hotplug, "i" in FOREACH_SUBDEV_ST(sdev, i, dev, DEV_ACTIVE)
will be same with SUB_ID(sdev) ?
>
> PORT_ID(sdev) is the index in the rte_eth_devices array, meaning that
> the rte_flow_create function is actually called using the public API on
> the port.
>
> This allows to trigger the additional operations usually done within the
> ether API (storing the configuration in the eth_dev_data structure, some
> side management), and following eventual changes automatically from the
> fail-safe level.
>
>>> + if (flow->flows[i] == NULL) {
>>> + ERROR("Failed to create flow on sub_device %d",
>>> + i);
>>> + goto err;
>>> + }
>> <...>
>>
>
More information about the dev
mailing list