#include <stdint.h>
#include <sys/queue.h>
#include <rte_compat.h>
#include "rte_swx_table.h"
Go to the source code of this file.
|
| TAILQ_HEAD (rte_swx_table_selector_member_list, rte_swx_table_selector_member) |
|
__rte_experimental uint64_t | rte_swx_table_selector_footprint_get (uint32_t n_groups_max, uint32_t n_members_per_group_max) |
|
__rte_experimental uint64_t | rte_swx_table_selector_mailbox_size_get (void) |
|
__rte_experimental void * | rte_swx_table_selector_create (struct rte_swx_table_selector_params *params, struct rte_swx_table_selector_group **groups, int numa_node) |
|
__rte_experimental int | rte_swx_table_selector_group_set (void *table, uint32_t group_id, struct rte_swx_table_selector_group *group) |
|
__rte_experimental int | rte_swx_table_selector_select (void *table, void *mailbox, uint8_t **group_id_buffer, uint8_t **selector_buffer, uint8_t **member_id_buffer) |
|
__rte_experimental void | rte_swx_table_selector_free (void *table) |
|
RTE SWX Selector Table
Selector table interface.
Definition in file rte_swx_table_selector.h.
◆ TAILQ_HEAD()
◆ rte_swx_table_selector_footprint_get()
__rte_experimental uint64_t rte_swx_table_selector_footprint_get |
( |
uint32_t |
n_groups_max, |
|
|
uint32_t |
n_members_per_group_max |
|
) |
| |
Selector table memory footprint get
- Parameters
-
[in] | n_groups_max | Maximum number of groups. Must be non-zero. |
[in] | n_members_per_group_max | Maximum number of members per group. Must be non-zero. |
- Returns
- Selector table memory footprint in bytes.
◆ rte_swx_table_selector_mailbox_size_get()
__rte_experimental uint64_t rte_swx_table_selector_mailbox_size_get |
( |
void |
| ) |
|
Selector table mailbox size get
The mailbox is used to store the context of a select operation that is in progress and it is passed as a parameter to the select operation. This allows for multiple concurrent select operations into the same table.
- Returns
- Selector table mailbox footprint in bytes.
◆ rte_swx_table_selector_create()
Selector table create
- Parameters
-
[in] | params | Selector table creation parameters. |
[in] | groups | Groups to be added to the table at creation time. When NULL, it signifies that all groups are invalid, otherwise it points to a pre-allocated array of size n_groups_max, where a NULL element indicates that the associated group is invalid. |
[in] | numa_node | Non-Uniform Memory Access (NUMA) node. |
- Returns
- Table handle, on success, or NULL, on error.
◆ rte_swx_table_selector_group_set()
Group set
- Parameters
-
[in] | table | Selector table handle. |
[in] | group_id | Group ID. |
[in] | group | Group parameters. |
- Returns
- 0 on success or the following error codes otherwise: -EINVAL: Invalid argument(s); -ENOSPC: Too many group members.
◆ rte_swx_table_selector_select()
__rte_experimental int rte_swx_table_selector_select |
( |
void * |
table, |
|
|
void * |
mailbox, |
|
|
uint8_t ** |
group_id_buffer, |
|
|
uint8_t ** |
selector_buffer, |
|
|
uint8_t ** |
member_id_buffer |
|
) |
| |
Selector table select
This operation selects a member from the given group based on a hasing scheme.
Multiple invocations of this function may be required in order to complete a single select operation for a given table and a given group ID. The completion of the operation is flagged by a return value of 1; in case of a return value of 0, the function must be invoked again with exactly the same arguments.
The mailbox argument is used to store the context of each on-going operation. The mailbox mechanism allows for multiple concurrent select operations into the same table.
The typical reason an implementation may choose to split the operation into multiple steps is to hide the latency of the inherrent memory read operations: before a read operation with the source data likely not in the CPU cache, the source data prefetch is issued and the operation is postponed in favor of some other unrelated work, which the CPU executes in parallel with the source data being fetched into the CPU cache; later on, the operation is resumed, this time with the source data likely to be read from the CPU cache with no CPU pipeline stall, which significantly improves the operation performance.
- Parameters
-
[in] | table | Selector table handle. |
[in] | mailbox | Mailbox for the current operation. |
[in] | group_id_buffer | Buffer where the input group ID is located at offset group_id_offset. |
[in] | selector_buffer | Buffer where the key to select a member within the identified group is located starting from offset selector_offset. Its size must be equal to the table selector_size. |
[in] | member_id_buffer | Buffer where the output member ID is to be placed at offset member_id_offset. |
- Returns
- 0 when the operation is not yet completed, and 1 when the operation is complete. No other return values are allowed.
◆ rte_swx_table_selector_free()
__rte_experimental void rte_swx_table_selector_free |
( |
void * |
table | ) |
|
Selector table free
- Parameters
-
[in] | table | Selector table handle. |