app/testpmd: fix flow rule copy functions

The corrupted code checks only RAW flow item type special case for
returning its size but doesn't deal with any other flow item type
and returns 0 for all the others.

This bug leaves the flow descriptor empty for non RAW types.

The fix takes the correct size to any regular types from appropriate
array.

The same issue, with a similar fix, is in flow action size method which
deals only with RSS special type.

Fixes: 938a184a1870 ("app/testpmd: implement basic support for flow API")
Cc: stable@dpdk.org

Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
This commit is contained in:
Matan Azrad 2017-07-24 16:47:32 +03:00 committed by Thomas Monjalon
parent 3070419e84
commit 79bf388493

View File

@ -954,8 +954,10 @@ static void
flow_item_spec_size(const struct rte_flow_item *item,
size_t *size, size_t *pad)
{
if (!item->spec)
if (!item->spec) {
*size = 0;
goto empty;
}
switch (item->type) {
union {
const struct rte_flow_item_raw *raw;
@ -967,10 +969,10 @@ flow_item_spec_size(const struct rte_flow_item *item,
spec.raw->length * sizeof(*spec.raw->pattern);
break;
default:
empty:
*size = 0;
*size = flow_item[item->type].size;
break;
}
empty:
*pad = RTE_ALIGN_CEIL(*size, sizeof(double)) - *size;
}
@ -1005,8 +1007,10 @@ static void
flow_action_conf_size(const struct rte_flow_action *action,
size_t *size, size_t *pad)
{
if (!action->conf)
if (!action->conf) {
*size = 0;
goto empty;
}
switch (action->type) {
union {
const struct rte_flow_action_rss *rss;
@ -1018,10 +1022,10 @@ flow_action_conf_size(const struct rte_flow_action *action,
conf.rss->num * sizeof(*conf.rss->queue);
break;
default:
empty:
*size = 0;
*size = flow_action[action->type].size;
break;
}
empty:
*pad = RTE_ALIGN_CEIL(*size, sizeof(double)) - *size;
}