numam-dpdk/app/test-flow-perf/flow_gen.c
Wisam Jaddo bf3688f1e8 app/flow-perf: add insertion rate calculation
Add insertion rate calculation feature into flow
performance application.

The application now provide the ability to test
insertion rate of specific rte_flow rule, by
stressing it to the NIC, and calculate the
insertion rate.

The application offers some options in the command
line, to configure which rule to apply.

After that the application will start producing
rules with same pattern but increasing the outer IP
source address by 1 each time, thus it will give
different flow each time, and all other items will
have open masks.

The current design have single core insertion rate.

Signed-off-by: Wisam Jaddo <wisamm@mellanox.com>
Acked-by: Xiaoyu Min <jackmin@mellanox.com>
2020-06-29 15:47:36 +02:00

62 lines
1.5 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2020 Mellanox Technologies, Ltd
*
* The file contains the implementations of the method to
* fill items, actions & attributes in their corresponding
* arrays, and then generate rte_flow rule.
*
* After the generation. The rule goes to validation then
* creation state and then return the results.
*/
#include <stdint.h>
#include "flow_gen.h"
#include "items_gen.h"
#include "actions_gen.h"
#include "config.h"
static void
fill_attributes(struct rte_flow_attr *attr,
uint64_t flow_attrs, uint16_t group)
{
if (flow_attrs & INGRESS)
attr->ingress = 1;
if (flow_attrs & EGRESS)
attr->egress = 1;
if (flow_attrs & TRANSFER)
attr->transfer = 1;
attr->group = group;
}
struct rte_flow *
generate_flow(uint16_t port_id,
uint16_t group,
uint64_t flow_attrs,
uint64_t flow_items,
uint64_t flow_actions,
uint16_t next_table,
uint32_t outer_ip_src,
uint16_t hairpinq,
struct rte_flow_error *error)
{
struct rte_flow_attr attr;
struct rte_flow_item items[MAX_ITEMS_NUM];
struct rte_flow_action actions[MAX_ACTIONS_NUM];
struct rte_flow *flow = NULL;
memset(items, 0, sizeof(items));
memset(actions, 0, sizeof(actions));
memset(&attr, 0, sizeof(struct rte_flow_attr));
fill_attributes(&attr, flow_attrs, group);
fill_actions(actions, flow_actions,
outer_ip_src, next_table, hairpinq);
fill_items(items, flow_items, outer_ip_src);
flow = rte_flow_create(port_id, &attr, items, actions, error);
return flow;
}